<?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>137714</bug_id>
          
          <creation_ts>2014-10-14 13:33:57 -0700</creation_ts>
          <short_desc>Web Inspector: Add ESLint open source library to the inspector</short_desc>
          <delta_ts>2014-11-13 16:16:19 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Wells">jonowells</reporter>
          <assigned_to name="Jonathan Wells">jonowells</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041668</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-14 13:33:57 -0700</bug_when>
    <thetext>Adding ESLint to drive the analyzer features proposed in https://bugs.webkit.org/show_bug.cgi?id=136515</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041669</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-10-14 13:34:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/18653753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041736</commentid>
    <comment_count>2</comment_count>
      <attachid>239835</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-14 17:32:10 -0700</bug_when>
    <thetext>Created attachment 239835
[PATCH] eslint addition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041738</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-14 17:33:59 -0700</bug_when>
    <thetext>Attachment 239835 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8559:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8560:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8561:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8563:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8567:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8568:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8569:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8570:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8572:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8573:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8574:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8576:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8577:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8578:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8579:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8580:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8581:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8582:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8583:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8584:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8585:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8587:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8588:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8589:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8591:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 25 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041751</commentid>
    <comment_count>4</comment_count>
      <attachid>239835</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-14 18:12:44 -0700</bug_when>
    <thetext>Comment on attachment 239835
[PATCH] eslint addition.

Rejecting attachment 239835 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 239835, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
ing rebase:
:040000 040000 a4e96db7b75e498eb21099542d672c3be8ac186b ba16b4bd083807d8f83712188e0add6f23f36e66 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.

Full output: http://webkit-queues.appspot.com/results/5179812322738176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041761</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-14 19:11:48 -0700</bug_when>
    <thetext>What happened? Error. It mentions &quot;Over 500 tabs&quot; but not sure what would have caused that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041779</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-14 20:42:55 -0700</bug_when>
    <thetext>Manually committed r174721: &lt;https://trac.webkit.org/changeset/174721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042492</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 15:11:44 -0700</bug_when>
    <thetext>Reopening as the patch broke the build. Need to insert 2-3 lines to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042511</commentid>
    <comment_count>8</comment_count>
      <attachid>240048</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:05:08 -0700</bug_when>
    <thetext>Created attachment 240048
[PATCH] eslint addition FIX.

Corrected patch. The file copy script needed another variable set for ESLint.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042513</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-17 16:07:29 -0700</bug_when>
    <thetext>Attachment 240048 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8559:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8560:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8561:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8563:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8567:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8568:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8569:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8570:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8572:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8573:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8574:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8576:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8577:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8578:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8579:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8580:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8581:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8582:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8583:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8584:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8585:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8587:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8588:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8589:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8591:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 25 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042515</commentid>
    <comment_count>10</comment_count>
      <attachid>240049</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:09:18 -0700</bug_when>
    <thetext>Created attachment 240049
[PATCH] eslint addition FIX and CHANGELOG.

Forgot ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042516</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-17 16:12:29 -0700</bug_when>
    <thetext>Attachment 240049 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8559:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8560:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8561:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8563:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8567:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8568:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8569:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8570:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8572:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8573:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8574:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8576:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8577:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8578:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8579:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8580:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8581:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8582:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8583:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8584:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8585:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8587:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8588:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8589:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8591:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 25 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042519</commentid>
    <comment_count>12</comment_count>
      <attachid>240049</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:22:23 -0700</bug_when>
    <thetext>Comment on attachment 240049
[PATCH] eslint addition FIX and CHANGELOG.

Mmm, still not copying correctly. Working more on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042520</commentid>
    <comment_count>13</comment_count>
      <attachid>240051</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:32:22 -0700</bug_when>
    <thetext>Created attachment 240051
[PATCH] eslint addition FIX and CHANGELOG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042521</commentid>
    <comment_count>14</comment_count>
      <attachid>240051</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:32:41 -0700</bug_when>
    <thetext>Comment on attachment 240051
[PATCH] eslint addition FIX and CHANGELOG.

Corrected. Dry run works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042522</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-17 16:34:48 -0700</bug_when>
    <thetext>Attachment 240051 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8559:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8560:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8561:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8563:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8567:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8568:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8569:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8570:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8572:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8573:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8574:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8576:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8577:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8578:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8579:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8580:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8581:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8582:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8583:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8584:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8585:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8587:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8588:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8589:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/External/ESLint/eslint.js:8591:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 25 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042528</commentid>
    <comment_count>16</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-17 16:52:36 -0700</bug_when>
    <thetext>Manually committed r174852: &lt;https://trac.webkit.org/changeset/174852&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048545</commentid>
    <comment_count>17</comment_count>
      <attachid>240051</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-11-13 16:16:19 -0800</bug_when>
    <thetext>Comment on attachment 240051
[PATCH] eslint addition FIX and CHANGELOG.

Removing r? since this was landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239835</attachid>
            <date>2014-10-14 17:32:10 -0700</date>
            <delta_ts>2014-10-17 16:05:08 -0700</delta_ts>
            <desc>[PATCH] eslint addition.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>624432</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDY5MzY2YjYuLjgzNTBlZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0LTEwLTE0ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgRVNMaW50
IG9wZW4gc291cmNlIGxpYnJhcnkgdG8gdGhlIGluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NzE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBlc2xpbnQuanMgZXh0
ZXJuYWwgbGlicmFyeSBmb3Igc3RhdGljIGFuYWx5c2lzIGFuZCB0aGUgbmVjZXNzYXJ5IGxpY2Vu
c2UuCisKKyAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBs
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L0xJQ0VOU0U6IEFkZGVk
LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qczogQWRk
ZWQuCisKIDIwMTQtMTAtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQYWludCBGbGFzaGluZyBidXR0b24gZG9lcyBub3Qg
bWF0Y2ggcGFnZSBzdGF0ZSBhZnRlciByZWxvYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwK
aW5kZXggNGZhZGZjNy4uOTkzZDM5OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwKQEAg
LTEwMCw5ICsxMDAsMTEgQEAgbXkgJHRhcmdldFJlc291cmNlUGF0aCA9IEZpbGU6OlNwZWMtPmNh
dGRpcigkRU5WeydUQVJHRVRfQlVJTERfRElSJ30sICRFTlZ7J1VOTE8KIG15ICRwcm90b2NvbERp
ciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnUHJvdG9jb2wnKTsK
IG15ICRjb2RlTWlycm9yUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJu
YWwnLCAnQ29kZU1pcnJvcicpOwogbXkgJGVzcHJpbWFQYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGly
KCR1aVJvb3QsICdFeHRlcm5hbCcsICdFc3ByaW1hJyk7CitteSAkZXNsaW50UGF0aCA9IEZpbGU6
OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnRVNMaW50Jyk7CiAKIG15ICRjb2Rl
TWlycm9yTGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCRjb2Rl
TWlycm9yUGF0aCwgJ0xJQ0VOU0UnKSk7Ci1teSAkZXNwcmltYU1pcnJvckxpY2Vuc2UgPSByZWFk
TGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNwcmltYVBhdGgsICdMSUNFTlNFJykp
OworbXkgJGVzcHJpbWFMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZp
bGUoJGVzcHJpbWFQYXRoLCAnTElDRU5TRScpKTsKK215ICRlc2xpbnRMaWNlbnNlID0gcmVhZExp
Y2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzbGludFBhdGgsICdMSUNFTlNFJykpOwog
CiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3VyY2VQYXRoKTsKIApAQCAtMTU1
LDcgKzE1NywxMSBAQCBpZiAoZGVmaW5lZCAkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9SRVNPVVJD
RVMnfSAmJiAoJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTTwogCiAgICAgIyBFeHBvcnQgdGhl
IGxpY2Vuc2UgaW50byBFc3ByaW1hLmpzLgogICAgIG15ICR0YXJnZXRFc3ByaW1hSlMgPSBGaWxl
OjpTcGVjLT5jYXRmaWxlKCR0YXJnZXRSZXNvdXJjZVBhdGgsICdFc3ByaW1hLmpzJyk7Ci0gICAg
c2VlZEZpbGUoJHRhcmdldEVzcHJpbWFKUywgJGVzcHJpbWFNaXJyb3JMaWNlbnNlKTsKKyAgICBz
ZWVkRmlsZSgkdGFyZ2V0RXNwcmltYUpTLCAkZXNwcmltYUxpY2Vuc2UpOworCisgICAgIyBFeHBv
cnQgdGhlIGxpY2Vuc2UgaW50byBFU0xpbnQuanMuCisgICAgbXkgJHRhcmdldEVTTGludEpTID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnRVNMaW50LmpzJyk7Cisg
ICAgc2VlZEZpbGUoJHRhcmdldEVTTGludEpTLCAkZXNsaW50TGljZW5zZSk7CiAKICAgICAjIE1p
bmlmeSB0aGUgTWFpbi5qcyBhbmQgTWFpbi5jc3MgZmlsZXMsIHdpdGggTWFpbi5qcyBhcHBlbmRp
bmcgdG8gdGhlIGxpY2Vuc2UgdGhhdCB3YXMgZXhwb3J0ZWQgYWJvdmUuCiAgICAgbXkgJGpzTWlu
U2NyaXB0ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkc2NyaXB0c1Jvb3QsICdqc21pbi5weScpOwpA
QCAtMTczLDYgKzE3OSwxMCBAQCBpZiAoZGVmaW5lZCAkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9S
RVNPVVJDRVMnfSAmJiAoJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTTwogICAgIG15ICRkZXJp
dmVkU291cmVzc0VzcHJpbWFKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2Vz
RGlyLCAnRXNwcmltYS5qcycpOwogICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRqc01pblNjcmlw
dCIgPCAiJGRlcml2ZWRTb3VyZXNzRXNwcmltYUpTIiA+PiAiJHRhcmdldEVzcHJpbWFKUyIpKSBh
bmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291cmVzc0VzcHJpbWFKUzogJCEiOwog
CisgICAgIyBNaW5pZnkgdGhlIEVTTGludC5qcyBmaWxlLCBhcHBlbmRpbmcgdG8gdGhlIGxpY2Vu
c2UgdGhhdCB3YXMgZXhwb3J0ZWQgYWJvdmUuCisgICAgbXkgJGRlcml2ZWRTb3VyZXNzRVNMaW50
SlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291cmNlc0RpciwgJ0VTTGludC5qcycp
OworICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRqc01pblNjcmlwdCIgPCAiJGRlcml2ZWRTb3Vy
ZXNzRVNMaW50SlMiID4+ICIkdGFyZ2V0RVNMaW50SlMiKSkgYW5kIGRpZSAiRmFpbGVkIHRvIG1p
bmlmeSAkZGVyaXZlZFNvdXJlc3NFU0xpbnRKUzogJCEiOworCiAgICAgIyBDb3B5IG92ZXIgTWFp
bi5odG1sIGFuZCB0aGUgSW1hZ2VzIGRpcmVjdG9yeS4KICAgICBjb3B5KCRkZXJpdmVkU291cmNl
c01haW5IVE1MLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCR0YXJnZXRSZXNvdXJjZVBhdGgsICdNYWlu
Lmh0bWwnKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDVmMDQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFCkBAIC0wLDAgKzEsMTkg
QEAKK0NvcHlyaWdodCAoYykgMjAxNCBUSiBIb2xvd2F5Y2h1ayA8dGpAdmlzaW9uLW1lZGlhLmNh
PgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55
IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk
IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG8gZGVhbAoraW4gdGhlIFNv
ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24g
dGhlIHJpZ2h0cyB0byAKK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g
ZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j
bHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
IElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcwpA
QCAtMCwwICsxLDE4MjIzIEBACishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBv
cnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBp
ZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNl
e3ZhciBmOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2Y9d2luZG93OiJ1bmRlZmluZWQiIT10
eXBlb2YgZ2xvYmFsP2Y9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGY9c2VsZiks
Zi5lc2xpbnQ9ZSgpfX0oZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVy
biAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7
dmFyIGE9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJu
IGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5k
IG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmfXZhciBs
PW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFy
IG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVy
biBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7
Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK21vZHVsZS5leHBvcnRzPXsKKyAgICAiYnVpbHRp
biI6IHsKKyAgICAgICAgIk5hTiI6IGZhbHNlLAorICAgICAgICAiSW5maW5pdHkiOiBmYWxzZSwK
KyAgICAgICAgInVuZGVmaW5lZCI6IGZhbHNlLAorICAgICAgICAiZXZhbCI6IGZhbHNlLAorCisg
ICAgICAgICJwYXJzZUZsb2F0IjogZmFsc2UsCisgICAgICAgICJwYXJzZUludCI6IGZhbHNlLAor
ICAgICAgICAiaXNOYU4iOiBmYWxzZSwKKyAgICAgICAgImlzRmluaXRlIjogZmFsc2UsCisKKyAg
ICAgICAgImRlY29kZVVSSSI6IGZhbHNlLAorICAgICAgICAiZGVjb2RlVVJJQ29tcG9uZW50Ijog
ZmFsc2UsCisgICAgICAgICJlbmNvZGVVUkkiOiBmYWxzZSwKKyAgICAgICAgImVuY29kZVVSSUNv
bXBvbmVudCI6IGZhbHNlLAorCisgICAgICAgICJPYmplY3QiOiBmYWxzZSwKKyAgICAgICAgIkZ1
bmN0aW9uIjogZmFsc2UsCisgICAgICAgICJBcnJheSI6IGZhbHNlLAorICAgICAgICAiU3RyaW5n
IjogZmFsc2UsCisgICAgICAgICJCb29sZWFuIjogZmFsc2UsCisgICAgICAgICJNYXAiOiBmYWxz
ZSwKKyAgICAgICAgIk51bWJlciI6IGZhbHNlLAorICAgICAgICAiRGF0ZSI6IGZhbHNlLAorICAg
ICAgICAiUmVnRXhwIjogZmFsc2UsCisgICAgICAgICJFcnJvciI6IGZhbHNlLAorICAgICAgICAi
RXZhbEVycm9yIjogZmFsc2UsCisgICAgICAgICJSYW5nZUVycm9yIjogZmFsc2UsCisgICAgICAg
ICJSZWZlcmVuY2VFcnJvciI6IGZhbHNlLAorICAgICAgICAiU2V0IjogZmFsc2UsCisgICAgICAg
ICJTeW50YXhFcnJvciI6IGZhbHNlLAorICAgICAgICAiVHlwZUVycm9yIjogZmFsc2UsCisgICAg
ICAgICJVUklFcnJvciI6IGZhbHNlLAorICAgICAgICAiV2Vha01hcCI6IGZhbHNlLAorICAgICAg
ICAiV2Vha1NldCI6IGZhbHNlLAorCisgICAgICAgICJBcnJheUJ1ZmZlciI6IGZhbHNlLAorICAg
ICAgICAiRmxvYXQzMkFycmF5IjogZmFsc2UsCisgICAgICAgICJGbG9hdDY0QXJyYXkiOiBmYWxz
ZSwKKyAgICAgICAgIkludDE2QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIkludDMyQXJyYXkiOiBm
YWxzZSwKKyAgICAgICAgIkludDhBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWludDE2QXJyYXki
OiBmYWxzZSwKKyAgICAgICAgIlVpbnQzMkFycmF5IjogZmFsc2UsCisgICAgICAgICJVaW50OEFy
cmF5IjogZmFsc2UsCisgICAgICAgICJVaW50OENsYW1wZWRBcnJheSI6IGZhbHNlLAorCisgICAg
ICAgICJNYXRoIjogZmFsc2UsCisgICAgICAgICJKU09OIjogZmFsc2UsCisKKyAgICAgICAgInRv
U3RyaW5nIjogZmFsc2UsCisgICAgICAgICJoYXNPd25Qcm9wZXJ0eSI6IGZhbHNlLAorICAgICAg
ICAidmFsdWVPZiI6IGZhbHNlLAorICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiOiBmYWxz
ZSwKKyAgICAgICAgImNvbnN0cnVjdG9yIjogZmFsc2UsCisgICAgICAgICJpc1Byb3RvdHlwZU9m
IjogZmFsc2UsCisgICAgICAgICJ0b0xvY2FsZVN0cmluZyI6IGZhbHNlCisgICAgfSwKKworICAg
ICJicm93c2VyIjogeworICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAgICAgICJhZGRFdmVu
dExpc3RlbmVyIjogZmFsc2UsCisgICAgICAgICAgICAiYXBwbGljYXRpb25DYWNoZSI6IGZhbHNl
LAorICAgICAgICAgICAgImF0b2IiOiBmYWxzZSwKKyAgICAgICAgICAgICJBdWRpbyI6IGZhbHNl
LAorICAgICAgICAgICAgIkJsb2IiOiBmYWxzZSwKKyAgICAgICAgICAgICJibHVyIjogZmFsc2Us
CisgICAgICAgICAgICAiYnRvYSI6IGZhbHNlLAorICAgICAgICAgICAgImNhbmNlbEFuaW1hdGlv
bkZyYW1lIjogZmFsc2UsCisgICAgICAgICAgICAiY2xlYXJJbnRlcnZhbCI6IGZhbHNlLAorICAg
ICAgICAgICAgImNsZWFyVGltZW91dCI6IGZhbHNlLAorICAgICAgICAgICAgImNsb3NlIjogZmFs
c2UsCisgICAgICAgICAgICAiY2xvc2VkIjogZmFsc2UsCisgICAgICAgICAgICAiY3J5cHRvIjog
ZmFsc2UsCisgICAgICAgICAgICAiRGF0YVZpZXciOiBmYWxzZSwKKyAgICAgICAgICAgICJkZWZh
dWx0U3RhdHVzIjogZmFsc2UsCisgICAgICAgICAgICAiZGV2aWNlUGl4ZWxSYXRpbyI6IGZhbHNl
LAorICAgICAgICAgICAgImRpc3BhdGNoRXZlbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJkb2N1
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkRPTVBhcnNlciI6IGZhbHNlLAorICAgICAgICAg
ICAgIkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJGaWxlUmVhZGVyIjogZmFsc2UsCisg
ICAgICAgICAgICAiZmluZCI6IGZhbHNlLAorICAgICAgICAgICAgImZvY3VzIjogZmFsc2UsCisg
ICAgICAgICAgICAiRm9ybURhdGEiOiBmYWxzZSwKKyAgICAgICAgICAgICJmcmFtZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJmcmFtZXMiOiBmYWxzZSwKKyAgICAgICAgICAgICJnZXRD
b21wdXRlZFN0eWxlIjogZmFsc2UsCisgICAgICAgICAgICAiZ2V0U2VsZWN0aW9uIjogZmFsc2Us
CisgICAgICAgICAgICAiaGlzdG9yeSI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxBbmNob3JF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEJhc2VFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEJS
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTENhbnZhc0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MRGlyZWN0b3J5RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxEaXZFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTERMaXN0RWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGb250RWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxGb3JtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGcmFt
ZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRnJhbWVTZXRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSFRNTEhlYWRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
SFRNTEhlYWRpbmdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEhSRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIdG1sRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIkhUTUxJRnJhbWVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MTGFiZWxFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTExl
Z2VuZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MTElFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRN
TE1hcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MTWVudUVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MTWV0YUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MTW9kRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9MaXN0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIkhUTUxPcHRHcm91cEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MT3B0aW9u
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxQYXJhZ3JhcGhFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkhUTUxQcmVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFF1b3RlRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTFNlbGVjdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MU3R5bGVF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFi
bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxU
aXRsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVUxpc3RFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkltYWdlIjogZmFsc2UsCisgICAgICAgICAgICAiaW5kZXhlZERCIjogZmFsc2UsCisgICAgICAg
ICAgICAiaW5uZXJIZWlnaHQiOiBmYWxzZSwKKyAgICAgICAgICAgICJpbm5lcldpZHRoIjogZmFs
c2UsCisgICAgICAgICAgICAiSW50bCI6IGZhbHNlLAorICAgICAgICAgICAgImxlbmd0aCI6IGZh
bHNlLAorICAgICAgICAgICAgImxvY2FsU3RvcmFnZSI6IGZhbHNlLAorICAgICAgICAgICAgImxv
Y2F0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAibWF0Y2hNZWRpYSI6IGZhbHNlLAorICAgICAg
ICAgICAgIk1lc3NhZ2VDaGFubmVsIjogZmFsc2UsCisgICAgICAgICAgICAiTWVzc2FnZUV2ZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiTWVzc2FnZVBvcnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJtb3ZlQnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJtb3ZlVG8iOiBmYWxzZSwKKyAgICAgICAg
ICAgICJNdXRhdGlvbk9ic2VydmVyIjogZmFsc2UsCisgICAgICAgICAgICAibmFtZSI6IGZhbHNl
LAorICAgICAgICAgICAgIm5hdmlnYXRvciI6IGZhbHNlLAorICAgICAgICAgICAgIk5vZGUiOiBm
YWxzZSwKKyAgICAgICAgICAgICJOb2RlRmlsdGVyIjogZmFsc2UsCisgICAgICAgICAgICAib25i
ZWZvcmV1bmxvYWQiOiB0cnVlLAorICAgICAgICAgICAgIm9uYmx1ciI6IHRydWUsCisgICAgICAg
ICAgICAib25lcnJvciI6IHRydWUsCisgICAgICAgICAgICAib25mb2N1cyI6IHRydWUsCisgICAg
ICAgICAgICAib25sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbnJlc2l6ZSI6IHRydWUsCisg
ICAgICAgICAgICAib251bmxvYWQiOiB0cnVlLAorICAgICAgICAgICAgIm9wZW4iOiBmYWxzZSwK
KyAgICAgICAgICAgICJvcGVuRGF0YWJhc2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJvcGVuZXIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJPcHRpb24iOiBmYWxzZSwKKyAgICAgICAgICAgICJvdXRl
ckhlaWdodCI6IGZhbHNlLAorICAgICAgICAgICAgIm91dGVyV2lkdGgiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJwYWdlWE9mZnNldCI6IGZhbHNlLAorICAgICAgICAgICAgInBhZ2VZT2Zmc2V0Ijog
ZmFsc2UsCisgICAgICAgICAgICAicGFyZW50IjogZmFsc2UsCisgICAgICAgICAgICAicG9zdE1l
c3NhZ2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJwcmludCI6IGZhbHNlLAorICAgICAgICAgICAg
InJlbW92ZUV2ZW50TGlzdGVuZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZXF1ZXN0QW5pbWF0
aW9uRnJhbWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZXNpemVCeSI6IGZhbHNlLAorICAgICAg
ICAgICAgInJlc2l6ZVRvIjogZmFsc2UsCisgICAgICAgICAgICAic2NyZWVuIjogZmFsc2UsCisg
ICAgICAgICAgICAic2NyZWVuWCI6IGZhbHNlLAorICAgICAgICAgICAgInNjcmVlblkiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJzY3JvbGwiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxiYXJz
IjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsQnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJz
Y3JvbGxUbyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcm9sbFgiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzY3JvbGxZIjogZmFsc2UsCisgICAgICAgICAgICAic2VsZiI6IGZhbHNlLAorICAgICAg
ICAgICAgInNlc3Npb25TdG9yYWdlIjogZmFsc2UsCisgICAgICAgICAgICAic2V0SW50ZXJ2YWwi
OiBmYWxzZSwKKyAgICAgICAgICAgICJzZXRUaW1lb3V0IjogZmFsc2UsCisgICAgICAgICAgICAi
U2hhcmVkV29ya2VyIjogZmFsc2UsCisgICAgICAgICAgICAic2hvd01vZGFsRGlhbG9nIjogZmFs
c2UsCisgICAgICAgICAgICAic3RvcCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQWx0R2x5cGhEZWZFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHQWx0R2x5cGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
QWx0R2x5cGhJdGVtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuZ2xlIjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkQW5nbGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRl
ZEJvb2xlYW4iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZEVudW1lcmF0aW9uIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRJbnRlZ2VyIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQW5pbWF0ZWRMZW5ndGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRl
ZExlbmd0aExpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZE51bWJlciI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR0FuaW1hdGVkUmVjdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkU3Ry
aW5nIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRlTW90aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0aW9uRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0NpcmNsZUVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdDbGlwUGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdD
b2xvciI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ3Vyc29yRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0RlZnNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRGVz
Y0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdEb2N1bWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdFbGVtZW50SW5z
dGFuY2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdFbGVtZW50SW5zdGFuY2VMaXN0IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRWxsaXBzZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGRUJsZW5kRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNvbXBvc2l0ZUVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRmxvb2RF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVGdW5jQUVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdGRUZ1bmNCRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R0ZFRnVuY0dFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVGdW5jUkVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdGRUltYWdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R0ZFTWVyZ2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVNb3JwaG9sb2d5RWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0ZFT2Zmc2V0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVTcG90TGlnaHRF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVUaWxlRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGaWx0ZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9udEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGb250RmFjZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdGb250RmFjZU5hbWVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9udEZhY2VT
cmNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9udEZhY2VVcmlFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0dseXBoRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0dseXBoUmVmRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0dyYWRpZW50RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R0hLZXJuRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ltYWdlRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0xlbmd0aCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0xl
bmd0aExpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMaW5lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR01hcmtlckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNYXNrRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR01hdHJpeCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR01ldGFkYXRhRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR01pc3NpbmdHbHlw
aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNUGF0aEVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdOdW1iZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdOdW1iZXJM
aXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGFpbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdQYXRoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWciOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQXJjQWJzIjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUGF0aFNlZ0FyY1JlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDbG9zZVBh
dGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzIjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzIjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdQYXRoU2VnTGluZXRvQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxBYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbFJlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9SZWwi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdQYXRoU2VnTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhT
ZWdNb3ZldG9BYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTW92ZXRvUmVsIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0dGVybkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdQb2ludCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BvaW50TGlzdCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR1BvbHlnb25FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUG9seWxpbmVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1JlY3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdS
ZWN0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1JlbmRlcmluZ0ludGVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1NjcmlwdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdTZXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHU3RvcEVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdTdHJpbmdMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHU3R5bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHU1ZHRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1N3aXRjaEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdTeW1ib2xFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGV4dENvbnRlbnRF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGV4dEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdUZXh0UGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGl0bGVFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVHJhbnNmb3JtIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVHJhbnNmb3JtTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RSZWZFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVFNwYW5FbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHVW5pdFR5cGVzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVXNlRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1ZpZXdFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVmlld1NwZWMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdWS2VybkVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJ0b3AiOiBmYWxzZSwKKyAgICAgICAgICAgICJXZWJTb2Nr
ZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJ3aW5kb3ciOiBmYWxzZSwKKyAgICAgICAgICAgICJX
b3JrZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJYTUxIdHRwUmVxdWVzdCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlhNTFNlcmlhbGl6ZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJYUGF0aEV2YWx1
YXRvciI6IGZhbHNlLAorICAgICAgICAgICAgIlhQYXRoRXhwcmVzc2lvbiI6IGZhbHNlLAorICAg
ICAgICAgICAgIlhQYXRoUmVzdWx0IjogZmFsc2UKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAi
bm9kZSI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAiX19maWxlbmFtZSI6
IGZhbHNlLAorICAgICAgICAgICAgIl9fZGlybmFtZSI6IGZhbHNlLAorICAgICAgICAgICAgIkJ1
ZmZlciI6IGZhbHNlLAorICAgICAgICAgICAgIkRhdGFWaWV3IjogZmFsc2UsCisgICAgICAgICAg
ICAiY29uc29sZSI6IGZhbHNlLAorICAgICAgICAgICAgImV4cG9ydHMiOiB0cnVlLAorICAgICAg
ICAgICAgIkdMT0JBTCI6IGZhbHNlLAorICAgICAgICAgICAgImdsb2JhbCI6IGZhbHNlLAorICAg
ICAgICAgICAgIm1vZHVsZSI6IGZhbHNlLAorICAgICAgICAgICAgInByb2Nlc3MiOiBmYWxzZSwK
KyAgICAgICAgICAgICJyZXF1aXJlIjogZmFsc2UsCisgICAgICAgICAgICAic2V0VGltZW91dCI6
IGZhbHNlLAorICAgICAgICAgICAgImNsZWFyVGltZW91dCI6IGZhbHNlLAorICAgICAgICAgICAg
InNldEludGVydmFsIjogZmFsc2UsCisgICAgICAgICAgICAiY2xlYXJJbnRlcnZhbCI6IGZhbHNl
LAorICAgICAgICAgICAgInNldEltbWVkaWF0ZSI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFy
SW1tZWRpYXRlIjogZmFsc2UKKyAgICAgICAgfSwKKworICAgICAgICAicnVsZXMiOiB7CisgICAg
ICAgICAgICAibm8tY2F0Y2gtc2hhZG93IjogMCwKKyAgICAgICAgICAgICJuby1jb25zb2xlIjog
MCwKKyAgICAgICAgICAgICJuby1taXhlZC1yZXF1aXJlcyI6IDIsCisgICAgICAgICAgICAibm8t
bmV3LXJlcXVpcmUiOiAyLAorICAgICAgICAgICAgIm5vLXBhdGgtY29uY2F0IjogMiwKKyAgICAg
ICAgICAgICJuby1wcm9jZXNzLWV4aXQiOiAyLAorICAgICAgICAgICAgImdsb2JhbC1zdHJpY3Qi
OiBbMCwgImFsd2F5cyJdLAorICAgICAgICAgICAgImhhbmRsZS1jYWxsYmFjay1lcnIiOiBbMiwg
ImVyciJdCisgICAgICAgIH0KKyAgICB9LAorCisgICAgImFtZCI6IHsKKyAgICAgICAgImdsb2Jh
bHMiOiB7CisgICAgICAgICAgICAicmVxdWlyZSI6IGZhbHNlLAorICAgICAgICAgICAgImRlZmlu
ZSI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorCisgICAgIm1vY2hhIjogeworICAgICAgICAi
Z2xvYmFscyI6IHsKKyAgICAgICAgICAgICJkZXNjcmliZSI6IGZhbHNlLAorICAgICAgICAgICAg
Iml0IjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlIjogZmFsc2UsCisgICAgICAgICAgICAi
YWZ0ZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJiZWZvcmVFYWNoIjogZmFsc2UsCisgICAgICAg
ICAgICAiYWZ0ZXJFYWNoIjogZmFsc2UsCisKKyAgICAgICAgICAgICJzdWl0ZSI6IGZhbHNlLAor
ICAgICAgICAgICAgInRlc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJzZXR1cCI6IGZhbHNlLAor
ICAgICAgICAgICAgInRlYXJkb3duIjogZmFsc2UsCisgICAgICAgICAgICAic3VpdGVTZXR1cCI6
IGZhbHNlLAorICAgICAgICAgICAgInN1aXRlVGVhcmRvd24iOiBmYWxzZQorICAgICAgICB9Cisg
ICAgfSwKKworICAgICJqYXNtaW5lIjogeworICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAg
ICAgICJhZnRlckVhY2giOiBmYWxzZSwKKyAgICAgICAgICAgICJiZWZvcmVFYWNoIjogZmFsc2Us
CisgICAgICAgICAgICAiZGVzY3JpYmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJleHBlY3QiOiBm
YWxzZSwKKyAgICAgICAgICAgICJpdCI6IGZhbHNlLAorICAgICAgICAgICAgImphc21pbmUiOiBm
YWxzZSwKKyAgICAgICAgICAgICJwZW5kaW5nIjogZmFsc2UsCisgICAgICAgICAgICAic3B5T24i
OiBmYWxzZSwKKyAgICAgICAgICAgICJ3YWl0cyI6IGZhbHNlLAorICAgICAgICAgICAgIndhaXRz
Rm9yIjogZmFsc2UsCisgICAgICAgICAgICAieGRlc2NyaWJlIjogZmFsc2UsCisgICAgICAgICAg
ICAieGl0IjogZmFsc2UKKyAgICAgICAgfQorICAgIH0KK30KKworfSx7fV0sMjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cz17CisgICAgImVudiI6IHsK
KyAgICAgICAgImJyb3dzZXIiOiBmYWxzZSwKKyAgICAgICAgIm5vZGUiOiBmYWxzZSwKKyAgICAg
ICAgImFtZCI6IGZhbHNlLAorICAgICAgICAibW9jaGEiOiBmYWxzZSwKKyAgICAgICAgImphc21p
bmUiOiBmYWxzZQorICAgIH0sCisKKyAgICAicnVsZXMiOiB7CisgICAgICAgICJuby1hbGVydCI6
IDIsCisgICAgICAgICJuby1hcnJheS1jb25zdHJ1Y3RvciI6IDIsCisgICAgICAgICJuby1iaXR3
aXNlIjogMCwKKyAgICAgICAgIm5vLWNhbGxlciI6IDIsCisgICAgICAgICJuby1jYXRjaC1zaGFk
b3ciOiAyLAorICAgICAgICAibm8tY29tbWEtZGFuZ2xlIjogMiwKKyAgICAgICAgIm5vLWNvbmQt
YXNzaWduIjogMiwKKyAgICAgICAgIm5vLWNvbnNvbGUiOiAyLAorICAgICAgICAibm8tY29uc3Rh
bnQtY29uZGl0aW9uIjogMiwKKyAgICAgICAgIm5vLWNvbnRyb2wtcmVnZXgiOiAyLAorICAgICAg
ICAibm8tZGVidWdnZXIiOiAyLAorICAgICAgICAibm8tZGVsZXRlLXZhciI6IDIsCisgICAgICAg
ICJuby1kaXYtcmVnZXgiOiAwLAorICAgICAgICAibm8tZHVwZS1rZXlzIjogMiwKKyAgICAgICAg
Im5vLWVsc2UtcmV0dXJuIjogMCwKKyAgICAgICAgIm5vLWVtcHR5IjogMiwKKyAgICAgICAgIm5v
LWVtcHR5LWNsYXNzIjogMiwKKyAgICAgICAgIm5vLWVtcHR5LWxhYmVsIjogMiwKKyAgICAgICAg
Im5vLWVxLW51bGwiOiAwLAorICAgICAgICAibm8tZXZhbCI6IDIsCisgICAgICAgICJuby1leC1h
c3NpZ24iOiAyLAorICAgICAgICAibm8tZXh0ZW5kLW5hdGl2ZSI6IDIsCisgICAgICAgICJuby1l
eHRyYS1iaW5kIjogMiwKKyAgICAgICAgIm5vLWV4dHJhLWJvb2xlYW4tY2FzdCI6IDIsCisgICAg
ICAgICJuby1leHRyYS1wYXJlbnMiOiAwLAorICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCisg
ICAgICAgICJuby1leHRyYS1zdHJpY3QiOiAyLAorICAgICAgICAibm8tZmFsbHRocm91Z2giOiAy
LAorICAgICAgICAibm8tZmxvYXRpbmctZGVjaW1hbCI6IDAsCisgICAgICAgICJuby1mdW5jLWFz
c2lnbiI6IDIsCisgICAgICAgICJuby1pbXBsaWVkLWV2YWwiOiAyLAorICAgICAgICAibm8taW5u
ZXItZGVjbGFyYXRpb25zIjogWzIsICJmdW5jdGlvbnMiXSwKKyAgICAgICAgIm5vLWludmFsaWQt
cmVnZXhwIjogMiwKKyAgICAgICAgIm5vLWl0ZXJhdG9yIjogMiwKKyAgICAgICAgIm5vLWxhYmVs
LXZhciI6IDIsCisgICAgICAgICJuby1sYWJlbHMiOiAyLAorICAgICAgICAibm8tbG9uZS1ibG9j
a3MiOiAyLAorICAgICAgICAibm8tbG9uZWx5LWlmIjogMCwKKyAgICAgICAgIm5vLWxvb3AtZnVu
YyI6IDIsCisgICAgICAgICJuby1taXhlZC1yZXF1aXJlcyI6IFswLCBmYWxzZV0sCisgICAgICAg
ICJuby1taXhlZC1zcGFjZXMtYW5kLXRhYnMiOiBbMiwgZmFsc2VdLAorICAgICAgICAibm8tbXVs
dGktc3BhY2VzIjogMiwKKyAgICAgICAgIm5vLW11bHRpLXN0ciI6IDIsCisgICAgICAgICJuby1t
dWx0aXBsZS1lbXB0eS1saW5lcyI6IFswLCB7Im1heCI6IDJ9XSwKKyAgICAgICAgIm5vLW5hdGl2
ZS1yZWFzc2lnbiI6IDIsCisgICAgICAgICJuby1uZWdhdGVkLWluLWxocyI6IDIsCisgICAgICAg
ICJuby1uZXN0ZWQtdGVybmFyeSI6IDAsCisgICAgICAgICJuby1uZXciOiAyLAorICAgICAgICAi
bm8tbmV3LWZ1bmMiOiAyLAorICAgICAgICAibm8tbmV3LW9iamVjdCI6IDIsCisgICAgICAgICJu
by1uZXctcmVxdWlyZSI6IDAsCisgICAgICAgICJuby1uZXctd3JhcHBlcnMiOiAyLAorICAgICAg
ICAibm8tb2JqLWNhbGxzIjogMiwKKyAgICAgICAgIm5vLW9jdGFsIjogMiwKKyAgICAgICAgIm5v
LW9jdGFsLWVzY2FwZSI6IDIsCisgICAgICAgICJuby1wYXRoLWNvbmNhdCI6IDAsCisgICAgICAg
ICJuby1wbHVzcGx1cyI6IDAsCisgICAgICAgICJuby1wcm9jZXNzLWVudiI6IDAsCisgICAgICAg
ICJuby1wcm9jZXNzLWV4aXQiOiAyLAorICAgICAgICAibm8tcHJvdG8iOiAyLAorICAgICAgICAi
bm8tcmVkZWNsYXJlIjogMiwKKyAgICAgICAgIm5vLXJlZ2V4LXNwYWNlcyI6IDIsCisgICAgICAg
ICJuby1yZXNlcnZlZC1rZXlzIjogMCwKKyAgICAgICAgIm5vLXJlc3RyaWN0ZWQtbW9kdWxlcyI6
IDAsCisgICAgICAgICJuby1yZXR1cm4tYXNzaWduIjogMiwKKyAgICAgICAgIm5vLXNjcmlwdC11
cmwiOiAyLAorICAgICAgICAibm8tc2VsZi1jb21wYXJlIjogMCwKKyAgICAgICAgIm5vLXNlcXVl
bmNlcyI6IDIsCisgICAgICAgICJuby1zaGFkb3ciOiAyLAorICAgICAgICAibm8tc2hhZG93LXJl
c3RyaWN0ZWQtbmFtZXMiOiAyLAorICAgICAgICAibm8tc3BhY2UtYmVmb3JlLXNlbWkiOiAyLAor
ICAgICAgICAibm8tc3BhY2VkLWZ1bmMiOiAyLAorICAgICAgICAibm8tc3BhcnNlLWFycmF5cyI6
IDIsCisgICAgICAgICJuby1zeW5jIjogMCwKKyAgICAgICAgIm5vLXRlcm5hcnkiOiAwLAorICAg
ICAgICAibm8tdHJhaWxpbmctc3BhY2VzIjogMiwKKyAgICAgICAgIm5vLXVuZGVmIjogMiwKKyAg
ICAgICAgIm5vLXVuZGVmLWluaXQiOiAyLAorICAgICAgICAibm8tdW5kZWZpbmVkIjogMCwKKyAg
ICAgICAgIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIjogMiwKKyAgICAgICAgIm5vLXVucmVhY2hhYmxl
IjogMiwKKyAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCisgICAgICAgICJuby11
bnVzZWQtdmFycyI6IFsyLCB7InZhcnMiOiAiYWxsIiwgImFyZ3MiOiAiYWZ0ZXItdXNlZCJ9XSwK
KyAgICAgICAgIm5vLXVzZS1iZWZvcmUtZGVmaW5lIjogMiwKKyAgICAgICAgIm5vLXZvaWQiOiAw
LAorICAgICAgICAibm8td2FybmluZy1jb21tZW50cyI6IFswLCB7ICJ0ZXJtcyI6IFsidG9kbyIs
ICJmaXhtZSIsICJ4eHgiXSwgImxvY2F0aW9uIjogInN0YXJ0IiB9XSwKKyAgICAgICAgIm5vLXdp
dGgiOiAyLAorICAgICAgICAibm8td3JhcC1mdW5jIjogMiwKKworICAgICAgICAiYmxvY2stc2Nv
cGVkLXZhciI6IDAsCisgICAgICAgICJicmFjZS1zdHlsZSI6IFswLCAiMXRicyJdLAorICAgICAg
ICAiY2FtZWxjYXNlIjogMiwKKyAgICAgICAgImNvbW1hLXNwYWNpbmciOiAyLAorICAgICAgICAi
Y29tbWEtc3R5bGUiOiAwLAorICAgICAgICAiY29tcGxleGl0eSI6IFswLCAxMV0sCisgICAgICAg
ICJjb25zaXN0ZW50LXJldHVybiI6IDIsCisgICAgICAgICJjb25zaXN0ZW50LXRoaXMiOiBbMCwg
InRoYXQiXSwKKyAgICAgICAgImN1cmx5IjogWzIsICJhbGwiXSwKKyAgICAgICAgImRlZmF1bHQt
Y2FzZSI6IDAsCisgICAgICAgICJkb3Qtbm90YXRpb24iOiAyLAorICAgICAgICAiZW9sLWxhc3Qi
OiAyLAorICAgICAgICAiZXFlcWVxIjogMiwKKyAgICAgICAgImZ1bmMtbmFtZXMiOiAwLAorICAg
ICAgICAiZnVuYy1zdHlsZSI6IFswLCAiZGVjbGFyYXRpb24iXSwKKyAgICAgICAgImdsb2JhbC1z
dHJpY3QiOiBbMiwgIm5ldmVyIl0sCisgICAgICAgICJndWFyZC1mb3ItaW4iOiAwLAorICAgICAg
ICAiaGFuZGxlLWNhbGxiYWNrLWVyciI6IDAsCisgICAgICAgICJrZXktc3BhY2luZyI6IFsyLCB7
ICJiZWZvcmVDb2xvbiI6IGZhbHNlLCAiYWZ0ZXJDb2xvbiI6IHRydWUgfV0sCisgICAgICAgICJt
YXgtZGVwdGgiOiBbMCwgNF0sCisgICAgICAgICJtYXgtbGVuIjogWzAsIDgwLCA0XSwKKyAgICAg
ICAgIm1heC1uZXN0ZWQtY2FsbGJhY2tzIjogWzAsIDJdLAorICAgICAgICAibWF4LXBhcmFtcyI6
IFswLCAzXSwKKyAgICAgICAgIm1heC1zdGF0ZW1lbnRzIjogWzAsIDEwXSwKKyAgICAgICAgIm5l
dy1jYXAiOiAyLAorICAgICAgICAibmV3LXBhcmVucyI6IDIsCisgICAgICAgICJvbmUtdmFyIjog
MCwKKyAgICAgICAgInBhZGRlZC1ibG9ja3MiOiAwLAorICAgICAgICAicXVvdGUtcHJvcHMiOiAw
LAorICAgICAgICAicXVvdGVzIjogWzIsICJkb3VibGUiXSwKKyAgICAgICAgInJhZGl4IjogMCwK
KyAgICAgICAgInNlbWkiOiAyLAorICAgICAgICAic29ydC12YXJzIjogMCwKKyAgICAgICAgInNw
YWNlLWFmdGVyLWtleXdvcmRzIjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgInNwYWNlLWJlZm9y
ZS1ibG9ja3MiOiBbMCwgImFsd2F5cyJdLAorICAgICAgICAic3BhY2UtaW4tYnJhY2tldHMiOiBb
MCwgIm5ldmVyIl0sCisgICAgICAgICJzcGFjZS1pbi1wYXJlbnMiOiBbMCwgIm5ldmVyIl0sCisg
ICAgICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAic3BhY2UtcmV0dXJuLXRocm93
LWNhc2UiOiAyLAorICAgICAgICAic3BhY2UtdW5hcnktd29yZC1vcHMiOiAwLAorICAgICAgICAi
c3BhY2VkLWxpbmUtY29tbWVudCI6IFswLCAiYWx3YXlzIl0sCisgICAgICAgICJzdHJpY3QiOiAy
LAorICAgICAgICAidXNlLWlzbmFuIjogMiwKKyAgICAgICAgInZhbGlkLWpzZG9jIjogMCwKKyAg
ICAgICAgInZhbGlkLXR5cGVvZiI6IDIsCisgICAgICAgICJ2YXJzLW9uLXRvcCI6IDAsCisgICAg
ICAgICJ3cmFwLWlpZmUiOiAwLAorICAgICAgICAid3JhcC1yZWdleCI6IDAsCisgICAgICAgICJ5
b2RhIjogWzIsICJuZXZlciJdCisgICAgfQorfQorCit9LHt9XSwzOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5v
ZGUgY29udHJpYnV0b3JzLgorLy8KKy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisvLyBjb3B5IG9mIHRoaXMg
c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisvLyAiU29m
dHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nCisvLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisvLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0CisvLyBwZXJzb25zIHRv
IHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUK
Ky8vIGZvbGxvd2luZyBjb25kaXRpb25zOgorLy8KKy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisvLyBpbiBh
bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKy8vCisv
LyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUworLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRgorLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTgorLy8gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sCisvLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKy8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKy8vIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK2Z1bmN0aW9uIEV2ZW50RW1pdHRlcigp
IHsKKyAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9OworICB0aGlzLl9tYXhMaXN0
ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkOworfQorbW9kdWxlLmV4cG9y
dHMgPSBFdmVudEVtaXR0ZXI7CisKKy8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAu
eAorRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKKworRXZlbnRFbWl0
dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkOworRXZlbnRFbWl0dGVyLnByb3RvdHlw
ZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkOworCisvLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRl
cnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmUKKy8v
IGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGlu
ZyBtZW1vcnkgbGVha3MuCitFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwOwor
CisvLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4g
VGhpcyBmdW5jdGlvbiBhbGxvd3MKKy8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVy
byBmb3IgdW5saW1pdGVkLgorRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMg
PSBmdW5jdGlvbihuKSB7CisgIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikp
CisgICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTsKKyAg
dGhpcy5fbWF4TGlzdGVuZXJzID0gbjsKKyAgcmV0dXJuIHRoaXM7Cit9OworCitFdmVudEVtaXR0
ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7CisgIHZhciBlciwgaGFuZGxlciwg
bGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgdGhp
cy5fZXZlbnRzID0ge307CisKKyAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0
ZW5lciB0aGVuIHRocm93LgorICBpZiAodHlwZSA9PT0gJ2Vycm9yJykgeworICAgIGlmICghdGhp
cy5fZXZlbnRzLmVycm9yIHx8CisgICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3Ip
ICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkgeworICAgICAgZXIgPSBhcmd1bWVudHNb
MV07CisgICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikgeworICAgICAgICB0aHJvdyBlcjsg
Ly8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnQKKyAgICAgIH0KKyAgICAgIHRocm93IFR5cGVFcnJv
cignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQuJyk7CisgICAgfQorICB9CisK
KyAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICBpZiAoaXNVbmRlZmluZWQoaGFu
ZGxlcikpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7
CisgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAvLyBmYXN0IGNhc2VzCisg
ICAgICBjYXNlIDE6CisgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIDI6CisgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0p
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzoKKyAgICAgICAgaGFuZGxlci5jYWxsKHRo
aXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAv
LyBzbG93ZXIKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7
CisgICAgICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7CisgICAgICAgIGZvciAoaSA9IDE7
IGkgPCBsZW47IGkrKykKKyAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKKyAg
ICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICB9CisgIH0gZWxzZSBpZiAoaXNP
YmplY3QoaGFuZGxlcikpIHsKKyAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAgIGFyZ3Mg
PSBuZXcgQXJyYXkobGVuIC0gMSk7CisgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQorICAg
ICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICBsaXN0ZW5lcnMgPSBoYW5kbGVy
LnNsaWNlKCk7CisgICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsKKyAgICBmb3IgKGkgPSAwOyBp
IDwgbGVuOyBpKyspCisgICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7CisgIH0K
KworICByZXR1cm4gdHJ1ZTsKK307CisKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVu
ZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgeworICB2YXIgbTsKKworICBpZiAoIWlzRnVu
Y3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBh
IGZ1bmN0aW9uJyk7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgdGhpcy5fZXZlbnRzID0g
e307CisKKyAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0g
Im5ld0xpc3RlbmVyIiEgQmVmb3JlCisgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBm
aXJzdCBlbWl0ICJuZXdMaXN0ZW5lciIuCisgIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIp
CisgICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsCisgICAgICAgICAgICAgIGlzRnVu
Y3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID8KKyAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVu
ZXIgOiBsaXN0ZW5lcik7CisKKyAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pCisgICAgLy8gT3B0
aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJh
eSBvYmplY3QuCisgICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7CisgIGVsc2UgaWYg
KGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpCisgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBn
b3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxp
c3RlbmVyKTsKKyAgZWxzZQorICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQg
dG8gY2hhbmdlIHRvIGFycmF5LgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVu
dHNbdHlwZV0sIGxpc3RlbmVyXTsKKworICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVhaworICBp
ZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndh
cm5lZCkgeworICAgIHZhciBtOworICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVu
ZXJzKSkgeworICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVyczsKKyAgICB9IGVsc2UgeworICAg
ICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzOworICAgIH0KKworICAgIGlm
IChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7CisgICAgICB0
aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTsKKyAgICAgIGNvbnNvbGUuZXJyb3IoJyhu
b2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgKworICAgICAgICAg
ICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICsKKyAgICAg
ICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNl
IGxpbWl0LicsCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgp
OworICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTAKKyAgICAgICAgY29uc29sZS50cmFjZSgpOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRFbWl0dGVy
LnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7CisKK0V2
ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7Cisg
IGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5l
ciBtdXN0IGJlIGEgZnVuY3Rpb24nKTsKKworICB2YXIgZmlyZWQgPSBmYWxzZTsKKworICBmdW5j
dGlvbiBnKCkgeworICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7CisKKyAgICBpZiAo
IWZpcmVkKSB7CisgICAgICBmaXJlZCA9IHRydWU7CisgICAgICBsaXN0ZW5lci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgIH0KKyAgfQorCisgIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAg
dGhpcy5vbih0eXBlLCBnKTsKKworICByZXR1cm4gdGhpczsKK307CisKKy8vIGVtaXRzIGEgJ3Jl
bW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkCitFdmVudEVt
aXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIp
IHsKKyAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7CisKKyAgaWYgKCFpc0Z1bmN0aW9u
KGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5j
dGlvbicpOworCisgIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pCisg
ICAgcmV0dXJuIHRoaXM7CisKKyAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgbGVuZ3Ro
ID0gbGlzdC5sZW5ndGg7CisgIHBvc2l0aW9uID0gLTE7CisKKyAgaWYgKGxpc3QgPT09IGxpc3Rl
bmVyIHx8CisgICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVy
ID09PSBsaXN0ZW5lcikpIHsKKyAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworICAgIGlm
ICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpCisgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxp
c3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpOworCisgIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkp
IHsKKyAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7CisgICAgICBpZiAobGlzdFtpXSA9
PT0gbGlzdGVuZXIgfHwKKyAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxp
c3RlbmVyID09PSBsaXN0ZW5lcikpIHsKKyAgICAgICAgcG9zaXRpb24gPSBpOworICAgICAgICBi
cmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocG9zaXRpb24gPCAwKQorICAgICAgcmV0
dXJuIHRoaXM7CisKKyAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHsKKyAgICAgIGxpc3QubGVu
Z3RoID0gMDsKKyAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07CisgICAgfSBlbHNlIHsK
KyAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTsKKyAgICB9CisKKyAgICBpZiAodGhpcy5f
ZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQorICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcics
IHR5cGUsIGxpc3RlbmVyKTsKKyAgfQorCisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRFbWl0
dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7CisgIHZh
ciBrZXksIGxpc3RlbmVyczsKKworICBpZiAoIXRoaXMuX2V2ZW50cykKKyAgICByZXR1cm4gdGhp
czsKKworICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBl
bWl0CisgIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7CisgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDApCisgICAgICB0aGlzLl9ldmVudHMgPSB7fTsKKyAgICBlbHNlIGlm
ICh0aGlzLl9ldmVudHNbdHlwZV0pCisgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwor
ICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxs
IGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzCisgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7
CisgICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7CisgICAgICBpZiAoa2V5ID09PSAncmVt
b3ZlTGlzdGVuZXInKSBjb250aW51ZTsKKyAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtl
eSk7CisgICAgfQorICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicp
OworICAgIHRoaXMuX2V2ZW50cyA9IHt9OworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgbGlz
dGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdOworCisgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVy
cykpIHsKKyAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7CisgIH0gZWxz
ZSB7CisgICAgLy8gTElGTyBvcmRlcgorICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKQorICAg
ICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAt
IDFdKTsKKyAgfQorICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworCisgIHJldHVybiB0aGlz
OworfTsKKworRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBl
KSB7CisgIHZhciByZXQ7CisgIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlw
ZV0pCisgICAgcmV0ID0gW107CisgIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5
cGVdKSkKKyAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTsKKyAgZWxzZQorICAgIHJldCA9
IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpOworICByZXR1cm4gcmV0OworfTsKKworRXZlbnRF
bWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7CisgIHZhciBy
ZXQ7CisgIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbdHlwZV0pCisg
ICAgcmV0ID0gMDsKKyAgZWxzZSBpZiAoaXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0p
KQorICAgIHJldCA9IDE7CisgIGVsc2UKKyAgICByZXQgPSBlbWl0dGVyLl9ldmVudHNbdHlwZV0u
bGVuZ3RoOworICByZXR1cm4gcmV0OworfTsKKworZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHsK
KyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7Cit9CisKK2Z1bmN0aW9uIGlzTnVt
YmVyKGFyZykgeworICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7Cit9CisKK2Z1bmN0
aW9uIGlzT2JqZWN0KGFyZykgeworICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYg
YXJnICE9PSBudWxsOworfQorCitmdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHsKKyAgcmV0dXJu
IGFyZyA9PT0gdm9pZCAwOworfQorCit9LHt9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmll
bC50YW9AZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8
YW5kcmV3QGVpc2VuYmVyZy5hcz4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCisgIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworLypqc2xpbnQgYml0d2lzZTp0cnVlIHBsdXNwbHVzOnRydWUgZXFlcTp0cnVlIG5vbWVuOnRy
dWUqLworLypnbG9iYWwgZG9jdHJpbmU6dHJ1ZSwgZXhwb3J0czp0cnVlLCBwYXJzZVR5cGVFeHBy
ZXNzaW9uOnRydWUsIHBhcnNlVG9wOnRydWUqLworCisoZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAg
ICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgVkVSU0lPTiwKKyAgICAgICAgUmVnZXgsCisgICAg
ICAgIENhbkFjY2Vzc1N0cmluZ0J5SW5kZXgsCisgICAgICAgIHR5cGVkLAorICAgICAgICBqc2Rv
YywKKyAgICAgICAgaXNBcnJheSwKKyAgICAgICAgaGFzT3duUHJvcGVydHk7CisKKyAgICAvLyBT
eW5jIHdpdGggcGFja2FnZS5qc29uLgorICAgIFZFUlNJT04gPSAnMC41LjItZGV2JzsKKworICAg
IC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCisgICAgUmVnZXgg
PSB7CisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4
YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1
MDJlNFx1MDJlY1x1MDJlZVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUw
Mzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1
MDQ4MVx1MDQ4YS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVkMC1c
dTA1ZWFcdTA1ZjAtXHUwNWYyXHUwNjIwLVx1MDY0YVx1MDY2ZVx1MDY2Zlx1MDY3MS1cdTA2ZDNc
dTA2ZDVcdTA2ZTVcdTA2ZTZcdTA2ZWVcdTA2ZWZcdTA2ZmEtXHUwNmZjXHUwNmZmXHUwNzEwXHUw
NzEyLVx1MDcyZlx1MDc0ZC1cdTA3YTVcdTA3YjFcdTA3Y2EtXHUwN2VhXHUwN2Y0XHUwN2Y1XHUw
N2ZhXHUwODAwLVx1MDgxNVx1MDgxYVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4YTBcdTA4
YTItXHUwOGFjXHUwOTA0LVx1MDkzOVx1MDkzZFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUw
OTc3XHUwOTc5LVx1MDk3Zlx1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUw
OWFhLVx1MDliMFx1MDliMlx1MDliNi1cdTA5YjlcdTA5YmRcdTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5
ZGYtXHUwOWUxXHUwOWYwXHUwOWYxXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBh
MjhcdTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTU5
LVx1MGE1Y1x1MGE1ZVx1MGE3Mi1cdTBhNzRcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5
My1cdTBhYThcdTBhYWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiZFx1MGFk
MFx1MGFlMFx1MGFlMVx1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJh
LVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2RcdTBiNWNcdTBiNWRcdTBiNWYt
XHUwYjYxXHUwYjcxXHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1
XHUwYjk5XHUwYjlhXHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1
MGJhZS1cdTBiYjlcdTBiZDBcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1cdTBjMjhc
dTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZFx1MGM1OFx1MGM1OVx1MGM2MFx1MGM2MVx1
MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUt
XHUwY2I5XHUwY2JkXHUwY2RlXHUwY2UwXHUwY2UxXHUwY2YxXHUwY2YyXHUwZDA1LVx1MGQwY1x1
MGQwZS1cdTBkMTBcdTBkMTItXHUwZDNhXHUwZDNkXHUwZDRlXHUwZDYwXHUwZDYxXHUwZDdhLVx1
MGQ3Zlx1MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1c
dTBkYzZcdTBlMDEtXHUwZTMwXHUwZTMyXHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1
MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUw
ZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjBcdTBlYjJcdTBl
YjNcdTBlYmRcdTBlYzAtXHUwZWM0XHUwZWM2XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGY0MC1cdTBm
NDdcdTBmNDktXHUwZjZjXHUwZjg4LVx1MGY4Y1x1MTAwMC1cdTEwMmFcdTEwM2ZcdTEwNTAtXHUx
MDU1XHUxMDVhLVx1MTA1ZFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2ZS1cdTEwNzBcdTEwNzUtXHUx
MDgxXHUxMDhlXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUx
MjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1
MTI4OFx1MTI4YS1cdTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVc
dTEyYzBcdTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1
XHUxMzE4LVx1MTM1YVx1MTM4MC1cdTEzOGZcdTEzYTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1MTY2
Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUx
NzBjXHUxNzBlLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Y1x1
MTc2ZS1cdTE3NzBcdTE3ODAtXHUxN2IzXHUxN2Q3XHUxN2RjXHUxODIwLVx1MTg3N1x1MTg4MC1c
dTE4YThcdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkxY1x1MTk1MC1cdTE5NmRcdTE5NzAt
XHUxOTc0XHUxOTgwLVx1MTlhYlx1MTljMS1cdTE5YzdcdTFhMDAtXHUxYTE2XHUxYTIwLVx1MWE1
NFx1MWFhN1x1MWIwNS1cdTFiMzNcdTFiNDUtXHUxYjRiXHUxYjgzLVx1MWJhMFx1MWJhZVx1MWJh
Zlx1MWJiYS1cdTFiZTVcdTFjMDAtXHUxYzIzXHUxYzRkLVx1MWM0Zlx1MWM1YS1cdTFjN2RcdTFj
ZTktXHUxY2VjXHUxY2VlLVx1MWNmMVx1MWNmNVx1MWNmNlx1MWQwMC1cdTFkYmZcdTFlMDAtXHUx
ZjE1XHUxZjE4LVx1MWYxZFx1MWYyMC1cdTFmNDVcdTFmNDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1
MWY1OVx1MWY1Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUxZmI0XHUxZmI2LVx1MWZiY1x1
MWZiZVx1MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1MWZkM1x1MWZkNi1cdTFmZGJc
dTFmZTAtXHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZmNi1cdTFmZmNcdTIwNzFcdTIwN2ZcdTIwOTAt
XHUyMDljXHUyMTAyXHUyMTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMWRcdTIxMjRc
dTIxMjZcdTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIxM2ZcdTIxNDUt
XHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAtXHUyYzVlXHUyYzYw
LVx1MmNlNFx1MmNlYi1cdTJjZWVcdTJjZjJcdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJk
XHUyZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ4MC1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRh
ZVx1MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJk
ZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmUyZlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUz
MDMxLVx1MzAzNVx1MzAzOC1cdTMwM2NcdTMwNDEtXHUzMDk2XHUzMDlkLVx1MzA5Zlx1MzBhMS1c
dTMwZmFcdTMwZmMtXHUzMGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJh
XHUzMWYwLVx1MzFmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRk
MC1cdWE0ZmRcdWE1MDAtXHVhNjBjXHVhNjEwLVx1YTYxZlx1YTYyYVx1YTYyYlx1YTY0MC1cdWE2
NmVcdWE2N2YtXHVhNjk3XHVhNmEwLVx1YTZlZlx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVh
NzhiLVx1YTc4ZVx1YTc5MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgwMVx1YTgwMy1c
dWE4MDVcdWE4MDctXHVhODBhXHVhODBjLVx1YTgyMlx1YTg0MC1cdWE4NzNcdWE4ODItXHVhOGIz
XHVhOGYyLVx1YThmN1x1YThmYlx1YTkwYS1cdWE5MjVcdWE5MzAtXHVhOTQ2XHVhOTYwLVx1YTk3
Y1x1YTk4NC1cdWE5YjJcdWE5Y2ZcdWFhMDAtXHVhYTI4XHVhYTQwLVx1YWE0Mlx1YWE0NC1cdWFh
NGJcdWFhNjAtXHVhYTc2XHVhYTdhXHVhYTgwLVx1YWFhZlx1YWFiMVx1YWFiNVx1YWFiNlx1YWFi
OS1cdWFhYmRcdWFhYzBcdWFhYzJcdWFhZGItXHVhYWRkXHVhYWUwLVx1YWFlYVx1YWFmMi1cdWFh
ZjRcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVh
YjI4LVx1YWIyZVx1YWJjMC1cdWFiZTJcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1ZDdjYi1c
dWQ3ZmJcdWY5MDAtXHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZiMTMtXHVmYjE3
XHVmYjFkXHVmYjFmLVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQw
XHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhm
XHVmZDkyLVx1ZmRjN1x1ZmRmMC1cdWZkZmJcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYy
MS1cdWZmM2FcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdcdWZmY2EtXHVm
ZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJyksCisgICAgICAgIE5vbkFzY2lpSWRlbnRp
ZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4
LVx1MDJjMVx1MDJjNi1cdTAyZDFcdTAyZTAtXHUwMmU0XHUwMmVjXHUwMmVlXHUwMzAwLVx1MDM3
NFx1MDM3Nlx1MDM3N1x1MDM3YS1cdTAzN2RcdTAzODZcdTAzODgtXHUwMzhhXHUwMzhjXHUwMzhl
LVx1MDNhMVx1MDNhMy1cdTAzZjVcdTAzZjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4YS1cdTA1
MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1YmRcdTA1YmZcdTA1
YzFcdTA1YzJcdTA1YzRcdTA1YzVcdTA1YzdcdTA1ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYx
MC1cdTA2MWFcdTA2MjAtXHUwNjY5XHUwNjZlLVx1MDZkM1x1MDZkNS1cdTA2ZGNcdTA2ZGYtXHUw
NmU4XHUwNmVhLVx1MDZmY1x1MDZmZlx1MDcxMC1cdTA3NGFcdTA3NGQtXHUwN2IxXHUwN2MwLVx1
MDdmNVx1MDdmYVx1MDgwMC1cdTA4MmRcdTA4NDAtXHUwODViXHUwOGEwXHUwOGEyLVx1MDhhY1x1
MDhlNC1cdTA4ZmVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2Zlx1MDk3MS1cdTA5NzdcdTA5Nzkt
XHUwOTdmXHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4
XHUwOWFhLVx1MDliMFx1MDliMlx1MDliNi1cdTA5YjlcdTA5YmMtXHUwOWM0XHUwOWM3XHUwOWM4
XHUwOWNiLVx1MDljZVx1MDlkN1x1MDlkY1x1MDlkZFx1MDlkZi1cdTA5ZTNcdTA5ZTYtXHUwOWYx
XHUwYTAxLVx1MGEwM1x1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUwYTJh
LVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGEzY1x1MGEzZS1c
dTBhNDJcdTBhNDdcdTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTU5LVx1MGE1Y1x1MGE1ZVx1
MGE2Ni1cdTBhNzVcdTBhODEtXHUwYTgzXHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMt
XHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmMtXHUwYWM1
XHUwYWM3LVx1MGFjOVx1MGFjYi1cdTBhY2RcdTBhZDBcdTBhZTAtXHUwYWUzXHUwYWU2LVx1MGFl
Zlx1MGIwMS1cdTBiMDNcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIy
YS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNjLVx1MGI0NFx1MGI0N1x1MGI0
OFx1MGI0Yi1cdTBiNGRcdTBiNTZcdTBiNTdcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYzXHUwYjY2
LVx1MGI2Zlx1MGI3MVx1MGI4Mlx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjky
LVx1MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1c
dTBiYWFcdTBiYWUtXHUwYmI5XHUwYmJlLVx1MGJjMlx1MGJjNi1cdTBiYzhcdTBiY2EtXHUwYmNk
XHUwYmQwXHUwYmQ3XHUwYmU2LVx1MGJlZlx1MGMwMS1cdTBjMDNcdTBjMDUtXHUwYzBjXHUwYzBl
LVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZC1cdTBj
NDRcdTBjNDYtXHUwYzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM1OFx1MGM1OVx1MGM2
MC1cdTBjNjNcdTBjNjYtXHUwYzZmXHUwYzgyXHUwYzgzXHUwYzg1LVx1MGM4Y1x1MGM4ZS1cdTBj
OTBcdTBjOTItXHUwY2E4XHUwY2FhLVx1MGNiM1x1MGNiNS1cdTBjYjlcdTBjYmMtXHUwY2M0XHUw
Y2M2LVx1MGNjOFx1MGNjYS1cdTBjY2RcdTBjZDVcdTBjZDZcdTBjZGVcdTBjZTAtXHUwY2UzXHUw
Y2U2LVx1MGNlZlx1MGNmMVx1MGNmMlx1MGQwMlx1MGQwM1x1MGQwNS1cdTBkMGNcdTBkMGUtXHUw
ZDEwXHUwZDEyLVx1MGQzYVx1MGQzZC1cdTBkNDRcdTBkNDYtXHUwZDQ4XHUwZDRhLVx1MGQ0ZVx1
MGQ1N1x1MGQ2MC1cdTBkNjNcdTBkNjYtXHUwZDZmXHUwZDdhLVx1MGQ3Zlx1MGQ4Mlx1MGQ4M1x1
MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZc
dTBkY2FcdTBkY2YtXHUwZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRkZlx1MGRmMlx1MGRmM1x1MGUwMS1c
dTBlM2FcdTBlNDAtXHUwZTRlXHUwZTUwLVx1MGU1OVx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1
MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1
MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjlcdTBlYmItXHUwZWJkXHUwZWMwLVx1
MGVjNFx1MGVjNlx1MGVjOC1cdTBlY2RcdTBlZDAtXHUwZWQ5XHUwZWRjLVx1MGVkZlx1MGYwMFx1
MGYxOFx1MGYxOVx1MGYyMC1cdTBmMjlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmM2UtXHUwZjQ3XHUw
ZjQ5LVx1MGY2Y1x1MGY3MS1cdTBmODRcdTBmODYtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1
MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlkXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1c
dTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEt
XHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJi
NVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEz
MTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1YVx1MTM1ZC1cdTEzNWZcdTEzODAtXHUxMzhmXHUx
M2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1c
dTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1MTcwY1x1MTcwZS1cdTE3MTRcdTE3MjAtXHUxNzM0
XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NmNcdTE3NmUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgw
LVx1MTdkM1x1MTdkN1x1MTdkY1x1MTdkZFx1MTdlMC1cdTE3ZTlcdTE4MGItXHUxODBkXHUxODEw
LVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5
MWNcdTE5MjAtXHUxOTJiXHUxOTMwLVx1MTkzYlx1MTk0Ni1cdTE5NmRcdTE5NzAtXHUxOTc0XHUx
OTgwLVx1MTlhYlx1MTliMC1cdTE5YzlcdTE5ZDAtXHUxOWQ5XHUxYTAwLVx1MWExYlx1MWEyMC1c
dTFhNWVcdTFhNjAtXHUxYTdjXHUxYTdmLVx1MWE4OVx1MWE5MC1cdTFhOTlcdTFhYTdcdTFiMDAt
XHUxYjRiXHUxYjUwLVx1MWI1OVx1MWI2Yi1cdTFiNzNcdTFiODAtXHUxYmYzXHUxYzAwLVx1MWMz
N1x1MWM0MC1cdTFjNDlcdTFjNGQtXHUxYzdkXHUxY2QwLVx1MWNkMlx1MWNkNC1cdTFjZjZcdTFk
MDAtXHUxZGU2XHUxZGZjLVx1MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1
MWY0ZFx1MWY1MC1cdTFmNTdcdTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1
MWZiNFx1MWZiNi1cdTFmYmNcdTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1c
dTFmZDNcdTFmZDYtXHUxZmRiXHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZj
XHUyMDBjXHUyMDBkXHUyMDNmXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5Y1x1
MjBkMC1cdTIwZGNcdTIwZTFcdTIwZTUtXHUyMGYwXHUyMTAyXHUyMTA3XHUyMTBhLVx1MjExM1x1
MjExNVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1
MjEzOVx1MjEzYy1cdTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1c
dTJjMmVcdTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1cdTJjZjNcdTJkMDAtXHUyZDI1
XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ3Zi1cdTJkOTZcdTJkYTAtXHUyZGE2
XHUyZGE4LVx1MmRhZVx1MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRj
OC1cdTJkY2VcdTJkZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmRlMC1cdTJkZmZcdTJlMmZcdTMw
MDUtXHUzMDA3XHUzMDIxLVx1MzAyZlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1
MzA5Nlx1MzA5OVx1MzA5YVx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZhXHUzMGZjLVx1MzBmZlx1
MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFmMC1cdTMxZmZcdTM0MDAt
XHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYw
Y1x1YTYxMC1cdWE2MmJcdWE2NDAtXHVhNjZmXHVhNjc0LVx1YTY3ZFx1YTY3Zi1cdWE2OTdcdWE2
OWYtXHVhNmYxXHVhNzE3LVx1YTcxZlx1YTcyMi1cdWE3ODhcdWE3OGItXHVhNzhlXHVhNzkwLVx1
YTc5M1x1YTdhMC1cdWE3YWFcdWE3ZjgtXHVhODI3XHVhODQwLVx1YTg3M1x1YTg4MC1cdWE4YzRc
dWE4ZDAtXHVhOGQ5XHVhOGUwLVx1YThmN1x1YThmYlx1YTkwMC1cdWE5MmRcdWE5MzAtXHVhOTUz
XHVhOTYwLVx1YTk3Y1x1YTk4MC1cdWE5YzBcdWE5Y2YtXHVhOWQ5XHVhYTAwLVx1YWEzNlx1YWE0
MC1cdWFhNGRcdWFhNTAtXHVhYTU5XHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE3Ylx1YWE4MC1cdWFh
YzJcdWFhZGItXHVhYWRkXHVhYWUwLVx1YWFlZlx1YWFmMi1cdWFhZjZcdWFiMDEtXHVhYjA2XHVh
YjA5LVx1YWIwZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJjMC1c
dWFiZWFcdWFiZWNcdWFiZWRcdWFiZjAtXHVhYmY5XHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZc
dWQ3Y2ItXHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEz
LVx1ZmIxN1x1ZmIxZC1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0
MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4
Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTAwLVx1ZmUwZlx1ZmUyMC1cdWZlMjZcdWZl
MzNcdWZlMzRcdWZlNGQtXHVmZTRmXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMTAtXHVm
ZjE5XHVmZjIxLVx1ZmYzYVx1ZmYzZlx1ZmY0MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1
ZmZjN1x1ZmZjYS1cdWZmY2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1ZmZkY10nKQorICAgIH07CisK
KyAgICBDYW5BY2Nlc3NTdHJpbmdCeUluZGV4ID0gdHlwZW9mICdkb2N0cmluZSdbMF0gIT09IHVu
ZGVmaW5lZDsKKworICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3Qp
IHsKKyAgICAgICAgdmFyIG91dHB1dDsKKyAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUlu
ZGV4KSB7CisgICAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoaW5kZXgsIGxhc3QpLmpv
aW4oJycpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNs
aWNlKGluZGV4LCBsYXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0cHV0OworICAg
IH0KKworICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OworICAgIGlmICghaXNBcnJheSkgewor
ICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnkpIHsKKyAgICAgICAgICAgIHJl
dHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJ5KSA9PT0gJ1tvYmplY3QgQXJy
YXldJzsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBoYXNPd25Qcm9wZXJ0eSA9IChmdW5jdGlv
biAoKSB7CisgICAgICAgIHZhciBmdW5jID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0
eTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgbmFtZSkgewor
ICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChvYmosIG5hbWUpOworICAgICAgICB9OworICAg
IH0oKSk7CisKKyAgICBmdW5jdGlvbiBzaGFsbG93Q29weShvYmopIHsKKyAgICAgICAgdmFyIHJl
dCA9IHt9LCBrZXk7CisgICAgICAgIGZvciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgaWYg
KG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBv
Ympba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHsKKyAgICAgICAgcmV0
dXJuIGNoID09PSAnXG4nIHx8IGNoID09PSAnXHInIHx8IGNoID09PSAnXHUyMDI4JyB8fCBjaCA9
PT0gJ1x1MjAyOSc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7Cisg
ICAgICAgIHJldHVybiAoY2ggPT09ICcgJykgfHwgKGNoID09PSAnXHUwMDA5JykgfHwgKGNoID09
PSAnXHUwMDBCJykgfHwKKyAgICAgICAgICAgIChjaCA9PT0gJ1x1MDAwQycpIHx8IChjaCA9PT0g
J1x1MDBBMCcpIHx8CisgICAgICAgICAgICAoY2guY2hhckNvZGVBdCgwKSA+PSAweDE2ODAgJiYK
KyAgICAgICAgICAgICAnXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0
XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHVG
RUZGJy5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0RlY2ltYWxE
aWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODknLmluZGV4T2YoY2gpID49IDA7
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgeworICAgICAgICByZXR1cm4g
JzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmlu
ZGV4T2YoY2gpID49IDA7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNBU0NJSUFscGhhbnVtZXJp
YyhjaCkgeworICAgICAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8IChjaCA+
PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChj
aCA9PT0gJyQnKSB8fCAoY2ggPT09ICdfJykgfHwgKGNoID09PSAnXFwnKSB8fAorICAgICAgICAg
ICAgKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8
fAorICAgICAgICAgICAgKChjaC5jaGFyQ29kZUF0KDApID49IDB4ODApICYmIFJlZ2V4Lk5vbkFz
Y2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoY2gpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lk
ZW50aWZpZXJQYXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09ICckJykgfHwgKGNoID09
PSAnXycpIHx8IChjaCA9PT0gJ1xcJykgfHwKKyAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2gg
PD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAgICAgICAgICAgICgoY2gg
Pj0gJzAnKSAmJiAoY2ggPD0gJzknKSkgfHwKKyAgICAgICAgICAgICgoY2guY2hhckNvZGVBdCgw
KSA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoY2gpKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpc1R5cGVOYW1lKGNoKSB7CisgICAgICAgIHJldHVybiAnPjwo
KXt9W10sOip8PyE9Jy5pbmRleE9mKGNoKSA9PT0gLTEgJiYgIWlzV2hpdGVTcGFjZShjaCkgJiYg
IWlzTGluZVRlcm1pbmF0b3IoY2gpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRs
ZSh0aXRsZSkgeworICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09
ICdhcmd1bWVudCcgfHwgdGl0bGUgPT09ICdhcmcnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlz
UHJvcGVydHkodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8
IHRpdGxlID09PSAncHJvcCc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVy
UmVxdWlyZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwg
aXNQcm9wZXJ0eSh0aXRsZSkgfHwKKyAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRp
dGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJl
cyc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkgeworICAgICAg
ICByZXR1cm4gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29u
c3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQWxs
b3dlZE5lc3RlZCh0aXRsZSkgeworICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwg
aXNQYXJhbVRpdGxlKHRpdGxlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0
ZXJSZXF1aXJlZCh0aXRsZSkgeworICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8
fCB0aXRsZSA9PT0gJ2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fAorICAgICAgICAgICAg
dGl0bGUgPT09ICdpbXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHwKKyAgICAgICAg
ICAgIHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5
cGVkZWYnIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHko
dGl0bGUpOworICAgIH0KKworICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNp
bmcgJ2lzVHlwZVBhcmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBw
aWNrIHdoZW4gYSB0eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkCisgICAgLy8gVGhpcyB3b3VsZCBy
ZXF1aXJlIGNoYW5nZXMgdG8gJ3BhcnNlVHlwZScKKyAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBl
KHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkg
fHwgdGl0bGUgPT09ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAn
Y29uc3RhbnQnIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUg
PT09ICdtZW1iZXInIHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHwK
KyAgICAgICAgICAgIHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3Mn
IHx8IHRpdGxlID09PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHwKKyAgICAg
ICAgICAgIHRpdGxlID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxl
ID09PSAncHJvdGVjdGVkJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBEb2N0cmluZUVycm9yKG1l
c3NhZ2UpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gJ0RvY3RyaW5lRXJyb3InOworICAgICAgICB0
aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKyAgICBEb2N0cmluZUVycm9yLnByb3RvdHlw
ZSA9IG5ldyBFcnJvcigpOworICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gRG9jdHJpbmVFcnJvcjsKKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkgewor
ICAgICAgICB0aHJvdyBuZXcgRG9jdHJpbmVFcnJvcihtZXNzYWdlKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBhc3NlcnQoY29uZCwgdGV4dCkgeworICAgICAgICBpZiAoVkVSU0lPTi5zbGljZSgt
MykgPT09ICdkZXYnKSB7CisgICAgICAgICAgICBpZiAoIWNvbmQpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKHRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gdHJpbShzdHIpIHsKKyAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMr
LywgJycpLnJlcGxhY2UoL1xzKyQvLCAnJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdW53cmFw
Q29tbWVudChkb2MpIHsKKyAgICAgICAgLy8gSlNEb2MgY29tbWVudCBpcyBmb2xsb3dpbmcgZm9y
bQorICAgICAgICAvLyAgIC8qKgorICAgICAgICAvLyAgICAqIC4uLi4uLi4KKyAgICAgICAgLy8g
ICAgKi8KKyAgICAgICAgLy8gcmVtb3ZlIC8qKiwgKi8gYW5kICoKKyAgICAgICAgdmFyIEJFRk9S
RV9TVEFSID0gMCwKKyAgICAgICAgICAgIFNUQVIgPSAxLAorICAgICAgICAgICAgQUZURVJfU1RB
UiA9IDIsCisgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgIGxlbiwKKyAgICAgICAgICAg
IG1vZGUsCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBjaDsKKworICAgICAgICBk
b2MgPSBkb2MucmVwbGFjZSgvXlwvXCpcKj8vLCAnJykucmVwbGFjZSgvXCpcLyQvLCAnJyk7Cisg
ICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGVuID0gZG9jLmxlbmd0aDsKKyAgICAgICAgbW9k
ZSA9IEJFRk9SRV9TVEFSOworICAgICAgICByZXN1bHQgPSAnJzsKKworICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW4pIHsKKyAgICAgICAgICAgIGNoID0gZG9jW2luZGV4XTsKKyAgICAgICAgICAg
IHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBCRUZPUkVfU1RBUjoKKyAgICAgICAg
ICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IGNoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcqJykgewor
ICAgICAgICAgICAgICAgICAgICBtb2RlID0gU1RBUjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBj
aDsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEFGVEVSX1NUQVI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFNUQVI6Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbW9k
ZSA9IGlzTGluZVRlcm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IGNoOworICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJt
aW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBtb2RlID0gQkVGT1JFX1NUQVI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaW5kZXggKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgLy8gVHlwZSBFeHByZXNzaW9uIFBhcnNlcgorCisgICAgKGZ1bmN0
aW9uIChleHBvcnRzKSB7CisgICAgICAgIHZhciBTeW50YXgsCisgICAgICAgICAgICBUb2tlbiwK
KyAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGlu
ZGV4LAorICAgICAgICAgICAgcHJldmlvdXMsCisgICAgICAgICAgICB0b2tlbiwKKyAgICAgICAg
ICAgIHZhbHVlOworCisgICAgICAgIFN5bnRheCA9IHsKKyAgICAgICAgICAgIE51bGxhYmxlTGl0
ZXJhbDogJ051bGxhYmxlTGl0ZXJhbCcsCisgICAgICAgICAgICBBbGxMaXRlcmFsOiAnQWxsTGl0
ZXJhbCcsCisgICAgICAgICAgICBOdWxsTGl0ZXJhbDogJ051bGxMaXRlcmFsJywKKyAgICAgICAg
ICAgIFVuZGVmaW5lZExpdGVyYWw6ICdVbmRlZmluZWRMaXRlcmFsJywKKyAgICAgICAgICAgIFZv
aWRMaXRlcmFsOiAnVm9pZExpdGVyYWwnLAorICAgICAgICAgICAgVW5pb25UeXBlOiAnVW5pb25U
eXBlJywKKyAgICAgICAgICAgIEFycmF5VHlwZTogJ0FycmF5VHlwZScsCisgICAgICAgICAgICBS
ZWNvcmRUeXBlOiAnUmVjb3JkVHlwZScsCisgICAgICAgICAgICBGaWVsZFR5cGU6ICdGaWVsZFR5
cGUnLAorICAgICAgICAgICAgRnVuY3Rpb25UeXBlOiAnRnVuY3Rpb25UeXBlJywKKyAgICAgICAg
ICAgIFBhcmFtZXRlclR5cGU6ICdQYXJhbWV0ZXJUeXBlJywKKyAgICAgICAgICAgIFJlc3RUeXBl
OiAnUmVzdFR5cGUnLAorICAgICAgICAgICAgTm9uTnVsbGFibGVUeXBlOiAnTm9uTnVsbGFibGVU
eXBlJywKKyAgICAgICAgICAgIE9wdGlvbmFsVHlwZTogJ09wdGlvbmFsVHlwZScsCisgICAgICAg
ICAgICBOdWxsYWJsZVR5cGU6ICdOdWxsYWJsZVR5cGUnLAorICAgICAgICAgICAgTmFtZUV4cHJl
c3Npb246ICdOYW1lRXhwcmVzc2lvbicsCisgICAgICAgICAgICBUeXBlQXBwbGljYXRpb246ICdU
eXBlQXBwbGljYXRpb24nCisgICAgICAgIH07CisKKyAgICAgICAgVG9rZW4gPSB7CisgICAgICAg
ICAgICBJTExFR0FMOiAwLCAgICAvLyBJTExFR0FMCisgICAgICAgICAgICBET1Q6IDEsICAgICAg
ICAvLyAuCisgICAgICAgICAgICBET1RfTFQ6IDIsICAgICAvLyAuPAorICAgICAgICAgICAgUkVT
VDogMywgICAgICAgLy8gLi4uCisgICAgICAgICAgICBMVDogNCwgICAgICAgICAvLyA8CisgICAg
ICAgICAgICBHVDogNSwgICAgICAgICAvLyA+CisgICAgICAgICAgICBMUEFSRU46IDYsICAgICAv
LyAoCisgICAgICAgICAgICBSUEFSRU46IDcsICAgICAvLyApCisgICAgICAgICAgICBMQlJBQ0U6
IDgsICAgICAvLyB7CisgICAgICAgICAgICBSQlJBQ0U6IDksICAgICAvLyB9CisgICAgICAgICAg
ICBMQlJBQ0s6IDEwLCAgICAvLyBbCisgICAgICAgICAgICBSQlJBQ0s6IDExLCAgICAvLyBdCisg
ICAgICAgICAgICBDT01NQTogMTIsICAgICAvLyAsCisgICAgICAgICAgICBDT0xPTjogMTMsICAg
ICAvLyA6CisgICAgICAgICAgICBTVEFSOiAxNCwgICAgICAvLyAqCisgICAgICAgICAgICBQSVBF
OiAxNSwgICAgICAvLyB8CisgICAgICAgICAgICBRVUVTVElPTjogMTYsICAvLyA/CisgICAgICAg
ICAgICBCQU5HOiAxNywgICAgICAvLyAhCisgICAgICAgICAgICBFUVVBTDogMTgsICAgICAvLyA9
CisgICAgICAgICAgICBOQU1FOiAxOSwgICAgICAvLyBuYW1lIHRva2VuCisgICAgICAgICAgICBT
VFJJTkc6IDIwLCAgICAvLyBzdHJpbmcKKyAgICAgICAgICAgIE5VTUJFUjogMjEsICAgIC8vIG51
bWJlcgorICAgICAgICAgICAgRU9GOiAyMgorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9u
IENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpIHsKKyAgICAgICAgICAgIHRo
aXMuX3ByZXZpb3VzID0gcHJldmlvdXM7CisgICAgICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4
OworICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSB0b2tlbjsKKyAgICAgICAgICAgIHRoaXMuX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBDb250ZXh0LnByb3RvdHlwZS5yZXN0
b3JlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcHJldmlvdXMgPSB0aGlzLl9wcmV2aW91
czsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5faW5kZXg7CisgICAgICAgICAgICB0b2tlbiA9
IHRoaXMuX3Rva2VuOworICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZTsKKyAgICAgICAg
fTsKKworICAgICAgICBDb250ZXh0LnNhdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpOworICAgICAg
ICB9OworCisgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CisgICAgICAgICAgICB2YXIgY2gg
PSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaW5kZXggKz0gMTsKKyAgICAgICAgICAgIHJl
dHVybiBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJl
Zml4KSB7CisgICAgICAgICAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAg
ICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjsKKyAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAm
JiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0g
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0
NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2NhblN0cmluZygpIHsKKyAg
ICAgICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3Rv
cmU7IC8vVE9ETyByZXZpZXcgcmVtb3ZhbCBvY3RhbCA9IGZhbHNlCisgICAgICAgICAgICBxdW90
ZSA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICArK2luZGV4OworCisgICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTsK
KworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcXVvdGUgPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBjaCA9IGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKGNoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
bic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xy
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQn
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAnXGInOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9ICdcZic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1x2JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERlcHJlY2F0aW5nIHVudXNlZCBjb2RlLiBUT0RPIHJl
dmlldyByZW1vdmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGNvZGUg
IT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgb2N0YWwgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNv
dXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RP
RE8gUmV2aWV3IFJlbW92YWwgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2Uo
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFy
ZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNl
W2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
ID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2YoYWR2YW5jZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAgJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAn
XG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9
IGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHF1b3RlICE9PSAnJykgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQg
cXVvdGUnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWUgPSBzdHI7CisgICAg
ICAgICAgICByZXR1cm4gVG9rZW4uU1RSSU5HOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc2Nhbk51bWJlcigpIHsKKyAgICAgICAgICAgIHZhciBudW1iZXIsIGNoOworCisgICAgICAg
ICAgICBudW1iZXIgPSAnJzsKKyAgICAgICAgICAgIGlmIChjaCAhPT0gJy4nKSB7CisgICAgICAg
ICAgICAgICAgbnVtYmVyID0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKworICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcwJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNI
ZXhEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBvbmx5IDB4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDE2KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGlzRGVjaW1hbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4
cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUlu
dChudW1iZXIsIDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJF
UjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3Vu
ZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGNoID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNoID09PSAn
ZScgfHwgY2ggPT09ICdFJykgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7
CisKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAg
aWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgeworICAgICAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gp
KSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAr
PSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQobnVtYmVyKTsK
KyAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7CisgICAgICAgIH0KKworCisgICAgICAg
IGZ1bmN0aW9uIHNjYW5UeXBlTmFtZSgpIHsKKyAgICAgICAgICAgIHZhciBjaCwgY2gyOworCisg
ICAgICAgICAgICB2YWx1ZSA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCAmJiBpc1R5cGVOYW1lKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgoaW5kZXggKyAxKSA8IGxlbmd0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2gyID0gc291cmNlW2luZGV4ICsgMV07CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY2gyID09PSAnPCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSArPSBhZHZhbmNlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVG9rZW4uTkFNRTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7CisgICAgICAgICAgICB2YXIgY2g7CisKKyAgICAg
ICAgICAgIHByZXZpb3VzID0gaW5kZXg7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCAmJiBpc1doaXRlU3BhY2Uoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5FT0Y7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRva2VuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaCA9IHNvdXJjZVtp
bmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICBjYXNlICciJzoK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJzonOgorICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTE9OOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09NTUE7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICcoJzoKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5M
UEFSRU47CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNl
ICcpJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4g
PSBUb2tlbi5SUEFSRU47CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAg
ICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgdG9rZW4gPSBUb2tlbi5MQlJBQ0s7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwor
CisgICAgICAgICAgICBjYXNlICddJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAg
ICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0s7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MQlJBQ0U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgICAg
ICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0U7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICcuJzoKKyAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAnPCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UX0xUOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLicgJiYgaW5kZXggKyAxIDwgbGVu
Z3RoICYmIHNvdXJjZVtpbmRleCArIDFdID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkVTVDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuID0gc2Nhbk51bWJlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5HVDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJyonOgorICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlNUQVI7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5QSVBFOworICAg
ICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnPyc6CisgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUVVF
U1RJT047CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNl
ICchJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4g
PSBUb2tlbi5CQU5HOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAg
ICAgY2FzZSAnPSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAg
IHRva2VuID0gVG9rZW4uRVFVQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChj
aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyB0eXBlIHN0cmluZyBwZXJtaXRzIGZvbGxvd2luZyBjYXNlLAorICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gbmFtZXNwYWNlLm1vZHVsZS5NeUNsYXNzCisg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyB0aGlzIHJlZHVjZWQgMSB0b2tl
biBUS19OQU1FCisgICAgICAgICAgICAgICAgaWYgKGlzVHlwZU5hbWUoY2gpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRva2VuID0gc2NhblR5cGVOYW1lKCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLklMTEVHQUw7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY29uc3VtZSh0YXJnZXQsIHRl
eHQpIHsKKyAgICAgICAgICAgIGFzc2VydCh0b2tlbiA9PT0gdGFyZ2V0LCB0ZXh0IHx8ICdjb25z
dW1lZCB0b2tlbiBub3QgbWF0Y2hlZCcpOworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gZXhwZWN0KHRhcmdldCkgeworICAgICAgICAgICAgaWYgKHRv
a2VuICE9PSB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVk
IHRva2VuJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBVbmlvblR5cGUgOj0gJygnIFR5cGVVbmlvbkxpc3QgJyknCisgICAgICAg
IC8vCisgICAgICAgIC8vIFR5cGVVbmlvbkxpc3QgOj0KKyAgICAgICAgLy8gICAgIDw8ZW1wdHk+
PgorICAgICAgICAvLyAgIHwgTm9uZW1wdHlUeXBlVW5pb25MaXN0CisgICAgICAgIC8vCisgICAg
ICAgIC8vIE5vbmVtcHR5VHlwZVVuaW9uTGlzdCA6PQorICAgICAgICAvLyAgICAgVHlwZUV4cHJl
c3Npb24KKyAgICAgICAgLy8gICB8IFR5cGVFeHByZXNzaW9uICd8JyBOb25lbXB0eVR5cGVVbmlv
bkxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VVbmlvblR5cGUoKSB7CisgICAgICAgICAgICB2
YXIgZWxlbWVudHM7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxQQVJFTiwgJ1VuaW9uVHlw
ZSBzaG91bGQgc3RhcnQgd2l0aCAoJyk7CisgICAgICAgICAgICBlbGVtZW50cyA9IFtdOworICAg
ICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlw
ZUV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
UlBBUkVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uUElQRSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SUEFS
RU4sICdVbmlvblR5cGUgc2hvdWxkIGVuZCB3aXRoICknKTsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuaW9uVHlwZSwKKyAgICAgICAgICAgICAg
ICBlbGVtZW50czogZWxlbWVudHMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAg
ICAvLyBBcnJheVR5cGUgOj0gJ1snIEVsZW1lbnRUeXBlTGlzdCAnXScKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gRWxlbWVudFR5cGVMaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAg
ICAgICAgLy8gIHwgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8gIHwgJy4uLicgVHlwZUV4cHJl
c3Npb24KKyAgICAgICAgLy8gIHwgVHlwZUV4cHJlc3Npb24gJywnIEVsZW1lbnRUeXBlTGlzdAor
ICAgICAgICBmdW5jdGlvbiBwYXJzZUFycmF5VHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBlbGVt
ZW50czsKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLLCAnQXJyYXlUeXBlIHNob3Vs
ZCBzdGFydCB3aXRoIFsnKTsKKyAgICAgICAgICAgIGVsZW1lbnRzID0gW107CisgICAgICAgICAg
ICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJCUkFDSykgeworICAgICAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2Vu
LlJFU1QpOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9u
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRv
a2VuLlJCUkFDSykgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cGVjdChUb2tl
bi5SQlJBQ0spOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguQXJyYXlUeXBlLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlRmllbGROYW1l
KCkgeworICAgICAgICAgICAgdmFyIHYgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9
PT0gVG9rZW4uTkFNRSB8fCB0b2tlbiA9PT0gVG9rZW4uU1RSSU5HKSB7CisgICAgICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5VTUJFUikgeworICAgICAgICAgICAgICAg
IGNvbnN1bWUoVG9rZW4uTlVNQkVSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHYp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRv
a2VuJyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWVsZFR5cGUgOj0KKyAgICAgICAgLy8g
ICAgIEZpZWxkTmFtZQorICAgICAgICAvLyAgIHwgRmllbGROYW1lICc6JyBUeXBlRXhwcmVzc2lv
bgorICAgICAgICAvLworICAgICAgICAvLyBGaWVsZE5hbWUgOj0KKyAgICAgICAgLy8gICAgIE5h
bWVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCBTdHJpbmdMaXRlcmFsCisgICAgICAgIC8vICAg
fCBOdW1iZXJMaXRlcmFsCisgICAgICAgIC8vICAgfCBSZXNlcnZlZElkZW50aWZpZXIKKyAgICAg
ICAgZnVuY3Rpb24gcGFyc2VGaWVsZFR5cGUoKSB7CisgICAgICAgICAgICB2YXIga2V5OworCisg
ICAgICAgICAgICBrZXkgPSBwYXJzZUZpZWxkTmFtZSgpOworICAgICAgICAgICAgaWYgKHRva2Vu
ID09PSBUb2tlbi5DT0xPTikgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04p
OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5GaWVsZFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGtleToga2V5LAorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogcGFyc2VUeXBlRXhwcmVzc2lvbigpCisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogbnVsbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFJlY29yZFR5cGUgOj0gJ3snIEZpZWxkVHlwZUxpc3QgJ30nCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEZpZWxkVHlwZUxpc3QgOj0KKyAgICAgICAgLy8gICAgIDw8ZW1wdHk+PgorICAg
ICAgICAvLyAgIHwgRmllbGRUeXBlCisgICAgICAgIC8vICAgfCBGaWVsZFR5cGUgJywnIEZpZWxk
VHlwZUxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VSZWNvcmRUeXBlKCkgeworICAgICAgICAg
ICAgdmFyIGZpZWxkczsKKworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0UsICdSZWNv
cmRUeXBlIHNob3VsZCBzdGFydCB3aXRoIHsnKTsKKyAgICAgICAgICAgIGZpZWxkcyA9IFtdOwor
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkgeworICAgICAgICAgICAgICAg
IGNvbnN1bWUoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkgeworICAgICAgICAgICAgICAgICAg
ICBmaWVsZHMucHVzaChwYXJzZUZpZWxkVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dChUb2tlbi5DT01NQSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNFKTsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlY29yZFR5cGUs
CisgICAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZHMKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZU5hbWVFeHByZXNzaW9uKCkgeworICAgICAgICAg
ICAgdmFyIG5hbWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGV4cGVjdChUb2tlbi5OQU1FKTsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUeXBlRXhwcmVzc2lvbkxpc3QgOj0KKyAgICAgICAgLy8gICAg
IFRvcExldmVsVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8gICB8IFRvcExldmVsVHlwZUV4cHJl
c3Npb24gJywnIFR5cGVFeHByZXNzaW9uTGlzdAorICAgICAgICBmdW5jdGlvbiBwYXJzZVR5cGVF
eHByZXNzaW9uTGlzdCgpIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOworCisgICAg
ICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpOworICAgICAgICAgICAgd2hpbGUgKHRv
a2VuID09PSBUb2tlbi5DT01NQSkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09N
TUEpOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUeXBlTmFtZSA6PQorICAgICAgICAvLyAgICAgTmFtZUV4cHJlc3Npb24KKyAgICAgICAg
Ly8gICB8IE5hbWVFeHByZXNzaW9uIFR5cGVBcHBsaWNhdGlvbgorICAgICAgICAvLworICAgICAg
ICAvLyBUeXBlQXBwbGljYXRpb24gOj0KKyAgICAgICAgLy8gICAgICcuPCcgVHlwZUV4cHJlc3Np
b25MaXN0ICc+JworICAgICAgICAvLyAgIHwgJzwnIFR5cGVFeHByZXNzaW9uTGlzdCAnPicgICAv
LyB0aGlzIGlzIGV4dGVuc2lvbiBvZiBkb2N0cmluZQorICAgICAgICBmdW5jdGlvbiBwYXJzZVR5
cGVOYW1lKCkgeworICAgICAgICAgICAgdmFyIGV4cHIsIGFwcGxpY2F0aW9uczsKKworICAgICAg
ICAgICAgZXhwciA9IHBhcnNlTmFtZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0b2tl
biA9PT0gVG9rZW4uRE9UX0xUIHx8IHRva2VuID09PSBUb2tlbi5MVCkgeworICAgICAgICAgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgPSBwYXJzZVR5cGVFeHBy
ZXNzaW9uTGlzdCgpOworICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5HVCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVB
cHBsaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAg
ICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH0K
KworICAgICAgICAvLyBSZXN1bHRUeXBlIDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAg
ICAgICAgLy8gICB8ICc6JyB2b2lkCisgICAgICAgIC8vICAgfCAnOicgVHlwZUV4cHJlc3Npb24K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gQk5GIGlzIGFib3ZlCisgICAgICAgIC8vIGJ1dCwgd2Ug
cmVtb3ZlIDw8ZW1wdHk+PiBwYXR0ZXJuLCBzbyB0b2tlbiBpcyBhbHdheXMgVHlwZVRva2VuOjpD
T0xPTgorICAgICAgICBmdW5jdGlvbiBwYXJzZVJlc3VsdFR5cGUoKSB7CisgICAgICAgICAgICBj
b25zdW1lKFRva2VuLkNPTE9OLCAnUmVzdWx0VHlwZSBzaG91bGQgc3RhcnQgd2l0aCA6Jyk7Cisg
ICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUgJiYgdmFsdWUgPT09ICd2b2lkJykg
eworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlZvaWRMaXRlcmFsCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZVR5cGVFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXJhbWV0ZXJzVHlw
ZSA6PQorICAgICAgICAvLyAgICAgUmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8gICB8IE5v
blJlc3RQYXJhbWV0ZXJzVHlwZQorICAgICAgICAvLyAgIHwgTm9uUmVzdFBhcmFtZXRlcnNUeXBl
ICcsJyBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAvLworICAgICAgICAvLyBSZXN0UGFyYW1l
dGVyVHlwZSA6PQorICAgICAgICAvLyAgICAgJy4uLicKKyAgICAgICAgLy8gICAgICcuLi4nIElk
ZW50aWZpZXIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm9uUmVzdFBhcmFtZXRlcnNUeXBlIDo9
CisgICAgICAgIC8vICAgICBQYXJhbWV0ZXJUeXBlICcsJyBOb25SZXN0UGFyYW1ldGVyc1R5cGUK
KyAgICAgICAgLy8gICB8IFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8gICB8IE9wdGlvbmFsUGFy
YW1ldGVyc1R5cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJzVHlw
ZSA6PQorICAgICAgICAvLyAgICAgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAg
fCBPcHRpb25hbFBhcmFtZXRlclR5cGUsIE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJUeXBlIDo9IFBhcmFtZXRlclR5cGU9Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFBhcmFtZXRlclR5cGUgOj0gVHlwZUV4cHJlc3Npb24gfCBJ
ZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLworICAgICAgICAvLyBJZGVu
dGlmaWVyIGlzICJuZXciIG9yICJ0aGlzIgorICAgICAgICBmdW5jdGlvbiBwYXJzZVBhcmFtZXRl
cnNUeXBlKCkgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdLCBub3JtYWwgPSB0cnVlLCBl
eHByLCByZXN0ID0gZmFsc2U7CisKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4u
UlBBUkVOKSB7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3QgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZVR5cGVF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk5h
bWVFeHByZXNzaW9uICYmIHRva2VuID09PSBUb2tlbi5DT0xPTikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBJZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAg
ICBjb25zdW1lKFRva2VuLkNPTE9OKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5QYXJhbWV0ZXJUeXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTogZXhwci5uYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpCisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9r
ZW4uRVFVQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7Cisg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguT3B0aW9uYWxUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bjogZXhwcgorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBub3Jt
YWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5l
eHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChyZXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByCisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGV4cHIp
OworICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZ1bmN0aW9uVHlwZSA6PSAnZnVuY3Rpb24nIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZQor
ICAgICAgICAvLworICAgICAgICAvLyBGdW5jdGlvblNpZ25hdHVyZVR5cGUgOj0KKyAgICAgICAg
Ly8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAnKScgUmVzdWx0VHlwZQorICAgICAgICAvLyAgIHwg
VHlwZVBhcmFtZXRlcnMgJygnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlCisgICAgICAg
IC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBUeXBlTmFtZSAnKScgUmVzdWx0
VHlwZQorICAgICAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5h
bWUgJywnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlRnVuY3Rpb25UeXBlKCkgeworICAgICAgICAgICAgdmFyIGlzTmV3LCB0aGlzQmluZGluZywg
cGFyYW1zLCByZXN1bHQsIGZuVHlwZTsKKyAgICAgICAgICAgIGFzc2VydCh0b2tlbiA9PT0gVG9r
ZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJywgJ0Z1bmN0aW9uVHlwZSBzaG91bGQgc3Rh
cnQgd2l0aCBcJ2Z1bmN0aW9uXCcnKTsKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7
CisKKyAgICAgICAgICAgIC8vIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGlzIG5vdCBpbXBsZW1l
bnRpbmcgVHlwZVBhcmFtZXRlcnMuCisgICAgICAgICAgICAvLyBTbyB3ZSBkbyBub3QuIGlmIHdl
IGRvbid0IGdldCAnKCcsIHdlIHNlZSBpdCBhcyBlcnJvci4KKyAgICAgICAgICAgIGV4cGVjdChU
b2tlbi5MUEFSRU4pOworCisgICAgICAgICAgICBpc05ldyA9IGZhbHNlOworICAgICAgICAgICAg
cGFyYW1zID0gW107CisgICAgICAgICAgICB0aGlzQmluZGluZyA9IG51bGw7CisgICAgICAgICAg
ICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAgICAgICAgICAgICAgIC8vIFBhcmFt
ZXRlcnNUeXBlIG9yICd0aGlzJworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
TkFNRSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndGhpcycgfHwgdmFs
dWUgPT09ICduZXcnKSkgeworICAgICAgICAgICAgICAgICAgICAvLyAndGhpcycgb3IgJ25ldycK
KyAgICAgICAgICAgICAgICAgICAgLy8gJ25ldycgaXMgQ2xvc3VyZSBDb21waWxlciBleHRlbnNp
b24KKyAgICAgICAgICAgICAgICAgICAgaXNOZXcgPSB2YWx1ZSA9PT0gJ25ldyc7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7CisgICAgICAgICAgICAgICAgICAgIGV4
cGVjdChUb2tlbi5DT0xPTik7CisgICAgICAgICAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gcGFy
c2VUeXBlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNP
TU1BKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cGVjdChUb2tlbi5SUEFSRU4pOwor
CisgICAgICAgICAgICByZXN1bHQgPSBudWxsOworICAgICAgICAgICAgaWYgKHRva2VuID09PSBU
b2tlbi5DT0xPTikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmVzdWx0VHlwZSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmblR5cGUgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBh
cmFtcywKKyAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGlmICh0aGlzQmluZGluZykgeworICAgICAgICAgICAgICAgIC8vIGF2b2lkIGFk
ZGluZyBudWxsICduZXcnIGFuZCAndGhpcycgcHJvcGVydGllcworICAgICAgICAgICAgICAgIGZu
VHlwZVsndGhpcyddID0gdGhpc0JpbmRpbmc7CisgICAgICAgICAgICAgICAgaWYgKGlzTmV3KSB7
CisgICAgICAgICAgICAgICAgICAgIGZuVHlwZVsnbmV3J10gPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmblR5cGU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBCYXNpY1R5cGVFeHByZXNzaW9uIDo9CisgICAgICAgIC8vICAgICAn
KicKKyAgICAgICAgLy8gICB8ICdudWxsJworICAgICAgICAvLyAgIHwgJ3VuZGVmaW5lZCcKKyAg
ICAgICAgLy8gICB8IFR5cGVOYW1lCisgICAgICAgIC8vICAgfCBGdW5jdGlvblR5cGUKKyAgICAg
ICAgLy8gICB8IFVuaW9uVHlwZQorICAgICAgICAvLyAgIHwgUmVjb3JkVHlwZQorICAgICAgICAv
LyAgIHwgQXJyYXlUeXBlCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lv
bigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICAgICAgY2FzZSBUb2tlbi5TVEFSOgorICAgICAgICAgICAgICAgIGNvbnN1
bWUoVG9rZW4uU1RBUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkFsbExpdGVyYWwKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICBjYXNlIFRva2VuLkxQQVJFTjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VV
bmlvblR5cGUoKTsKKworICAgICAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0s6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQXJyYXlUeXBlKCk7CisKKyAgICAgICAgICAgIGNhc2UgVG9rZW4u
TEJSQUNFOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZFR5cGUoKTsKKworICAg
ICAgICAgICAgY2FzZSBUb2tlbi5OQU1FOgorICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0g
J251bGwnKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguTnVsbExpdGVyYWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5kZWZpbmVk
TGl0ZXJhbAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGNvbnRleHQgPSBDb250ZXh0LnNhdmUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAodmFsdWUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uVHlwZSgpOworICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVOYW1lKCk7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVHlwZUV4cHJlc3Npb24g
Oj0KKyAgICAgICAgLy8gICAgIEJhc2ljVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8gICB8ICc/
JyBCYXNpY1R5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCAnIScgQmFzaWNUeXBlRXhwcmVz
c2lvbgorICAgICAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnPycKKyAgICAgICAgLy8g
ICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJyEnCisgICAgICAgIC8vICAgfCAnPycKKyAgICAgICAg
Ly8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJ1tdJworICAgICAgICBmdW5jdGlvbiBwYXJzZVR5
cGVFeHByZXNzaW9uKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgICAgIGlm
ICh0b2tlbiA9PT0gVG9rZW4uUVVFU1RJT04pIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRv
a2VuLlFVRVNUSU9OKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1B
IHx8IHRva2VuID09PSBUb2tlbi5FUVVBTCB8fCB0b2tlbiA9PT0gVG9rZW4uUkJSQUNFIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUlBBUkVOIHx8IHRva2VuID09
PSBUb2tlbi5QSVBFIHx8IHRva2VuID09PSBUb2tlbi5FT0YgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID09PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZUxpdGVy
YWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VCYXNpY1R5cGVFeHBy
ZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
QkFORykgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxh
YmxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VCYXNpY1R5cGVF
eHByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZUJhc2lj
VHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykg
eworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAgICAgICAgICAg
ICAgICAgcHJlZml4OiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUVVFU1RJT04pIHsKKyAgICAgICAgICAg
ICAgICBjb25zdW1lKFRva2VuLlFVRVNUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLAorICAgICAgICAg
ICAgICAgICAgICBleHByZXNzaW9uOiBleHByLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6
IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHRva2VuID09PSBUb2tlbi5MQlJBQ0spIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRv
a2VuLkxCUkFDSyk7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SQlJBQ0ssICdleHBl
Y3RlZCBhbiBhcnJheS1zdHlsZSB0eXBlIGRlY2xhcmF0aW9uICgnICsgdmFsdWUgKyAnW10pJyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LlR5cGVBcHBsaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogewor
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5JworICAgICAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtleHByXQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbiA6PQorICAgICAgICAvLyAg
ICAgIFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgIHwgVHlwZVVuaW9uTGlzdAorICAgICAg
ICAvLworICAgICAgICAvLyBUaGlzIHJ1bGUgaXMgR29vZ2xlIENsb3N1cmUgQ29tcGlsZXIgZXh0
ZW5zaW9uLCBub3QgRVM0CisgICAgICAgIC8vIGxpa2UsCisgICAgICAgIC8vICAgeyBudW1iZXIg
fCBzdHJpbmcgfQorICAgICAgICAvLyBJZiBzdHJpY3QgdG8gRVM0LCB3ZSBzaG91bGQgd3JpdGUg
aXQgYXMKKyAgICAgICAgLy8gICB7IChudW1iZXJ8c3RyaW5nKSB9CisgICAgICAgIGZ1bmN0aW9u
IHBhcnNlVG9wKCkgeworICAgICAgICAgICAgdmFyIGV4cHIsIGVsZW1lbnRzOworCisgICAgICAg
ICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgaWYgKHRva2Vu
ICE9PSBUb2tlbi5QSVBFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGVsZW1lbnRzID0gWyBleHByIF07CisgICAgICAgICAgICBj
b25zdW1lKFRva2VuLlBJUEUpOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24oKSk7CisgICAgICAgICAg
ICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5QSVBFKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlBJ
UEUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsCisgICAgICAgICAgICAgICAgZWxlbWVudHM6IGVs
ZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFy
c2VUb3BQYXJhbVR5cGUoKSB7CisgICAgICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICAgICAg
aWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tl
bi5SRVNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBh
cnNlVG9wKCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBleHByID0gcGFyc2VUb3AoKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFV
QUwpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxU
eXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZVR5cGUoc3JjLCBvcHQpIHsKKyAgICAgICAgICAg
IHZhciBleHByOworCisgICAgICAgICAgICBzb3VyY2UgPSBzcmM7CisgICAgICAgICAgICBsZW5n
dGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAg
cHJldmlvdXMgPSAwOworCisgICAgICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3BsaXQoJycpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VUb3Ao
KTsKKworICAgICAgICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAg
ICAgICAgICAgICAgICAgICAgaW5kZXg6IHByZXZpb3VzCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdub3QgcmVhY2ggdG8gRU9GJyk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gcGFyc2VQYXJhbVR5cGUoc3JjLCBvcHQpIHsKKyAgICAgICAgICAgIHZhciBleHByOwor
CisgICAgICAgICAgICBzb3VyY2UgPSBzcmM7CisgICAgICAgICAgICBsZW5ndGggPSBzb3VyY2Uu
bGVuZ3RoOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgcHJldmlvdXMgPSAw
OworCisgICAgICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3BsaXQoJycpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VUb3BQYXJhbVR5cGUoKTsK
KworICAgICAgICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXg6IHByZXZpb3VzCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHsKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKCdub3QgcmVhY2ggdG8gRU9GJyk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc3RyaW5naWZ5SW1wbChub2RlLCBjb21wYWN0LCB0b3BMZXZlbCkgeworICAgICAgICAgICAg
dmFyIHJlc3VsdCwgaSwgaXo7CisKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7Cisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5OdWxsYWJsZUxpdGVyYWw6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gJz8nOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFN5bnRheC5BbGxMaXRlcmFsOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcqJzsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguTnVsbExpdGVyYWw6
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ251bGwnOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5VbmRlZmluZWRMaXRlcmFsOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9ICd1bmRlZmluZWQnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5Wb2lkTGl0ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSAndm9pZCc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
U3ludGF4LlVuaW9uVHlwZToKKyAgICAgICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcoJzsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnJzsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwg
aXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChu
b2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpICsg
MSkgIT09IGl6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3wnOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCF0b3BMZXZlbCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBTeW50YXguQXJyYXlUeXBlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdbJzsKKyAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2Rl
LmVsZW1lbnRzW2ldLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkg
IT09IGl6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcs
JyA6ICcsICc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICddJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgY2FzZSBTeW50YXguUmVjb3JkVHlwZToKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSAneyc7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmZpZWxkcy5sZW5n
dGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdp
ZnlJbXBsKG5vZGUuZmllbGRzW2ldLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KChpICsgMSkgIT09IGl6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29t
cGFjdCA/ICcsJyA6ICcsICc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd9JzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguRmllbGRUeXBlOgorICAgICAgICAgICAgICAg
IGlmIChub2RlLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUua2V5
ICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS52YWx1ZSwgY29t
cGFjdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbm9kZS5rZXk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5GdW5jdGlvblR5cGU6CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gY29tcGFjdCA/ICdmdW5jdGlvbignIDogJ2Z1bmN0aW9uICgnOworCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGVbJ3RoaXMnXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZVsnbmV3J10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFj
dCA/ICduZXc6JyA6ICduZXc6ICcpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ3RoaXM6JyA6ICd0aGlz
OiAnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBzdHJpbmdpZnlJbXBsKG5vZGVbJ3RoaXMnXSwgY29tcGFjdCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwg
aXogPSBub2RlLnBhcmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUucGFyYW1zW2ldLCBjb21wYWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJykn
OworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUucmVzdWx0KSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2Rl
LnJlc3VsdCwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5QYXJhbWV0ZXJUeXBlOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG5vZGUubmFtZSArIChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJp
bmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LlJlc3RUeXBlOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICcuLi4nOworICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNz
aW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk5vbk51bGxhYmxlVHlwZToKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5wcmVmaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyEn
ICsgc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwo
bm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICchJzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9wdGlvbmFsVHlw
ZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lv
biwgY29tcGFjdCkgKyAnPSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgU3ludGF4Lk51bGxhYmxlVHlwZToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5wcmVm
aXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8nICsgc3RyaW5naWZ5SW1wbChu
b2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBj
b21wYWN0KSArICc/JzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk5hbWVFeHByZXNzaW9uOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG5vZGUubmFtZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBTeW50YXguVHlwZUFwcGxpY2F0aW9uOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICcuPCc7CisgICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmFwcGxpY2F0aW9ucy5sZW5ndGg7IGkg
PCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBs
KG5vZGUuYXBwbGljYXRpb25zW2ldLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KChpICsgMSkgIT09IGl6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29t
cGFjdCA/ICcsJyA6ICcsICc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICc+JzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdV
bmtub3duIHR5cGUgJyArIG5vZGUudHlwZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdHJpbmdpZnko
bm9kZSwgb3B0aW9ucykgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBzdHJpbmdpZnlJbXBsKG5vZGUsIG9wdGlvbnMuY29tcGFjdCwgb3B0aW9ucy50b3BMZXZl
bCk7CisgICAgICAgIH0KKworICAgICAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTsK
KyAgICAgICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHBhcnNlUGFyYW1UeXBlOworICAgICAg
ICBleHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTsKKyAgICAgICAgZXhwb3J0cy5TeW50YXgg
PSBTeW50YXg7CisgICAgfSh0eXBlZCA9IHt9KSk7CisKKyAgICAvLyBKU0RvYyBUYWcgUGFyc2Vy
CisKKyAgICAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAgICAgdmFyIFJ1bGVzLAorICAgICAg
ICAgICAgaW5kZXgsCisgICAgICAgICAgICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGVuZ3Ro
LAorICAgICAgICAgICAgc291cmNlLAorICAgICAgICAgICAgcmVjb3ZlcmFibGUsCisgICAgICAg
ICAgICBzbG9wcHksCisgICAgICAgICAgICBzdHJpY3Q7CisKKyAgICAgICAgZnVuY3Rpb24gYWR2
YW5jZSgpIHsKKyAgICAgICAgICAgIHZhciBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAg
ICBpbmRleCArPSAxOworICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Cisg
ICAgICAgICAgICAgICAgbGluZU51bWJlciArPSAxOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGNoOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2NhblRpdGxlKCkg
eworICAgICAgICAgICAgdmFyIHRpdGxlID0gJyc7CisgICAgICAgICAgICAvLyB3YXN0ZSAnQCcK
KyAgICAgICAgICAgIGFkdmFuY2UoKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoICYmIGlzQVNDSUlBbHBoYW51bWVyaWMoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAg
ICAgICB0aXRsZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiB0aXRsZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNlZWtDb250ZW50KCkg
eworICAgICAgICAgICAgdmFyIGNoLCB3YWl0aW5nLCBsYXN0ID0gaW5kZXg7CisKKyAgICAgICAg
ICAgIHdhaXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHdoaWxlIChsYXN0IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbbGFzdF07CisgICAgICAgICAgICAgICAgaWYg
KGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIg
Kz0gMTsKKyAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICh3YWl0aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J0AnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0ICs9IDE7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IHR5cGUgZXhwcmVzc2lvbiBtYXkgaGF2ZSBuZXN0IGJyYWNlLCBzdWNoIGFzLAorICAgICAgICAv
LyB7IHsgb2s6IHN0cmluZyB9IH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gdGhlcmVmb3JlLCBz
Y2FubmluZyB0eXBlIGV4cHJlc3Npb24gd2l0aCBiYWxhbmNpbmcgYnJhY2VzLgorICAgICAgICBm
dW5jdGlvbiBwYXJzZVR5cGUodGl0bGUsIGxhc3QpIHsKKyAgICAgICAgICAgIHZhciBjaCwgYnJh
Y2UsIHR5cGUsIGRpcmVjdCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBzZWFyY2ggJ3snCisg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgY2ggPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyB0aGlzIGlzIGRpcmVjdCBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICAgIGRp
cmVjdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAvLyB0eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZAorICAgICAgICAgICAgICAgIGJy
YWNlID0gMTsKKyAgICAgICAgICAgICAgICB0eXBlID0gJyc7CisgICAgICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGFzdCkgeworICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmFjZSAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChicmFjZSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2ggPT09ICd7JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChicmFjZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBicmFjZXMgaXMgbm90IGJhbGFuY2VkCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCdCcmFjZXMgYXJlIG5vdCBiYWxhbmNlZCcpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1BhcmFt
VGl0bGUodGl0bGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFy
c2VQYXJhbVR5cGUodHlwZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHR5cGVkLnBhcnNlVHlwZSh0eXBlKTsKKyAgICAgICAgICAgICAgICB9IGNh
dGNoIChlMSkgeworICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBmYWlsZWQKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKGxhc3QpIHsKKyAgICAg
ICAgICAgIHZhciBpZGVudGlmaWVyOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJTdGFy
dChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWRlbnRpZmllciA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IHdoaWxlIChpbmRleCA8IGxhc3QgJiYgaXNJZGVudGlmaWVyUGFydChzb3VyY2VbaW5kZXhdKSkg
eworICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBza2lwV2hpdGVTcGFjZShsYXN0KSB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsYXN0ICYmIChpc1doaXRlU3BhY2Uoc291cmNlW2luZGV4XSkgfHwgaXNMaW5lVGVybWluYXRv
cihzb3VyY2VbaW5kZXhdKSkpIHsKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZU5hbWUobGFzdCwgYWxs
b3dCcmFja2V0cywgYWxsb3dOZXN0ZWRQYXJhbXMpIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0g
JycsIHVzZUJyYWNrZXRzOworCisgICAgICAgICAgICBza2lwV2hpdGVTcGFjZShsYXN0KTsKKwor
ICAgICAgICAgICAgaWYgKGluZGV4ID49IGxhc3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFsbG93QnJhY2tldHMgJiYg
c291cmNlW2luZGV4XSA9PT0gJ1snKSB7CisgICAgICAgICAgICAgICAgdXNlQnJhY2tldHMgPSB0
cnVlOworICAgICAgICAgICAgICAgIG5hbWUgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyU3RhcnQoc291cmNlW2luZGV4XSkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTsKKworICAgICAgICAgICAgaWYgKGFsbG93TmVz
dGVkUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZVtpbmRleF0gPT09ICcu
JykgeworICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICcuJzsKKyAgICAgICAgICAgICAgICAg
ICAgaW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmll
cihsYXN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICh1c2VCcmFja2V0cykgeworICAgICAgICAgICAgICAgIC8vIGRvIHdlIGhhdmUgYSBkZWZh
dWx0IHZhbHVlIGZvciB0aGlzPworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09
PSAnPScpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBjb25zdW1lIHRoZSAnPScnIHN5bWJv
bAorICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gc2NhbiBpbiB0aGUgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsYXN0ICYmIHNvdXJjZVtpbmRleF0gIT09ICddJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCAg
fHwgc291cmNlW2luZGV4XSAhPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIG5l
dmVyIGZvdW5kIGEgY2xvc2luZyAnXScKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gY29sbGVjdCB0aGUgbGFz
dCAnXScKKyAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBza2lwVG9UYWcoKSB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgc291
cmNlW2luZGV4XSAhPT0gJ0AnKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChzb3Vy
Y2VbaW5kZXhdID09PSAnQCcpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpIHsKKyAgICAgICAg
ICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOworICAgICAgICAgICAgdGhpcy5fdGl0bGUgPSB0
aXRsZTsKKyAgICAgICAgICAgIHRoaXMuX3RhZyA9IHsKKyAgICAgICAgICAgICAgICB0aXRsZTog
dGl0bGUsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG51bGwKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5saW5lTnVtYmVycykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX3RhZy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuX2xhc3QgPSAwOworICAgICAgICAgICAgLy8gc3BhY2UgdG8gc2F2
ZSBzcGVjaWFsIGluZm9ybWF0aW9uIGZvciB0aXRsZSBwYXJzZXJzLgorICAgICAgICAgICAgdGhp
cy5fZXh0cmEgPSB7IH07CisgICAgICAgIH0KKworICAgICAgICAvLyBhZGRFcnJvcihlcnIsIC4u
LikKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5hZGRFcnJvciA9IGZ1bmN0aW9uIGFkZEVy
cm9yKGVycm9yVGV4dCkgeworICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLAorICAgICAgICAgICAgICAgIG1zZyA9IGVycm9yVGV4
dC5yZXBsYWNlKAorICAgICAgICAgICAgICAgICAgICAvJShcZCkvZywKKyAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGlu
IHJhbmdlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICBp
ZiAoIXRoaXMuX3RhZy5lcnJvcnMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90YWcuZXJyb3Jz
ID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcihtc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fdGFnLmVycm9ycy5wdXNoKG1zZyk7CisgICAgICAgICAgICByZXR1cm4gcmVjb3ZlcmFibGU7
CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZVR5cGUgPSBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyB0eXBlIHJlcXVpcmVkIHRpdGxlcworICAgICAg
ICAgICAgaWYgKGlzVHlwZVBhcmFtZXRlclJlcXVpcmVkKHRoaXMuX3RpdGxlKSkgeworICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gcGFy
c2VUeXBlKHRoaXMuX3RpdGxlLCB0aGlzLl9sYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLl90YWcudHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1BhcmFt
VGl0bGUodGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIHR5cGUnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLnR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
YWRkRXJyb3IoZXJyb3IubWVzc2FnZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNBbGxvd2VkVHlwZSh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBvcHRpb25hbCB0eXBlcworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gcGFyc2VUeXBlKHRoaXMuX3RpdGxlLCB0aGlz
Ll9sYXN0KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vRm9yIG9wdGlvbmFsIHR5cGVzLCBsZXRzIGRyb3AgdGhlIHRocm93biBlcnJvciB3aGVu
IHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFn
UGFyc2VyLnByb3RvdHlwZS5fcGFyc2VOYW1lUGF0aCA9IGZ1bmN0aW9uIChvcHRpb25hbCkgewor
ICAgICAgICAgICAgdmFyIG5hbWU7CisgICAgICAgICAgICBuYW1lID0gcGFyc2VOYW1lKHRoaXMu
X2xhc3QsIHNsb3BweSAmJiBpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpLCB0cnVlKTsKKyAgICAg
ICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgICAgIGlmICghb3B0aW9uYWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQg
dGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBuYW1lOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVQYXRo
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlTmFtZVBhdGgo
ZmFsc2UpOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VO
YW1lUGF0aE9wdGlvbmFsID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3BhcnNlTmFtZVBhdGgodHJ1ZSk7CisgICAgICAgIH07CisKKworICAgICAgICBUYWdQYXJzZXIu
cHJvdG90eXBlLnBhcnNlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBhc3Np
Z24sIG5hbWU7CisKKyAgICAgICAgICAgIC8vIHBhcmFtLCBwcm9wZXJ0eSByZXF1aXJlcyBuYW1l
CisgICAgICAgICAgICBpZiAoaXNBbGxvd2VkTmFtZSh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl90YWcubmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0LCBzbG9wcHkgJiYg
aXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgaXNBbGxvd2VkTmVzdGVkKHRoaXMuX3RpdGxlKSk7
CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90YWcubmFtZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzTmFtZVBhcmFtZXRlclJlcXVpcmVkKHRoaXMuX3RpdGxlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoZSBuYW1lIGhhcyBhbHJlYWR5
IGJlZW4gcGFyc2VkIGJ1dCBpbnRlcnByZXRlZCBhcyBhIHR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaXQncyBhbHNvIHBvc3NpYmxlIHRoaXMgaXMgYSBzbG9wcHkgZGVjbGFyYXRpb24sIGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAvLyBmaXhlZCBhdCB0
aGUgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUp
ICYmIHRoaXMuX3RhZy50eXBlLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2V4dHJhLm5hbWUgPSB0aGlzLl90YWcudHlwZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3RhZy5uYW1lID0gdGhpcy5fdGFnLnR5cGUubmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBp
bnZhbGlkIHRhZyBuYW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhp
cy5fdGFnLm5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0g
J1snICYmIG5hbWUuY2hhckF0KG5hbWUubGVuZ3RoIC0gMSkgPT09ICddJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGVyZSBpcyBv
bmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6IEBwYXJhbSB7c3RyaW5nfSBb
c29tZWJvZHk9Sm9obiBEb2VdIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NpZ24gPSBuYW1lLnN1YnN0cmluZygxLCBuYW1lLmxlbmd0aCAtIDEpLnNwbGl0KCc9Jyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWduWzFdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdGFnWydkZWZhdWx0J10gPSBhc3NpZ25bMV07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9
IGFzc2lnblswXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBhbiBv
cHRpb25hbCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFnLnR5cGUu
dHlwZSAhPT0gJ09wdGlvbmFsVHlwZScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl90YWcudHlwZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
J09wdGlvbmFsVHlwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Np
b246IHRoaXMuX3RhZy50eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZURlc2NyaXB0aW9uID0gZnVu
Y3Rpb24gcGFyc2VEZXNjcmlwdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCgvXi1ccysvKS50ZXN0
KGRlc2NyaXB0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uLnN1YnN0cmluZygyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dGhpcy5fdGFnLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJv
dG90eXBlLnBhcnNlS2luZCA9IGZ1bmN0aW9uIHBhcnNlS2luZCgpIHsKKyAgICAgICAgICAgIHZh
ciBraW5kLCBraW5kczsKKyAgICAgICAgICAgIGtpbmRzID0geworICAgICAgICAgICAgICAgICdj
bGFzcyc6IHRydWUsCisgICAgICAgICAgICAgICAgJ2NvbnN0YW50JzogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAnZXZlbnQnOiB0cnVlLAorICAgICAgICAgICAgICAgICdleHRlcm5hbCc6IHRydWUs
CisgICAgICAgICAgICAgICAgJ2ZpbGUnOiB0cnVlLAorICAgICAgICAgICAgICAgICdmdW5jdGlv
bic6IHRydWUsCisgICAgICAgICAgICAgICAgJ21lbWJlcic6IHRydWUsCisgICAgICAgICAgICAg
ICAgJ21peGluJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnbW9kdWxlJzogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAnbmFtZXNwYWNlJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAndHlwZWRlZic6
IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBraW5kID0gdHJpbShzbGljZVNvdXJj
ZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICB0aGlzLl90YWcua2lu
ZCA9IGtpbmQ7CisgICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5KGtpbmRzLCBraW5kKSkg
eworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBraW5kIG5hbWUg
XCclMFwnJywga2luZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VBY2Nlc3MgPSBm
dW5jdGlvbiBwYXJzZUFjY2VzcygpIHsKKyAgICAgICAgICAgIHZhciBhY2Nlc3M7CisgICAgICAg
ICAgICBhY2Nlc3MgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3Qp
KTsKKyAgICAgICAgICAgIHRoaXMuX3RhZy5hY2Nlc3MgPSBhY2Nlc3M7CisgICAgICAgICAgICBp
ZiAoYWNjZXNzICE9PSAncHJpdmF0ZScgJiYgYWNjZXNzICE9PSAncHJvdGVjdGVkJyAmJiBhY2Nl
c3MgIT09ICdwdWJsaWMnKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJ
bnZhbGlkIGFjY2VzcyBuYW1lIFwnJTBcJycsIGFjY2VzcykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90
b3R5cGUucGFyc2VWYXJpYXRpb24gPSBmdW5jdGlvbiBwYXJzZVZhcmlhdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciB2YXJpYXRpb24sIHRleHQ7CisgICAgICAgICAgICB0ZXh0ID0gdHJpbShzbGlj
ZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICB2YXJpYXRp
b24gPSBwYXJzZUZsb2F0KHRleHQsIDEwKTsKKyAgICAgICAgICAgIHRoaXMuX3RhZy52YXJpYXRp
b24gPSB2YXJpYXRpb247CisgICAgICAgICAgICBpZiAoaXNOYU4odmFyaWF0aW9uKSkgeworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCB2YXJpYXRpb24gXCclMFwn
JywgdGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuZW5zdXJlRW5kID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIHNob3VsZEJlRW1wdHkgPSB0cmltKHNsaWNlU291cmNlKHNv
dXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRCZUVtcHR5
KSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdVbmtub3duIGNvbnRlbnQg
XCclMFwnJywgc2hvdWxkQmVFbXB0eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuZXBpbG9n
dWUgPSBmdW5jdGlvbiBlcGlsb2d1ZSgpIHsKKyAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjsK
KworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLl90YWcuZGVzY3JpcHRpb247CisgICAg
ICAgICAgICAvLyB1bi1maXggcG90ZW50aWFsbHkgc2xvcHB5IGRlY2xhcmF0aW9uCisgICAgICAg
ICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiAhdGhpcy5fdGFnLnR5cGUgJiYg
ZGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24uY2hhckF0KDApID09PSAnWycpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl90YWcudHlwZSA9IHRoaXMuX2V4dHJhLm5hbWU7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLm5hbWUgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICBpZiAoIXNs
b3BweSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcg
b3IgaW52YWxpZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAg
IFJ1bGVzID0geworICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWFjY2Vz
cy5odG1sCisgICAgICAgICAgICAnYWNjZXNzJzogWydwYXJzZUFjY2VzcyddLAorICAgICAgICAg
ICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWFsaWFzLmh0bWwKKyAgICAgICAgICAgICdh
bGlhcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hdWdtZW50cy5odG1sCisgICAgICAgICAgICAnYXVnbWVu
dHMnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10s
CisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtY29uc3RydWN0b3IuaHRt
bAorICAgICAgICAgICAgJ2NvbnN0cnVjdG9yJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0
aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDov
L3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICdjbGFzcyc6
IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAg
ICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1leHRlbmRzLmh0
bWwKKyAgICAgICAgICAgICdleHRlbmRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9w
dGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9y
Zy90YWdzLWRlcHJlY2F0ZWQuaHRtbAorICAgICAgICAgICAgJ2RlcHJlY2F0ZWQnOiBbJ3BhcnNl
RGVzY3JpcHRpb24nXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1n
bG9iYWwuaHRtbAorICAgICAgICAgICAgJ2dsb2JhbCc6IFsnZW5zdXJlRW5kJ10sCisgICAgICAg
ICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtaW5uZXIuaHRtbAorICAgICAgICAgICAg
J2lubmVyJzogWydlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy1pbnN0YW5jZS5odG1sCisgICAgICAgICAgICAnaW5zdGFuY2UnOiBbJ2Vuc3VyZUVu
ZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWtpbmQuaHRtbAor
ICAgICAgICAgICAgJ2tpbmQnOiBbJ3BhcnNlS2luZCddLAorICAgICAgICAgICAgLy8gaHR0cDov
L3VzZWpzZG9jLm9yZy90YWdzLW1peGVzLmh0bWwKKyAgICAgICAgICAgICdtaXhlcyc6IFsncGFy
c2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2Rv
Yy5vcmcvdGFncy1taXhpbi5odG1sCisgICAgICAgICAgICAnbWl4aW4nOiBbJ3BhcnNlTmFtZVBh
dGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2Rv
Yy5vcmcvdGFncy1tZW1iZXIuaHRtbAorICAgICAgICAgICAgJ21lbWJlcic6IFsncGFyc2VUeXBl
JywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8v
IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbAorICAgICAgICAgICAgJ21ldGhv
ZCc6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAg
Ly8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1vZHVsZS5odG1sCisgICAgICAgICAgICAnbW9k
dWxlJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCdd
LAorICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1ldGhv
ZC5odG1sCisgICAgICAgICAgICAnZnVuYyc6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vu
c3VyZUVuZCddLAorICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90
YWdzLW1ldGhvZC5odG1sCisgICAgICAgICAgICAnZnVuY3Rpb24nOiBbJ3BhcnNlTmFtZVBhdGhP
cHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91
c2Vqc2RvYy5vcmcvdGFncy1tZW1iZXIuaHRtbAorICAgICAgICAgICAgJ3Zhcic6IFsncGFyc2VU
eXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lLmh0bWwKKyAgICAgICAgICAgICduYW1l
JzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDov
L3VzZWpzZG9jLm9yZy90YWdzLW5hbWVzcGFjZS5odG1sCisgICAgICAgICAgICAnbmFtZXNwYWNl
JzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAor
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByaXZhdGUuaHRtbAorICAg
ICAgICAgICAgJ3ByaXZhdGUnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10sCisg
ICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHJvdGVjdGVkLmh0bWwKKyAg
ICAgICAgICAgICdwcm90ZWN0ZWQnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10s
CisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHVibGljLmh0bWwKKyAg
ICAgICAgICAgICdwdWJsaWMnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10sCisg
ICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVhZG9ubHkuaHRtbAorICAg
ICAgICAgICAgJ3JlYWRvbmx5JzogWydlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6
Ly91c2Vqc2RvYy5vcmcvdGFncy1yZXF1aXJlcy5odG1sCisgICAgICAgICAgICAncmVxdWlyZXMn
OiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8v
dXNlanNkb2Mub3JnL3RhZ3Mtc2luY2UuaHRtbAorICAgICAgICAgICAgJ3NpbmNlJzogWydwYXJz
ZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mt
c3RhdGljLmh0bWwKKyAgICAgICAgICAgICdzdGF0aWMnOiBbJ2Vuc3VyZUVuZCddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN1bW1hcnkuaHRtbAorICAgICAgICAg
ICAgJ3N1bW1hcnknOiBbJ3BhcnNlRGVzY3JpcHRpb24nXSwKKyAgICAgICAgICAgIC8vIGh0dHA6
Ly91c2Vqc2RvYy5vcmcvdGFncy10aGlzLmh0bWwKKyAgICAgICAgICAgICd0aGlzJzogWydwYXJz
ZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9j
Lm9yZy90YWdzLXRvZG8uaHRtbAorICAgICAgICAgICAgJ3RvZG8nOiBbJ3BhcnNlRGVzY3JpcHRp
b24nXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12YXJpYXRpb24u
aHRtbAorICAgICAgICAgICAgJ3ZhcmlhdGlvbic6IFsncGFyc2VWYXJpYXRpb24nXSwKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12ZXJzaW9uLmh0bWwKKyAgICAgICAg
ICAgICd2ZXJzaW9uJzogWydwYXJzZURlc2NyaXB0aW9uJ10KKyAgICAgICAgfTsKKworICAgICAg
ICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoKSB7CisgICAgICAg
ICAgICB2YXIgaSwgaXosIHNlcXVlbmNlcywgbWV0aG9kOworCisgICAgICAgICAgICAvLyBlbXB0
eSB0aXRsZQorICAgICAgICAgICAgaWYgKCF0aGlzLl90aXRsZSkgeworICAgICAgICAgICAgICAg
IGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRpdGxlJykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIHRvIGNvbnRlbnQgbGFzdCBpbmRleC4KKyAgICAg
ICAgICAgIHRoaXMuX2xhc3QgPSBzZWVrQ29udGVudCh0aGlzLl90aXRsZSk7CisKKyAgICAgICAg
ICAgIGlmIChoYXNPd25Qcm9wZXJ0eShSdWxlcywgdGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAg
ICAgICAgc2VxdWVuY2VzID0gUnVsZXNbdGhpcy5fdGl0bGVdOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHNlcXVlbmNlcworICAgICAgICAgICAgICAg
IHNlcXVlbmNlcyA9IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZScsICdwYXJzZURlc2NyaXB0aW9u
JywgJ2VwaWxvZ3VlJ107CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gc2VxdWVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICBt
ZXRob2QgPSBzZXF1ZW5jZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzW21ldGhvZF0o
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNlZWsgZ2xvYmFsIGluZGV4IHRvIGVu
ZCBvZiB0aGlzIHRhZy4KKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fbGFzdDsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl90YWc7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gcGFy
c2VUYWcob3B0aW9ucykgeworICAgICAgICAgICAgdmFyIHRpdGxlLCBwYXJzZXI7CisKKyAgICAg
ICAgICAgIC8vIHNraXAgdG8gdGFnCisgICAgICAgICAgICBpZiAoIXNraXBUb1RhZygpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIHNjYW4gdGl0bGUKKyAgICAgICAgICAgIHRpdGxlID0gc2NhblRpdGxlKCk7CisKKyAgICAg
ICAgICAgIC8vIGNvbnN0cnVjdCB0YWcgcGFyc2VyCisgICAgICAgICAgICBwYXJzZXIgPSBuZXcg
VGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFy
c2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIFBhcnNlIEpTRG9jCisg
ICAgICAgIC8vCisKKyAgICAgICAgZnVuY3Rpb24gc2NhbkpTRG9jRGVzY3JpcHRpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAnJywgY2gsIGF0QWxsb3dlZDsKKworICAgICAg
ICAgICAgYXRBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKworICAgICAgICAgICAg
ICAgIGlmIChhdEFsbG93ZWQgJiYgY2ggPT09ICdAJykgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVy
bWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0QWxsb3dlZCAmJiAhaXNXaGl0ZVNwYWNlKGNoKSkg
eworICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBhZHZhbmNlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJpbShkZXNjcmlwdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBwYXJzZShjb21tZW50LCBvcHRpb25zKSB7CisgICAgICAgICAg
ICB2YXIgdGFncyA9IFtdLCB0YWcsIGRlc2NyaXB0aW9uLCBpbnRlcmVzdGluZ1RhZ3MsIGksIGl6
OworCisgICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAg
ICAgICAgb3B0aW9ucyA9IHt9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlw
ZW9mIG9wdGlvbnMudW53cmFwID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy51bndyYXApIHsKKyAg
ICAgICAgICAgICAgICBzb3VyY2UgPSB1bndyYXBDb21tZW50KGNvbW1lbnQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb21tZW50OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBhcnJheSBvZiByZWxldmFudCB0YWdzCisgICAgICAgICAg
ICBpZiAob3B0aW9ucy50YWdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0aW9u
cy50YWdzKSkgeworICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZ1RhZ3MgPSB7IH07Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gb3B0aW9ucy50YWdzLmxlbmd0aDsg
aSA8IGl6OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9u
cy50YWdzW2ldID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVyZXN0aW5nVGFnc1tvcHRpb25zLnRhZ3NbaV1dID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcign
SW52YWxpZCAidGFncyIgcGFyYW1ldGVyOiAnICsgb3B0aW9ucy50YWdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ0ludmFsaWQgInRhZ3MiIHBh
cmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3BsaXQoJycpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICAgICAgaW5kZXggPSAw
OworICAgICAgICAgICAgbGluZU51bWJlciA9IDA7CisgICAgICAgICAgICByZWNvdmVyYWJsZSA9
IG9wdGlvbnMucmVjb3ZlcmFibGU7CisgICAgICAgICAgICBzbG9wcHkgPSBvcHRpb25zLnNsb3Bw
eTsKKyAgICAgICAgICAgIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0OworCisgICAgICAgICAgICBk
ZXNjcmlwdGlvbiA9IHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAgICAgdGFnID0gcGFyc2VUYWcob3B0aW9ucyk7CisgICAg
ICAgICAgICAgICAgaWYgKCF0YWcpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaW50ZXJlc3RpbmdUYWdzIHx8IGlu
dGVyZXN0aW5nVGFncy5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRhZ3MucHVzaCh0YWcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVz
Y3JpcHRpb24sCisgICAgICAgICAgICAgICAgdGFnczogdGFncworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorICAgICAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U7CisgICAgfShqc2RvYyA9IHt9
KSk7CisKKyAgICBleHBvcnRzLnZlcnNpb24gPSBWRVJTSU9OOworICAgIGV4cG9ydHMucGFyc2Ug
PSBqc2RvYy5wYXJzZTsKKyAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHR5cGVkLnBhcnNlVHlwZTsK
KyAgICBleHBvcnRzLnBhcnNlUGFyYW1UeXBlID0gdHlwZWQucGFyc2VQYXJhbVR5cGU7CisgICAg
ZXhwb3J0cy51bndyYXBDb21tZW50ID0gdW53cmFwQ29tbWVudDsKKyAgICBleHBvcnRzLlN5bnRh
eCA9IHNoYWxsb3dDb3B5KHR5cGVkLlN5bnRheCk7CisgICAgZXhwb3J0cy5FcnJvciA9IERvY3Ry
aW5lRXJyb3I7CisgICAgZXhwb3J0cy50eXBlID0geworICAgICAgICBTeW50YXg6IGV4cG9ydHMu
U3ludGF4LAorICAgICAgICBwYXJzZVR5cGU6IHR5cGVkLnBhcnNlVHlwZSwKKyAgICAgICAgcGFy
c2VQYXJhbVR5cGU6IHR5cGVkLnBhcnNlUGFyYW1UeXBlLAorICAgICAgICBzdHJpbmdpZnk6IHR5
cGVkLnN0cmluZ2lmeQorICAgIH07Cit9KHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJyA/
IChkb2N0cmluZSA9IHt9KSA6IGV4cG9ydHMpKTsKKy8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0
dz04MCA6ICovCisKK30se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoKKyAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBTZXZpbGxlIDxoaUBhbGV4YW5k
ZXJzZXZpbGxlLmNvbT4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCisgIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyoq
CisgKiBFc2NvcGUgKDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL0NvbnN0ZWxsYXRpb24vZXNj
b3BlIj5lc2NvcGU8L2E+KSBpcyBhbiA8YQorICogaHJlZj0iaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS0yNjIuaHRtIj5FQ01BU2Ny
aXB0PC9hPgorICogc2NvcGUgYW5hbHl6ZXIgZXh0cmFjdGVkIGZyb20gdGhlIDxhCisgKiBocmVm
PSJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2VzbWFuZ2xlIj5lc21hbmdsZSBwcm9q
ZWN0PC9hLz4uCisgKiA8cD4KKyAqIDxlbT5lc2NvcGU8L2VtPiBmaW5kcyBsZXhpY2FsIHNjb3Bl
cyBpbiBhIHNvdXJjZSBwcm9ncmFtLCBpLmUuIGFyZWFzIG9mIHRoYXQKKyAqIHByb2dyYW0gd2hl
cmUgZGlmZmVyZW50IG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIgcmVmZXIgdG8g
dGhlIHNhbWUKKyAqIHZhcmlhYmxlLiBXaXRoIGVhY2ggc2NvcGUgdGhlIGNvbnRhaW5lZCB2YXJp
YWJsZXMgYXJlIGNvbGxlY3RlZCwgYW5kIGVhY2gKKyAqIGlkZW50aWZpZXIgcmVmZXJlbmNlIGlu
IGNvZGUgaXMgbGlua2VkIHRvIGl0cyBjb3JyZXNwb25kaW5nIHZhcmlhYmxlIChpZgorICogcG9z
c2libGUpLgorICogPHA+CisgKiA8ZW0+ZXNjb3BlPC9lbT4gd29ya3Mgb24gYSBzeW50YXggdHJl
ZSBvZiB0aGUgcGFyc2VkIHNvdXJjZSBjb2RlIHdoaWNoIGhhcworICogdG8gYWRoZXJlIHRvIHRo
ZSA8YQorICogaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9T
cGlkZXJNb25rZXkvUGFyc2VyX0FQSSI+CisgKiBNb3ppbGxhIFBhcnNlciBBUEk8L2E+LiBFLmcu
IDxhIGhyZWY9Imh0dHA6Ly9lc3ByaW1hLm9yZyI+ZXNwcmltYTwvYT4gaXMgYSBwYXJzZXIKKyAq
IHRoYXQgcHJvZHVjZXMgc3VjaCBzeW50YXggdHJlZXMuCisgKiA8cD4KKyAqIFRoZSBtYWluIGlu
dGVyZmFjZSBpcyB0aGUge0BsaW5rIGFuYWx5emV9IGZ1bmN0aW9uLgorICogQG1vZHVsZQorICov
CisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSAqLworLypnbG9iYWwgZXhwb3J0czp0cnVlLCBkZWZp
bmU6dHJ1ZSwgcmVxdWlyZTp0cnVlKi8KKyhmdW5jdGlvbiAoZmFjdG9yeSwgZ2xvYmFsKSB7Cisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgZnVuY3Rpb24gbmFtZXNwYWNlKHN0ciwgb2JqKSB7Cisg
ICAgICAgIHZhciBpLCBpeiwgbmFtZXMsIG5hbWU7CisgICAgICAgIG5hbWVzID0gc3RyLnNwbGl0
KCcuJyk7CisgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbmFtZXMubGVuZ3RoOyBpIDwgaXo7ICsr
aSkgeworICAgICAgICAgICAgbmFtZSA9IG5hbWVzW2ldOworICAgICAgICAgICAgaWYgKG9iai5o
YXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgIG9iaiA9IG9ialtuYW1lXTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb2JqID0gKG9ialtuYW1lXSA9
IHt9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2JqOworICAg
IH0KKworICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0
IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywKKyAgICAvLyBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5n
LAorICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsK
KyAgICAgICAgZGVmaW5lKCdlc2NvcGUnLCBbJ2V4cG9ydHMnLCAnZXN0cmF2ZXJzZSddLCBmdW5j
dGlvbiAoZXhwb3J0cywgZXN0cmF2ZXJzZSkgeworICAgICAgICAgICAgZmFjdG9yeShleHBvcnRz
LCBnbG9iYWwsIGVzdHJhdmVyc2UpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVv
ZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICBmYWN0b3J5KGV4cG9ydHMsIGds
b2JhbCwgcmVxdWlyZSgnZXN0cmF2ZXJzZScpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWN0
b3J5KG5hbWVzcGFjZSgnZXNjb3BlJywgZ2xvYmFsKSwgZ2xvYmFsLCBnbG9iYWwuZXN0cmF2ZXJz
ZSk7CisgICAgfQorfShmdW5jdGlvbiAoZXhwb3J0cywgZ2xvYmFsLCBlc3RyYXZlcnNlKSB7Cisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFN5bnRheCwKKyAgICAgICAgTWFwLAorICAgICAg
ICBjdXJyZW50U2NvcGUsCisgICAgICAgIGdsb2JhbFNjb3BlLAorICAgICAgICBzY29wZXMsCisg
ICAgICAgIG9wdGlvbnM7CisKKyAgICBTeW50YXggPSBlc3RyYXZlcnNlLlN5bnRheDsKKworICAg
IGlmICh0eXBlb2YgZ2xvYmFsLk1hcCAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgLy8gRVM2
IE1hcAorICAgICAgICBNYXAgPSBnbG9iYWwuTWFwOworICAgIH0gZWxzZSB7CisgICAgICAgIE1h
cCA9IGZ1bmN0aW9uIE1hcCgpIHsKKyAgICAgICAgICAgIHRoaXMuX19kYXRhID0ge307CisgICAg
ICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBNYXBHZXQoa2V5
KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAgICBpZiAodGhpcy5f
X2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9fZGF0YVtrZXldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKKyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIE1h
cEhhcyhrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9fZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpOworICAgICAgICB9OworCisgICAg
ICAgIE1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gTWFwU2V0KGtleSwgdmFsKSB7CisgICAg
ICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAgICB0aGlzLl9fZGF0YVtrZXldID0g
dmFsOworICAgICAgICB9OworCisgICAgICAgIE1hcC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVu
Y3Rpb24gTWFwRGVsZXRlKGtleSkgeworICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAg
ICAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLl9fZGF0YVtrZXldOworICAgICAgICB9OworICAg
IH0KKworICAgIGZ1bmN0aW9uIGFzc2VydChjb25kLCB0ZXh0KSB7CisgICAgICAgIGlmICghY29u
ZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRleHQpOworICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gZGVmYXVsdE9wdGlvbnMoKSB7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBvcHRpbWlzdGljOiBmYWxzZSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZTogZmFs
c2UKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1cGRhdGVEZWVwbHkodGFyZ2V0
LCBvdmVycmlkZSkgeworICAgICAgICB2YXIga2V5LCB2YWw7CisKKyAgICAgICAgZnVuY3Rpb24g
aXNIYXNoT2JqZWN0KHRhcmdldCkgeworICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0YXJnZXQg
PT09ICdvYmplY3QnICYmIHRhcmdldCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHRhcmdldCBpbnN0
YW5jZW9mIFJlZ0V4cCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGtleSBpbiBvdmVycmlk
ZSkgeworICAgICAgICAgICAgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg
ICAgICAgICAgICAgICB2YWwgPSBvdmVycmlkZVtrZXldOworICAgICAgICAgICAgICAgIGlmIChp
c0hhc2hPYmplY3QodmFsKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNIYXNoT2JqZWN0
KHRhcmdldFtrZXldKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGVlcGx5KHRh
cmdldFtrZXldLCB2YWwpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB1cGRhdGVEZWVwbHkoe30sIHZhbCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBBIFJlZmVyZW5jZSByZXByZXNlbnRzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgYW4g
aWRlbnRpZmllciBpbiBjb2RlLgorICAgICAqIEBjbGFzcyBSZWZlcmVuY2UKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBSZWZlcmVuY2UoaWRlbnQsIHNjb3BlLCBmbGFnLCB3cml0ZUV4cHIsIG1heWJl
SW1wbGljaXRHbG9iYWwpIHsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBJZGVudGlmaWVyIHN5
bnRheCBub2RlLgorICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hI0lkZW50aWZpZXJ9IFJlZmVy
ZW5jZSNpZGVudGlmaWVyIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pZGVudGlmaWVyID0g
aWRlbnQ7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBlbmNsb3Np
bmcgU2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBSZWZlcmVuY2UjZnJvbSAKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuZnJvbSA9IHNjb3BlOworICAgICAgICAvKioKKyAgICAg
ICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGNvbWVzIGZyb20gYSBkeW5hbWljIHNjb3BlIChz
dWNoIGFzICdldmFsJywKKyAgICAgICAgICogJ3dpdGgnLCBldGMuKSwgYW5kIG1heSBiZSB0cmFw
cGVkIGJ5IGR5bmFtaWMgc2NvcGVzLgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBSZWZl
cmVuY2UjdGFpbnRlZAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50YWludGVkID0gZmFsc2U7
CisgICAgICAgIC8qKiAKKyAgICAgICAgICogVGhlIHZhcmlhYmxlIHRoaXMgcmVmZXJlbmNlIGlz
IHJlc29sdmVkIHdpdGguCisgICAgICAgICAqIEBtZW1iZXIge1ZhcmlhYmxlfSBSZWZlcmVuY2Uj
cmVzb2x2ZWQgCisgICAgICAgICAqLworICAgICAgICB0aGlzLnJlc29sdmVkID0gbnVsbDsKKyAg
ICAgICAgLyoqIAorICAgICAgICAgKiBUaGUgcmVhZC13cml0ZSBtb2RlIG9mIHRoZSByZWZlcmVu
Y2UuIChWYWx1ZSBpcyBvbmUgb2Yge0BsaW5rCisgICAgICAgICAqIFJlZmVyZW5jZS5SRUFEfSwg
e0BsaW5rIFJlZmVyZW5jZS5SV30sIHtAbGluayBSZWZlcmVuY2UuV1JJVEV9KS4KKyAgICAgICAg
ICogQG1lbWJlciB7bnVtYmVyfSBSZWZlcmVuY2UjZmxhZyAKKyAgICAgICAgICogQHByaXZhdGUK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuZmxhZyA9IGZsYWc7CisgICAgICAgIGlmICh0aGlz
LmlzV3JpdGUoKSkgeworICAgICAgICAgICAgLyoqIAorICAgICAgICAgICAgICogSWYgcmVmZXJl
bmNlIGlzIHdyaXRlYWJsZSwgdGhpcyBpcyB0aGUgdHJlZSBiZWluZyB3cml0dGVuIHRvIGl0Lgor
ICAgICAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNOb2RlfSBSZWZlcmVuY2Ujd3JpdGVFeHBy
IAorICAgICAgICAgICAgICovCisgICAgICAgICAgICB0aGlzLndyaXRlRXhwciA9IHdyaXRlRXhw
cjsKKyAgICAgICAgfQorICAgICAgICAvKiogCisgICAgICAgICAqIFdoZXRoZXIgdGhlIFJlZmVy
ZW5jZSBtaWdodCByZWZlciB0byBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgICAgICAgICogQG1lbWJl
ciB7Ym9vbGVhbn0gUmVmZXJlbmNlI19fbWF5YmVJbXBsaWNpdEdsb2JhbCAKKyAgICAgICAgICog
QHByaXZhdGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuX19tYXliZUltcGxpY2l0R2xvYmFs
ID0gbWF5YmVJbXBsaWNpdEdsb2JhbDsKKyAgICB9CisKKyAgICAvKiogCisgICAgICogQGNvbnN0
YW50IFJlZmVyZW5jZS5SRUFEIAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgUmVmZXJl
bmNlLlJFQUQgPSAweDE7CisgICAgLyoqIAorICAgICAqIEBjb25zdGFudCBSZWZlcmVuY2UuV1JJ
VEUgCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBSZWZlcmVuY2UuV1JJVEUgPSAweDI7
CisgICAgLyoqIAorICAgICAqIEBjb25zdGFudCBSZWZlcmVuY2UuUlcgCisgICAgICogQHByaXZh
dGUKKyAgICAgKi8KKyAgICBSZWZlcmVuY2UuUlcgPSAweDM7CisKKyAgICAvKioKKyAgICAgKiBX
aGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgc3RhdGljLgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNl
I2lzU3RhdGljCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVu
Y2UucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7CisgICAgICAgIHJl
dHVybiAhdGhpcy50YWludGVkICYmIHRoaXMucmVzb2x2ZWQgJiYgdGhpcy5yZXNvbHZlZC5zY29w
ZS5pc1N0YXRpYygpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZl
cmVuY2UgaXMgd3JpdGVhYmxlLgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzV3JpdGUKKyAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUu
aXNXcml0ZSA9IGZ1bmN0aW9uIGlzV3JpdGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcg
JiBSZWZlcmVuY2UuV1JJVEU7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhl
IHJlZmVyZW5jZSBpcyByZWFkYWJsZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1JlYWQK
KyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5
cGUuaXNSZWFkID0gZnVuY3Rpb24gaXNSZWFkKCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFn
ICYgUmVmZXJlbmNlLlJFQUQ7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhl
IHJlZmVyZW5jZSBpcyByZWFkLW9ubHkuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFk
T25seQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnBy
b3RvdHlwZS5pc1JlYWRPbmx5ID0gZnVuY3Rpb24gaXNSZWFkT25seSgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZmxhZyA9PT0gUmVmZXJlbmNlLlJFQUQ7CisgICAgfTsKKworICAgIC8qKgorICAg
ICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyB3cml0ZS1vbmx5LgorICAgICAqIEBtZXRob2Qg
UmVmZXJlbmNlI2lzV3JpdGVPbmx5CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8K
KyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzV3JpdGVPbmx5ID0gZnVuY3Rpb24gaXNXcml0ZU9u
bHkoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5XUklURTsKKyAg
ICB9OworCisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWQtd3Jp
dGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkV3JpdGUKKyAgICAgKiBAcmV0dXJu
IHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNSZWFkV3JpdGUg
PSBmdW5jdGlvbiBpc1JlYWRXcml0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyA9PT0g
UmVmZXJlbmNlLlJXOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBBIFZhcmlhYmxlIHJlcHJl
c2VudHMgYSBsb2NhbGx5IHNjb3BlZCBpZGVudGlmaWVyLiBUaGVzZSBpbmNsdWRlIGFyZ3VtZW50
cyB0bworICAgICAqIGZ1bmN0aW9ucy4KKyAgICAgKiBAY2xhc3MgVmFyaWFibGUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBWYXJpYWJsZShuYW1lLCBzY29wZSkgeworICAgICAgICAvKiogIAorICAg
ICAgICAgKiBUaGUgdmFyaWFibGUgbmFtZSwgYXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSBjb2RlLgor
ICAgICAgICAgKiBAbWVtYmVyIHtTdHJpbmd9IFZhcmlhYmxlI25hbWUgCisgICAgICAgICAqLwor
ICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICAvKioKKyAgICAgICAgICogTGlzdCBv
ZiBkZWZpbmluZyBvY2N1cnJlbmNlcyBvZiB0aGlzIHZhcmlhYmxlIChsaWtlIGluICd2YXIgLi4u
JworICAgICAgICAgKiBzdGF0ZW1lbnRzIG9yIGFzIHBhcmFtZXRlciksIGFzIEFTVCBub2Rlcy4K
KyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYS5JZGVudGlmaWVyW119IFZhcmlhYmxlI2lkZW50
aWZpZXJzCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlkZW50aWZpZXJzID0gW107CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNlc30g
b2YgdGhpcyB2YXJpYWJsZSAoZXhjbHVkaW5nIHBhcmFtZXRlciBlbnRyaWVzKQorICAgICAgICAg
KiBpbiBpdHMgZGVmaW5pbmcgc2NvcGUgYW5kIGFsbCBuZXN0ZWQgc2NvcGVzLiBGb3IgZGVmaW5p
bmcKKyAgICAgICAgICogb2NjdXJyZW5jZXMgb25seSBzZWUge0BsaW5rIFZhcmlhYmxlI2RlZnN9
LgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gVmFyaWFibGUjcmVmZXJlbmNlcwor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107CisKKyAgICAgICAgLyoq
CisgICAgICAgICAqIExpc3Qgb2YgZGVmaW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJs
ZSAobGlrZSBpbiAndmFyIC4uLicKKyAgICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0
ZXIpLCBhcyBjdXN0b20gb2JqZWN0cy4KKyAgICAgICAgICogQHR5cGVkZWYge09iamVjdH0gRGVm
RW50cnkKKyAgICAgICAgICogQHByb3BlcnR5IHtTdHJpbmd9IERlZkVudHJ5LnR5cGUgLSB0aGUg
dHlwZSBvZiB0aGUgb2NjdXJyZW5jZSAoZS5nLgorICAgICAgICAgKiAgICAgICJQYXJhbWV0ZXIi
LCAiVmFyaWFibGUiLCAuLi4pCisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5JZGVudGlm
aWVyfSBEZWZFbnRyeS5uYW1lIC0gdGhlIGlkZW50aWZpZXIgQVNUIG5vZGUgb2YgdGhlIG9jY3Vy
cmVuY2UKKyAgICAgICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IERlZkVudHJ5Lm5vZGUg
LSB0aGUgZW5jbG9zaW5nIG5vZGUgb2YgdGhlCisgICAgICAgICAqICAgICAgaWRlbnRpZmllcgor
ICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuTm9kZX0gW0RlZkVudHJ5LnBhcmVudF0gLSB0
aGUgZW5jbG9zaW5nIHN0YXRlbWVudAorICAgICAgICAgKiAgICAgIG5vZGUgb2YgdGhlIGlkZW50
aWZpZXIKKyAgICAgICAgICogQG1lbWJlciB7RGVmRW50cnlbXX0gVmFyaWFibGUjZGVmcworICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5kZWZzID0gW107CisKKyAgICAgICAgdGhpcy50YWludGVk
ID0gZmFsc2U7CisgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBzdGFj
ayB2YXJpYWJsZS4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gVmFyaWFibGUjc3RhY2sK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuc3RhY2sgPSB0cnVlOworICAgICAgICAvKiogCisg
ICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5jbG9zaW5nIFNjb3BlLgorICAgICAgICAgKiBA
bWVtYmVyIHtTY29wZX0gVmFyaWFibGUjc2NvcGUgCisgICAgICAgICAqLworICAgICAgICB0aGlz
LnNjb3BlID0gc2NvcGU7CisgICAgfQorCisgICAgVmFyaWFibGUuQ2F0Y2hDbGF1c2UgPSAnQ2F0
Y2hDbGF1c2UnOworICAgIFZhcmlhYmxlLlBhcmFtZXRlciA9ICdQYXJhbWV0ZXInOworICAgIFZh
cmlhYmxlLkZ1bmN0aW9uTmFtZSA9ICdGdW5jdGlvbk5hbWUnOworICAgIFZhcmlhYmxlLlZhcmlh
YmxlID0gJ1ZhcmlhYmxlJzsKKyAgICBWYXJpYWJsZS5JbXBsaWNpdEdsb2JhbFZhcmlhYmxlID0g
J0ltcGxpY2l0R2xvYmFsVmFyaWFibGUnOworCisgICAgZnVuY3Rpb24gaXNTdHJpY3RTY29wZShz
Y29wZSwgYmxvY2spIHsKKyAgICAgICAgdmFyIGJvZHksIGksIGl6LCBzdG10LCBleHByOworCisg
ICAgICAgIC8vIFdoZW4gdXBwZXIgc2NvcGUgaXMgZXhpc3RzIGFuZCBzdHJpY3QsIGlubmVyIHNj
b3BlIGlzIGFsc28gc3RyaWN0LgorICAgICAgICBpZiAoc2NvcGUudXBwZXIgJiYgc2NvcGUudXBw
ZXIuaXNTdHJpY3QpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNjb3BlLnR5cGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIGJvZHkg
PSBibG9jay5ib2R5OworICAgICAgICB9IGVsc2UgaWYgKHNjb3BlLnR5cGUgPT09ICdnbG9iYWwn
KSB7CisgICAgICAgICAgICBib2R5ID0gYmxvY2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0aW9ucy5kaXJl
Y3RpdmUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gYm9keS5ib2R5Lmxlbmd0aDsg
aSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICBzdG10ID0gYm9keS5ib2R5W2ldOworICAg
ICAgICAgICAgICAgIGlmIChzdG10LnR5cGUgIT09ICdEaXJlY3RpdmVTdGF0ZW1lbnQnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoc3RtdC5yYXcgPT09ICcidXNlIHN0cmljdCInIHx8IHN0bXQucmF3ID09PSAnXCd1
c2Ugc3RyaWN0XCcnKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gYm9keS5ib2R5Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBzdG10ID0gYm9keS5ib2R5W2ldOworICAgICAgICAgICAgICAgIGlmIChzdG10
LnR5cGUgIT09IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50KSB7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHByID0gc3Rt
dC5leHByZXNzaW9uOworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgIT09IFN5bnRheC5M
aXRlcmFsIHx8IHR5cGVvZiBleHByLnZhbHVlICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGV4
cHIucmF3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIucmF3ID09PSAn
InVzZSBzdHJpY3QiJyB8fCBleHByLnJhdyA9PT0gJ1wndXNlIHN0cmljdFwnJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci52YWx1
ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisg
ICAgICogQGNsYXNzIFNjb3BlCisgICAgICovCisgICAgZnVuY3Rpb24gU2NvcGUoYmxvY2ssIG9w
dCkgeworICAgICAgICB2YXIgdmFyaWFibGUsIGJvZHk7CisKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIE9uZSBvZiAnY2F0Y2gnLCAnd2l0aCcsICdmdW5jdGlvbicgb3IgJ2dsb2JhbCcuCisgICAg
ICAgICAqIEBtZW1iZXIge1N0cmluZ30gU2NvcGUjdHlwZQorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy50eXBlID0KKyAgICAgICAgICAgIChibG9jay50eXBlID09PSBTeW50YXguQ2F0Y2hDbGF1
c2UpID8gJ2NhdGNoJyA6CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LldpdGhT
dGF0ZW1lbnQpID8gJ3dpdGgnIDoKKyAgICAgICAgICAgIChibG9jay50eXBlID09PSBTeW50YXgu
UHJvZ3JhbSkgPyAnZ2xvYmFsJyA6ICdmdW5jdGlvbic7CisgICAgICAgICAvKioKKyAgICAgICAg
ICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9cyBvZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57
IFZhcmlhYmxlLm5hbWUKKyAgICAgICAgICogOiBWYXJpYWJsZSB9PC9jb2RlPi4KKyAgICAgICAg
ICogQG1lbWJlciB7TWFwfSBTY29wZSNzZXQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuc2V0
ID0gbmV3IE1hcCgpOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHRhaW50ZWQgdmFyaWFi
bGVzIG9mIHRoaXMgc2NvcGUsIGFzIDxjb2RlPnsgVmFyaWFibGUubmFtZSA6CisgICAgICAgICAq
IGJvb2xlYW4gfTwvY29kZT4uCisgICAgICAgICAqIEBtZW1iZXIge01hcH0gU2NvcGUjdGFpbnRz
ICovCisgICAgICAgIHRoaXMudGFpbnRzID0gbmV3IE1hcCgpOworICAgICAgICAvKioKKyAgICAg
ICAgICogR2VuZXJhbGx5LCB0aHJvdWdoIHRoZSBsZXhpY2FsIHNjb3Bpbmcgb2YgSlMgeW91IGNh
biBhbHdheXMga25vdworICAgICAgICAgKiB3aGljaCB2YXJpYWJsZSBhbiBpZGVudGlmaWVyIGlu
IHRoZSBzb3VyY2UgY29kZSByZWZlcnMgdG8uIFRoZXJlIGFyZQorICAgICAgICAgKiBhIGZldyBl
eGNlcHRpb25zIHRvIHRoaXMgcnVsZS4gV2l0aCAnZ2xvYmFsJyBhbmQgJ3dpdGgnIHNjb3BlcyB5
b3UKKyAgICAgICAgICogY2FuIG9ubHkgZGVjaWRlIGF0IHJ1bnRpbWUgd2hpY2ggdmFyaWFibGUg
YSByZWZlcmVuY2UgcmVmZXJzIHRvLgorICAgICAgICAgKiBNb3Jlb3ZlciwgaWYgJ2V2YWwoKScg
aXMgdXNlZCBpbiBhIHNjb3BlLCBpdCBtaWdodCBpbnRyb2R1Y2UgbmV3CisgICAgICAgICAqIGJp
bmRpbmdzIGluIHRoaXMgb3IgaXRzIHByYXJlbnQgc2NvcGVzLgorICAgICAgICAgKiBBbGwgdGhv
c2Ugc2NvcGVzIGFyZSBjb25zaWRlcmVkICdkeW5hbWljJy4KKyAgICAgICAgICogQG1lbWJlciB7
Ym9vbGVhbn0gU2NvcGUjZHluYW1pYworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5keW5hbWlj
ID0gdGhpcy50eXBlID09PSAnZ2xvYmFsJyB8fCB0aGlzLnR5cGUgPT09ICd3aXRoJzsKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzY29wZS1kZWZpbmluZyBzeW50
YXggbm9kZS4KKyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYS5Ob2RlfSBTY29wZSNibG9jawor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrOworICAgICAgICAgLyoqCisg
ICAgICAgICAqIFRoZSB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZXN9IHRoYXQgYXJlIG5vdCBy
ZXNvbHZlZCB3aXRoIHRoaXMgc2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtd
fSBTY29wZSN0aHJvdWdoCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRocm91Z2ggPSBbXTsK
KyAgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgc2NvcGVkIHtAbGluayBWYXJpYWJsZX1zIG9m
IHRoaXMgc2NvcGUuIEluIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICogJ2Z1bmN0aW9uJyBzY29w
ZSB0aGlzIGluY2x1ZGVzIHRoZSBhdXRvbWF0aWMgYXJndW1lbnQgPGVtPmFyZ3VtZW50czwvZW0+
IGFzCisgICAgICAgICAqIGl0cyBmaXJzdCBlbGVtZW50LCBhcyB3ZWxsIGFzIGFsbCBmdXJ0aGVy
IGZvcm1hbCBhcmd1bWVudHMuCisgICAgICAgICAqIEBtZW1iZXIge1ZhcmlhYmxlW119IFNjb3Bl
I3ZhcmlhYmxlcworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52YXJpYWJsZXMgPSBbXTsKKyAg
ICAgICAgIC8qKgorICAgICAgICAgKiBBbnkgdmFyaWFibGUge0BsaW5rIFJlZmVyZW5jZXxyZWZl
cmVuY2V9IGZvdW5kIGluIHRoaXMgc2NvcGUuIFRoaXMKKyAgICAgICAgICogaW5jbHVkZXMgb2Nj
dXJyZW5jZXMgb2YgbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwgYXMgdmFyaWFibGVzIGZyb20KKyAg
ICAgICAgICogcGFyZW50IHNjb3BlcyAoaW5jbHVkaW5nIHRoZSBnbG9iYWwgc2NvcGUpLiBGb3Ig
bG9jYWwgdmFyaWFibGVzCisgICAgICAgICAqIHRoaXMgYWxzbyBpbmNsdWRlcyBkZWZpbmluZyBv
Y2N1cnJlbmNlcyAobGlrZSBpbiBhICd2YXInIHN0YXRlbWVudCkuCisgICAgICAgICAqIEluIGEg
J2Z1bmN0aW9uJyBzY29wZSB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIG9jY3VycmVuY2VzIG9m
IHRoZQorICAgICAgICAgKiBmb3JtYWwgcGFyYW1ldGVyIGluIHRoZSBwYXJhbWV0ZXIgbGlzdC4K
KyAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI3JlZmVyZW5jZXMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOworICAgICAgICAgLyoqCisgICAg
ICAgICAqIExpc3Qgb2Yge0BsaW5rIFJlZmVyZW5jZX1zIHRoYXQgYXJlIGxlZnQgdG8gYmUgcmVz
b2x2ZWQgKGkuZS4gd2hpY2gKKyAgICAgICAgICogbmVlZCB0byBiZSBsaW5rZWQgdG8gdGhlIHZh
cmlhYmxlIHRoZXkgcmVmZXIgdG8pLiBVc2VkIGludGVybmFsbHkgdG8KKyAgICAgICAgICogcmVz
b2x2ZSBiaW5kaW5ncyBkdXJpbmcgc2NvcGUgYW5hbHlzaXMuIE9uIGEgZmluYWxpemVkIHNjb3Bl
CisgICAgICAgICAqIGFuYWx5c2lzLCBhbGwgc29wZXMgaGF2ZSA8ZW0+bGVmdDwvZW0+IHZhbHVl
IDxzdHJvbmc+bnVsbDwvc3Ryb25nPi4KKyAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119
IFNjb3BlI2xlZnQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMubGVmdCA9IFtdOworICAgICAg
ICAgLyoqCisgICAgICAgICAqIEZvciAnZ2xvYmFsJyBhbmQgJ2Z1bmN0aW9uJyBzY29wZXMsIHRo
aXMgaXMgYSBzZWxmLXJlZmVyZW5jZS4gRm9yCisgICAgICAgICAqIG90aGVyIHNjb3BlIHR5cGVz
IHRoaXMgaXMgdGhlIDxlbT52YXJpYWJsZVNjb3BlPC9lbT4gdmFsdWUgb2YgdGhlCisgICAgICAg
ICAqIHBhcmVudCBzY29wZS4KKyAgICAgICAgICogQG1lbWJlciB7U2NvcGV9IFNjb3BlI3Zhcmlh
YmxlU2NvcGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFyaWFibGVTY29wZSA9CisgICAg
ICAgICAgICAodGhpcy50eXBlID09PSAnZ2xvYmFsJyB8fCB0aGlzLnR5cGUgPT09ICdmdW5jdGlv
bicpID8gdGhpcyA6IGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlOworICAgICAgICAgLyoqCisg
ICAgICAgICAqIFdoZXRoZXIgdGhpcyBzY29wZSBpcyBjcmVhdGVkIGJ5IGEgRnVuY3Rpb25FeHBy
ZXNzaW9uLgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNmdW5jdGlvbkV4cHJl
c3Npb25TY29wZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25T
Y29wZSA9IGZhbHNlOworICAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdGhpcyBpcyBh
IHNjb3BlIHRoYXQgY29udGFpbnMgYW4gJ2V2YWwoKScgaW52b2NhdGlvbi4KKyAgICAgICAgICog
QG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZGlyZWN0Q2FsbFRvRXZhbFNjb3BlCisgICAgICAgICAq
LworICAgICAgICB0aGlzLmRpcmVjdENhbGxUb0V2YWxTY29wZSA9IGZhbHNlOworICAgICAgICAg
LyoqCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI3RoaXNGb3VuZAorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy50aGlzRm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9keSA9IHRo
aXMudHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IGJsb2NrLmJvZHkgOiBibG9jazsKKyAgICAgICAgaWYg
KG9wdC5uYW1pbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX19kZWZpbmUoYmxvY2suaWQsIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5GdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAg
ICAgbmFtZTogYmxvY2suaWQsCisgICAgICAgICAgICAgICAgbm9kZTogYmxvY2sKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSA9IHRydWU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZnVuY3Rp
b24nKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoJ2FyZ3VtZW50
cycsIHRoaXMpOworICAgICAgICAgICAgICAgIHRoaXMudGFpbnRzLnNldCgnYXJndW1lbnRzJywg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXQuc2V0KCdhcmd1bWVudHMnLCB2YXJpYWJs
ZSk7CisgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChibG9jay50eXBlID09PSBTeW50YXguRnVuY3Rp
b25FeHByZXNzaW9uICYmIGJsb2NrLmlkKSB7CisgICAgICAgICAgICAgICAgbmV3IFNjb3BlKGJs
b2NrLCB7IG5hbWluZzogdHJ1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgICAvKioKKyAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQge0BsaW5rIFNjb3Bl
fHNjb3BlfS4KKyAgICAgICAgICogQG1lbWJlciB7U2NvcGV9IFNjb3BlI3VwcGVyCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLnVwcGVyID0gY3VycmVudFNjb3BlOworICAgICAgICAgLyoqCisg
ICAgICAgICAqIFdoZXRoZXIgJ3VzZSBzdHJpY3QnIGlzIGluIGVmZmVjdCBpbiB0aGlzIHNjb3Bl
LgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNpc1N0cmljdAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5pc1N0cmljdCA9IGlzU3RyaWN0U2NvcGUodGhpcywgYmxvY2spOwor
CisgICAgICAgICAvKioKKyAgICAgICAgICogTGlzdCBvZiBuZXN0ZWQge0BsaW5rIFNjb3BlfXMu
CisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlW119IFNjb3BlI2NoaWxkU2NvcGVzCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmNoaWxkU2NvcGVzID0gW107CisgICAgICAgIGlmIChjdXJyZW50
U2NvcGUpIHsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZS5jaGlsZFNjb3Blcy5wdXNoKHRoaXMp
OworICAgICAgICB9CisKKworICAgICAgICAvLyBSQUlJCisgICAgICAgIGN1cnJlbnRTY29wZSA9
IHRoaXM7CisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdnbG9iYWwnKSB7CisgICAgICAgICAg
ICBnbG9iYWxTY29wZSA9IHRoaXM7CisgICAgICAgICAgICBnbG9iYWxTY29wZS5pbXBsaWNpdCA9
IHsKKyAgICAgICAgICAgICAgICBzZXQ6IG5ldyBNYXAoKSwKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZXM6IFtdCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHNjb3Blcy5wdXNo
KHRoaXMpOworICAgIH0KKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2Nsb3NlID0gZnVuY3Rpb24g
X19jbG9zZSgpIHsKKyAgICAgICAgdmFyIGksIGl6LCByZWYsIGN1cnJlbnQsIG5vZGUsIGltcGxp
Y2l0OworCisgICAgICAgIC8vIEJlY2F1c2UgaWYgdGhpcyBpcyBnbG9iYWwgZW52aXJvbm1lbnQs
IHVwcGVyIGlzIG51bGwKKyAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWMgfHwgb3B0aW9ucy5vcHRp
bWlzdGljKSB7CisgICAgICAgICAgICAvLyBzdGF0aWMgcmVzb2x2ZQorICAgICAgICAgICAgZm9y
IChpID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAg
ICAgICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX19y
ZXNvbHZlKHJlZikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBl
clNjb3BlKHJlZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gdGhpcyBpcyAiZ2xvYmFsIiAvICJ3aXRoIiAvICJmdW5j
dGlvbiB3aXRoIGV2YWwiIGVudmlyb25tZW50CisgICAgICAgICAgICBpZiAodGhpcy50eXBlID09
PSAnd2l0aCcpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5s
ZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZiA9IHRoaXMubGVm
dFtpXTsKKyAgICAgICAgICAgICAgICAgICAgcmVmLnRhaW50ZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVmKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbm90aWZ5IGFsbCBuYW1lcyBhcmUgdGhyb3VnaCB0byBnbG9iYWwKKyAgICAgICAgICAg
ICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudC50aHJvdWdoLnB1c2gocmVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQgPSBjdXJyZW50LnVwcGVyOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjdXJy
ZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGhpcy50eXBlID09PSAnZ2xvYmFsJykgeworICAgICAgICAgICAgaW1wbGljaXQg
PSBbXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAg
ICAgICAgICAgaWYgKHJlZi5fX21heWJlSW1wbGljaXRHbG9iYWwgJiYgIXRoaXMuc2V0Lmhhcyhy
ZWYuaWRlbnRpZmllci5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdC5wdXNo
KHJlZi5fX21heWJlSW1wbGljaXRHbG9iYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGltcGxpY2l0IGdsb2JhbCB2YXJpYWJs
ZSBmcm9tIGFzc2lnbm1lbnQgZXhwcmVzc2lvbgorICAgICAgICAgICAgZm9yIChpID0gMCwgaXog
PSBpbXBsaWNpdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9
IGltcGxpY2l0W2ldOworICAgICAgICAgICAgICAgIHRoaXMuX19kZWZpbmVJbXBsaWNpdChub2Rl
LmxlZnQsIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuSW1wbGljaXRHbG9i
YWxWYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5sZWZ0LAorICAgICAg
ICAgICAgICAgICAgICBub2RlOiBub2RlCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmxlZnQgPSBudWxsOworICAgICAgICBjdXJy
ZW50U2NvcGUgPSB0aGlzLnVwcGVyOworICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19y
ZXNvbHZlID0gZnVuY3Rpb24gX19yZXNvbHZlKHJlZikgeworICAgICAgICB2YXIgdmFyaWFibGUs
IG5hbWU7CisgICAgICAgIG5hbWUgPSByZWYuaWRlbnRpZmllci5uYW1lOworICAgICAgICBpZiAo
dGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0Lmdl
dChuYW1lKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLnJlZmVyZW5jZXMucHVzaChyZWYpOworICAg
ICAgICAgICAgdmFyaWFibGUuc3RhY2sgPSB2YXJpYWJsZS5zdGFjayAmJiByZWYuZnJvbS52YXJp
YWJsZVNjb3BlID09PSB0aGlzLnZhcmlhYmxlU2NvcGU7CisgICAgICAgICAgICBpZiAocmVmLnRh
aW50ZWQpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS50YWludGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB0aGlzLnRhaW50cy5zZXQodmFyaWFibGUubmFtZSwgdHJ1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZWYucmVzb2x2ZWQgPSB2YXJpYWJsZTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owor
CisgICAgU2NvcGUucHJvdG90eXBlLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUgPSBmdW5jdGlvbiBf
X2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZikgeworICAgICAgICBpZiAodGhpcy51cHBlcikgewor
ICAgICAgICAgICAgdGhpcy51cHBlci5sZWZ0LnB1c2gocmVmKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLnRocm91Z2gucHVzaChyZWYpOworICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUu
X19kZWZpbmVJbXBsaWNpdCA9IGZ1bmN0aW9uIF9fZGVmaW5lSW1wbGljaXQobm9kZSwgaW5mbykg
eworICAgICAgICB2YXIgbmFtZSwgdmFyaWFibGU7CisgICAgICAgIGlmIChub2RlICYmIG5vZGUu
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIG5hbWUgPSBub2RlLm5h
bWU7CisgICAgICAgICAgICBpZiAoIXRoaXMuaW1wbGljaXQuc2V0LmhhcyhuYW1lKSkgeworICAg
ICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKG5hbWUsIHRoaXMpOworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7CisgICAgICAgICAgICAg
ICAgdmFyaWFibGUuZGVmcy5wdXNoKGluZm8pOworICAgICAgICAgICAgICAgIHRoaXMuaW1wbGlj
aXQuc2V0LnNldChuYW1lLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgdGhpcy5pbXBsaWNp
dC52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlID0gdGhpcy5pbXBsaWNpdC5zZXQuZ2V0KG5hbWUpOworICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7CisgICAgICAgICAgICAg
ICAgdmFyaWFibGUuZGVmcy5wdXNoKGluZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RlZmluZSA9IGZ1bmN0aW9uIF9fZGVmaW5l
KG5vZGUsIGluZm8pIHsKKyAgICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOworICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBu
YW1lID0gbm9kZS5uYW1lOworICAgICAgICAgICAgaWYgKCF0aGlzLnNldC5oYXMobmFtZSkpIHsK
KyAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNl
dC5zZXQobmFtZSwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1
c2godmFyaWFibGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXJp
YWJsZSA9IHRoaXMuc2V0LmdldChuYW1lKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVu
dGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRlZnMucHVzaChp
bmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBTY29wZS5wcm90
b3R5cGUuX19yZWZlcmVuY2luZyA9IGZ1bmN0aW9uIF9fcmVmZXJlbmNpbmcobm9kZSwgYXNzaWdu
LCB3cml0ZUV4cHIsIG1heWJlSW1wbGljaXRHbG9iYWwpIHsKKyAgICAgICAgdmFyIHJlZjsKKyAg
ICAgICAgLy8gYmVjYXVzZSBBcnJheSBlbGVtZW50IG1heSBiZSBudWxsCisgICAgICAgIGlmIChu
b2RlICYmIG5vZGUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHJl
ZiA9IG5ldyBSZWZlcmVuY2Uobm9kZSwgdGhpcywgYXNzaWduIHx8IFJlZmVyZW5jZS5SRUFELCB3
cml0ZUV4cHIsIG1heWJlSW1wbGljaXRHbG9iYWwpOworICAgICAgICAgICAgdGhpcy5yZWZlcmVu
Y2VzLnB1c2gocmVmKTsKKyAgICAgICAgICAgIHRoaXMubGVmdC5wdXNoKHJlZik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fZGV0ZWN0RXZhbCA9IGZ1bmN0aW9u
IF9fZGV0ZWN0RXZhbCgpIHsKKyAgICAgICAgdmFyIGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQg
PSB0aGlzOworICAgICAgICB0aGlzLmRpcmVjdENhbGxUb0V2YWxTY29wZSA9IHRydWU7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGN1cnJlbnQuZHluYW1pYyA9IHRydWU7CisgICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC51cHBlcjsKKyAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7Cisg
ICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdFRoaXMgPSBmdW5jdGlvbiBfX2Rl
dGVjdFRoaXMoKSB7CisgICAgICAgIHRoaXMudGhpc0ZvdW5kID0gdHJ1ZTsKKyAgICB9OworCisg
ICAgU2NvcGUucHJvdG90eXBlLl9faXNDbG9zZWQgPSBmdW5jdGlvbiBpc0Nsb3NlZCgpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMubGVmdCA9PT0gbnVsbDsKKyAgICB9OworCisgICAgLy8gQVBJIFNj
b3BlI3Jlc29sdmUobmFtZSkKKyAgICAvLyByZXR1cm5zIHJlc29sdmVkIHJlZmVyZW5jZQorICAg
IFNjb3BlLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShpZGVudCkgeworICAg
ICAgICB2YXIgcmVmLCBpLCBpejsKKyAgICAgICAgYXNzZXJ0KHRoaXMuX19pc0Nsb3NlZCgpLCAn
c2NvcGUgc2hvdWxkIGJlIGNsb3NlZCcpOworICAgICAgICBhc3NlcnQoaWRlbnQudHlwZSA9PT0g
U3ludGF4LklkZW50aWZpZXIsICd0YXJnZXQgc2hvdWxkIGJlIGlkZW50aWZpZXInKTsKKyAgICAg
ICAgZm9yIChpID0gMCwgaXogPSB0aGlzLnJlZmVyZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkg
eworICAgICAgICAgICAgcmVmID0gdGhpcy5yZWZlcmVuY2VzW2ldOworICAgICAgICAgICAgaWYg
KHJlZi5pZGVudGlmaWVyID09PSBpZGVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiByZWY7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsK
KworICAgIC8vIEFQSSBTY29wZSNpc1N0YXRpYworICAgIC8vIHJldHVybnMgdGhpcyBzY29wZSBp
cyBzdGF0aWMKKyAgICBTY29wZS5wcm90b3R5cGUuaXNTdGF0aWMgPSBmdW5jdGlvbiBpc1N0YXRp
YygpIHsKKyAgICAgICAgcmV0dXJuICF0aGlzLmR5bmFtaWM7CisgICAgfTsKKworICAgIC8vIEFQ
SSBTY29wZSNpc0FyZ3VtZW50c01hdGVyaWFsaXplZAorICAgIC8vIHJldHVybiB0aGlzIHNjb3Bl
IGhhcyBtYXRlcmlhbGl6ZWQgYXJndW1lbnRzCisgICAgU2NvcGUucHJvdG90eXBlLmlzQXJndW1l
bnRzTWF0ZXJpYWxpemVkID0gZnVuY3Rpb24gaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSB7Cisg
ICAgICAgIC8vIFRPRE8oQ29uc3RlbGxhdGlvbikKKyAgICAgICAgLy8gV2UgY2FuIG1vcmUgYWdn
cmVzc2l2ZSBvbiB0aGlzIGNvbmRpdGlvbiBsaWtlIHRoaXMuCisgICAgICAgIC8vCisgICAgICAg
IC8vIGZ1bmN0aW9uIHQoKSB7CisgICAgICAgIC8vICAgICAvLyBhcmd1bWVudHMgb2YgdCBpcyBh
bHdheXMgaGlkZGVuLgorICAgICAgICAvLyAgICAgZnVuY3Rpb24gYXJndW1lbnRzKCkgeworICAg
ICAgICAvLyAgICAgfQorICAgICAgICAvLyB9CisgICAgICAgIHZhciB2YXJpYWJsZTsKKworICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBmdW5jdGlvbiBzY29wZQorICAgICAgICBpZiAodGhpcy50eXBl
ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGhpcy5pc1N0YXRpYygpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhcmlhYmxlID0gdGhpcy5zZXQuZ2V0KCdhcmd1bWVu
dHMnKTsKKyAgICAgICAgYXNzZXJ0KHZhcmlhYmxlLCAnYWx3YXlzIGhhdmUgYXJndW1lbnRzIHZh
cmlhYmxlJyk7CisgICAgICAgIHJldHVybiB2YXJpYWJsZS50YWludGVkIHx8IHZhcmlhYmxlLnJl
ZmVyZW5jZXMubGVuZ3RoICAhPT0gMDsKKyAgICB9OworCisgICAgLy8gQVBJIFNjb3BlI2lzVGhp
c01hdGVyaWFsaXplZAorICAgIC8vIHJldHVybiB0aGlzIHNjb3BlIGhhcyBtYXRlcmlhbGl6ZWQg
YHRoaXNgIHJlZmVyZW5jZQorICAgIFNjb3BlLnByb3RvdHlwZS5pc1RoaXNNYXRlcmlhbGl6ZWQg
PSBmdW5jdGlvbiBpc1RoaXNNYXRlcmlhbGl6ZWQoKSB7CisgICAgICAgIC8vIFRoaXMgaXMgbm90
IGZ1bmN0aW9uIHNjb3BlCisgICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdmdW5jdGlvbicpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5p
c1N0YXRpYygpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdGhpcy50aGlzRm91bmQ7CisgICAgfTsKKworICAgIFNjb3BlLm1hbmdsZWROYW1l
ID0gJ19fJGVzY29wZSRfXyc7CisKKyAgICBTY29wZS5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rp
b24gYXR0YWNoKCkgeworICAgICAgICBpZiAoIXRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUp
IHsKKyAgICAgICAgICAgIHRoaXMuYmxvY2tbU2NvcGUubWFuZ2xlZE5hbWVdID0gdGhpczsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24g
ZGV0YWNoKCkgeworICAgICAgICBpZiAoIXRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsK
KyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuaXNVc2VkTmFtZSA9IGZ1bmN0aW9u
IChuYW1lKSB7CisgICAgICAgIGlmICh0aGlzLnNldC5oYXMobmFtZSkpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpeiA9IHRo
aXMudGhyb3VnaC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICBpZiAodGhpcy50
aHJvdWdoW2ldLmlkZW50aWZpZXIubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQGNsYXNzIFNjb3BlTWFuYWdlcgorICAgICAq
LworICAgIGZ1bmN0aW9uIFNjb3BlTWFuYWdlcihzY29wZXMpIHsKKyAgICAgICAgdGhpcy5zY29w
ZXMgPSBzY29wZXM7CisgICAgICAgIHRoaXMuYXR0YWNoZWQgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBSZXR1cm5zIGFwcHJvcGxpYXRlIHNjb3BlIGZvciB0aGlzIG5vZGUKKyAgICBTY29wZU1h
bmFnZXIucHJvdG90eXBlLl9fZ2V0ID0gZnVuY3Rpb24gX19nZXQobm9kZSkgeworICAgICAgICB2
YXIgaSwgaXosIHNjb3BlOworICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkgeworICAgICAgICAg
ICAgcmV0dXJuIG5vZGVbU2NvcGUubWFuZ2xlZE5hbWVdIHx8IG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKFNjb3BlLmlzU2NvcGVSZXF1aXJlZChub2RlKSkgeworICAgICAgICAgICAgZm9y
IChpID0gMCwgaXogPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAg
ICAgICAgICAgc2NvcGUgPSB0aGlzLnNjb3Blc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNj
b3BlLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
Y29wZS5ibG9jayA9PT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNj
b3BlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICBTY29w
ZU1hbmFnZXIucHJvdG90eXBlLmFjcXVpcmUgPSBmdW5jdGlvbiBhY3F1aXJlKG5vZGUpIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX19nZXQobm9kZSk7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdl
ci5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIHJlbGVhc2Uobm9kZSkgeworICAgICAgICB2
YXIgc2NvcGUgPSB0aGlzLl9fZ2V0KG5vZGUpOworICAgICAgICBpZiAoc2NvcGUpIHsKKyAgICAg
ICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7CisgICAgICAgICAgICB3aGlsZSAoc2NvcGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29wZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgc2NvcGUgPSBzY29wZS51cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgU2NvcGVNYW5hZ2VyLnByb3Rv
dHlwZS5hdHRhY2ggPSBmdW5jdGlvbiBhdHRhY2goKSB7CisgICAgICAgIHZhciBpLCBpejsKKyAg
ICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7
CisgICAgICAgICAgICB0aGlzLnNjb3Blc1tpXS5hdHRhY2goKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmF0dGFjaGVkID0gdHJ1ZTsKKyAgICB9OworCisgICAgU2NvcGVNYW5hZ2VyLnByb3Rv
dHlwZS5kZXRhY2ggPSBmdW5jdGlvbiBkZXRhY2goKSB7CisgICAgICAgIHZhciBpLCBpejsKKyAg
ICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7
CisgICAgICAgICAgICB0aGlzLnNjb3Blc1tpXS5kZXRhY2goKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgICAgfTsKKworICAgIFNjb3BlLmlzU2NvcGVSZXF1
aXJlZCA9IGZ1bmN0aW9uIGlzU2NvcGVSZXF1aXJlZChub2RlKSB7CisgICAgICAgIHJldHVybiBT
Y29wZS5pc1ZhcmlhYmxlU2NvcGVSZXF1aXJlZChub2RlKSB8fCBub2RlLnR5cGUgPT09IFN5bnRh
eC5XaXRoU3RhdGVtZW50IHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkNhdGNoQ2xhdXNlOworICAg
IH07CisKKyAgICBTY29wZS5pc1ZhcmlhYmxlU2NvcGVSZXF1aXJlZCA9IGZ1bmN0aW9uIGlzVmFy
aWFibGVTY29wZVJlcXVpcmVkKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0g
U3ludGF4LlByb2dyYW0gfHwgbm9kZS50eXBlID09PSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9u
IHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgfTsKKwor
ICAgIC8qKgorICAgICAqIE1haW4gaW50ZXJmYWNlIGZ1bmN0aW9uLiBUYWtlcyBhbiBFc3ByaW1h
IHN5bnRheCB0cmVlIGFuZCByZXR1cm5zIHRoZQorICAgICAqIGFuYWx5emVkIHNjb3Blcy4KKyAg
ICAgKiBAZnVuY3Rpb24gYW5hbHl6ZQorICAgICAqIEBwYXJhbSB7ZXNwcmltYS5UcmVlfSB0cmVl
CisgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3ZpZGVkT3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB0
YWlsb3IgdGhlIHNjb3BlIGFuYWx5c2lzCisgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlk
ZWRPcHRpb25zLm9wdGltaXN0aWM9ZmFsc2VdIC0gdGhlIG9wdGltaXN0aWMgZmxhZworICAgICAq
IEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5kaXJlY3RpdmU9ZmFsc2VdLSB0aGUg
ZGlyZWN0aXZlIGZsYWcKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMu
aWdub3JlRXZhbD1mYWxzZV0tIHdoZXRoZXIgdG8gY2hlY2sgJ2V2YWwoKScgY2FsbHMKKyAgICAg
KiBAcmV0dXJuIHtTY29wZU1hbmFnZXJ9CisgICAgICovCisgICAgZnVuY3Rpb24gYW5hbHl6ZSh0
cmVlLCBwcm92aWRlZE9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHJlc3VsdFNjb3BlczsKKworICAg
ICAgICBvcHRpb25zID0gdXBkYXRlRGVlcGx5KGRlZmF1bHRPcHRpb25zKCksIHByb3ZpZGVkT3B0
aW9ucyk7CisgICAgICAgIHJlc3VsdFNjb3BlcyA9IHNjb3BlcyA9IFtdOworICAgICAgICBjdXJy
ZW50U2NvcGUgPSBudWxsOworICAgICAgICBnbG9iYWxTY29wZSA9IG51bGw7CisKKyAgICAgICAg
Ly8gYXR0YWNoIHNjb3BlIGFuZCBjb2xsZWN0IC8gcmVzb2x2ZSBuYW1lcworICAgICAgICBlc3Ry
YXZlcnNlLnRyYXZlcnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiBlbnRl
cihub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIGksIGl6LCBkZWNsOworICAgICAgICAgICAg
ICAgIGlmIChTY29wZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3IFNjb3BlKG5vZGUsIHt9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFz
c2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRv
ciA9PT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmxlZnQsIFJlZmVyZW5jZS5XUklURSwgbm9kZS5yaWdodCwgKCFjdXJyZW50
U2NvcGUuaXNTdHJpY3QgJiYgbm9kZS5sZWZ0Lm5hbWUgIT0gbnVsbCkgJiYgbm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQsIFJlZmVyZW5jZS5SVywgbm9kZS5yaWdodCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQXJyYXlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZS5lbGVtZW50c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5CbG9ja1N0YXRl
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5CcmVha1N0YXRlbWVudDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5DYWxs
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZS5jYWxsZWUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5v
ZGVbJ2FyZ3VtZW50cyddLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGVbJ2FyZ3VtZW50cyddW2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRo
aXMgaXMgZGlyZWN0IGNhbGwgdG8gZXZhbAorICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlv
bnMuaWdub3JlRXZhbCAmJiBub2RlLmNhbGxlZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAm
JiBub2RlLmNhbGxlZS5uYW1lID09PSAnZXZhbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0RXZhbCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBTeW50YXguQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX2RlZmluZShub2RlLnBhcmFtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBW
YXJpYWJsZS5DYXRjaENsYXVzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUu
cGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlCisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jb25zZXF1ZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hbHRlcm5hdGUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4
LkNvbnRpbnVlU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgIGNhc2UgU3ludGF4LkRpcmVjdGl2ZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Eb1doaWxlU3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkVtcHR5U3RhdGVtZW50OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkV4cHJlc3Np
b25TdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUuZXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguRm9yU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmluaXQpOworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnVwZGF0ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRm9ySW5T
dGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmxlZnQudHlwZSA9PT0gU3lu
dGF4LlZhcmlhYmxlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF0uaWQsIFJlZmVy
ZW5jZS5XUklURSwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5s
ZWZ0LCBSZWZlcmVuY2UuV1JJVEUsIG51bGwsICghY3VycmVudFNjb3BlLmlzU3RyaWN0ICYmIG5v
ZGUubGVmdC5uYW1lICE9IG51bGwpICYmIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9u
RGVjbGFyYXRpb24gbmFtZSBpcyBkZWZpbmVkIGluIHVwcGVyIHNjb3BlCisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS51cHBlci5fX2RlZmluZShub2RlLmlkLCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5GdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lOiBub2RlLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTog
bm9kZQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSBub2RlLnBhcmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19kZWZpbmUobm9kZS5wYXJhbXNbaV0sIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5QYXJhbWV0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5wYXJhbXNbaV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleDogaQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIC8vIGlkIGlz
IGRlZmluZWQgaW4gdXBwZXIgc2NvcGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwg
aXogPSBub2RlLnBhcmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19kZWZpbmUobm9kZS5wYXJhbXNbaV0sIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5QYXJhbWV0ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5wYXJhbXNbaV0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eDogaQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRh
eC5JZGVudGlmaWVyOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIGNhc2UgU3ludGF4LklmU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxpdGVyYWw6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguTGFiZWxlZFN0YXRl
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjoKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5vYmplY3Qp
OworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb21wdXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICBjYXNlIFN5bnRheC5OZXdFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmNhbGxlZSk7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZVsnYXJndW1lbnRzJ10ubGVuZ3RoOyBpIDwgaXo7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZVsnYXJndW1lbnRzJ11baV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguT2JqZWN0
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5Qcm9ncmFtOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LlByb3BlcnR5OgorICAgICAgICAgICAgICAgICAgICBj
dXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJn
dW1lbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuZXhwcmVz
c2lvbnNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguU3dpdGNoU3RhdGVtZW50OgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmRpc2NyaW1p
bmFudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguU3dpdGNoQ2FzZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9f
cmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZXRlY3RUaGlzKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVGhyb3dT
dGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5n
KG5vZGUuYXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LlRyeVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5VbmFyeUV4cHJlc3Npb246CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJndW1lbnQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LlVwZGF0ZUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5f
X3JlZmVyZW5jaW5nKG5vZGUuYXJndW1lbnQsIFJlZmVyZW5jZS5SVywgbnVsbCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFi
bGVEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2Rl
LmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNsID0gbm9kZS5kZWNsYXJhdGlvbnNbaV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RlZmluZShkZWNsLmlkLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuVmFyaWFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTogZGVjbC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlOiBkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbm9kZQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZXIgaXMgZm91bmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmlk
LCBSZWZlcmVuY2UuV1JJVEUsIGRlY2wuaW5pdCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKGRlY2wuaW5pdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5WYXJpYWJsZURlY2xh
cmF0b3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguV2hpbGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguV2l0aFN0YXRlbWVudDoKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2l0aFN0YXRlbWVudCBvYmplY3QgaXMgcmVmZXJlbmNlZCBhdCB1cHBlciBz
Y29wZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUudXBwZXIuX19yZWZlcmVuY2lu
Zyhub2RlLm9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiBsZWF2
ZShub2RlKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRTY29wZSAmJiBub2RlID09
PSBjdXJyZW50U2NvcGUuYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworCisgICAgICAgIGFzc2VydChjdXJyZW50U2NvcGUgPT09IG51bGwpOworICAgICAgICBnbG9i
YWxTY29wZSA9IG51bGw7CisgICAgICAgIHNjb3BlcyA9IG51bGw7CisgICAgICAgIG9wdGlvbnMg
PSBudWxsOworCisgICAgICAgIHJldHVybiBuZXcgU2NvcGVNYW5hZ2VyKHJlc3VsdFNjb3Blcyk7
CisgICAgfQorCisgICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUudmVyc2lvbiAqLworICAgIGV4
cG9ydHMudmVyc2lvbiA9ICcxLjAuMSc7CisgICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuUmVm
ZXJlbmNlICovCisgICAgZXhwb3J0cy5SZWZlcmVuY2UgPSBSZWZlcmVuY2U7CisgICAgLyoqIEBu
YW1lIG1vZHVsZTplc2NvcGUuVmFyaWFibGUgKi8KKyAgICBleHBvcnRzLlZhcmlhYmxlID0gVmFy
aWFibGU7CisgICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuU2NvcGUgKi8KKyAgICBleHBvcnRz
LlNjb3BlID0gU2NvcGU7CisgICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuU2NvcGVNYW5hZ2Vy
ICovCisgICAgZXhwb3J0cy5TY29wZU1hbmFnZXIgPSBTY29wZU1hbmFnZXI7CisgICAgLyoqIEBu
YW1lIG1vZHVsZTplc2NvcGUuYW5hbHl6ZSAqLworICAgIGV4cG9ydHMuYW5hbHl6ZSA9IGFuYWx5
emU7Cit9LCB0aGlzKSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLworCit9
LHsiZXN0cmF2ZXJzZSI6N31dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoKKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21h
aWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdt
YWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFp
d2kuYmU+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0
QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFz
QHFpd2kuYmU+CisgIENvcHlyaWdodCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpv
b3N0LXdpbUBib2VrZXN0ZWlqbi5ubD4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwg
PGtyaXMua293YWxAY2l4YXIuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9y
c29zIDxhcnBhZC5ib3Jzb3NAZ29vZ2xlbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMSBB
cml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KKworICBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJM
RSBGT1IgQU5ZCisgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworLypqc2xpbnQgYml0d2lzZTp0cnVlIHBsdXNwbHVzOnRydWUg
Ki8KKy8qZ2xvYmFsIGVzcHJpbWE6dHJ1ZSwgZGVmaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgd2lu
ZG93OiB0cnVlLAordGhyb3dFcnJvclRvbGVyYW50OiB0cnVlLAordGhyb3dFcnJvcjogdHJ1ZSwg
Z2VuZXJhdGVTdGF0ZW1lbnQ6IHRydWUsIHBlZWs6IHRydWUsCitwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uOiB0cnVlLCBwYXJzZUJsb2NrOiB0cnVlLCBwYXJzZUV4cHJlc3Npb246IHRydWUsCitw
YXJzZUZ1bmN0aW9uRGVjbGFyYXRpb246IHRydWUsIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uOiB0
cnVlLAorcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzOiB0cnVlLCBwYXJzZVZhcmlhYmxlSWRl
bnRpZmllcjogdHJ1ZSwKK3BhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNl
VW5hcnlFeHByZXNzaW9uOiB0cnVlLAorcGFyc2VTdGF0ZW1lbnQ6IHRydWUsIHBhcnNlU291cmNl
RWxlbWVudDogdHJ1ZSAqLworCisoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKKyAgICAndXNl
IHN0cmljdCc7CisKKyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8g
c3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gUmhpbm8sIGFuZCBwbGFpbiBi
cm93c2VyIGxvYWRpbmcuCisKKyAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgIGlm
ICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAgICAgICAg
ZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBv
cnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICBmYWN0b3J5KGV4cG9ydHMpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZhY3RvcnkoKHJvb3QuZXNwcmltYSA9IHt9KSk7CisgICAgfQorfSh0
aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBU
b2tlbiwKKyAgICAgICAgVG9rZW5OYW1lLAorICAgICAgICBGbkV4cHJUb2tlbnMsCisgICAgICAg
IFN5bnRheCwKKyAgICAgICAgUHJvcGVydHlLaW5kLAorICAgICAgICBNZXNzYWdlcywKKyAgICAg
ICAgUmVnZXgsCisgICAgICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSwKKyAgICAgICAgc291cmNlLAor
ICAgICAgICBzdHJpY3QsCisgICAgICAgIGluZGV4LAorICAgICAgICBsaW5lTnVtYmVyLAorICAg
ICAgICBsaW5lU3RhcnQsCisgICAgICAgIGxlbmd0aCwKKyAgICAgICAgZGVsZWdhdGUsCisgICAg
ICAgIGxvb2thaGVhZCwKKyAgICAgICAgc3RhdGUsCisgICAgICAgIGV4dHJhOworCisgICAgVG9r
ZW4gPSB7CisgICAgICAgIEJvb2xlYW5MaXRlcmFsOiAxLAorICAgICAgICBFT0Y6IDIsCisgICAg
ICAgIElkZW50aWZpZXI6IDMsCisgICAgICAgIEtleXdvcmQ6IDQsCisgICAgICAgIE51bGxMaXRl
cmFsOiA1LAorICAgICAgICBOdW1lcmljTGl0ZXJhbDogNiwKKyAgICAgICAgUHVuY3R1YXRvcjog
NywKKyAgICAgICAgU3RyaW5nTGl0ZXJhbDogOCwKKyAgICAgICAgUmVndWxhckV4cHJlc3Npb246
IDkKKyAgICB9OworCisgICAgVG9rZW5OYW1lID0ge307CisgICAgVG9rZW5OYW1lW1Rva2VuLkJv
b2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uRU9GXSA9ICc8
ZW5kPic7CisgICAgVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gJ0lkZW50aWZpZXInOwor
ICAgIFRva2VuTmFtZVtUb2tlbi5LZXl3b3JkXSA9ICdLZXl3b3JkJzsKKyAgICBUb2tlbk5hbWVb
VG9rZW4uTnVsbExpdGVyYWxdID0gJ051bGwnOworICAgIFRva2VuTmFtZVtUb2tlbi5OdW1lcmlj
TGl0ZXJhbF0gPSAnTnVtZXJpYyc7CisgICAgVG9rZW5OYW1lW1Rva2VuLlB1bmN0dWF0b3JdID0g
J1B1bmN0dWF0b3InOworICAgIFRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9ICdTdHJp
bmcnOworICAgIFRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSAnUmVndWxhckV4
cHJlc3Npb24nOworCisgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRv
a2VucyBpcyBhbiBleHByZXNzaW9uLgorICAgIEZuRXhwclRva2VucyA9IFsnKCcsICd7JywgJ1sn
LCAnaW4nLCAndHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKKyAgICAgICAgICAgICAgICAg
ICAgJ3JldHVybicsICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycsICd2b2lkJywKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMKKyAgICAgICAgICAgICAgICAgICAg
Jz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnLz0nLCAnJT0nLCAnPDw9JywgJz4+PScsICc+Pj49JywK
KyAgICAgICAgICAgICAgICAgICAgJyY9JywgJ3w9JywgJ149JywgJywnLAorICAgICAgICAgICAg
ICAgICAgICAvLyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgICAgICcr
JywgJy0nLCAnKicsICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+JywgJyYn
LAorICAgICAgICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/
JywgJzonLCAnPT09JywgJz09JywgJz49JywKKyAgICAgICAgICAgICAgICAgICAgJzw9JywgJzwn
LCAnPicsICchPScsICchPT0nXTsKKworICAgIFN5bnRheCA9IHsKKyAgICAgICAgQXNzaWdubWVu
dEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisgICAgICAgIEFycmF5RXhwcmVz
c2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tT
dGF0ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbics
CisgICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAgICBDYWxs
RXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRj
aENsYXVzZScsCisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhw
cmVzc2lvbicsCisgICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQn
LAorICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAgICAg
IERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAorICAgICAgICBFbXB0eVN0
YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDog
J0V4cHJlc3Npb25TdGF0ZW1lbnQnLAorICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1l
bnQnLAorICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKKyAgICAgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgICAgICBGdW5j
dGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgICAgICBJZGVudGlmaWVy
OiAnSWRlbnRpZmllcicsCisgICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorICAg
ICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCisgICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJl
bGVkU3RhdGVtZW50JywKKyAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVz
c2lvbicsCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAg
ICAgICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RFeHBy
ZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywK
KyAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDog
J1JldHVyblN0YXRlbWVudCcsCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNl
RXhwcmVzc2lvbicsCisgICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcs
CisgICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Np
b246ICdUaGlzRXhwcmVzc2lvbicsCisgICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0
ZW1lbnQnLAorICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBV
bmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNz
aW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdW
YXJpYWJsZURlY2xhcmF0aW9uJywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFi
bGVEZWNsYXJhdG9yJywKKyAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcs
CisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JworICAgIH07CisKKyAgICBQ
cm9wZXJ0eUtpbmQgPSB7CisgICAgICAgIERhdGE6IDEsCisgICAgICAgIEdldDogMiwKKyAgICAg
ICAgU2V0OiA0CisgICAgfTsKKworICAgIC8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVu
dGljYWwgdG8gVjguCisgICAgTWVzc2FnZXMgPSB7CisgICAgICAgIFVuZXhwZWN0ZWRUb2tlbjog
ICdVbmV4cGVjdGVkIHRva2VuICUwJywKKyAgICAgICAgVW5leHBlY3RlZE51bWJlcjogICdVbmV4
cGVjdGVkIG51bWJlcicsCisgICAgICAgIFVuZXhwZWN0ZWRTdHJpbmc6ICAnVW5leHBlY3RlZCBz
dHJpbmcnLAorICAgICAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjogICdVbmV4cGVjdGVkIGlkZW50
aWZpZXInLAorICAgICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICAnVW5leHBlY3RlZCByZXNlcnZl
ZCB3b3JkJywKKyAgICAgICAgVW5leHBlY3RlZEVPUzogICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1
dCcsCisgICAgICAgIE5ld2xpbmVBZnRlclRocm93OiAgJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0
aHJvdycsCisgICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lv
bicsCisgICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVz
c2lvbjogbWlzc2luZyAvJywKKyAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogICdJbnZh
bGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorICAgICAgICBJbnZhbGlkTEhTSW5G
b3JJbjogICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCisgICAgICAgIE11bHRp
cGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dp
dGNoIHN0YXRlbWVudCcsCisgICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICAnTWlzc2luZyBjYXRj
aCBvciBmaW5hbGx5IGFmdGVyIHRyeScsCisgICAgICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5l
ZCBsYWJlbCBcJyUwXCcnLAorICAgICAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBh
bHJlYWR5IGJlZW4gZGVjbGFyZWQnLAorICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2Fs
IGNvbnRpbnVlIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJl
YWsgc3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0
YXRlbWVudCcsCisgICAgICAgIFN0cmljdE1vZGVXaXRoOiAgJ1N0cmljdCBtb2RlIGNvZGUgbWF5
IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RDYXRjaFZhcmlh
YmxlOiAgJ0NhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3Ry
aWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RWYXJOYW1lOiAgJ1ZhcmlhYmxlIG5hbWUgbWF5IG5v
dCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFBh
cmFtTmFtZTogICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dl
ZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFBhcmFtRHVwZTogJ1N0cmljdCBtb2Rl
IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzJywKKyAgICAg
ICAgU3RyaWN0RnVuY3Rpb25OYW1lOiAgJ0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9y
IGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdE9jdGFsTGl0ZXJhbDog
ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAg
ICAgU3RyaWN0RGVsZXRlOiAgJ0RlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGlu
IHN0cmljdCBtb2RlLicsCisgICAgICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiAgJ0R1cGxp
Y2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmlj
dCBtb2RlJywKKyAgICAgICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6ICAnT2JqZWN0IGxpdGVyYWwg
bWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFt
ZScsCisgICAgICAgIEFjY2Vzc29yR2V0U2V0OiAgJ09iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2
ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWUnLAorICAgICAg
ICBTdHJpY3RMSFNBc3NpZ25tZW50OiAgJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMg
aXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQb3N0Zml4
OiAgJ1Bvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1
bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdExIU1ByZWZpeDog
ICdQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVu
dHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFJlc2VydmVkV29yZDog
ICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUnCisgICAgfTsKKwor
ICAgIC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCisgICAgUmVn
ZXggPSB7CisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhB
QVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUw
LVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdE
XHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3
LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVE
MC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2
RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEw
XHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1
XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBc
dTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEt
XHUwOTc3XHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4
XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERc
dTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1c
dTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUw
QTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1
MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1
MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUw
QjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBC
NUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUw
Qjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJB
QVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBD
MjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRFx1MEM1OFx1MEM1OVx1MEM2MFx1MEM2
MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBD
QjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQw
Q1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdB
LVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERD
MC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MVx1MEU4
Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlG
XHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJc
dTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1c
dTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAt
XHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUt
XHUxMDgxXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMt
XHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYw
LVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEy
QkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUx
MzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1
MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3MDAt
XHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2
Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4
MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ1x1MTk1MC1cdTE5NkRcdTE5
NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XHUxQTIwLVx1
MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1
MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0Rc
dTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAt
XHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1
N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZC
Q1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFG
REJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIw
OTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIx
MjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIx
NDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUy
QzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUy
RDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1
MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0Vc
dTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5
XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBB
MS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUz
MUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1
QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1c
dUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFRlx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4
XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgw
My1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVB
OEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1
QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1c
dUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1
QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1c
dUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2
XHVBQjI4LVx1QUIyRVx1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdD
Qi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVG
QjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVG
QjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVG
RDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1
RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0Et
XHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJyksCisgICAgICAgIE5vbkFzY2lpSWRl
bnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZc
eEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1
MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUw
MzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1c
dTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZc
dTA1QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1
MDYxMC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYt
XHUwNkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0Mw
LVx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwXHUwOEEyLVx1MDhB
Q1x1MDhFNC1cdTA4RkVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5NzdcdTA5
NzktXHUwOTdGXHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUw
OUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUw
OUM4XHUwOUNCLVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUw
OUYxXHUwQTAxLVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUw
QTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEz
RS1cdTBBNDJcdTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1
RVx1MEE2Ni1cdTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBB
OTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUw
QUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1
MEFFRlx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1
MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNDLVx1MEI0NFx1MEI0N1x1
MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYzXHUw
QjY2LVx1MEI2Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUw
QjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJB
OC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUw
QkNEXHUwQkQwXHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMS1cdTBDMDNcdTBDMDUtXHUwQzBDXHUw
QzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRC1c
dTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OFx1MEM1OVx1
MEM2MC1cdTBDNjNcdTBDNjYtXHUwQzZGXHUwQzgyXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1c
dTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkMtXHUwQ0M0
XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0Uz
XHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwMlx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUt
XHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0
RVx1MEQ1N1x1MEQ2MC1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4
M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBE
QzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERGMlx1MERGM1x1MEUw
MS1cdTBFM0FcdTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4
N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVB
M1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJEXHUwRUMw
LVx1MEVDNFx1MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYw
MFx1MEYxOFx1MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0UtXHUwRjQ3
XHUwRjQ5LVx1MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZCQ1x1MEZD
Nlx1MTAwMC1cdTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBE
MC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEy
NUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1
MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1c
dTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzODAtXHUxMzhG
XHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZB
MC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUx
NzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUx
NzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUx
ODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1c
dTE5MUNcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0
XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOUQ5XHUxQTAwLVx1MUExQlx1MUEy
MC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFC
MDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1
MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZc
dTFEMDAtXHUxREU2XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4
LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgw
LVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZE
MC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUx
RkZDXHUyMDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5
Q1x1MjBEMC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjEx
M1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJG
LVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMw
MC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUy
RDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUy
REE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1
MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTJFMkZc
dTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQx
LVx1MzA5Nlx1MzA5OVx1MzA5QVx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBG
Rlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0
MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1
QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2OTdc
dUE2OUYtXHVBNkYxXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkw
LVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODI3XHVBODQwLVx1QTg3M1x1QTg4MC1cdUE4
QzRcdUE4RDAtXHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkwMC1cdUE5MkRcdUE5MzAtXHVB
OTUzXHVBOTYwLVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVBQTAwLVx1QUEzNlx1
QUE0MC1cdUFBNERcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3Qlx1QUE4MC1c
dUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFRlx1QUFGMi1cdUFBRjZcdUFCMDEtXHVBQjA2
XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUJD
MC1cdUFCRUFcdUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3
QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVG
QjEzLVx1RkIxN1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1
RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1
RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMjZc
dUZFMzNcdUZFMzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAt
XHVGRjE5XHVGRjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMy
LVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10nKQorICAgIH07
CisKKyAgICAvLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cg
YW4gZXJyb3IuCisgICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qg
c2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0CisgICAgLy8gdG8gY2F0Y2ggYSBsb2dp
YyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2Uu
CisgICAgLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBv
biBhbnkgdXNlciBpbnB1dC4KKworICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3Nh
Z2UpIHsKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgIGlmICghY29u
ZGl0aW9uKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyArIG1lc3Nh
Z2UpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7ICAgLy8gMC4uOQorICAg
IH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIz
NDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9m
KGNoKSA+PSAwOworICAgIH0KKworCisgICAgLy8gNy4yIFdoaXRlIFNwYWNlCisKKyAgICBmdW5j
dGlvbiBpc1doaXRlU3BhY2UoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyMCkgfHwg
KGNoID09PSAweDA5KSB8fCAoY2ggPT09IDB4MEIpIHx8IChjaCA9PT0gMHgwQykgfHwgKGNoID09
PSAweEEwKSB8fAorICAgICAgICAgICAgKGNoID49IDB4MTY4MCAmJiBbMHgxNjgwLCAweDE4MEUs
IDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwg
MHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAw
eEZFRkZdLmluZGV4T2YoY2gpID49IDApOworICAgIH0KKworICAgIC8vIDcuMyBMaW5lIFRlcm1p
bmF0b3JzCisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAgIHJl
dHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8
IChjaCA9PT0gMHgyMDI5KTsKKyAgICB9CisKKyAgICAvLyA3LjYgSWRlbnRpZmllciBOYW1lcyBh
bmQgSWRlbnRpZmllcnMKKworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRv
bGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8
PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNo
IDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID09PSAweDVDKSB8
fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAgICAoKGNo
ID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZy
b21DaGFyQ29kZShjaCkpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0
KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwg
IC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gMHg0
MSAmJiBjaCA8PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSAw
eDYxICYmIGNoIDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID49
IDB4MzAgJiYgY2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45CisgICAgICAgICAgICAoY2gg
PT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAgICAg
ICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0
KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgLy8gNy42LjEuMiBGdXR1
cmUgUmVzZXJ2ZWQgV29yZHMKKworICAgIGZ1bmN0aW9uIGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKGlk
KSB7CisgICAgICAgIHN3aXRjaCAoaWQpIHsKKyAgICAgICAgY2FzZSAnY2xhc3MnOgorICAgICAg
ICBjYXNlICdlbnVtJzoKKyAgICAgICAgY2FzZSAnZXhwb3J0JzoKKyAgICAgICAgY2FzZSAnZXh0
ZW5kcyc6CisgICAgICAgIGNhc2UgJ2ltcG9ydCc6CisgICAgICAgIGNhc2UgJ3N1cGVyJzoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKGlkKSB7CisgICAgICAgIHN3aXRjaCAoaWQpIHsKKyAgICAgICAgY2FzZSAn
aW1wbGVtZW50cyc6CisgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6CisgICAgICAgIGNhc2UgJ3Bh
Y2thZ2UnOgorICAgICAgICBjYXNlICdwcml2YXRlJzoKKyAgICAgICAgY2FzZSAncHJvdGVjdGVk
JzoKKyAgICAgICAgY2FzZSAncHVibGljJzoKKyAgICAgICAgY2FzZSAnc3RhdGljJzoKKyAgICAg
ICAgY2FzZSAneWllbGQnOgorICAgICAgICBjYXNlICdsZXQnOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0ZWRXb3JkKGlkKSB7CisgICAg
ICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJzsKKyAgICB9CisK
KyAgICAvLyA3LjYuMS4xIEtleXdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsK
KyAgICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICdjb25zdCcg
aXMgc3BlY2lhbGl6ZWQgYXMgS2V5d29yZCBpbiBWOC4KKyAgICAgICAgLy8gJ3lpZWxkJyBhbmQg
J2xldCcgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQu
CisgICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy4K
KworICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkgeworICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2Rv
Jyk7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8
fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAorICAgICAgICAgICAgICAgIChp
ZCA9PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcpOworICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09
ICdjYXNlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAn
d2l0aCcpIHx8IChpZCA9PT0gJ2VudW0nKTsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdj
YXRjaCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdj
b25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdj
bGFzcycpIHx8IChpZCA9PT0gJ3N1cGVyJyk7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAg
IHJldHVybiAoaWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09
ICdkZWxldGUnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9
PT0gJ2V4cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpOworICAgICAgICBjYXNlIDc6CisgICAg
ICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8
fCAoaWQgPT09ICdleHRlbmRzJyk7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVy
biAoaWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAn
ZGVidWdnZXInKTsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09
ICdpbnN0YW5jZW9mJyk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyA3LjQgQ29tbWVudHMKKworICAgIGZ1bmN0
aW9uIGFkZENvbW1lbnQodHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxvYykgeworICAgICAgICB2
YXIgY29tbWVudCwgYXR0YWNoZXI7CisKKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0g
J251bWJlcicsICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpOworCisgICAgICAg
IC8vIEJlY2F1c2UgdGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlzIHNjYW5uZWQsIG9mdGVuIHRo
ZSBjb21tZW50cworICAgICAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcg
dGhlIGxleGljYWwgYW5hbHlzaXMuCisgICAgICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBh
ZGRpbmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHkKKyAgICAgICAgLy8g
aGFuZGxlZCBpdC4KKyAgICAgICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5sYXN0Q29t
bWVudFN0YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgY29tbWVudCA9IHsKKyAgICAgICAgICAgIHR5
cGU6IHR5cGUsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgfTsKKyAgICAgICAg
aWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBl
bmRdOworICAgICAgICB9CisgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgIGNv
bW1lbnQubG9jID0gbG9jOworICAgICAgICB9CisgICAgICAgIGV4dHJhLmNvbW1lbnRzLnB1c2go
Y29tbWVudCk7CisgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAg
ICBleHRyYS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgICAgIGV4dHJh
LnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQpIHsKKyAgICAgICAgdmFyIHN0
YXJ0LCBsb2MsIGNoLCBjb21tZW50OworCisgICAgICAgIHN0YXJ0ID0gaW5kZXggLSBvZmZzZXQ7
CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0
YXJ0IC0gb2Zmc2V0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KTsKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWlu
YXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5k
ZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4IC0g
MSwgbG9jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAx
MyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7CisgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbGluZU51
bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXh0cmEu
Y29tbWVudHMpIHsKKyAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBv
ZmZzZXQsIGluZGV4KTsKKyAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0
YXJ0CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1l
bnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IHNraXBNdWx0aUxpbmVDb21tZW50KCkgeworICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNv
bW1lbnQ7CisKKyAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBzdGFy
dCA9IGluZGV4IC0gMjsKKyAgICAgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgICAgICBzdGFy
dDogeworICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAg
ICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeworICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1l
bnQgZW5kcyB3aXRoICcqLycuCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4ICsgMSkgPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJh
LmNvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNs
aWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5l
bmQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAg
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVu
dCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNraXBDb21tZW50KCkgeworICAgICAgICB2YXIgY2gsIHN0YXJ0OworCisg
ICAgICAgIHN0YXJ0ID0gKGluZGV4ID09PSAwKTsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKworICAg
ICAgICAgICAgaWYgKGlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkgeworICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgc3Rh
cnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAw
MkYgaXMgJy8nCisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCAr
IDEpOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgeworICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAg
ICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7CisgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAv
LyBVKzAwMkEgaXMgJyonCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21t
ZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBj
aCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgJy0nCisgICAgICAgICAgICAgICAgLy8gVSswMDNF
IGlzICc+JworICAgICAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAx
KSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudAor
ICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgICAgICAgICBza2lw
U2luZ2xlTGluZUNvbW1lbnQoMyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnCisgICAgICAgICAgICAgICAgaWYg
KHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09ICchLS0nKSB7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YAorICAgICAgICAgICAgICAgICAgICArK2luZGV4
OyAvLyBgIWAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xl
TGluZUNvbW1lbnQoNCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7CisgICAgICAgIHZhciBpLCBsZW4s
IGNoLCBjb2RlID0gMDsKKworICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7
CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgaWYgKGlu
ZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAq
IDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHsKKyAgICAgICAg
dmFyIGNoLCBpZDsKKworICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspOwor
ICAgICAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworCisgICAgICAgIC8vICdcdScg
KFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICBp
ZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAg
ICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29k
ZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkID0g
Y2g7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFp
c0lkZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlkICs9IFN0cmluZy5mcm9t
Q2hhckNvZGUoY2gpOworCisgICAgICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVu
b3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1Qykg
eworICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOworICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAg
ICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNv
ZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZCArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBpZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkgeworICAgICAg
ICB2YXIgc3RhcnQsIGNoOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXgrKzsKKyAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgICAg
IC8vIEJsYWNrc2xhc2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisg
ICAgICAgICAgICAgICAgaW5kZXggPSBzdGFydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0
RXNjYXBlZElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0lk
ZW50aWZpZXJQYXJ0KGNoKSkgeworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgc3RhcnQsIGlk
LCB0eXBlOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisKKyAgICAgICAgLy8gQmFja3NsYXNo
IChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgaWQgPSAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkg
OiBnZXRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBs
aXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLgorICAgICAgICAvLyBUaHVzLCBpdCBtdXN0
IGJlIGFuIGlkZW50aWZpZXIuCisgICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKKyAgICAg
ICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyOworICAgICAgICB9IGVsc2UgaWYgKGlzS2V5
d29yZChpZCkpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkOworICAgICAgICB9
IGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxs
TGl0ZXJhbDsKKyAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFs
c2UnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAg
ICAgdmFsdWU6IGlkLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAg
ICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAor
ICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworCisgICAgLy8gNy43
IFB1bmN0dWF0b3JzCisKKyAgICBmdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHsKKyAgICAgICAg
dmFyIHN0YXJ0ID0gaW5kZXgsCisgICAgICAgICAgICBjb2RlID0gc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpLAorICAgICAgICAgICAgY29kZTIsCisgICAgICAgICAgICBjaDEgPSBzb3VyY2VbaW5k
ZXhdLAorICAgICAgICAgICAgY2gyLAorICAgICAgICAgICAgY2gzLAorICAgICAgICAgICAgY2g0
OworCisgICAgICAgIHN3aXRjaCAoY29kZSkgeworCisgICAgICAgIC8vIENoZWNrIGZvciBtb3N0
IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgorICAgICAgICBjYXNlIDB4MkU6
ICAvLyAuIGRvdAorICAgICAgICBjYXNlIDB4Mjg6ICAvLyAoIG9wZW4gYnJhY2tldAorICAgICAg
ICBjYXNlIDB4Mjk6ICAvLyApIGNsb3NlIGJyYWNrZXQKKyAgICAgICAgY2FzZSAweDNCOiAgLy8g
OyBzZW1pY29sb24KKyAgICAgICAgY2FzZSAweDJDOiAgLy8gLCBjb21tYQorICAgICAgICBjYXNl
IDB4N0I6ICAvLyB7IG9wZW4gY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDdEOiAgLy8gfSBj
bG9zZSBjdXJseSBicmFjZQorICAgICAgICBjYXNlIDB4NUI6ICAvLyBbCisgICAgICAgIGNhc2Ug
MHg1RDogIC8vIF0KKyAgICAgICAgY2FzZSAweDNBOiAgLy8gOgorICAgICAgICBjYXNlIDB4M0Y6
ICAvLyA/CisgICAgICAgIGNhc2UgMHg3RTogIC8vIH4KKyAgICAgICAgICAgICsraW5kZXg7Cisg
ICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29k
ZSA9PT0gMHgyOCkgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9
IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09
PSAweDdCKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0
cmEudG9rZW5zLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksCisgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5l
U3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAg
ICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOworCisgICAg
ICAgICAgICAvLyAnPScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29u
IG9wZXJhdG9yLgorICAgICAgICAgICAgaWYgKGNvZGUyID09PSAweDNEKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAweDJCOiAgLy8gKwor
ICAgICAgICAgICAgICAgIGNhc2UgMHgyRDogIC8vIC0KKyAgICAgICAgICAgICAgICBjYXNlIDB4
MkY6ICAvLyAvCisgICAgICAgICAgICAgICAgY2FzZSAweDNDOiAgLy8gPAorICAgICAgICAgICAg
ICAgIGNhc2UgMHgzRTogIC8vID4KKyAgICAgICAgICAgICAgICBjYXNlIDB4NUU6ICAvLyBeCisg
ICAgICAgICAgICAgICAgY2FzZSAweDdDOiAgLy8gfAorICAgICAgICAgICAgICAgIGNhc2UgMHgy
NTogIC8vICUKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjY6ICAvLyAmCisgICAgICAgICAgICAg
ICAgY2FzZSAweDJBOiAgLy8gKgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
VG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlMiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjE6IC8vICEKKyAgICAg
ICAgICAgICAgICBjYXNlIDB4M0Q6IC8vID0KKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0g
MjsKKworICAgICAgICAgICAgICAgICAgICAvLyAhPT0gYW5kID09PQorICAgICAgICAgICAgICAg
ICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNEKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5Q
dW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShz
dGFydCwgaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kOiBpbmRleAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0
dWF0b3I6ID4+Pj0KKworICAgICAgICBjaDQgPSBzb3VyY2Uuc3Vic3RyKGluZGV4LCA0KTsKKwor
ICAgICAgICBpZiAoY2g0ID09PSAnPj4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDQ7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0
b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoNCwKKyAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVu
Y3R1YXRvcnM6ID09PSAhPT0gPj4+IDw8PSA+Pj0KKworICAgICAgICBjaDMgPSBjaDQuc3Vic3Ry
KDAsIDMpOworCisgICAgICAgIGlmIChjaDMgPT09ICc+Pj4nIHx8IGNoMyA9PT0gJzw8PScgfHwg
Y2gzID09PSAnPj49JykgeworICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAg
ICAgICAgICB2YWx1ZTogY2gzLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1i
ZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0KKworICAgICAgICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9y
czogKysgLS0gPDwgPj4gJiYgfHwKKyAgICAgICAgY2gyID0gY2gzLnN1YnN0cigwLCAyKTsKKwor
ICAgICAgICBpZiAoKGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8Jy5pbmRleE9mKGNoMSkgPj0g
MCkpIHx8IGNoMiA9PT0gJz0+JykgeworICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogY2gyLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5jdHVhdG9y
czogPCA+ID0gISArIC0gKiAlICYgfCBeIC8KKyAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmlu
ZGV4T2YoY2gxKSA+PSAwKSB7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAg
ICAgICAgIHZhbHVlOiBjaDEsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAg
ICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAg
fTsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0
ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICAvLyA3LjguMyBOdW1lcmljIExpdGVy
YWxzCisKKyAgICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkgeworICAgICAgICB2YXIg
bnVtYmVyID0gJyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgr
K107CisgICAgICAgIH0KKworICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdB
TCcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAgICAg
IHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksCisgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAg
ICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07
CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChzdGFydCkgeworICAgICAg
ICB2YXIgbnVtYmVyID0gJzAnICsgc291cmNlW2luZGV4KytdOworICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgaXNEZWNpbWFsRGln
aXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAor
ICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksCisgICAgICAgICAgICBvY3Rh
bDogdHJ1ZSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAg
ICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2Fu
TnVtZXJpY0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDsKKworICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydChpc0RlY2ltYWxEaWdpdChj
aC5jaGFyQ29kZUF0KDApKSB8fCAoY2ggPT09ICcuJyksCisgICAgICAgICAgICAnTnVtZXJpYyBs
aXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50
Jyk7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAgbnVtYmVyID0gJyc7CisgICAg
ICAgIGlmIChjaCAhPT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgr
K107CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAgIC8vIEhl
eCBudW1iZXIgc3RhcnRzIHdpdGggJzB4Jy4KKyAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBz
dGFydHMgd2l0aCAnMCcuCisgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7CisgICAgICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSGV4TGl0ZXJh
bChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc09jdGFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFs
KHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBkZWNpbWFs
IG51bWJlciBzdGFydHMgd2l0aCAnMCcgc3VjaCBhcyAnMDknIGlzIGlsbGVnYWwuCisgICAgICAg
ICAgICAgICAgaWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7
CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4Kytd
OworICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeworICAgICAgICAgICAgbnVt
YmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhd
OworICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgeworICAgICAgICAg
ICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAg
ICAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAorICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAg
ICB9CisKKyAgICAvLyA3LjguNCBTdHJpbmcgTGl0ZXJhbHMKKworICAgIGZ1bmN0aW9uIHNjYW5T
dHJpbmdMaXRlcmFsKCkgeworICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBzdGFydCwgY2gs
IGNvZGUsIHVuZXNjYXBlZCwgcmVzdG9yZSwgb2N0YWwgPSBmYWxzZSwgc3RhcnRMaW5lTnVtYmVy
LCBzdGFydExpbmVTdGFydDsKKyAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsK
KyAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CisKKyAgICAgICAgcXVvdGUgPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoKHF1b3RlID09PSAnXCcnIHx8IHF1b3RlID09
PSAnIicpLAorICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBx
dW90ZScpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgICsraW5kZXg7CisKKyAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtp
bmRleCsrXTsKKworICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgeworICAgICAgICAgICAg
ICAgIHF1b3RlID0gJyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgr
K107CisgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFy
Q29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHVuZXNjYXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSB1bmVzY2FwZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSAnXHInOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdcdCc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xiJzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdceDBCJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0
KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4
ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmlu
ZyBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAy
LCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihj
aCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
IDwgbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNP
Y3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4
KytdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5n
LmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNl
W2luZGV4XSA9PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRl
eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1p
bmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1b3RlICE9PSAnJykgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmlu
Z0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogc3RyLAorICAgICAgICAgICAgb2N0YWw6IG9j
dGFsLAorICAgICAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsCisgICAg
ICAgICAgICBzdGFydExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsCisgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
IH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykgewor
ICAgICAgICB2YXIgdmFsdWU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YWx1ZSA9IG5l
dyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEJv
ZHkoKSB7CisgICAgICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9k
eTsKKworICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydChjaCA9PT0g
Jy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gn
KTsKKyAgICAgICAgc3RyID0gc291cmNlW2luZGV4KytdOworCisgICAgICAgIGNsYXNzTWFya2Vy
ID0gZmFsc2U7CisgICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAg
ICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIC8vIEVDTUEt
MjYyIDcuOC41CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNv
ZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3RyICs9IGNoOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykgeworICAgICAgICAgICAgICAgICAg
ICBjbGFzc01hcmtlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGVybWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykgeworICAgICAgICAgICAgICAgICAg
ICBjbGFzc01hcmtlciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KKyAgICAgICAgYm9k
eSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpOworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgdmFsdWU6IGJvZHksCisgICAgICAgICAgICBsaXRlcmFsOiBzdHIKKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7CisgICAgICAgIHZh
ciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTsKKworICAgICAgICBzdHIgPSAnJzsKKyAgICAgICAg
ZmxhZ3MgPSAnJzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQo
Y2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAm
JiBpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsK
KyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1JykgeworICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzdHIgKz0gJ1xcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0
b3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3Jl
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZsYWdzICs9ICd1JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXFx1JzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xc
JzsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAgICAgICAg
ICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgdmFsdWU6IGZsYWdzLAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisg
ICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHsKKyAgICAgICAg
dmFyIHN0YXJ0LCBib2R5LCBmbGFncywgcGF0dGVybiwgdmFsdWU7CisKKyAgICAgICAgbG9va2Fo
ZWFkID0gbnVsbDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgc3RhcnQgPSBpbmRl
eDsKKworICAgICAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTsKKyAgICAgICAgZmxhZ3MgPSBz
Y2FuUmVnRXhwRmxhZ3MoKTsKKyAgICAgICAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUs
IGZsYWdzLnZhbHVlKTsKKworICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQs
CisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5k
ZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgbGl0ZXJhbDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0ZXJhbCwKKyAgICAgICAgICAg
IHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVu
ZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgo
KSB7CisgICAgICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuOworCisgICAgICAgIHNraXBD
b21tZW50KCk7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxvYyA9IHsKKyAgICAg
ICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAg
ICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7CisgICAgICAgIGxvYy5lbmQg
PSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgY29sdW1uOiBp
bmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9y
ZSBuZXh0ICovCisgICAgICAgIGlmICghZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgIC8v
IFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSAnLycgb3IgJy89JworICAg
ICAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAg
dG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICAg
ICAgICAgIGlmICh0b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5j
dHVhdG9yJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8
fCB0b2tlbi52YWx1ZSA9PT0gJy89JykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEu
dG9rZW5zLnBvcCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7CisgICAgICAg
ICAgICAgICAgdHlwZTogJ1JlZ3VsYXJFeHByZXNzaW9uJywKKyAgICAgICAgICAgICAgICB2YWx1
ZTogcmVnZXgubGl0ZXJhbCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAor
ICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZWdleDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJO
YW1lKHRva2VuKSB7CisgICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlm
aWVyIHx8CisgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8CisgICAg
ICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fAorICAgICAgICAg
ICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYWR2YW5jZVNsYXNoKCkgeworICAgICAgICB2YXIgcHJldlRva2VuLAorICAgICAgICAgICAg
Y2hlY2tUb2tlbjsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06Cisg
ICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWdu
CisgICAgICAgIHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0g
MV07CisgICAgICAgIGlmICghcHJldlRva2VuKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIGJl
Zm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4KKyAgICAgICAgICAgIHJldHVybiBj
b2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09
ICdQdW5jdHVhdG9yJykgeworICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ10n
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnKScpIHsKKyAgICAgICAg
ICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0g
MV07CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2lmJyB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aGlsZScgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnZm9yJyB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICd3aXRoJykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICd9JykgeworICAgICAgICAgICAgICAgIC8vIERpdmlk
aW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLAorICAgICAgICAg
ICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0LgorICAgICAgICAgICAgICAg
IGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlw
ZSA9PT0gJ0tleXdvcmQnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5j
dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRy
YS5vcGVuQ3VybHlUb2tlbiAtIDRdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9r
ZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS50
b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0udHlwZSA9PT0gJ0tleXdv
cmQnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLgorICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2Vu
IC0gNV07CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcworICAgICAgICAg
ICAgICAgIC8vIGEgZGVjbGFyYXRpb24gb3IgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAg
ICBpZiAoRm5FeHByVG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29sbGVj
dFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnS2V5
d29yZCcpIHsKKyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBh
ZHZhbmNlKCkgeworICAgICAgICB2YXIgY2g7CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKwor
ICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFRva2VuLkVPRiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgIHN0YXJ0OiBpbmRleCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVB
dChpbmRleCk7CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBW
ZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgOworICAgICAgICBpZiAoY2ggPT09IDB4MjggfHwgY2gg
PT09IDB4MjkgfHwgY2ggPT09IDB4M0IpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1
YXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdp
dGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKyAgICAg
ICAgaWYgKGNoID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7CisgICAgICAgICAgICByZXR1cm4g
c2NhblN0cmluZ0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gRG90ICguKSBV
KzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBu
ZWVkCisgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgaWYg
KGNoID09PSAweDJFKSB7CisgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVy
aWNMaXRlcmFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0
dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsK
KyAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFNsYXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3RhcnQgYSByZWdleC4KKyAgICAg
ICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNoID09PSAweDJGKSB7CisgICAgICAgICAgICByZXR1
cm4gYWR2YW5jZVNsYXNoKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2NhblB1bmN0
dWF0b3IoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7CisgICAgICAg
IHZhciBsb2MsIHRva2VuLCByYW5nZSwgdmFsdWU7CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsK
KyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICBs
aW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3Rh
cnQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0b2tlbiA9IGFkdmFuY2Uo
KTsKKyAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgIH07CisKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdmFsdWUgPSBz
b3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7CisgICAgICAgICAgICBleHRyYS50
b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVd
LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICByYW5nZTog
W3Rva2VuLnN0YXJ0LCB0b2tlbi5lbmRdLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBsZXgoKSB7CisgICAgICAgIHZhciB0b2tlbjsKKworICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgaW5kZXggPSB0b2tlbi5lbmQ7CisgICAgICAgIGxpbmVO
dW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOworICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5l
U3RhcnQ7CisKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1
bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOworCisgICAgICAgIGluZGV4
ID0gdG9rZW4uZW5kOworICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAg
ICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OworCisgICAgICAgIHJldHVybiB0b2tl
bjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwZWVrKCkgeworICAgICAgICB2YXIgcG9zLCBsaW5l
LCBzdGFydDsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAgbGluZSA9IGxpbmVOdW1i
ZXI7CisgICAgICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworICAgICAgICBsb29rYWhlYWQgPSAodHlw
ZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZh
bmNlKCk7CisgICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsK
KyAgICAgICAgbGluZVN0YXJ0ID0gc3RhcnQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gUG9zaXRp
b24obGluZSwgY29sdW1uKSB7CisgICAgICAgIHRoaXMubGluZSA9IGxpbmU7CisgICAgICAgIHRo
aXMuY29sdW1uID0gY29sdW1uOworICAgIH0KKworICAgIGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9u
KHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLnN0
YXJ0ID0gbmV3IFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pOworICAgICAgICB0aGlz
LmVuZCA9IG5ldyBQb3NpdGlvbihsaW5lLCBjb2x1bW4pOworICAgIH0KKworICAgIFN5bnRheFRy
ZWVEZWxlZ2F0ZSA9IHsKKworICAgICAgICBuYW1lOiAnU3ludGF4VHJlZScsCisKKyAgICAgICAg
cHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICB2YXIgbGFzdENo
aWxkLCB0cmFpbGluZ0NvbW1lbnRzOworCisgICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSBT
eW50YXguUHJvZ3JhbSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbMF0u
cmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICB0cmFpbGlu
Z0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICAgICAg
ZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5n
dGggLSAxXS50cmFpbGluZ0NvbW1lbnRzICYmCisgICAgICAgICAgICAgICAgICAgICAgICBleHRy
YS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJh
aWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJh
LmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmln
aHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay4KKyAgICAg
ICAgICAgIHdoaWxlIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgZXh0cmEu
Ym90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnJhbmdl
WzBdID49IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBleHRy
YS5ib3R0b21SaWdodFN0YWNrLnBvcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAobGFzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29t
bWVudHMgJiYgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tsYXN0Q2hpbGQubGVhZGluZ0NvbW1l
bnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRz
OworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50czsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLmxlYWRpbmdD
b21tZW50cy5sZW5ndGggPiAwICYmIGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5n
Q29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkgeworICAgICAg
ICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzOwor
ICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAg
fQorCisKKyAgICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wdXNoKG5vZGUpOworICAg
ICAgICB9LAorCisgICAgICAgIG1hcmtFbmQ6IGZ1bmN0aW9uIChub2RlLCBzdGFydFRva2VuKSB7
CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICBub2RlLnJh
bmdlID0gW3N0YXJ0VG9rZW4uc3RhcnQsIGluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICBub2RlLmxvYyA9IG5ldyBTb3Vy
Y2VMb2NhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydExpbmVOdW1i
ZXIgPT09IHVuZGVmaW5lZCA/ICBzdGFydFRva2VuLmxpbmVOdW1iZXIgOiBzdGFydFRva2VuLnN0
YXJ0TGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydCAtIChz
dGFydFRva2VuLnN0YXJ0TGluZVN0YXJ0ID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5l
U3RhcnQgOiBzdGFydFRva2VuLnN0YXJ0TGluZVN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAg
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggLSBsaW5lU3RhcnQKKyAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3Mobm9kZSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ29tbWVudChub2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9LAorCisgICAgICAgIHBvc3RQcm9j
ZXNzOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkgewor
ICAgICAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheUV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAob3Bl
cmF0b3IsIGxlZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBv
cGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAg
ICAgICAgICByaWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdo
dCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0
b3IgPT09ICcmJicpID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bnRheC5CaW5hcnlFeHByZXNzaW9uOworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBv
cGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAorICAgICAgICAgICAgICAgIHJp
Z2h0OiByaWdodAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVC
bG9ja1N0YXRlbWVudDogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJsb2NrU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQnJlYWtTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgbGFiZWw6IGxhYmVsCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYWxsRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAgICAn
YXJndW1lbnRzJzogYXJncworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVDYXRjaENsYXVzZTogZnVuY3Rpb24gKHBhcmFtLCBib2R5KSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYXRjaENsYXVzZSwKKyAgICAg
ICAgICAgICAgICBwYXJhbTogcGFyYW0sCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDb25kaXRpb25hbEV4cHJl
c3Npb246IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbmRpdGlvbmFsRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGNv
bnNlcXVlbnQ6IGNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5h
dGUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29udGludWVT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguQ29udGludWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgbGFiZWw6IGxhYmVsCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZURlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVEb1doaWxlU3RhdGVtZW50OiBm
dW5jdGlvbiAoYm9keSwgdGVzdCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguRG9XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5
OiBib2R5LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkVtcHR5U3Rh
dGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUV4cHJl
c3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoaW5pdCwg
dGVzdCwgdXBkYXRlLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5Gb3JTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgaW5pdDogaW5p
dCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIHVwZGF0ZTog
dXBkYXRlLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCBy
aWdodCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguRm9ySW5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAg
ICAgICAgICAgICAgICByaWdodDogcmlnaHQsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwK
KyAgICAgICAgICAgICAgICBlYWNoOiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFt
cywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgaWQ6
IGlkLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgICAgIGRl
ZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAg
ICAgICAgIHJlc3Q6IG51bGwsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKKyAg
ICAgICAgICAgICAgICBleHByZXNzaW9uOiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFy
YW1zLCBkZWZhdWx0cywgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGlk
OiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAg
ICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCisg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LklkZW50aWZpZXIs
CisgICAgICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQs
IGFsdGVybmF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAg
ICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZTogYWx0ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUxhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGFiZWxlZFN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVMaXRlcmFs
OiBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZh
bHVlLAorICAgICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tl
bi5lbmQpCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU1lbWJl
ckV4cHJlc3Npb246IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTWVtYmVyRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICBjb21wdXRlZDogYWNjZXNzb3IgPT09ICdbJywKKyAg
ICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTog
cHJvcGVydHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTmV3
RXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTmV3RXhwcmVzc2lvbiwKKyAgICAgICAg
ICAgICAgICBjYWxsZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJn
cworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVPYmplY3RFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAocHJvcGVydGllcykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFy
Z3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5VcGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRv
ciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAg
cHJlZml4OiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVQcm9ncmFtOiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvZ3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBi
b2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVByb3BlcnR5
OiBmdW5jdGlvbiAoa2luZCwga2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUHJvcGVydHksCisgICAgICAgICAgICAgICAga2V5
OiBrZXksCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIGtp
bmQ6IGtpbmQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUmV0
dXJuU3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJldHVyblN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwcmVzc2lvbnMp
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNl
cXVlbmNlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lv
bnMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3dpdGNoQ2Fz
ZTogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlN3aXRjaENhc2UsCisgICAgICAgICAgICAgICAg
dGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50CisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDog
ZnVuY3Rpb24gKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBkaXNjcmltaW5hbnQ6IGRpc2NyaW1pbmFudCwKKyAgICAgICAgICAgICAgICBjYXNlczog
Y2FzZXMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGhpc0V4
cHJlc3Npb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlRoaXNFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZVRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQp
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRo
cm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVUcnlTdGF0ZW1lbnQ6IGZ1bmN0
aW9uIChibG9jaywgZ3VhcmRlZEhhbmRsZXJzLCBoYW5kbGVycywgZmluYWxpemVyKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UcnlTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgYmxvY2s6IGJsb2NrLAorICAgICAgICAgICAgICAgIGd1YXJk
ZWRIYW5kbGVyczogZ3VhcmRlZEhhbmRsZXJzLAorICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBo
YW5kbGVycywKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplcgorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0
aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0g
JysrJyB8fCBvcGVyYXRvciA9PT0gJy0tJykgeworICAgICAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50
LAorICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFy
YXRpb25zLCBraW5kKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0
aW9uczogZGVjbGFyYXRpb25zLAorICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBm
dW5jdGlvbiAoaWQsIGluaXQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKKyAgICAgICAgICAgICAgICBpZDog
aWQsCisgICAgICAgICAgICAgICAgaW5pdDogaW5pdAorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGJvZHkp
IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lldo
aWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAg
ICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaXRoU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhlcmUgaXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0IHRva2VuLgorCisg
ICAgZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkgeworICAgICAgICB2YXIgcG9zLCBsaW5l
LCBzdGFydCwgZm91bmQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBs
aW5lTnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgc2tpcENvbW1l
bnQoKTsKKyAgICAgICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lOworICAgICAgICBpbmRl
eCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7CisgICAgICAgIGxpbmVTdGFydCA9
IHN0YXJ0OworCisgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICAvLyBUaHJvdyBh
biBleGNlcHRpb24KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3IodG9rZW4sIG1lc3NhZ2VGb3Jt
YXQpIHsKKyAgICAgICAgdmFyIGVycm9yLAorICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksCisgICAgICAgICAgICBtc2cgPSBtZXNzYWdl
Rm9ybWF0LnJlcGxhY2UoCisgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQo
aW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2Un
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVt
YmVyID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUg
JyArIHRva2VuLmxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAgICAgICAgICAgIGVycm9yLmlu
ZGV4ID0gdG9rZW4uc3RhcnQ7CisgICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4u
bGluZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IHRva2VuLnN0YXJ0IC0gbGlu
ZVN0YXJ0ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVy
cm9yKCdMaW5lICcgKyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJv
ci5pbmRleCA9IGluZGV4OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmVOdW1i
ZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxpbmVTdGFydCArIDE7Cisg
ICAgICAgIH0KKworICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9IG1zZzsKKyAgICAgICAgdGhy
b3cgZXJyb3I7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGhyb3dFcnJvclRvbGVyYW50KCkgewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVu
dHMpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3Jz
KSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKworICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0
b2tlbi4KKworICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0b2tlbikgeworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRv
a2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgdGhyb3dF
cnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQp
IHsKKyAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVz
ZXJ2ZWQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVz
ZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBN
ZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEJvb2xlYW5MaXRlcmFsLCBOdWxsTGl0ZXJhbCwgb3IgUHVuY3R1YXRvci4KKyAgICAg
ICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1
ZSk7CisgICAgfQorCisgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBz
cGVjaWZpZWQgcHVuY3R1YXRvci4KKyAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93bi4KKworICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkgeworICAgICAgICB2YXIgdG9r
ZW4gPSBsZXgoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3Ig
fHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQo
dG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2Vu
IHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC4KKyAgICAvLyBJZiBub3QsIGFuIGV4Y2Vw
dGlvbiB3aWxsIGJlIHRocm93bi4KKworICAgIGZ1bmN0aW9uIGV4cGVjdEtleXdvcmQoa2V5d29y
ZCkgeworICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
IT09IFRva2VuLktleXdvcmQgfHwgdG9rZW4udmFsdWUgIT09IGtleXdvcmQpIHsKKyAgICAgICAg
ICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1
YXRvci4KKworICAgIGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7CisgICAgICAgIHJldHVybiBsb29r
YWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IHZh
bHVlOworICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNo
ZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkCisKKyAgICBmdW5jdGlvbiBtYXRjaEtleXdvcmQoa2V5
d29yZCkgeworICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQg
JiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOworICAgIH0KKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKKworICAgIGZ1
bmN0aW9uIG1hdGNoQXNzaWduKCkgeworICAgICAgICB2YXIgb3A7CisKKyAgICAgICAgaWYgKGxv
b2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgb3AgPSBsb29rYWhlYWQudmFsdWU7CisgICAgICAg
IHJldHVybiBvcCA9PT0gJz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAorICAgICAg
ICAgICAgb3AgPT09ICcvPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnJT0nIHx8CisgICAgICAg
ICAgICBvcCA9PT0gJys9JyB8fAorICAgICAgICAgICAgb3AgPT09ICctPScgfHwKKyAgICAgICAg
ICAgIG9wID09PSAnPDw9JyB8fAorICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8CisgICAgICAg
ICAgICBvcCA9PT0gJz4+Pj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAorICAgICAg
ICAgICAgb3AgPT09ICdePScgfHwKKyAgICAgICAgICAgIG9wID09PSAnfD0nOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7CisgICAgICAgIHZhciBsaW5lOworCisg
ICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBh
IHNlbWljb2xvbiAoVSswMDNCKS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSA9PT0gMHgzQiB8fCBtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAg
ICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRy
dWUgaWYgcHJvdmlkZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisKKyAg
ICBmdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7CisgICAgICAgIHJldHVybiBleHByLnR5
cGUgPT09IFN5bnRheC5JZGVudGlmaWVyIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4Lk1lbWJlckV4
cHJlc3Npb247CisgICAgfQorCisgICAgLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyCisKKyAg
ICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7CisgICAgICAgIHZhciBlbGVtZW50
cyA9IFtdLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgIGV4cGVjdCgnWycpOworCisgICAgICAgIHdoaWxlICghbWF0Y2goJ10nKSkgeworICAg
ICAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSwgc3RhcnRUb2tlbik7Cisg
ICAgfQorCisgICAgLy8gMTEuMS41IE9iamVjdCBJbml0aWFsaXNlcgorCisgICAgZnVuY3Rpb24g
cGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtLCBmaXJzdCkgeworICAgICAgICB2YXIgcHJldmlv
dXNTdHJpY3QsIGJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBz
dHJpY3Q7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGJvZHkgPSBw
YXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgaWYgKGZpcnN0ICYmIHN0cmlj
dCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtWzBdLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoZmlyc3QsIE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSk7CisgICAgICAg
IH0KKyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJh
bSwgW10sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9i
amVjdFByb3BlcnR5S2V5KCkgeworICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKwor
ICAgICAgICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VP
YmplY3RQcm9wZXJ0eSgpLCB3aGVyZQorICAgICAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9r
ZW5zIGFyZSBhbHJlYWR5IGZpbHRlcmVkIG91dC4KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9
PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0
ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxM
aXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pLCBzdGFydFRva2VuKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50
aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZU9iamVjdFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9rZW4sIGtleSwgaWQsIHZhbHVl
LCBwYXJhbSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0g
VG9rZW4uSWRlbnRpZmllcikgeworCisgICAgICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVy
dHlLZXkoKTsKKworICAgICAgICAgICAgLy8gUHJvcGVydHkgQXNzaWdubWVudDogR2V0dGVyIGFu
ZCBTZXR0ZXIuCisKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIW1h
dGNoKCc6JykpIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KCcpJyk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oW10p
OworICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVByb3BlcnR5KCdnZXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmICFtYXRjaCgnOicpKSB7
CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAg
ICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFk
OworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7
CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4u
dmFsdWUpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlv
bihbXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW0gPSBbIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgXTsKKyAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1
bmN0aW9uKHBhcmFtLCB0b2tlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdzZXQnLCBr
ZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBl
Y3QoJzonKTsKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigp
OworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJv
cGVydHkoJ2luaXQnLCBpZCwgdmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLlB1
bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Cisg
ICAgICAgICAgICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCkg
eworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdLCBwcm9wZXJ0eSwgbmFtZSwga2V5LCBraW5k
LCBtYXAgPSB7fSwgdG9TdHJpbmcgPSBTdHJpbmcsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICB3
aGlsZSAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQ
cm9wZXJ0eSgpOworCisgICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LmtleS5uYW1l
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gdG9TdHJpbmco
cHJvcGVydHkua2V5LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtpbmQgPSAo
cHJvcGVydHkua2luZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2luZC5EYXRhIDogKHByb3BlcnR5
LmtpbmQgPT09ICdnZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0Owor
CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBuYW1lOworICAgICAgICAgICAgaWYgKE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobWFwW2tleV0gPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVw
bGljYXRlUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09
IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwW2tleV0gJiBraW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vz
c29yR2V0U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBtYXBba2V5XSB8PSBraW5kOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtYXBba2V5XSA9IGtpbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2go
J30nKSkgeworICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSwgc3Rh
cnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvcgor
CisgICAgZnVuY3Rpb24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHBy
OworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Np
b24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICB9CisKKworICAgIC8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24g
cGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHR5cGUsIHRva2VuLCBleHBy
LCBzdGFydFRva2VuOworCisgICAgICAgIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VHcm91cEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
YXRjaCgnWycpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0
dXJuIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGUg
PSBsb29rYWhlYWQudHlwZTsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAg
ICAgICBpZiAodHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgZXhwciA9
ICBkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTsKKyAgICAgICAgfSBlbHNl
IGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVy
aWNMaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxvb2thaGVhZC5vY3RhbCkg
eworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2Vz
LlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChsZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rp
b24nKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7
CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRl
LmNyZWF0ZVRoaXNFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0g
J3RydWUnKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2Vu
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkgeworICAg
ICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnZhbHVlID0gbnVsbDsK
KyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7CisgICAgICAgICAgICBp
ZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAg
ICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChjb2xsZWN0UmVnZXgoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRl
cmFsKHNjYW5SZWdFeHAoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwZWVrKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tl
bik7CisgICAgfQorCisgICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9ucworCisg
ICAgZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKSB7CisgICAgICAgIHZhciBhcmdzID0gW107CisK
KyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBhcmdzLnB1
c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0
Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7CisgICAgICAgIHZhciB0
b2tlbiwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tl
bikpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVy
KHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VO
b25Db21wdXRlZE1lbWJlcigpIHsKKyAgICAgICAgZXhwZWN0KCcuJyk7CisKKyAgICAgICAgcmV0
dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIHZhciBleHByOworCisgICAgICAgIGV4cGVj
dCgnWycpOworCisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBl
eHBlY3QoJ10nKTsKKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZU5ld0V4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBjYWxsZWUsIGFyZ3MsIHN0YXJ0
VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnbmV3Jyk7CisgICAgICAgIGNhbGxlZSA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVz
c2lvbigpOworICAgICAgICBhcmdzID0gbWF0Y2goJygnKSA/IHBhcnNlQXJndW1lbnRzKCkgOiBb
XTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVOZXdF
eHByZXNzaW9uKGNhbGxlZSwgYXJncyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKKyAgICAgICAgdmFy
IHByZXZpb3VzQWxsb3dJbiwgZXhwciwgYXJncywgcHJvcGVydHksIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBwcmV2aW91c0FsbG93SW4g
PSBzdGF0ZS5hbGxvd0luOworICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAg
ZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxs
b3dJbjsKKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJy4nKSkg
eworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOwor
ICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcu
JywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7
CisgICAgICAgICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7CisgICAgICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVy
dHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhh
bmRTaWRlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiwgZXhwciwg
cHJvcGVydHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOworICAgICAgICBleHBy
ID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmlt
YXJ5RXhwcmVzc2lvbigpOworICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0lu
OworCisgICAgICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNv
bXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1l
bWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOwor
ICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcu
JywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZWdhdGUu
bWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBl
eHByOworICAgIH0KKworICAgIC8vIDExLjMgUG9zdGZpeCBFeHByZXNzaW9ucworCisgICAgZnVu
Y3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHRva2Vu
LCBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cHIgPSBwYXJzZUxlZnRIYW5k
U2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUg
PT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIGlmICgobWF0Y2goJysrJykgfHwg
bWF0Y2goJy0tJykpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgICAg
IC8vIDExLjMuMSwgMTEuMy4yCisgICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5
cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdExIU1Bvc3RmaXgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVBvc3RmaXhFeHByZXNz
aW9uKHRva2VuLnZhbHVlLCBleHByKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS40IFVuYXJ5
IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgZXhwciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobG9va2FoZWFk
LnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktl
eXdvcmQpIHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKKyAgICAgICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwor
ICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAv
LyAxMS40LjQsIDExLjQuNQorICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09
IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJl
Zml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShl
eHByKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
SW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4
cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOwor
ICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+Jykg
fHwgbWF0Y2goJyEnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJl
c3Npb24odG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1h
cmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3Jk
KCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVv
ZicpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigp
OworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tl
bi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHBy
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9
PT0gJ2RlbGV0ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikg
eworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0
RGVsZXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4
cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBh
bGxvd0luKSB7CisgICAgICAgIHZhciBwcmVjID0gMDsKKworICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodG9r
ZW4udmFsdWUpIHsKKyAgICAgICAgY2FzZSAnfHwnOgorICAgICAgICAgICAgcHJlYyA9IDE7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcmJic6CisgICAgICAgICAgICBwcmVj
ID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAg
ICAgcHJlYyA9IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdeJzoKKyAg
ICAgICAgICAgIHByZWMgPSA0OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
Jic6CisgICAgICAgICAgICBwcmVjID0gNTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgJz09JzoKKyAgICAgICAgY2FzZSAnIT0nOgorICAgICAgICBjYXNlICc9PT0nOgorICAg
ICAgICBjYXNlICchPT0nOgorICAgICAgICAgICAgcHJlYyA9IDY7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgIGNhc2Ug
Jzw9JzoKKyAgICAgICAgY2FzZSAnPj0nOgorICAgICAgICBjYXNlICdpbnN0YW5jZW9mJzoKKyAg
ICAgICAgICAgIHByZWMgPSA3OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAn
aW4nOgorICAgICAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgJzw8JzoKKyAgICAgICAgY2FzZSAnPj4nOgorICAgICAgICBj
YXNlICc+Pj4nOgorICAgICAgICAgICAgcHJlYyA9IDg7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBwcmVjID0g
OTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyonOgorICAgICAgICBjYXNl
ICcvJzoKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBwcmVjID0gMTE7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKKyAgICAvLyAxMS41IE11bHRp
cGxpY2F0aXZlIE9wZXJhdG9ycworICAgIC8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzCisgICAg
Ly8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9ycworICAgIC8vIDExLjggUmVsYXRpb25hbCBP
cGVyYXRvcnMKKyAgICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9ycworICAgIC8vIDExLjEwIEJp
bmFyeSBCaXR3aXNlIE9wZXJhdG9ycworICAgIC8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJh
dG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgbWFya2VyLCBtYXJrZXJzLCBleHByLCB0b2tlbiwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVy
YXRvciwgbGVmdCwgaTsKKworICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7CisgICAgICAgIGxl
ZnQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFk
OworICAgICAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgc3RhdGUuYWxsb3dJbik7
CisgICAgICAgIGlmIChwcmVjID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAg
ICAgICAgfQorICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgbGV4KCk7CisKKyAg
ICAgICAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07CisgICAgICAgIHJpZ2h0ID0gcGFy
c2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmln
aHRdOworCisgICAgICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFk
LCBzdGF0ZS5hbGxvd0luKSkgPiAwKSB7CisKKyAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBh
IGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KKyAgICAg
ICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2su
bGVuZ3RoIC0gMl0ucHJlYykpIHsKKyAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgp
OworICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7CisgICAgICAg
ICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIgPSBtYXJr
ZXJzW21hcmtlcnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgZGVsZWdhdGUubWFya0Vu
ZChleHByLCBtYXJrZXIpOworICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNoaWZ0LgorICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOworICAgICAgICAgICAgc3RhY2su
cHVzaCh0b2tlbik7CisgICAgICAgICAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgc3RhY2su
cHVzaChleHByKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVh
bi11cCB0aGUgc3RhY2suCisgICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAxOworICAgICAgICBl
eHByID0gc3RhY2tbaV07CisgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgIHdoaWxlIChp
ID4gMSkgeworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Np
b24oc3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpOworICAgICAgICAgICAg
aSAtPSAyOworICAgICAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAg
IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBleHByOworICAgIH0KKworCisgICAgLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3IK
KworICAgIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgZXhwciwgcHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0g
cGFyc2VCaW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc/JykpIHsKKyAg
ICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxs
b3dJbjsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworICAgICAgICAgICAgY29u
c2VxdWVudCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YXRl
LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisgICAgICAgICAgICBleHBlY3QoJzonKTsKKyAg
ICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKworICAg
ICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHBy
LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChl
eHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAg
IH0KKworICAgIC8vIDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGxlZnQsIHJp
Z2h0LCBub2RlLCBzdGFydFRva2VuOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIG5vZGUgPSBsZWZ0ID0gcGFy
c2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkg
eworICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorICAgICAgICAgICAgaWYg
KCFpc0xlZnRIYW5kU2lkZShsZWZ0KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIDExLjEzLjEKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbGVm
dC50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2Vz
LlN0cmljdExIU0Fzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tl
biA9IGxleCgpOworICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICBub2RlID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVB
c3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpLCBzdGFydFRva2Vu
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIC8vIDEx
LjE0IENvbW1hIE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7Cisg
ICAgICAgIHZhciBleHByLCBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cHIg
PSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCcsJykp
IHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24o
WyBleHByIF0pOworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAg
ICAgIGV4cHIuZXhwcmVzc2lvbnMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0
VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAg
Ly8gMTIuMSBCbG9jaworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkgeworICAg
ICAgICB2YXIgbGlzdCA9IFtdLAorICAgICAgICAgICAgc3RhdGVtZW50OworCisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlbWVu
dCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1l
bnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7Cisg
ICAgICAgIHZhciBibG9jaywgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9v
a2FoZWFkOworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBibG9jayA9IHBhcnNlU3Rh
dGVtZW50TGlzdCgpOworCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSwgc3Rh
cnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTIuMiBWYXJpYWJsZSBTdGF0ZW1lbnQKKworICAg
IGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgdG9rZW4s
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRp
ZmllcikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZp
ZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkgeworICAgICAgICB2YXIgaW5pdCA9IG51bGwsIGlk
LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
IGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAvLyAxMi4yLjEKKyAg
ICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcpIHsKKyAgICAgICAgICAgIGV4
cGVjdCgnPScpOworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
KTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnPScpKSB7CisgICAgICAgICAgICBsZXgoKTsK
KyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJp
YWJsZURlY2xhcmF0b3IoaWQsIGluaXQpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHsKKyAgICAgICAgdmFyIGxp
c3QgPSBbXTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV4KCk7
CisgICAgICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKKworICAgICAgICByZXR1cm4gbGlz
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkgeworICAg
ICAgICB2YXIgZGVjbGFyYXRpb25zOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3ZhcicpOwor
CisgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsK
KworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJyk7CisgICAgfQor
CisgICAgLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YAorICAgIC8vIEJvdGggYXJlIGV4
cGVyaW1lbnRhbCBhbmQgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIHlldC4KKyAgICAvLyBzZWUg
aHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpjb25zdAorICAg
IC8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255Omxl
dAorICAgIGZ1bmN0aW9uIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihraW5kKSB7CisgICAgICAg
IHZhciBkZWNsYXJhdGlvbnMsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxv
b2thaGVhZDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKGtpbmQpOworCisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCk7CisKKyAgICAgICAg
Y29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRl
bGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSwgc3Rh
cnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTIuMyBFbXB0eSBTdGF0ZW1lbnQKKworICAgIGZ1
bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSB7CisgICAgICAgIGV4cGVjdCgnOycpOworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRW1wdHlTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAg
ICAvLyAxMi40IEV4cHJlc3Npb24gU3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cHJl
c3Npb25TdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7
CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7CisgICAgfQorCisgICAgLy8gMTIuNSBJZiBz
dGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgn
aWYnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgY29uc2VxdWVudCA9
IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZWxzZScpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVt
ZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBudWxsOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlmU3RhdGVtZW50KHRl
c3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CisgICAgfQorCisgICAgLy8gMTIuNiBJdGVyYXRp
b24gU3RhdGVtZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VEb1doaWxlU3RhdGVtZW50KCkgewor
ICAgICAgICB2YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnZG8nKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0
aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9keSA9
IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0
ZXJhdGlvbjsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOworCisgICAgICAgIGV4
cGVjdCgnKCcpOworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAg
ICBleHBlY3QoJyknKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAgICAgICAg
bGV4KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRG9XaGls
ZVN0YXRlbWVudChib2R5LCB0ZXN0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVdoaWxl
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5JdGVyYXRpb247CisK
KyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBleHBlY3QoJygnKTsK
KworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcp
Jyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKKyAgICAg
ICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRl
bWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpIHsK
KyAgICAgICAgdmFyIHRva2VuLCBkZWNsYXJhdGlvbnMsIHN0YXJ0VG9rZW47CisKKyAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAg
ZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRp
b24oZGVjbGFyYXRpb25zLCB0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgaW5pdCwgdGVzdCwg
dXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgaW5p
dCA9IHRlc3QgPSB1cGRhdGUgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Zvcicp
OworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmIChtYXRjaCgnOycpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtYXRj
aEtleXdvcmQoJ3ZhcicpIHx8IG1hdGNoS2V5d29yZCgnbGV0JykpIHsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9y
VmFyaWFibGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0
cnVlOworCisgICAgICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0g
MSAmJiBtYXRjaEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdo
dCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xl
ZnRIYW5kU2lkZShpbml0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
bGVmdCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9u
KCk7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZp
bmVkJykgeworICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgeworCisg
ICAgICAgICAgICBpZiAoIW1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgICAgICB0ZXN0ID0gcGFy
c2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoJzsnKTsK
KworICAgICAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgdXBkYXRl
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBleHBlY3QoJyknKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0
aW9uOworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9keSA9
IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0
ZXJhdGlvbjsKKworICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykg
PworICAgICAgICAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZvclN0YXRlbWVudChpbml0LCB0ZXN0
LCB1cGRhdGUsIGJvZHkpIDoKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JJblN0
YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSk7CisgICAgfQorCisgICAgLy8gMTIuNyBUaGUgY29u
dGludWUgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkg
eworICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7CisKKyAgICAgICAgZXhwZWN0S2V5d29y
ZCgnY29udGludWUnKTsKKworICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9y
bTogJ2NvbnRpbnVlOycuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09
IDB4M0IpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAoIXN0YXRlLmlu
SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxs
ZWdhbENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRl
cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdh
bENvbnRpbnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBsYWJl
bCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyAr
IGxhYmVsLm5hbWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAg
aWYgKGxhYmVsID09PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsYWJlbCk7Cisg
ICAgfQorCisgICAgLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBw
YXJzZUJyZWFrU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7CisK
KyAgICAgICAgZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKKworICAgICAgICAvLyBDYXRjaCB0aGUg
dmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQiku
CisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsKKyAgICAg
ICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBz
dGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdl
cy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRl
cmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAg
ICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigp
OworCisgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8
IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
SWxsZWdhbEJyZWFrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVCcmVha1N0YXRlbWVudChsYWJlbCk7CisgICAgfQorCisgICAgLy8gMTIuOSBUaGUgcmV0dXJu
IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7CisgICAg
ICAgIHZhciBhcmd1bWVudCA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgncmV0dXJu
Jyk7CisKKyAgICAgICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5kIGFuIGlkZW50
aWZpZXIgaXMgdmVyeSBjb21tb24uCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkgPT09IDB4MjApIHsKKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFy
c2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAg
ICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1l
bnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZWtMaW5lVGVy
bWluYXRvcigpKSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3Rh
dGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7Cisg
ICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVP
RikgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChhcmd1bWVudCk7Cisg
ICAgfQorCisgICAgLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBw
YXJzZVdpdGhTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBvYmplY3QsIGJvZHk7CisKKyAgICAg
ICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgLy8gVE9ETyhpa2FyaWVuYXRvcik6IFNob3Vs
ZCB3ZSB1cGRhdGUgdGhlIHRlc3QgY2FzZXMgaW5zdGVhZD8KKyAgICAgICAgICAgIHNraXBDb21t
ZW50KCk7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmlj
dE1vZGVXaXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3dpdGgnKTsK
KworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Np
b24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0
ZW1lbnQoKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlV2l0aFN0YXRlbWVudChv
YmplY3QsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnQK
KworICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGNv
bnNlcXVlbnQgPSBbXSwgc3RhdGVtZW50LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICB0ZXN0ID0gbnVsbDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nhc2UnKTsKKyAgICAgICAgICAgIHRl
c3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorICAgICAgICBleHBlY3QoJzonKTsK
KworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRj
aCgnfScpIHx8IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IG1hdGNoS2V5d29yZCgnY2FzZScp
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
dGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgY29uc2VxdWVudC5wdXNo
KHN0YXRlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpLCBzdGFydFRva2Vu
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRG
b3VuZDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTsKKworICAgICAgICBleHBl
Y3QoJygnKTsKKworICAgICAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKwor
ICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBj
YXNlcyA9IFtdOworCisgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlz
Y3JpbWluYW50LCBjYXNlcyk7CisgICAgICAgIH0KKworICAgICAgICBvbGRJblN3aXRjaCA9IHN0
YXRlLmluU3dpdGNoOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7CisgICAgICAgIGRl
ZmF1bHRGb3VuZCA9IGZhbHNlOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpOworICAg
ICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYg
KGRlZmF1bHRGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZXMucHVzaChjbGF1c2UpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGUuaW5Td2l0
Y2ggPSBvbGRJblN3aXRjaDsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpOwor
ICAgIH0KKworICAgIC8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9u
IHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBhcmd1bWVudDsKKworICAgICAg
ICBleHBlY3RLZXl3b3JkKCd0aHJvdycpOworCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0
b3IoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVy
VGhyb3cpOworICAgICAgICB9CisKKyAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24o
KTsKKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICAvLyAxMi4x
NCBUaGUgdHJ5IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHsK
KyAgICAgICAgdmFyIHBhcmFtLCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7CisKKyAgICAg
ICAgZXhwZWN0KCcoJyk7CisgICAgICAgIGlmIChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgLy8gMTIuMTQuMQorICAgICAgICBp
ZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgYm9keSA9IHBhcnNlQmxv
Y2soKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQ2F0
Y2hDbGF1c2UocGFyYW0sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZVRyeVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGJsb2NrLCBoYW5kbGVycyA9IFtd
LCBmaW5hbGl6ZXIgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3RyeScpOworCisg
ICAgICAgIGJsb2NrID0gcGFyc2VCbG9jaygpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQo
J2NhdGNoJykpIHsKKyAgICAgICAgICAgIGhhbmRsZXJzLnB1c2gocGFyc2VDYXRjaENsYXVzZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFuZGxlcnMubGVuZ3RoID09PSAwICYmICFmaW5h
bGl6ZXIpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vQ2F0Y2hPckZp
bmFsbHkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRyeVN0
YXRlbWVudChibG9jaywgW10sIGhhbmRsZXJzLCBmaW5hbGl6ZXIpOworICAgIH0KKworICAgIC8v
IDEyLjE1IFRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlRGVidWdn
ZXJTdGF0ZW1lbnQoKSB7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7CisKKyAg
ICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVEZWJ1Z2dlclN0YXRlbWVudCgpOworICAgIH0KKworICAgIC8vIDEyIFN0YXRlbWVudHMKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdHlwZSA9IGxvb2th
aGVhZC50eXBlLAorICAgICAgICAgICAgZXhwciwKKyAgICAgICAgICAgIGxhYmVsZWRCb2R5LAor
ICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAo
dHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2Fo
ZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9y
ICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3snKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VC
bG9jaygpOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKwor
ICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgc3dp
dGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgJzsnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSwgc3Rh
cnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNl
ICdicmVhayc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VC
cmVha1N0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVl
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUNvbnRpbnVl
U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgor
ICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRGVidWdnZXJTdGF0
ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdkbyc6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VEb1doaWxlU3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZm9yJzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUZvclN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAg
ICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdh
dGUubWFya0VuZChwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSwgc3RhcnRUb2tlbik7CisgICAg
ICAgICAgICBjYXNlICdpZic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQocGFyc2VJZlN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Jl
dHVybic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VSZXR1
cm5TdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgor
ICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlU3dpdGNoU3RhdGVt
ZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndGhyb3cnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSwgc3Rh
cnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd0cnknOgorICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVHJ5U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAg
ICAgICAgICAgY2FzZSAndmFyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
Y2FzZSAnd2hpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBh
cnNlV2hpbGVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd3aXRo
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVdpdGhTdGF0
ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwciA9IHBh
cnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHMK
KyAgICAgICAgaWYgKChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSAmJiBtYXRjaCgn
OicpKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgZXhw
ci5uYW1lOworICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tleV0gPSB0cnVlOworICAgICAg
ICAgICAgbGFiZWxlZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgZGVsZXRl
IHN0YXRlLmxhYmVsU2V0W2tleV07CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSwgc3Rh
cnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0
YXRlbWVudChleHByKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTMgRnVuY3Rpb24g
RGVmaW5pdGlvbgorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkg
eworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4s
IGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgb2xkTGFiZWxTZXQsIG9s
ZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIHN0YXJ0VG9rZW47
CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7
CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobG9v
a2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworCisg
ICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAg
ICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYg
KHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAg
ICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNl
KHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0
aXZlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0
YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9sZExhYmVsU2V0ID0gc3Rh
dGUubGFiZWxTZXQ7CisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247
CisgICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7CisgICAgICAgIG9sZEluRnVu
Y3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7CisKKyAgICAgICAgc3RhdGUubGFiZWxT
ZXQgPSB7fTsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTsKKyAgICAgICAgc3Rh
dGUuaW5Td2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVl
OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1h
dGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1
c2goc291cmNlRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKwor
ICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0OworICAgICAgICBzdGF0ZS5pbkl0
ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZElu
U3dpdGNoOworICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5
OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2Nr
U3RhdGVtZW50KHNvdXJjZUVsZW1lbnRzKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgIHZhciBwYXJhbSwg
cGFyYW1zID0gW10sIHRva2VuLCBzdHJpY3RlZCwgcGFyYW1TZXQsIGtleSwgbWVzc2FnZTsKKyAg
ICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAg
ICAgICBwYXJhbVNldCA9IHt9OworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgcGFy
YW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGtleSA9ICck
JyArIHRva2VuLnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKHBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJp
Y3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KHBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0
ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5T
dHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOworICAgICAgICAgICAgICAgIHBh
cmFtU2V0W2tleV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4
cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBwYXJhbXM6IHBhcmFt
cywKKyAgICAgICAgICAgIHN0cmljdGVkOiBzdHJpY3RlZCwKKyAgICAgICAgICAgIGZpcnN0UmVz
dHJpY3RlZDogZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZQor
ICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkLCBwYXJhbXMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVk
LCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3RL
ZXl3b3JkKCdmdW5jdGlvbicpOworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
aWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICBpZiAoc3RyaWN0KSB7Cisg
ICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9u
TmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
aXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3Ry
aWN0RnVuY3Rpb25OYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNl
cnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVk
ID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2Vy
dmVkV29yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNl
UGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7Cisg
ICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQg
PSB0bXAuZmlyc3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZp
b3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVs
ZW1lbnRzKCk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3Qg
PSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxl
Z2F0ZS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIFtdLCBib2R5KSwgc3Rh
cnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24o
KSB7CisgICAgICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJpY3RlZCwgZmlyc3RSZXN0cmlj
dGVkLCBtZXNzYWdlLCB0bXAsIHBhcmFtcyA9IFtdLCBib2R5LCBwcmV2aW91c1N0cmljdCwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBl
Y3RLZXl3b3JkKCdmdW5jdGlvbicpOworCisgICAgICAgIGlmICghbWF0Y2goJygnKSkgeworICAg
ICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1l
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmly
c3RSZXN0cmljdGVkKTsKKyAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtczsKKyAgICAgICAgc3Ry
aWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7CisgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJz
dFJlc3RyaWN0ZWQ7CisgICAgICAgIGlmICh0bXAubWVzc2FnZSkgeworICAgICAgICAgICAgbWVz
c2FnZSA9IHRtcC5tZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgcHJldmlvdXNTdHJpY3Qg
PSBzdHJpY3Q7CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsK
KyAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
c3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3Vz
U3RyaWN0OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZUZ1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOwor
ICAgIH0KKworICAgIC8vIDE0IFByb2dyYW0KKworICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxl
bWVudCgpIHsKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2Fz
ZSAnY29uc3QnOgorICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7CisgICAgICAgICAg
ICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
U291cmNlRWxlbWVudHMoKSB7CisgICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVt
ZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7CisKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
KyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNvdXJj
ZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1l
bnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5l
eHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgLy8g
dGhpcyBpcyBub3QgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAx
LCB0b2tlbi5lbmQgLSAxKTsKKyAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3Ry
aWN0JykgeworICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7CisgICAgICAgICAgICAgICAg
aWYgKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICAv
KiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxl
bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlUHJvZ3JhbSgpIHsKKyAgICAgICAgdmFyIGJvZHksIHN0YXJ0VG9rZW47CisK
KyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgcGVlaygpOworICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworICAgICAgICBzdHJpY3QgPSBmYWxzZTsKKworICAgICAgICBib2R5
ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVQcm9ncmFtKGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkgeworICAgICAgICB2YXIgaSwgZW50cnks
IHRva2VuLCB0b2tlbnMgPSBbXTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9r
ZW5zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTsK
KyAgICAgICAgICAgIHRva2VuID0geworICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUs
CisgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgdG9rZW4ucmFuZ2Ug
PSBlbnRyeS5yYW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5sb2Mp
IHsKKyAgICAgICAgICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5sb2M7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBl
eHRyYS50b2tlbnMgPSB0b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rpb24gdG9rZW5pemUoY29k
ZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgdG9TdHJpbmcsCisgICAgICAgICAgICB0b2tlbiwK
KyAgICAgICAgICAgIHRva2VuczsKKworICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAgICAg
ICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJp
bmcpKSB7CisgICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNlID0g
Y29kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5s
ZW5ndGggPiAwKSA/IDEgOiAwOworICAgICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBsZW5n
dGggPSBzb3VyY2UubGVuZ3RoOworICAgICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBz
dGF0ZSA9IHsKKyAgICAgICAgICAgIGFsbG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJlbFNl
dDoge30sCisgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAgICBp
bkl0ZXJhdGlvbjogZmFsc2UsCisgICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCisgICAgICAg
ICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMQorICAgICAgICB9OworCisgICAgICAgIGV4dHJhID0g
e307CisKKyAgICAgICAgLy8gT3B0aW9ucyBtYXRjaGluZy4KKyAgICAgICAgb3B0aW9ucyA9IG9w
dGlvbnMgfHwge307CisKKyAgICAgICAgLy8gT2YgY291cnNlIHdlIGNvbGxlY3QgdG9rZW5zIGhl
cmUuCisgICAgICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTsKKyAgICAgICAgZXh0cmEudG9rZW5z
ID0gW107CisgICAgICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTsKKyAgICAgICAgLy8gVGhlIGZv
bGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9r
ZW5zLgorICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0xOworICAgICAgICBleHRyYS5v
cGVuQ3VybHlUb2tlbiA9IC0xOworCisgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRp
b25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7CisgICAgICAgIGV4dHJh
LmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7
CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBv
cHRpb25zLmNvbW1lbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicg
JiYgb3B0aW9ucy50b2xlcmFudCkgeworICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107Cisg
ICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcGVlaygpOworICAgICAgICAg
ICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbiA9
IGxleCgpOworICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0Yp
IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxl
eCgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGxleEVycm9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEu
ZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChsZXhF
cnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRo
ZSBmaXJzdCBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5p
dGUgbG9vcHMuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICB0b2tlbnMg
PSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9
PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJh
LmNvbW1lbnRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5l
cnJvcnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zLmVycm9ycyA9
IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGV4dHJh
ID0ge307CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zKSB7CisgICAgICAgIHZhciBwcm9ncmFtLCB0b1N0
cmluZzsKKworICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAgICAgICAgaWYgKHR5cGVvZiBj
b2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAg
ICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxlZ2F0
ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNlID0gY29kZTsKKyAgICAgICAg
aW5kZXggPSAwOworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEg
OiAwOworICAgICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVu
Z3RoOworICAgICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBzdGF0ZSA9IHsKKyAgICAg
ICAgICAgIGFsbG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30sCisgICAgICAg
ICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFs
c2UsCisgICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCisgICAgICAgICAgICBsYXN0Q29tbWVu
dFN0YXJ0OiAtMQorICAgICAgICB9OworCisgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGV4dHJhLnJh
bmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFu
Z2U7CisgICAgICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9v
bGVhbicpICYmIG9wdGlvbnMubG9jOworICAgICAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9
ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMu
YXR0YWNoQ29tbWVudDsKKworICAgICAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25zLnNv
dXJjZSAhPT0gbnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9v
bGVhbicgJiYgb3B0aW9ucy50b2tlbnMpIHsKKyAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMg
PSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21t
ZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICAgICAg
ZXh0cmEuY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBl
b2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsK
KyAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAgICAgICAgZXh0cmEu
cmFuZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAg
ICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdOworICAgICAgICAgICAgICAg
IGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICBleHRyYS5sZWFk
aW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7CisgICAgICAgICAgICBp
ZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
ICAgIHByb2dyYW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwcm9n
cmFtLnRva2VucyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAg
IHByb2dyYW0uZXJyb3JzID0gZXh0cmEuZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGZpbmFsbHkgewor
ICAgICAgICAgICAgZXh0cmEgPSB7fTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwcm9n
cmFtOworICAgIH0KKworICAgIC8vIFN5bmMgd2l0aCAqLmpzb24gbWFuaWZlc3RzLgorICAgIGV4
cG9ydHMudmVyc2lvbiA9ICcxLjIuMic7CisKKyAgICBleHBvcnRzLnRva2VuaXplID0gdG9rZW5p
emU7CisKKyAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U7CisKKyAgICAvLyBEZWVwIGNvcHkuCisg
ICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307CisKKyAgICAgICAgaWYgKHR5
cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICB0eXBlcyA9
IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKG5hbWUgaW4g
U3ludGF4KSB7CisgICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093blByb3BlcnR5KG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhbbmFtZV07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09ICdm
dW5jdGlvbicpIHsKKyAgICAgICAgICAgIE9iamVjdC5mcmVlemUodHlwZXMpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHR5cGVzOworICAgIH0oKSk7CisKK30pKTsKKy8qIHZpbTogc2V0
IHN3PTQgdHM9NCBldCB0dz04MCA6ICovCisKK30se31dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoKKyAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlk
YXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMi
CisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFO
WQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyovCisvKmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqLworLypqc2hpbnQg
aW5kZW50OjQqLworLypnbG9iYWwgZXhwb3J0czp0cnVlLCBkZWZpbmU6dHJ1ZSovCisoZnVuY3Rp
b24gKHJvb3QsIGZhY3RvcnkpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBVbml2ZXJz
YWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUu
anMsCisgICAgLy8gYW5kIHBsYWluIGJyb3dzZXIgbG9hZGluZywKKyAgICBpZiAodHlwZW9mIGRl
ZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIGRlZmluZShbJ2V4
cG9ydHMnXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBmYWN0b3J5KChyb290LmVzdHJhdmVyc2UgPSB7fSkpOworICAgIH0KK30odGhpcywgZnVu
Y3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgU3ludGF4LAor
ICAgICAgICBpc0FycmF5LAorICAgICAgICBWaXNpdG9yT3B0aW9uLAorICAgICAgICBWaXNpdG9y
S2V5cywKKyAgICAgICAgQlJFQUssCisgICAgICAgIFNLSVA7CisKKyAgICBTeW50YXggPSB7Cisg
ICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAg
ICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBBcnJheVBh
dHRlcm46ICdBcnJheVBhdHRlcm4nLAorICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjog
J0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9j
a1N0YXRlbWVudCcsCisgICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9u
JywKKyAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCisgICAgICAgIENh
bGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLAorICAgICAgICBDYXRjaENsYXVzZTogJ0Nh
dGNoQ2xhdXNlJywKKyAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JywKKyAgICAgICAgQ2xh
c3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLAorICAgICAgICBDbGFzc0V4cHJlc3Np
b246ICdDbGFzc0V4cHJlc3Npb24nLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdD
b25kaXRpb25hbEV4cHJlc3Npb24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRp
bnVlU3RhdGVtZW50JywKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRl
bWVudCcsCisgICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogJ0RpcmVjdGl2ZVN0YXRlbWVudCcs
CisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAgICAgICAg
RW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0
ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9y
U3RhdGVtZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisg
ICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAg
ICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRl
bnRpZmllcjogJ0lkZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50
JywKKyAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50
OiAnTGFiZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNh
bEV4cHJlc3Npb24nLAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lv
bicsCisgICAgICAgIE1ldGhvZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJywKKyAgICAg
ICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RFeHByZXNz
aW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQ
YXR0ZXJuJywKKyAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAorICAgICAgICBQcm9wZXJ0eTog
J1Byb3BlcnR5JywKKyAgICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywK
KyAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKyAgICAg
ICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKKyAgICAgICAgU3dpdGNoQ2Fz
ZTogJ1N3aXRjaENhc2UnLAorICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9u
JywKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsCisgICAgICAgIFRy
eVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCisgICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1Vu
YXJ5RXhwcmVzc2lvbicsCisgICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNz
aW9uJywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24n
LAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLAorICAg
ICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKKyAgICAgICAgV2l0aFN0YXRl
bWVudDogJ1dpdGhTdGF0ZW1lbnQnLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4
cHJlc3Npb24nCisgICAgfTsKKworICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9
CisKKyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgICBpZiAoIWlzQXJyYXkpIHsKKyAg
ICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHsKKyAgICAgICAgICAgIHJl
dHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBB
cnJheV0nOworICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikg
eworICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsOworICAgICAgICBmb3IgKGtleSBpbiBv
YmopIHsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAg
ICAgICAgICAgIHZhbCA9IG9ialtrZXldOworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFs
ID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
W2tleV0gPSBkZWVwQ29weSh2YWwpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldFtrZXldID0gdmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZ1bmN0
aW9uIHNoYWxsb3dDb3B5KG9iaikgeworICAgICAgICB2YXIgcmV0ID0ge30sIGtleTsKKyAgICAg
ICAgZm9yIChrZXkgaW4gb2JqKSB7CisgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5
KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIGlnbm9yZUpT
SGludEVycm9yKHNoYWxsb3dDb3B5KTsKKworICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVw
cGVyX2JvdW5kIC8gbG93ZXJfYm91bmQKKyAgICAvLyBNSVQgTGljZW5zZQorCisgICAgZnVuY3Rp
b24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykgeworICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBj
dXJyZW50OworCisgICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDsKKyAgICAgICAgaSA9IDA7CisK
KyAgICAgICAgd2hpbGUgKGxlbikgeworICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTsKKyAg
ICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjsKKyAgICAgICAgICAgIGlmIChmdW5jKGFycmF5
W2N1cnJlbnRdKSkgeworICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTsKKyAgICAgICAgICAgICAg
ICBsZW4gLT0gZGlmZiArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykgewor
ICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50OworCisgICAgICAgIGxlbiA9IGFycmF5
Lmxlbmd0aDsKKyAgICAgICAgaSA9IDA7CisKKyAgICAgICAgd2hpbGUgKGxlbikgeworICAgICAg
ICAgICAgZGlmZiA9IGxlbiA+Pj4gMTsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjsK
KyAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkgeworICAgICAgICAgICAgICAg
IGkgPSBjdXJyZW50ICsgMTsKKyAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIGlnbm9yZUpTSGlu
dEVycm9yKGxvd2VyQm91bmQpOworCisgICAgVmlzaXRvcktleXMgPSB7CisgICAgICAgIEFzc2ln
bm1lbnRFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSwKKyAgICAgICAgQXJyYXlFeHByZXNz
aW9uOiBbJ2VsZW1lbnRzJ10sCisgICAgICAgIEFycmF5UGF0dGVybjogWydlbGVtZW50cyddLAor
ICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogWydwYXJhbXMnLCAnZGVmYXVsdHMnLCAn
cmVzdCcsICdib2R5J10sCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiBbJ2JvZHknXSwKKyAgICAg
ICAgQmluYXJ5RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIEJyZWFrU3Rh
dGVtZW50OiBbJ2xhYmVsJ10sCisgICAgICAgIENhbGxFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdh
cmd1bWVudHMnXSwKKyAgICAgICAgQ2F0Y2hDbGF1c2U6IFsncGFyYW0nLCAnYm9keSddLAorICAg
ICAgICBDbGFzc0JvZHk6IFsnYm9keSddLAorICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiBbJ2lk
JywgJ2JvZHknLCAnc3VwZXJDbGFzcyddLAorICAgICAgICBDbGFzc0V4cHJlc3Npb246IFsnaWQn
LCAnYm9keScsICdzdXBlckNsYXNzJ10sCisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjog
Wyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sCisgICAgICAgIENvbnRpbnVlU3Rh
dGVtZW50OiBbJ2xhYmVsJ10sCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSwKKyAgICAg
ICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSwKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydi
b2R5JywgJ3Rlc3QnXSwKKyAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLAorICAgICAgICBFeHBy
ZXNzaW9uU3RhdGVtZW50OiBbJ2V4cHJlc3Npb24nXSwKKyAgICAgICAgRm9yU3RhdGVtZW50OiBb
J2luaXQnLCAndGVzdCcsICd1cGRhdGUnLCAnYm9keSddLAorICAgICAgICBGb3JJblN0YXRlbWVu
dDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSwKKyAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6IFsn
bGVmdCcsICdyaWdodCcsICdib2R5J10sCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IFsn
aWQnLCAncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3QnLCAnYm9keSddLAorICAgICAgICBGdW5j
dGlvbkV4cHJlc3Npb246IFsnaWQnLCAncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3QnLCAnYm9k
eSddLAorICAgICAgICBJZGVudGlmaWVyOiBbXSwKKyAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVz
dCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLAorICAgICAgICBMaXRlcmFsOiBbXSwKKyAg
ICAgICAgTGFiZWxlZFN0YXRlbWVudDogWydsYWJlbCcsICdib2R5J10sCisgICAgICAgIExvZ2lj
YWxFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSwKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lv
bjogWydvYmplY3QnLCAncHJvcGVydHknXSwKKyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogWydr
ZXknLCAndmFsdWUnXSwKKyAgICAgICAgTmV3RXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1l
bnRzJ10sCisgICAgICAgIE9iamVjdEV4cHJlc3Npb246IFsncHJvcGVydGllcyddLAorICAgICAg
ICBPYmplY3RQYXR0ZXJuOiBbJ3Byb3BlcnRpZXMnXSwKKyAgICAgICAgUHJvZ3JhbTogWydib2R5
J10sCisgICAgICAgIFByb3BlcnR5OiBbJ2tleScsICd2YWx1ZSddLAorICAgICAgICBSZXR1cm5T
dGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSwKKyAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4
cHJlc3Npb25zJ10sCisgICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAn
Y2FzZXMnXSwKKyAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSwKKyAg
ICAgICAgVGhpc0V4cHJlc3Npb246IFtdLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogWydhcmd1
bWVudCddLAorICAgICAgICBUcnlTdGF0ZW1lbnQ6IFsnYmxvY2snLCAnaGFuZGxlcnMnLCAnaGFu
ZGxlcicsICdndWFyZGVkSGFuZGxlcnMnLCAnZmluYWxpemVyJ10sCisgICAgICAgIFVuYXJ5RXhw
cmVzc2lvbjogWydhcmd1bWVudCddLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3Vt
ZW50J10sCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sCisg
ICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sCisgICAgICAgIFdoaWxl
U3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLAorICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29i
amVjdCcsICdib2R5J10sCisgICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddCisg
ICAgfTsKKworICAgIC8vIHVuaXF1ZSBpZAorICAgIEJSRUFLID0ge307CisgICAgU0tJUCA9IHt9
OworCisgICAgVmlzaXRvck9wdGlvbiA9IHsKKyAgICAgICAgQnJlYWs6IEJSRUFLLAorICAgICAg
ICBTa2lwOiBTS0lQCisgICAgfTsKKworICAgIGZ1bmN0aW9uIFJlZmVyZW5jZShwYXJlbnQsIGtl
eSkgeworICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgdGhpcy5rZXkgPSBr
ZXk7CisgICAgfQorCisgICAgUmVmZXJlbmNlLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24g
cmVwbGFjZShub2RlKSB7CisgICAgICAgIHRoaXMucGFyZW50W3RoaXMua2V5XSA9IG5vZGU7Cisg
ICAgfTsKKworICAgIGZ1bmN0aW9uIEVsZW1lbnQobm9kZSwgcGF0aCwgd3JhcCwgcmVmKSB7Cisg
ICAgICAgIHRoaXMubm9kZSA9IG5vZGU7CisgICAgICAgIHRoaXMucGF0aCA9IHBhdGg7CisgICAg
ICAgIHRoaXMud3JhcCA9IHdyYXA7CisgICAgICAgIHRoaXMucmVmID0gcmVmOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIENvbnRyb2xsZXIoKSB7IH0KKworICAgIC8vIEFQSToKKyAgICAvLyByZXR1
cm4gcHJvcGVydHkgcGF0aCBhcnJheSBmcm9tIHJvb3QgdG8gY3VycmVudCBub2RlCisgICAgQ29u
dHJvbGxlci5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7CisgICAgICAgIHZhciBp
LCBpeiwgaiwganosIHJlc3VsdCwgZWxlbWVudDsKKworICAgICAgICBmdW5jdGlvbiBhZGRUb1Bh
dGgocmVzdWx0LCBwYXRoKSB7CisgICAgICAgICAgICBpZiAoaXNBcnJheShwYXRoKSkgeworICAg
ICAgICAgICAgICAgIGZvciAoaiA9IDAsIGp6ID0gcGF0aC5sZW5ndGg7IGogPCBqejsgKytqKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGhbal0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2go
cGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyByb290IG5vZGUK
KyAgICAgICAgaWYgKCF0aGlzLl9fY3VycmVudC5wYXRoKSB7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZpcnN0IG5vZGUgaXMgc2VudGluZWwsIHNl
Y29uZCBub2RlIGlzIHJvb3QgZWxlbWVudAorICAgICAgICByZXN1bHQgPSBbXTsKKyAgICAgICAg
Zm9yIChpID0gMiwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsK
KyAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLl9fbGVhdmVsaXN0W2ldOworICAgICAgICAgICAg
YWRkVG9QYXRoKHJlc3VsdCwgZWxlbWVudC5wYXRoKTsKKyAgICAgICAgfQorICAgICAgICBhZGRU
b1BhdGgocmVzdWx0LCB0aGlzLl9fY3VycmVudC5wYXRoKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIHJldHVybiBhcnJheSBvZiBwYXJlbnQg
ZWxlbWVudHMKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24gcGFy
ZW50cygpIHsKKyAgICAgICAgdmFyIGksIGl6LCByZXN1bHQ7CisKKyAgICAgICAgLy8gZmlyc3Qg
bm9kZSBpcyBzZW50aW5lbAorICAgICAgICByZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yIChpID0g
MSwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKHRoaXMuX19sZWF2ZWxpc3RbaV0ubm9kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gcmV0
dXJuIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5j
dGlvbiBjdXJyZW50KCkgeworICAgICAgICByZXR1cm4gdGhpcy5fX2N1cnJlbnQubm9kZTsKKyAg
ICB9OworCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19leGVjdXRlID0gZnVuY3Rpb24gX19l
eGVjdXRlKGNhbGxiYWNrLCBlbGVtZW50KSB7CisgICAgICAgIHZhciBwcmV2aW91cywgcmVzdWx0
OworCisgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDsKKworICAgICAgICBwcmV2aW91cyAgPSB0
aGlzLl9fY3VycmVudDsKKyAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBlbGVtZW50OworICAgICAg
ICB0aGlzLl9fc3RhdGUgPSBudWxsOworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGNhbGxiYWNrLmNhbGwodGhpcywgZWxlbWVudC5ub2RlLCB0aGlzLl9fbGVh
dmVsaXN0W3RoaXMuX19sZWF2ZWxpc3QubGVuZ3RoIC0gMV0ubm9kZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fX2N1cnJlbnQgPSBwcmV2aW91czsKKworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gbm90aWZ5IGNvbnRyb2wgc2tpcCAvIGJy
ZWFrCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGZs
YWcpIHsKKyAgICAgICAgdGhpcy5fX3N0YXRlID0gZmxhZzsKKyAgICB9OworCisgICAgLy8gQVBJ
OgorICAgIC8vIHNraXAgY2hpbGQgbm9kZXMgb2YgY3VycmVudCBub2RlCisgICAgQ29udHJvbGxl
ci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5ub3RpZnkoU0tJ
UCk7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyBicmVhayB0cmF2ZXJzYWxzCisgICAg
Q29udHJvbGxlci5wcm90b3R5cGVbJ2JyZWFrJ10gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRo
aXMubm90aWZ5KEJSRUFLKTsKKyAgICB9OworCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19p
bml0aWFsaXplID0gZnVuY3Rpb24ocm9vdCwgdmlzaXRvcikgeworICAgICAgICB0aGlzLnZpc2l0
b3IgPSB2aXNpdG9yOworICAgICAgICB0aGlzLnJvb3QgPSByb290OworICAgICAgICB0aGlzLl9f
d29ya2xpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5fX2xlYXZlbGlzdCA9IFtdOworICAgICAgICB0
aGlzLl9fY3VycmVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7CisgICAg
fTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVy
c2Uocm9vdCwgdmlzaXRvcikgeworICAgICAgICB2YXIgd29ya2xpc3QsCisgICAgICAgICAgICBs
ZWF2ZWxpc3QsCisgICAgICAgICAgICBlbGVtZW50LAorICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgIG5vZGVUeXBlLAorICAgICAgICAgICAgcmV0LAorICAgICAgICAgICAga2V5LAorICAg
ICAgICAgICAgY3VycmVudCwKKyAgICAgICAgICAgIGN1cnJlbnQyLAorICAgICAgICAgICAgY2Fu
ZGlkYXRlcywKKyAgICAgICAgICAgIGNhbmRpZGF0ZSwKKyAgICAgICAgICAgIHNlbnRpbmVsOwor
CisgICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpOworCisgICAgICAgIHNl
bnRpbmVsID0ge307CisKKyAgICAgICAgLy8gcmVmZXJlbmNlCisgICAgICAgIHdvcmtsaXN0ID0g
dGhpcy5fX3dvcmtsaXN0OworICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVhdmVsaXN0Owor
CisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVu
dChyb290LCBudWxsLCBudWxsLCBudWxsKSk7CisgICAgICAgIGxlYXZlbGlzdC5wdXNoKG5ldyBF
bGVtZW50KG51bGwsIG51bGwsIG51bGwsIG51bGwpKTsKKworICAgICAgICB3aGlsZSAod29ya2xp
c3QubGVuZ3RoKSB7CisgICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7CisKKyAg
ICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkgeworICAgICAgICAgICAgICAgIGVs
ZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7CisKKyAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9f
ZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTsKKworICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZSkgeworCisg
ICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVu
dCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQg
PT09IEJSRUFLKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTsKKyAgICAgICAg
ICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTsKKworICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgcmV0ID09PSBTS0lQKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5vZGUg
PSBlbGVtZW50Lm5vZGU7CisgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAg
fHwgbm9kZS50eXBlOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBWaXNpdG9yS2V5c1tu
b2RlVHlwZV07CisKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7
CisgICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTsKKyAgICAgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlID0gbm9kZVtrZXldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRp
ZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkoY2FuZGlkYXRlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5k
aWRhdGUsIGtleSwgbnVsbCwgbnVsbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
MiA9IGNhbmRpZGF0ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVu
dDIgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVb
Y3VycmVudDJdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG5vZGVU
eXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiB8fCBub2RlVHlwZSA9PT0gU3ludGF4Lk9i
amVjdFBhdHRlcm4pICYmICdwcm9wZXJ0aWVzJyA9PT0gY2FuZGlkYXRlc1tjdXJyZW50XSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRh
dGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJd
LCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwg
dmlzaXRvcikgeworICAgICAgICB2YXIgd29ya2xpc3QsCisgICAgICAgICAgICBsZWF2ZWxpc3Qs
CisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgbm9kZVR5cGUsCisgICAgICAgICAgICB0
YXJnZXQsCisgICAgICAgICAgICBlbGVtZW50LAorICAgICAgICAgICAgY3VycmVudCwKKyAgICAg
ICAgICAgIGN1cnJlbnQyLAorICAgICAgICAgICAgY2FuZGlkYXRlcywKKyAgICAgICAgICAgIGNh
bmRpZGF0ZSwKKyAgICAgICAgICAgIHNlbnRpbmVsLAorICAgICAgICAgICAgb3V0ZXIsCisgICAg
ICAgICAgICBrZXk7CisKKyAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7
CisKKyAgICAgICAgc2VudGluZWwgPSB7fTsKKworICAgICAgICAvLyByZWZlcmVuY2UKKyAgICAg
ICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7CisgICAgICAgIGxlYXZlbGlzdCA9IHRoaXMu
X19sZWF2ZWxpc3Q7CisKKyAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAgICAgICBvdXRlciA9IHsK
KyAgICAgICAgICAgIHJvb3Q6IHJvb3QKKyAgICAgICAgfTsKKyAgICAgICAgZWxlbWVudCA9IG5l
dyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290Jykp
OworICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICBsZWF2ZWxpc3QucHVz
aChlbGVtZW50KTsKKworICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7CisgICAgICAg
ICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50
ID09PSBzZW50aW5lbCkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9w
KCk7CisKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxl
YXZlLCBlbGVtZW50KTsKKworICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2Vk
IHdpdGggbnVsbCwKKyAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVu
ZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlCisgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgZWxl
bWVudC5yZWYucmVwbGFjZSh0YXJnZXQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTsKKworICAg
ICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLAorICAgICAgICAgICAg
Ly8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFj
ZQorICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJF
QUsgJiYgdGFyZ2V0ICE9PSBTS0lQKSB7CisgICAgICAgICAgICAgICAgLy8gcmVwbGFjZQorICAg
ICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gbm9kZSBtYXkgYmUgbnVsbAorICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTsKKyAg
ICAgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTsKKyAgICAgICAg
ICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAodGhpcy5fX3N0
YXRlID09PSBTS0lQIHx8IHRhcmdldCA9PT0gU0tJUCkgeworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3Jh
cCB8fCBub2RlLnR5cGU7CisgICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktleXNbbm9k
ZVR5cGVdOworCisgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7CisgICAg
ICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAgICAgIGtl
eSA9IGNhbmRpZGF0ZXNbY3VycmVudF07CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9k
ZVtrZXldOworICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICghaXNBcnJheShjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1
c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRlLCBrZXksIG51bGwsIG5ldyBSZWZlcmVuY2Uobm9kZSwg
a2V5KSkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKChjdXJyZW50MiAtPSAxKSA+PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiAmJiAncHJvcGVydGllcycgPT09
IGNhbmRpZGF0ZXNbY3VycmVudF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQg
PSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9w
ZXJ0eScsIG5ldyBSZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBF
bGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJl
ZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb3V0ZXIucm9v
dDsKKyAgICB9OworCisgICAgZnVuY3Rpb24gdHJhdmVyc2Uocm9vdCwgdmlzaXRvcikgeworICAg
ICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7CisgICAgICAgIHJldHVybiBj
b250cm9sbGVyLnRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHJlcGxhY2Uocm9vdCwgdmlzaXRvcikgeworICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBD
b250cm9sbGVyKCk7CisgICAgICAgIHJldHVybiBjb250cm9sbGVyLnJlcGxhY2Uocm9vdCwgdmlz
aXRvcik7CisgICAgfQorCisgICAgZnVuY3Rpb24gZXh0ZW5kQ29tbWVudFJhbmdlKGNvbW1lbnQs
IHRva2VucykgeworICAgICAgICB2YXIgdGFyZ2V0OworCisgICAgICAgIHRhcmdldCA9IHVwcGVy
Qm91bmQodG9rZW5zLCBmdW5jdGlvbiBzZWFyY2godG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVy
biB0b2tlbi5yYW5nZVswXSA+IGNvbW1lbnQucmFuZ2VbMF07CisgICAgICAgIH0pOworCisgICAg
ICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZSA9IFtjb21tZW50LnJhbmdlWzBdLCBjb21tZW50LnJh
bmdlWzFdXTsKKworICAgICAgICBpZiAodGFyZ2V0ICE9PSB0b2tlbnMubGVuZ3RoKSB7CisgICAg
ICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsw
XTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldCAtPSAxOworICAgICAgICBpZiAodGFyZ2V0
ID49IDApIHsKKyAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSA9IHRva2Vuc1t0
YXJnZXRdLnJhbmdlWzFdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvbW1lbnQ7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gYXR0YWNoQ29tbWVudHModHJlZSwgcHJvdmlkZWRDb21tZW50
cywgdG9rZW5zKSB7CisgICAgICAgIC8vIEF0IGZpcnN0LCB3ZSBzaG91bGQgY2FsY3VsYXRlIGV4
dGVuZGVkIGNvbW1lbnQgcmFuZ2VzLgorICAgICAgICB2YXIgY29tbWVudHMgPSBbXSwgY29tbWVu
dCwgbGVuLCBpLCBjdXJzb3I7CisKKyAgICAgICAgaWYgKCF0cmVlLnJhbmdlKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGFjaENvbW1lbnRzIG5lZWRzIHJhbmdlIGluZm9ybWF0
aW9uJyk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0b2tlbnMgYXJyYXkgaXMgZW1wdHksIHdl
IGF0dGFjaCBjb21tZW50cyB0byB0cmVlIGFzICdsZWFkaW5nQ29tbWVudHMnCisgICAgICAgIGlm
ICghdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKHByb3ZpZGVkQ29tbWVudHMubGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJvdmlkZWRDb21tZW50
cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50
ID0gZGVlcENvcHkocHJvdmlkZWRDb21tZW50c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnQuZXh0ZW5kZWRSYW5nZSA9IFswLCB0cmVlLnJhbmdlWzBdXTsKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdHJlZS5sZWFkaW5nQ29tbWVudHMgPSBjb21tZW50czsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cmVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0g
MCwgbGVuID0gcHJvdmlkZWRDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAg
ICAgICAgICAgY29tbWVudHMucHVzaChleHRlbmRDb21tZW50UmFuZ2UoZGVlcENvcHkocHJvdmlk
ZWRDb21tZW50c1tpXSksIHRva2VucykpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyBp
cyBiYXNlZCBvbiBKb2huIEZyZWVtYW4ncyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgY3Vyc29y
ID0gMDsKKyAgICAgICAgdHJhdmVyc2UodHJlZSwgeworICAgICAgICAgICAgZW50ZXI6IGZ1bmN0
aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7CisKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoY3Vyc29yIDwgY29tbWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbW1lbnQgPSBjb21tZW50c1tjdXJzb3JdOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y29tbWVudC5leHRlbmRlZFJhbmdlWzFdID4gbm9kZS5yYW5nZVswXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAoY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID09PSBub2RlLnJhbmdlWzBdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUubGVhZGluZ0NvbW1lbnRzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVh
ZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21t
ZW50cy5zcGxpY2UoY3Vyc29yLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAxOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBvdXQgb2Yg
b3duZWQgbm9kZQorICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5CcmVhazsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbY3Vyc29yXS5l
eHRlbmRlZFJhbmdlWzBdID4gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmlzaXRvck9wdGlvbi5Ta2lwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgY3Vyc29yID0gMDsKKyAgICAgICAgdHJhdmVyc2Uo
dHJlZSwgeworICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvbW1lbnQ7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yIDwgY29t
bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tj
dXJzb3JdOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsxXSA8IGNvbW1lbnQu
ZXh0ZW5kZWRSYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsx
XSA9PT0gY29tbWVudC5leHRlbmRlZFJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUudHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29t
bWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5zcGxpY2UoY3Vyc29yLCAx
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnNvciArPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBvdXQgb2Ygb3duZWQgbm9kZQorICAgICAgICAg
ICAgICAgIGlmIChjdXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5CcmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoY29tbWVudHNbY3Vyc29yXS5leHRlbmRlZFJhbmdlWzBdID4gbm9k
ZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5T
a2lwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgcmV0dXJuIHRyZWU7CisgICAgfQorCisgICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuNS4x
LWRldic7CisgICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7CisgICAgZXhwb3J0cy50cmF2ZXJz
ZSA9IHRyYXZlcnNlOworICAgIGV4cG9ydHMucmVwbGFjZSA9IHJlcGxhY2U7CisgICAgZXhwb3J0
cy5hdHRhY2hDb21tZW50cyA9IGF0dGFjaENvbW1lbnRzOworICAgIGV4cG9ydHMuVmlzaXRvcktl
eXMgPSBWaXNpdG9yS2V5czsKKyAgICBleHBvcnRzLlZpc2l0b3JPcHRpb24gPSBWaXNpdG9yT3B0
aW9uOworICAgIGV4cG9ydHMuQ29udHJvbGxlciA9IENvbnRyb2xsZXI7Cit9KSk7CisvKiB2aW06
IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLworCit9LHt9XSw4OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gVG9PYmplY3QodmFs
KSB7CisJaWYgKHZhbCA9PSBudWxsKSB7CisJCXRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5h
c3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7CisJfQorCisJ
cmV0dXJuIE9iamVjdCh2YWwpOworfQorCittb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24g
fHwgZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7CisJdmFyIHBlbmRpbmdFeGNlcHRpb247CisJ
dmFyIGZyb207CisJdmFyIGtleXM7CisJdmFyIHRvID0gVG9PYmplY3QodGFyZ2V0KTsKKworCWZv
ciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7CisJCWZyb20gPSBhcmd1
bWVudHNbc107CisJCWtleXMgPSBPYmplY3Qua2V5cyhPYmplY3QoZnJvbSkpOworCisJCWZvciAo
dmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeworCQkJdHJ5IHsKKwkJCQl0b1trZXlz
W2ldXSA9IGZyb21ba2V5c1tpXV07CisJCQl9IGNhdGNoIChlcnIpIHsKKwkJCQlpZiAocGVuZGlu
Z0V4Y2VwdGlvbiA9PT0gdW5kZWZpbmVkKSB7CisJCQkJCXBlbmRpbmdFeGNlcHRpb24gPSBlcnI7
CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKHBlbmRpbmdFeGNlcHRpb24pIHsKKwkJdGhy
b3cgcGVuZGluZ0V4Y2VwdGlvbjsKKwl9CisKKwlyZXR1cm4gdG87Cit9OworCit9LHt9XSw5Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBN
YWluIEVTTGludCBvYmplY3QuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVtZW50cwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIGVzcHJpbWEgPSByZXF1aXJlKCJlc3ByaW1h
IiksCisgICAgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoImVzdHJhdmVyc2UiKSwKKyAgICBlc2NvcGUg
PSByZXF1aXJlKCJlc2NvcGUiKSwKKyAgICBlbnZpcm9ubWVudHMgPSByZXF1aXJlKCIuLi9jb25m
L2Vudmlyb25tZW50cy5qc29uIiksCisgICAgYXNzaWduID0gcmVxdWlyZSgib2JqZWN0LWFzc2ln
biIpLAorICAgIHJ1bGVzID0gcmVxdWlyZSgiLi9ydWxlcyIpLAorICAgIHV0aWwgPSByZXF1aXJl
KCIuL3V0aWwiKSwKKyAgICBSdWxlQ29udGV4dCA9IHJlcXVpcmUoIi4vcnVsZS1jb250ZXh0Iiks
CisgICAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHJ4KSB7CisgICAgcmV0dXJuIHJ4LnJlcGxhY2Uo
L1tcLVxbXF1cL1x7XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywgIlxcJCYiKTsKK30KKworLyoq
CisgKiBQYXJzZXMgYSBsaXN0IG9mICJuYW1lOmJvb2xlYW5fdmFsdWUiIG9yL2FuZCAibmFtZSIg
b3B0aW9ucyBkaXZpZGVkIGJ5IGNvbW1hIG9yCisgKiB3aGl0ZXNwYWNlLgorICogQHBhcmFtIHtz
dHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHBhcnNlLgorICogQHJldHVybnMge09iamVjdH0g
UmVzdWx0IG1hcCBvYmplY3Qgb2YgbmFtZXMgYW5kIGJvb2xlYW4gdmFsdWVzCisgKi8KK2Z1bmN0
aW9uIHBhcnNlQm9vbGVhbkNvbmZpZyhzdHJpbmcpIHsKKyAgICB2YXIgaXRlbXMgPSB7fTsKKyAg
ICAvLyBDb2xsYXBzZSB3aGl0ZXNwYWNlIGFyb3VuZCA6IHRvIG1ha2UgcGFyc2luZyBlYXNpZXIK
KyAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXHMqOlxzKi9nLCAiOiIpOworICAgIC8vIENv
bGxhcHNlIHdoaXRlc3BhY2UgYXJvdW5kICwKKyAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgv
XHMqLFxzKi9nLCAiLCIpOworICAgIHN0cmluZy5zcGxpdCgvXHN8LCsvKS5mb3JFYWNoKGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHBvcyA9IG5hbWUuaW5kZXhPZigiOiIpLAorICAgICAgICAg
ICAgdmFsdWU7CisgICAgICAgIGlmIChwb3MgIT09IC0xKSB7CisgICAgICAgICAgICB2YWx1ZSA9
IG5hbWUuc3Vic3RyaW5nKHBvcyArIDEsIG5hbWUubGVuZ3RoKTsKKyAgICAgICAgICAgIG5hbWUg
PSBuYW1lLnN1YnN0cmluZygwLCBwb3MpOworICAgICAgICB9CisKKyAgICAgICAgaXRlbXNbbmFt
ZV0gPSAodmFsdWUgPT09ICJ0cnVlIik7CisKKyAgICB9KTsKKyAgICByZXR1cm4gaXRlbXM7Cit9
CisKKy8qKgorICogUGFyc2VzIGEgSlNPTi1saWtlIGNvbmZpZy4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3Vs
dCBtYXAgb2JqZWN0CisgKi8KK2Z1bmN0aW9uIHBhcnNlSnNvbkNvbmZpZyhzdHJpbmcpIHsKKyAg
ICB2YXIgaXRlbXMgPSB7fTsKKyAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvKFthLXowLTlc
LVwvXSspOi9nLCAiXCIkMVwiOiIpLnJlcGxhY2UoLyhcXXxbMC05XSlccysoPz0iKS8sICIkMSwi
KTsKKyAgICB0cnkgeworICAgICAgICBpdGVtcyA9IEpTT04ucGFyc2UoInsiICsgc3RyaW5nICsg
In0iKTsKKyAgICB9IGNhdGNoKGUpIHsgfQorCisgICAgcmV0dXJuIGl0ZW1zOworfQorCisvKioK
KyAqIFBhcnNlcyBhIGNvbmZpZyBvZiB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hLgorICogQHBh
cmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHBhcnNlLgorICogQHJldHVybnMge09i
amVjdH0gUmVzdWx0IG1hcCBvZiB2YWx1ZXMgYW5kIHRydWUgdmFsdWVzCisgKi8KK2Z1bmN0aW9u
IHBhcnNlTGlzdENvbmZpZyhzdHJpbmcpIHsKKyAgICB2YXIgaXRlbXMgPSB7fTsKKyAgICAvLyBD
b2xsYXBzZSB3aGl0ZXNwYWNlIGFyb3VuZCAsCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uo
L1xzKixccyovZywgIiwiKTsKKyAgICBzdHJpbmcuc3BsaXQoLywrLykuZm9yRWFjaChmdW5jdGlv
bihuYW1lKSB7CisgICAgICAgIG5hbWUgPSBuYW1lLnRyaW0oKTsKKyAgICAgICAgaWYgKCFuYW1l
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaXRlbXNbbmFtZV0g
PSB0cnVlOworICAgIH0pOworICAgIHJldHVybiBpdGVtczsKK30KKworLyoqCisgKiBAcGFyYW0g
e1Njb3BlfSBzY29wZSBUaGUgc2NvcGUgb2JqZWN0IHRvIGNoZWNrLgorICogQHBhcmFtIHtzdHJp
bmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGxvb2sgdXAuCisgKiBAcmV0dXJu
cyB7VmFyaWFibGV9IFRoZSB2YXJpYWJsZSBvYmplY3QgaWYgZm91bmQgb3IgbnVsbCBpZiBub3Qu
CisgKi8KK2Z1bmN0aW9uIGdldFZhcmlhYmxlKHNjb3BlLCBuYW1lKSB7CisgICAgdmFyIHZhcmlh
YmxlID0gbnVsbDsKKyAgICBzY29wZS52YXJpYWJsZXMuc29tZShmdW5jdGlvbih2KSB7CisgICAg
ICAgIGlmICh2Lm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gdjsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICB9KTsKKyAgICByZXR1cm4gdmFyaWFibGU7Cit9
CisKKy8qKgorICogRW5zdXJlcyB0aGF0IHZhcmlhYmxlcyByZXByZXNlbnRpbmcgYnVpbHQtaW4g
cHJvcGVydGllcyBvZiB0aGUgR2xvYmFsIE9iamVjdCwKKyAqIGFuZCBhbnkgZ2xvYmFscyBkZWNs
YXJlZCBieSBzcGVjaWFsIGJsb2NrIGNvbW1lbnRzLCBhcmUgcHJlc2VudCBpbiB0aGUgZ2xvYmFs
CisgKiBzY29wZS4KKyAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvZ3JhbSBUaGUgdG9wIG5vZGUgb2Yg
dGhlIEFTVC4KKyAqIEBwYXJhbSB7U2NvcGV9IGdsb2JhbFNjb3BlIFRoZSBnbG9iYWwgc2NvcGUu
CisgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIGRh
dGEuCisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gYWRkRGVjbGFyZWRHbG9iYWxz
KHByb2dyYW0sIGdsb2JhbFNjb3BlLCBjb25maWcpIHsKKyAgICB2YXIgZGVjbGFyZWRHbG9iYWxz
ID0ge30sCisgICAgICAgIGV4cGxpY2l0R2xvYmFscyA9IHt9LAorICAgICAgICBidWlsdGluID0g
ZW52aXJvbm1lbnRzLmJ1aWx0aW47CisKKyAgICBhc3NpZ24oZGVjbGFyZWRHbG9iYWxzLCBidWls
dGluKTsKKworICAgIE9iamVjdC5rZXlzKGNvbmZpZy5lbnYpLmZvckVhY2goZnVuY3Rpb24gKG5h
bWUpIHsKKyAgICAgICAgaWYgKGNvbmZpZy5lbnZbbmFtZV0pIHsKKyAgICAgICAgICAgIHZhciBl
bnZpcm9ubWVudEdsb2JhbHMgPSBlbnZpcm9ubWVudHNbbmFtZV0gJiYgZW52aXJvbm1lbnRzW25h
bWVdLmdsb2JhbHM7CisgICAgICAgICAgICBpZiAoZW52aXJvbm1lbnRHbG9iYWxzKSB7CisgICAg
ICAgICAgICAgICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywgZW52aXJvbm1lbnRHbG9iYWxzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgYXNzaWduKGRlY2xhcmVk
R2xvYmFscywgY29uZmlnLmdsb2JhbHMpOworICAgIGFzc2lnbihleHBsaWNpdEdsb2JhbHMsIGNv
bmZpZy5hc3RHbG9iYWxzKTsKKworICAgIE9iamVjdC5rZXlzKGRlY2xhcmVkR2xvYmFscykuZm9y
RWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxl
KGdsb2JhbFNjb3BlLCBuYW1lKTsKKyAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAg
ICAgdmFyaWFibGUgPSBuZXcgZXNjb3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLmVzbGludEV4cGxpY2l0R2xvYmFsID0gZmFsc2U7CisgICAgICAg
ICAgICBnbG9iYWxTY29wZS52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyaWFibGUud3JpdGVhYmxlID0gZGVjbGFyZWRHbG9iYWxzW25hbWVdOworICAgIH0p
OworCisgICAgT2JqZWN0LmtleXMoZXhwbGljaXRHbG9iYWxzKS5mb3JFYWNoKGZ1bmN0aW9uKG5h
bWUpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZ2xvYmFsU2NvcGUsIG5h
bWUpOworICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5l
dyBlc2NvcGUuVmFyaWFibGUobmFtZSwgZ2xvYmFsU2NvcGUpOworICAgICAgICAgICAgdmFyaWFi
bGUuZXNsaW50RXhwbGljaXRHbG9iYWwgPSB0cnVlOworICAgICAgICAgICAgZ2xvYmFsU2NvcGUu
dmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICB9CisgICAgICAgIHZhcmlhYmxlLndy
aXRlYWJsZSA9IGV4cGxpY2l0R2xvYmFsc1tuYW1lXTsKKyAgICB9KTsKK30KKworLyoqCisgKiBB
ZGQgZGF0YSB0byByZXBvcnRpbmcgY29uZmlndXJhdGlvbiB0byBkaXNhYmxlIHJlcG9ydGluZyBm
b3IgbGlzdCBvZiBydWxlcworICogc3RhcnRpbmcgZnJvbSBzdGFydCBsb2NhdGlvbgorICogQHBh
cmFtICB7T2JqZWN0W119IHJlcG9ydGluZ0NvbmZpZyBDdXJyZW50IHJlcG9ydGluZyBjb25maWd1
cmF0aW9uCisgKiBAcGFyYW0gIHtPYmplY3R9IHN0YXJ0IFBvc2l0aW9uIHRvIHN0YXJ0CisgKiBA
cGFyYW0gIHtzdHJpbmdbXX0gcnVsZXMgTGlzdCBvZiBydWxlcworICogQHJldHVybnMge3ZvaWR9
CisgKi8KK2Z1bmN0aW9uIGRpc2FibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwg
cnVsZXMpIHsKKworICAgIGlmIChydWxlcy5sZW5ndGgpIHsKKyAgICAgICAgcnVsZXMuZm9yRWFj
aChmdW5jdGlvbihydWxlKSB7CisgICAgICAgICAgICByZXBvcnRpbmdDb25maWcucHVzaCh7Cisg
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogbnVsbCwK
KyAgICAgICAgICAgICAgICBydWxlOiBydWxlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2goeworICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBudWxsLAorICAgICAgICAgICAgcnVs
ZTogbnVsbAorICAgICAgICB9KTsKKyAgICB9Cit9CisKKy8qKgorICogQWRkIGRhdGEgdG8gcmVw
b3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHJlcG9ydGluZyBmb3IgbGlzdCBvZiBydWxl
cworICogc3RhcnRpbmcgZnJvbSBzdGFydCBsb2NhdGlvbgorICogQHBhcmFtICB7T2JqZWN0W119
IHJlcG9ydGluZ0NvbmZpZyBDdXJyZW50IHJlcG9ydGluZyBjb25maWd1cmF0aW9uCisgKiBAcGFy
YW0gIHtPYmplY3R9IHN0YXJ0IFBvc2l0aW9uIHRvIHN0YXJ0CisgKiBAcGFyYW0gIHtzdHJpbmdb
XX0gcnVsZXMgTGlzdCBvZiBydWxlcworICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9u
IGVuYWJsZVJlcG9ydGluZyhyZXBvcnRpbmdDb25maWcsIHN0YXJ0LCBydWxlcykgeworICAgIHZh
ciBpOworCisgICAgaWYgKHJ1bGVzLmxlbmd0aCkgeworICAgICAgICBydWxlcy5mb3JFYWNoKGZ1
bmN0aW9uKHJ1bGUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IHJlcG9ydGluZ0NvbmZpZy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIGlmICghcmVwb3J0aW5nQ29u
ZmlnW2ldLmVuZCAmJiByZXBvcnRpbmdDb25maWdbaV0ucnVsZSA9PT0gcnVsZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnW2ldLmVuZCA9IHN0YXJ0OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGZpbmQgYWxsIHByZXZpb3VzIGRpc2Fi
bGVkIGxvY2F0aW9ucyBpZiB0aGV5IHdhcyBzdGFydGVkIGFzIGxpc3Qgb2YgcnVsZXMKKyAgICAg
ICAgdmFyIHByZXZTdGFydDsKKyAgICAgICAgZm9yIChpID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0
aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAocHJldlN0YXJ0ICYmIHByZXZT
dGFydCAhPT0gcmVwb3J0aW5nQ29uZmlnW2ldLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcmVwb3J0aW5nQ29uZmlnW2ld
LmVuZCkgeworICAgICAgICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsK
KyAgICAgICAgICAgICAgICBwcmV2U3RhcnQgPSByZXBvcnRpbmdDb25maWdbaV0uc3RhcnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKworLyoqCisgKiBQYXJzZXMgY29t
bWVudHMgaW4gZmlsZSB0byBleHRyYWN0IGZpbGUtc3BlY2lmaWMgY29uZmlnIG9mIHJ1bGVzLCBn
bG9iYWxzCisgKiBhbmQgZW52aXJvbm1lbnRzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGdsb2JhbCBj
b25maWc7IGFsc28gY29kZSBibG9ja3MKKyAqIHdoZXJlIHJlcG9ydGluZyBpcyBkaXNhYmxlZCBv
ciBlbmFibGVkIGFuZCBtZXJnZXMgdGhlbSB3aXRoIHJlcG9ydGluZyBjb25maWcuCisgKiBAcGFy
YW0ge0FTVE5vZGV9IGFzdCBUaGUgdG9wIG5vZGUgb2YgdGhlIEFTVC4KKyAqIEBwYXJhbSB7T2Jq
ZWN0fSBjb25maWcgVGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIEBwYXJhbSB7
T2JqZWN0W119IHJlcG9ydGluZ0NvbmZpZyBUaGUgZXhpc3RpbmcgcmVwb3J0aW5nIGNvbmZpZ3Vy
YXRpb24gZGF0YS4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBtb2RpZnlDb25m
aWdzRnJvbUNvbW1lbnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcpIHsKKworICAgIHZh
ciBjb21tZW50Q29uZmlnID0geworICAgICAgICBhc3RHbG9iYWxzOiB7fSwKKyAgICAgICAgcnVs
ZXM6IHt9LAorICAgICAgICBlbnY6IHt9CisgICAgfTsKKyAgICB2YXIgY29tbWVudFJ1bGVzID0g
e307CisKKyAgICBhc3QuY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7CisgICAg
ICAgIGlmIChjb21tZW50LnR5cGUgPT09ICJCbG9jayIpIHsKKworICAgICAgICAgICAgdmFyIHZh
bHVlID0gY29tbWVudC52YWx1ZS50cmltKCk7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihl
c2xpbnQtXHcrfGVzbGludHxnbG9iYWxzPykoXHN8JCkvLmV4ZWModmFsdWUpOworCisgICAgICAg
ICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmlu
ZyhtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG1hdGNoWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImdsb2JhbHMiOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlICJnbG9iYWwiOgorICAgICAgICAgICAgICAgICAgICAgICAg
dXRpbC5taXhpbihjb21tZW50Q29uZmlnLmFzdEdsb2JhbHMsIHBhcnNlQm9vbGVhbkNvbmZpZyh2
YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAiZXNsaW50LWVudiI6CisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLm1p
eGluKGNvbW1lbnRDb25maWcuZW52LCBwYXJzZUxpc3RDb25maWcodmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGlu
dC1kaXNhYmxlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXBvcnRpbmcocmVw
b3J0aW5nQ29uZmlnLCBjb21tZW50LmxvYy5zdGFydCwgT2JqZWN0LmtleXMocGFyc2VMaXN0Q29u
ZmlnKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiZXNsaW50LWVuYWJsZSI6CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmFibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBjb21tZW50LmxvYy5zdGFydCwgT2Jq
ZWN0LmtleXMocGFyc2VMaXN0Q29uZmlnKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXNsaW50IjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IHBhcnNlSnNvbkNvbmZpZyh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChmdW5jdGlvbihu
YW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVWYWx1ZSA9IGl0ZW1z
W25hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZVZhbHVl
ID09PSAibnVtYmVyIiB8fCAoQXJyYXkuaXNBcnJheShydWxlVmFsdWUpICYmIHR5cGVvZiBydWxl
VmFsdWVbMF0gPT09ICJudW1iZXIiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21tZW50UnVsZXNbbmFtZV0gPSBydWxlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBh
cHBseSBlbnZpcm9ubWVudCBydWxlcyBiZWZvcmUgdXNlciBydWxlcworICAgIE9iamVjdC5rZXlz
KGNvbW1lbnRDb25maWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZh
ciBlbnZpcm9ubWVudFJ1bGVzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50c1tu
YW1lXS5ydWxlczsKKyAgICAgICAgaWYgKGNvbW1lbnRDb25maWcuZW52W25hbWVdICYmIGVudmly
b25tZW50UnVsZXMpIHsKKyAgICAgICAgICAgIHV0aWwubWl4aW4oY29tbWVudENvbmZpZy5ydWxl
cywgZW52aXJvbm1lbnRSdWxlcyk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICB1dGlsLm1peGlu
KGNvbW1lbnRDb25maWcucnVsZXMsIGNvbW1lbnRSdWxlcyk7CisKKyAgICB1dGlsLm1lcmdlQ29u
Zmlncyhjb25maWcsIGNvbW1lbnRDb25maWcpOworfQorCisvKioKKyAqIENoZWNrIGlmIG1lc3Nh
Z2Ugb2YgcnVsZSB3aXRoIHJ1bGVJZCBzaG91bGQgYmUgaWdub3JlZCBpbiBsb2NhdGlvbgorICog
QHBhcmFtICB7T2JqZWN0W119IHJlcG9ydGluZ0NvbmZpZyAgQ29sbGVjdGlvbiBvZiBpZ25vcmUg
cmVjb3JkcworICogQHBhcmFtICB7c3RyaW5nfSBydWxlSWQgICBJZCBvZiBydWxlCisgKiBAcGFy
YW0gIHtPYmplY3R9IGxvY2F0aW9uIExvY2F0aW9uIG9mIG1lc3NhZ2UKKyAqIEByZXR1cm5zIHti
b29sZWFufSAgICAgICAgICBUcnVlIGlmIG1lc3NhZ2Ugc2hvdWxkIGJlIGlnbm9yZWQsIGZhbHNl
IG90aGVyd2lzZQorICovCitmdW5jdGlvbiBpc0Rpc2FibGVkQnlSZXBvcnRpbmdDb25maWcocmVw
b3J0aW5nQ29uZmlnLCBydWxlSWQsIGxvY2F0aW9uKSB7CisKKyAgICBmb3IgKHZhciBpID0gMCwg
YyA9IHJlcG9ydGluZ0NvbmZpZy5sZW5ndGg7IGkgPCBjOyBpKyspIHsKKworICAgICAgICB2YXIg
aWdub3JlID0gcmVwb3J0aW5nQ29uZmlnW2ldOworICAgICAgICBpZiAoKCFpZ25vcmUucnVsZSB8
fCBpZ25vcmUucnVsZSA9PT0gcnVsZUlkKSAmJgorICAgICAgICAgICAgKGxvY2F0aW9uLmxpbmUg
PiBpZ25vcmUuc3RhcnQubGluZSB8fCAobG9jYXRpb24ubGluZSA9PT0gaWdub3JlLnN0YXJ0Lmxp
bmUgJiYgbG9jYXRpb24uY29sdW1uID49IGlnbm9yZS5zdGFydC5jb2x1bW4pKSAmJgorICAgICAg
ICAgICAgKCFpZ25vcmUuZW5kIHx8IChsb2NhdGlvbi5saW5lIDwgaWdub3JlLmVuZC5saW5lIHx8
IChsb2NhdGlvbi5saW5lID09PSBpZ25vcmUuZW5kLmxpbmUgJiYgbG9jYXRpb24uY29sdW1uIDw9
IGlnbm9yZS5lbmQuY29sdW1uKSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogUHJvY2Vz
cyBpbml0aWFsIGNvbmZpZyB0byBtYWtlIGl0IHNhZmUgdG8gZXh0ZW5kIGJ5IGZpbGUgY29tbWVu
dCBjb25maWcKKyAqIEBwYXJhbSAge09iamVjdH0gY29uZmlnIEluaXRpYWwgY29uZmlnCisgKiBA
cmV0dXJucyB7T2JqZWN0fSAgICAgICAgUHJvY2Vzc2VkIGNvbmZpZworICovCitmdW5jdGlvbiBw
cmVwYXJlQ29uZmlnKGNvbmZpZykgeworCisgICAgY29uZmlnLmdsb2JhbHMgPSBjb25maWcuZ2xv
YmFscyB8fCBjb25maWcuZ2xvYmFsIHx8IHt9OworICAgIGRlbGV0ZSBjb25maWcuZ2xvYmFsOwor
CisgICAgdmFyIGNvcGllZFJ1bGVzID0ge307CisgICAgaWYgKHR5cGVvZiBjb25maWcucnVsZXMg
PT09ICJvYmplY3QiKSB7CisgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZy5ydWxlcykuZm9yRWFj
aChmdW5jdGlvbihrKSB7CisgICAgICAgICAgICB2YXIgcnVsZSA9IGNvbmZpZy5ydWxlc1trXTsK
KyAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7CisgICAgICAgICAgICAgICAg
Y29waWVkUnVsZXNba10gPSBydWxlLnNsaWNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGNvcGllZFJ1bGVzW2tdID0gcnVsZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgcnVsZXM6IGNvcGllZFJ1bGVz
LAorICAgICAgICBnbG9iYWxzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmdsb2JhbHMp
LAorICAgICAgICBlbnY6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuZW52IHx8IHt9KSwK
KyAgICAgICAgc2V0dGluZ3M6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuc2V0dGluZ3Mg
fHwge30pCisgICAgfTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFB1YmxpYyBJ
bnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogT2JqZWN0IHRoYXQg
aXMgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZyBKYXZhU2NyaXB0IHRleHQKKyAqIEBuYW1lIGVz
bGludAorICovCittb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHsKKworICAgIHZhciBhcGkg
PSBPYmplY3QuY3JlYXRlKG5ldyBFdmVudEVtaXR0ZXIoKSksCisgICAgICAgIG1lc3NhZ2VzID0g
W10sCisgICAgICAgIGN1cnJlbnRUZXh0ID0gbnVsbCwKKyAgICAgICAgY3VycmVudFRleHRMaW5l
cyA9IFtdLAorICAgICAgICBjdXJyZW50Q29uZmlnID0gbnVsbCwKKyAgICAgICAgY3VycmVudFRv
a2VucyA9IG51bGwsCisgICAgICAgIGN1cnJlbnRTY29wZXMgPSBudWxsLAorICAgICAgICBzY29w
ZU1hcCA9IG51bGwsCisgICAgICAgIGN1cnJlbnRGaWxlbmFtZSA9IG51bGwsCisgICAgICAgIGNv
bnRyb2xsZXIgPSBudWxsLAorICAgICAgICByZXBvcnRpbmdDb25maWcgPSBbXSwKKyAgICAgICAg
Y29tbWVudExvY3NFbnRlciA9IFtdLAorICAgICAgICBjb21tZW50TG9jc0V4aXQgPSBbXTsKKwor
ICAgIC8qKgorICAgICAqIFBhcnNlcyB0ZXh0IGludG8gYW4gQVNULiBNb3ZlZCBvdXQgaGVyZSBi
ZWNhdXNlIHRoZSB0cnktY2F0Y2ggcHJldmVudHMKKyAgICAgKiBvcHRpbWl6YXRpb24gb2YgZnVu
Y3Rpb25zLCBzbyBpdCdzIGJlc3QgdG8ga2VlcCB0aGUgdHJ5LWNhdGNoIGFzIGlzb2xhdGVkCisg
ICAgICogYXMgcG9zc2libGUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB0
byBwYXJzZS4KKyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIEFTVCBpZiBzdWNjZXNzZnVs
IG9yIG51bGwgaWYgbm90LgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24g
cGFyc2UodGV4dCkgeworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgcGFyc2luZyBl
cnJvcnMgZmlyc3QuIElmIHRoZXJlJ3MgYSBwYXJzaW5nIGVycm9yLCBub3RoaW5nCisgICAgICAg
ICAqIGVsc2UgY2FuIGhhcHBlbi4gSG93ZXZlciwgYSBwYXJzaW5nIGVycm9yIGRvZXMgbm90IHRo
cm93IGFuIGVycm9yCisgICAgICAgICAqIGZyb20gdGhpcyBtZXRob2QgLSBpdCdzIGp1c3QgY29u
c2lkZXJlZCBhIGZhdGFsIGVycm9yIG1lc3NhZ2UsIGEKKyAgICAgICAgICogcHJvYmxlbSB0aGF0
IEVTTGludCBpZGVudGlmaWVkIGp1c3QgbGlrZSBhbnkgb3RoZXIuCisgICAgICAgICAqLworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGVzcHJpbWEucGFyc2UodGV4dCwgeworICAg
ICAgICAgICAgICAgIGxvYzogdHJ1ZSwKKyAgICAgICAgICAgICAgICByYW5nZTogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICByYXc6IHRydWUsCisgICAgICAgICAgICAgICAgdG9rZW5zOiB0cnVlLAor
ICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHRydWUsCisgICAgICAgICAgICAgICAgYXR0YWNoQ29t
bWVudDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisKKyAg
ICAgICAgICAgIG1lc3NhZ2VzLnB1c2goeworICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLAor
ICAgICAgICAgICAgICAgIHNldmVyaXR5OiAyLAorCisgICAgICAgICAgICAgICAgLy8gbWVzc2Fn
ZXMgY29tZSBhcyAiTGluZSBYOiBVbmV4cGVjdGVkIHRva2VuIGZvbyIsIHNvIHN0cmlwIG9mZiBs
ZWFkaW5nIHBhcnQKKyAgICAgICAgICAgICAgICBtZXNzYWdlOiBleC5tZXNzYWdlLnN1YnN0cmlu
ZyhleC5tZXNzYWdlLmluZGV4T2YoIjoiKSArIDEpLnRyaW0oKSwKKworICAgICAgICAgICAgICAg
IGxpbmU6IGV4LmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBleC5jb2x1bW4K
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGNvbGxlY3Rpb24gb2YgY29tbWVudHMgdG8g
cHJldmVudCBkb3VibGUgZXZlbnQgZm9yIGNvbW1lbnQgYXMKKyAgICAgKiBsZWFkaW5nIGFuZCB0
cmFpbGluZywgdGhlbiBlbWl0IGV2ZW50IGlmIHBhc3NpbmcKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGVbXX0gY29tbWVudHMgQ29sbGVjdGlvbiBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFt
IHtPYmplY3RbXX0gbG9jcyBMaXN0IG9mIGxvY2F0aW9ucyBvZiBwcmV2aW91cyBjb21tZW50IG5v
ZGVzCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHBvc3RmaXgK
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbWl0Q29tbWVu
dHMoY29tbWVudHMsIGxvY3MsIGV2ZW50TmFtZSkgeworCisgICAgICAgIGlmIChjb21tZW50cy5s
ZW5ndGgpIHsKKyAgICAgICAgICAgIGNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgICAgIGlmIChsb2NzLmluZGV4T2Yobm9kZS5sb2MpID49IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgbG9jcy5zcGxpY2UobG9jcy5pbmRleE9mKG5vZGUubG9jKSwgMSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jcy5wdXNoKG5v
ZGUubG9jKTsKKyAgICAgICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgZXZlbnRO
YW1lLCBub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGVu
dGVyIG9mIGNvbW1lbnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMg
Q29sbGVjdGlvbiBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAg
ICovCisgICAgZnVuY3Rpb24gZW1pdENvbW1lbnRzRW50ZXIoY29tbWVudHMpIHsKKyAgICAgICAg
ZW1pdENvbW1lbnRzKGNvbW1lbnRzLCBjb21tZW50TG9jc0VudGVyLCAiQ29tbWVudCIpOworICAg
IH0KKworICAgIC8qKgorICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGV4aXQgb2Yg
Y29tbWVudCBub2RlcworICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50cyBDb2xsZWN0
aW9uIG9mIGNvbW1lbnQgbm9kZXMKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzKSB7CisgICAgICAgIGVtaXRDb21t
ZW50cyhjb21tZW50cywgY29tbWVudExvY3NFeGl0LCAiQ29tbWVudDpleGl0Iik7CisgICAgfQor
CisgICAgLyoqCisgICAgICogR2V0IHRoZSBzZXZlcml0eSBsZXZlbCBvZiBhIHJ1bGUgKDAgLSBu
b25lLCAxIC0gd2FybmluZywgMiAtIGVycm9yKQorICAgICAqIFJldHVybnMgMCBpZiB0aGUgcnVs
ZSBjb25maWcgaXMgbm90IHZhbGlkIChhbiBBcnJheSBvciBhIG51bWJlcikKKyAgICAgKiBAcGFy
YW0ge0FycmF5fG51bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBA
cmV0dXJucyB7bnVtYmVyfSAwLCAxLCBvciAyLCBpbmRpY2F0aW5nIHJ1bGUgc2V2ZXJpdHkKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSdWxlU2V2ZXJpdHkocnVsZUNvbmZpZykgeworICAgICAg
ICBpZiAodHlwZW9mIHJ1bGVDb25maWcgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICByZXR1
cm4gcnVsZUNvbmZpZzsKKyAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25m
aWcpKSB7CisgICAgICAgICAgICByZXR1cm4gcnVsZUNvbmZpZ1swXTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisg
ICAgICogR2V0IHRoZSBvcHRpb25zIGZvciBhIHJ1bGUgKG5vdCBpbmNsdWRpbmcgc2V2ZXJpdHkp
LCBpZiBhbnkKKyAgICAgKiBAcGFyYW0ge0FycmF5fG51bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNv
bmZpZ3VyYXRpb24KKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIHJ1bGUgb3B0aW9ucywgZW1w
dHkgQXJyYXkgaWYgbm9uZQorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFJ1bGVPcHRpb25zKHJ1
bGVDb25maWcpIHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZUNvbmZpZykpIHsKKyAg
ICAgICAgICAgIHJldHVybiBydWxlQ29uZmlnLnNsaWNlKDEpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gc2V0IHVu
bGltaXRlZCBsaXN0ZW5lcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9p
c3N1ZXMvNTI0KQorICAgIGFwaS5zZXRNYXhMaXN0ZW5lcnMoMCk7CisKKyAgICAvKioKKyAgICAg
KiBSZXNldHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBvYmplY3QuCisgICAgICogQHJldHVy
bnMge3ZvaWR9CisgICAgICovCisgICAgYXBpLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7CisgICAgICAgIG1lc3NhZ2VzID0gW107CisgICAg
ICAgIGN1cnJlbnRDb25maWcgPSBudWxsOworICAgICAgICBjdXJyZW50VGV4dCA9IG51bGw7Cisg
ICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBbXTsKKyAgICAgICAgY3VycmVudFRva2VucyA9IG51
bGw7CisgICAgICAgIGN1cnJlbnRTY29wZXMgPSBudWxsOworICAgICAgICBzY29wZU1hcCA9IG51
bGw7CisgICAgICAgIGNvbnRyb2xsZXIgPSBudWxsOworICAgICAgICByZXBvcnRpbmdDb25maWcg
PSBbXTsKKyAgICAgICAgY29tbWVudExvY3NFbnRlciA9IFtdOworICAgICAgICBjb21tZW50TG9j
c0V4aXQgPSBbXTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVmVyaWZpZXMgdGhlIHRleHQg
YWdhaW5zdCB0aGUgcnVsZXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuCisgICAg
ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIEphdmFTY3JpcHQgdGV4dCB0byB2ZXJpZnkuCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBBbiBvYmplY3Qgd2hvc2Uga2V5cyBzcGVjaWZ5
IHRoZSBydWxlcyB0byB1c2UuCisgICAgICogQHBhcmFtIHtzdHJpbmc9fSBmaWxlbmFtZSBUaGUg
b3B0aW9uYWwgZmlsZW5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgY2hlY2tlZC4KKyAgICAgKiAgICAg
IElmIHRoaXMgaXMgbm90IHNldCwgdGhlIGZpbGVuYW1lIHdpbGwgZGVmYXVsdCB0byAnPGlucHV0
PicgaW4gdGhlIHJ1bGUgY29udGV4dC4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzYXZlU3Rh
dGUgSW5kaWNhdGVzIGlmIHRoZSBzdGF0ZSBmcm9tIHRoZSBsYXN0IHJ1biBzaG91bGQgYmUgc2F2
ZWQuCisgICAgICogICAgICBNb3N0bHkgdXNlZnVsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAg
ICAqIEByZXR1cm5zIHtPYmplY3RbXX0gVGhlIHJlc3VsdHMgYXMgYW4gYXJyYXkgb2YgbWVzc2Fn
ZXMgb3IgbnVsbCBpZiBubyBtZXNzYWdlcy4KKyAgICAgKi8KKyAgICBhcGkudmVyaWZ5ID0gZnVu
Y3Rpb24odGV4dCwgY29uZmlnLCBmaWxlbmFtZSwgc2F2ZVN0YXRlKSB7CisKKyAgICAgICAgdmFy
IGFzdDsKKworICAgICAgICAvLyBzZXQgdGhlIGN1cnJlbnQgcGFyc2VkIGZpbGVuYW1lCisgICAg
ICAgIGN1cnJlbnRGaWxlbmFtZSA9IGZpbGVuYW1lOworCisgICAgICAgIGlmICghc2F2ZVN0YXRl
KSB7CisgICAgICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBhc3Qg
PSBwYXJzZSh0ZXh0LnJlcGxhY2UoL14jIShbXlxyXG5dK1tcclxuXSspLywgIi8vJDEiKSk7CisK
KyAgICAgICAgLy8gaWYgRXNwcmltYSBmYWlsZWQgdG8gcGFyc2UgdGhlIGZpbGUsIHRoZXJlJ3Mg
bm8gc2Vuc2UgaW4gc2V0dGluZyB1cCBydWxlcworICAgICAgICBpZiAoYXN0KSB7CisgICAgICAg
ICAgICAvLyBwcm9jZXNzIGluaXRpYWwgY29uZmlnIHRvIG1ha2UgaXQgc2FmZSB0byBleHRlbmQK
KyAgICAgICAgICAgIGNvbmZpZyA9IHByZXBhcmVDb25maWcoY29uZmlnKTsKKworICAgICAgICAg
ICAgLy8gcGFyc2UgZ2xvYmFsIGNvbW1lbnRzIGFuZCBtb2RpZnkgY29uZmlnCisgICAgICAgICAg
ICBtb2RpZnlDb25maWdzRnJvbUNvbW1lbnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcp
OworCisgICAgICAgICAgICAvLyBlbmFibGUgYXBwcm9wcmlhdGUgcnVsZXMKKyAgICAgICAgICAg
IE9iamVjdC5rZXlzKGNvbmZpZy5ydWxlcykuZmlsdGVyKGZ1bmN0aW9uKGtleSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pID4gMDsK
KyAgICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisKKyAgICAgICAgICAgICAg
ICB2YXIgcnVsZUNyZWF0b3IgPSBydWxlcy5nZXQoa2V5KSwKKyAgICAgICAgICAgICAgICAgICAg
c2V2ZXJpdHkgPSBnZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pLAorICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zID0gZ2V0UnVsZU9wdGlvbnMoY29uZmlnLnJ1bGVzW2tleV0pLAor
ICAgICAgICAgICAgICAgICAgICBydWxlOworCisgICAgICAgICAgICAgICAgaWYgKHJ1bGVDcmVh
dG9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBydWxlID0gcnVsZUNyZWF0b3IobmV3IFJ1bGVDb250ZXh0KGtleSwgYXBpLCBzZXZlcml0eSwg
b3B0aW9ucywgY29uZmlnLnNldHRpbmdzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFkZCBhbGwgdGhlIG5vZGUgdHlwZXMgYXMgbGlzdGVuZXJzCisgICAgICAgICAgICAgICAgICAg
ICAgICBPYmplY3Qua2V5cyhydWxlKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGVUeXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBpLm9uKG5vZGVUeXBlLCBydWxlW25vZGVUeXBlXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aChleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXgubWVzc2FnZSA9ICJFcnJvciB3aGls
ZSBsb2FkaW5nIHJ1bGUgJyIgKyBrZXkgKyAiJzogIiArIGV4Lm1lc3NhZ2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJE
ZWZpbml0aW9uIGZvciBydWxlICciICsga2V5ICsgIicgd2FzIG5vdCBmb3VuZC4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gc2F2ZSBjb25m
aWcgc28gcnVsZXMgY2FuIGFjY2VzcyBhcyBuZWNlc3NhcnkKKyAgICAgICAgICAgIGN1cnJlbnRD
b25maWcgPSBjb25maWc7CisgICAgICAgICAgICBjdXJyZW50VGV4dCA9IHRleHQ7CisgICAgICAg
ICAgICBjb250cm9sbGVyID0gbmV3IGVzdHJhdmVyc2UuQ29udHJvbGxlcigpOworCisgICAgICAg
ICAgICAvLyBnYXRoZXIgZGF0YSB0aGF0IG1heSBiZSBuZWVkZWQgYnkgdGhlIHJ1bGVzCisgICAg
ICAgICAgICBjdXJyZW50U2NvcGVzID0gZXNjb3BlLmFuYWx5emUoYXN0LCB7IGlnbm9yZUV2YWw6
IHRydWUgfSkuc2NvcGVzOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSW5kZXgg
dGhlIHNjb3BlcyBieSB0aGUgc3RhcnQgcmFuZ2Ugb2YgdGhlaXIgYmxvY2sgZm9yIGVmZmljaWVu
dAorICAgICAgICAgICAgICogbG9va3VwIGluIGdldFNjb3BlLgorICAgICAgICAgICAgICovCisg
ICAgICAgICAgICBzY29wZU1hcCA9IFtdOworICAgICAgICAgICAgY3VycmVudFNjb3Blcy5mb3JF
YWNoKGZ1bmN0aW9uIChzY29wZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2Ug
PSBzY29wZS5ibG9jay5yYW5nZVswXTsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB0
d28gc2NvcGVzIGFyZSByZXR1cm5lZCBmb3IgYSBnaXZlbiBub2RlLiBUaGlzIGlzCisgICAgICAg
ICAgICAgICAgLy8gaGFuZGxlZCBsYXRlciBpbiBhIGtub3duIHdheSwgc28ganVzdCBkb24ndCBv
dmVyd3JpdGUgaGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoIXNjb3BlTWFwW3JhbmdlXSkgewor
ICAgICAgICAgICAgICAgICAgICBzY29wZU1hcFtyYW5nZV0gPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq
IFNwbGl0IHRleHQgaGVyZSBpbnRvIGFycmF5IG9mIGxpbmVzIHNvCisgICAgICAgICAgICAgKiBp
dCdzIG5vdCBiZWluZyBkb25lIHJlcGVhdGVkbHkKKyAgICAgICAgICAgICAqIGJ5IGluZGl2aWR1
YWwgcnVsZXMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGN1cnJlbnRUZXh0TGluZXMg
PSBjdXJyZW50VGV4dC5zcGxpdCgvXHI/XG4vZyk7CisKKyAgICAgICAgICAgIC8vIEZyZWV6aW5n
IHNvIGFycmF5IGlzbid0IGFjY2lkZW50YWxseSBjaGFuZ2VkIGJ5IGEgcnVsZS4KKyAgICAgICAg
ICAgIE9iamVjdC5mcmVlemUoY3VycmVudFRleHRMaW5lcyk7CisKKyAgICAgICAgICAgIC8qIGdl
dCBhbGwgdG9rZW5zIGZyb20gdGhlIGFzdCBhbmQgc3RvcmUgdGhlbSBhcyBhIGhhc2h0YWJsZSB0
bworICAgICAgICAgICAgICogaW1wcm92ZSB0cmF2ZXJzYWwgc3BlZWQgd2hlbiB3YW50aW5nIHRv
IGZpbmQgdG9rZW5zIGZvciBhIGdpdmVuCisgICAgICAgICAgICAgKiBub2RlCisgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIGN1cnJlbnRUb2tlbnMgPSBbXTsKKyAgICAgICAgICAgIGFzdC50
b2tlbnMuZm9yRWFjaChmdW5jdGlvbih0b2tlbikgeworICAgICAgICAgICAgICAgIGN1cnJlbnRU
b2tlbnNbdG9rZW4ucmFuZ2VbMF1dID0gdG9rZW47CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgLy8gYXVnbWVudCBnbG9iYWwgc2NvcGUgd2l0aCBkZWNsYXJlZCBnbG9iYWwgdmFyaWFi
bGVzCisgICAgICAgICAgICBhZGREZWNsYXJlZEdsb2JhbHMoYXN0LCBjdXJyZW50U2NvcGVzWzBd
LCBjdXJyZW50Q29uZmlnKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEVhY2gg
bm9kZSBoYXMgYSB0eXBlIHByb3BlcnR5LiBXaGVuZXZlciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBu
b2RlIGlzIGZvdW5kLAorICAgICAgICAgICAgICogYW4gZXZlbnQgaXMgZmlyZWQuIFRoaXMgYWxs
b3dzIGFueSBsaXN0ZW5lcnMgdG8gYXV0b21hdGljYWxseSBiZSBpbmZvcm1lZAorICAgICAgICAg
ICAgICogdGhhdCB0aGlzIHR5cGUgb2Ygbm9kZSBoYXMgYmVlbiBmb3VuZCBhbmQgcmVhY3QgYWNj
b3JkaW5nbHkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbnRyb2xsZXIudHJhdmVy
c2UoYXN0LCB7CisgICAgICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkg
eworCisgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhu
b2RlKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy5s
ZWFkaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSwgbm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzLnRyYWlsaW5nKTsKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gYXBpLmdldENvbW1lbnRzKG5vZGUpOworCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMudHJhaWxpbmcpOwor
ICAgICAgICAgICAgICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUgKyAiOmV4aXQiLCBub2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRXhpdChjb21tZW50cy5sZWFkaW5nKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIG1lc3NhZ2VzOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIGEg
bWVzc2FnZSBmcm9tIG9uZSBvZiB0aGUgcnVsZXMuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1
bGVJZCBUaGUgSUQgb2YgdGhlIHJ1bGUgY2F1c2luZyB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFy
YW0ge251bWJlcn0gc2V2ZXJpdHkgVGhlIHNldmVyaXR5IGxldmVsIG9mIHRoZSBydWxlIGFzIGNv
bmZpZ3VyZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0aGF0
IHRoZSBtZXNzYWdlIHJlbGF0ZXMgdG8uCisgICAgICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhdGlv
biBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXJyb3IgbGluZSBhbmQgY29sdW1uCisgICAgICog
ICAgICBudW1iZXJzLiBJZiBsb2NhdGlvbiBpcyBub3QgcHJvdmlkZWQgdGhlIG5vZGUncyBzdGFy
dCBsb2NhdGlvbiB3aWxsCisgICAgICogICAgICBiZSB1c2VkLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBtZXNzYWdlIFRoZSBhY3R1YWwgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0ge09iamVjdH0g
b3B0cyBPcHRpb25hbCB0ZW1wbGF0ZSBkYXRhIHdoaWNoIHByb2R1Y2VzIGEgZm9ybWF0dGVkIG1l
c3NhZ2UKKyAgICAgKiAgICAgd2l0aCBzeW1ib2xzIGJlaW5nIHJlcGxhY2VkIGJ5IHRoaXMgb2Jq
ZWN0J3MgdmFsdWVzLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5y
ZXBvcnQgPSBmdW5jdGlvbihydWxlSWQsIHNldmVyaXR5LCBub2RlLCBsb2NhdGlvbiwgbWVzc2Fn
ZSwgb3B0cykgeworCisgICAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICJzdHJpbmciKSB7
CisgICAgICAgICAgICBvcHRzID0gbWVzc2FnZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBsb2Nh
dGlvbjsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gbm9kZS5sb2Muc3RhcnQ7CisgICAgICAgIH0K
KworICAgICAgICBPYmplY3Qua2V5cyhvcHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkp
IHsKKyAgICAgICAgICAgIHZhciByeCA9IG5ldyBSZWdFeHAoInt7IiArIGVzY2FwZVJlZ0V4cChr
ZXkpICsgIn19IiwgImciKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2Uo
cngsIG9wdHNba2V5XSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChpc0Rpc2FibGVkQnlS
ZXBvcnRpbmdDb25maWcocmVwb3J0aW5nQ29uZmlnLCBydWxlSWQsIGxvY2F0aW9uKSkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZXMucHVzaCh7Cisg
ICAgICAgICAgICBydWxlSWQ6IHJ1bGVJZCwKKyAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0
eSwKKyAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdl
LAorICAgICAgICAgICAgbGluZTogbG9jYXRpb24ubGluZSwKKyAgICAgICAgICAgIGNvbHVtbjog
bG9jYXRpb24uY29sdW1uLAorICAgICAgICAgICAgc291cmNlOiBhcGkuZ2V0U291cmNlKG5vZGUp
CisgICAgICAgIH0pOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2Ug
Y29kZSBmb3IgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlPX0gbm9kZSBU
aGUgQVNUIG5vZGUgdG8gZ2V0IHRoZSB0ZXh0IGZvci4KKyAgICAgKiBAcGFyYW0ge2ludD19IGJl
Zm9yZUNvdW50IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0
cmlldmUuCisgICAgICogQHBhcmFtIHtpbnQ9fSBhZnRlckNvdW50IFRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyBhZnRlciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0dXJucyB7c3Ry
aW5nfSBUaGUgdGV4dCByZXByZXNlbnRpbmcgdGhlIEFTVCBub2RlLgorICAgICAqLworICAgIGFw
aS5nZXRTb3VyY2UgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkgewor
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50VGV4dCAhPT0g
bnVsbCkgPyBjdXJyZW50VGV4dC5zbGljZShub2RlLnJhbmdlWzBdIC0gKGJlZm9yZUNvdW50IHx8
IDApLAorICAgICAgICAgICAgICAgIG5vZGUucmFuZ2VbMV0gKyAoYWZ0ZXJDb3VudCB8fCAwKSkg
OiBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0
OworICAgICAgICB9CisKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZW50aXJl
IHNvdXJjZSB0ZXh0IHNwbGl0IGludG8gYW4gYXJyYXkgb2YgbGluZXMuCisgICAgICogQHJldHVy
bnMge0FycmF5fSBUaGUgc291cmNlIHRleHQgYXMgYW4gYXJyYXkgb2YgbGluZXMuCisgICAgICov
CisgICAgYXBpLmdldFNvdXJjZUxpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBj
dXJyZW50VGV4dExpbmVzOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGFsbCBjb21t
ZW50cyBmb3IgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBBU1Qgbm9kZSB0byBnZXQgdGhlIGNvbW1lbnRzIGZvci4KKyAgICAgKiBAcmV0dXJucyB7T2Jq
ZWN0fSBUaGUgbGlzdCBvZiBjb21tZW50cyBpbmRleGVkIGJ5IHRoZWlyIHBvc2l0aW9uLgorICAg
ICAqLworICAgIGFwaS5nZXRDb21tZW50cyA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICB2
YXIgbGVhZGluZ0NvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHMgfHwgW10sCisgICAgICAg
ICAgICB0cmFpbGluZ0NvbW1lbnRzID0gbm9kZS50cmFpbGluZ0NvbW1lbnRzIHx8IFtdOworCisg
ICAgICAgIC8qCisgICAgICAgICAqIEVzcHJpbWEgYWRkcyBhICJjb21tZW50cyIgYXJyYXkgb24g
UHJvZ3JhbSBub2RlcyByYXRoZXIgdGhhbgorICAgICAgICAgKiBsZWFkaW5nQ29tbWVudHMvdHJh
aWxpbmdDb21tZW50cy4gQ29tbWVudHMgYXJlIG9ubHkgbGVmdCBpbiB0aGUKKyAgICAgICAgICog
UHJvZ3JhbSBub2RlIGNvbW1lbnRzIGFycmF5IGlmIHRoZXJlIGlzIG5vIGV4ZWN1dGFibGUgY29k
ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICJQcm9ncmFtIikgewor
ICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAg
ICBsZWFkaW5nQ29tbWVudHMgPSBub2RlLmNvbW1lbnRzOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGxlYWRpbmc6IGxlYWRpbmdDb21t
ZW50cywKKyAgICAgICAgICAgIHRyYWlsaW5nOiB0cmFpbGluZ0NvbW1lbnRzCisgICAgICAgIH07
CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgSlNEb2MgY29tbWVudCBm
b3IgYSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5v
ZGUgdG8gZ2V0IHRoZSBjb21tZW50IGZvci4KKyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhl
IEJsb2NrQ29tbWVudCBub2RlIGNvbnRhaW5pbmcgdGhlIEpTRG9jIGZvciB0aGUKKyAgICAgKiAg
ICAgIGdpdmVuIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQuCisgICAgICovCisgICAgYXBpLmdl
dEpTRG9jQ29tbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICB2YXIgcGFyZW50ID0g
bm9kZS5wYXJlbnQsCisgICAgICAgICAgICBsaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZTsKKwor
ICAgICAgICAvKioKKyAgICAgICAgICogRmluZHMgYSBKU0RvYyBjb21tZW50IG5vZGUgaW4gYW4g
YXJyYXkgb2YgY29tbWVudCBub2Rlcy4KKyAgICAgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNv
bW1lbnRzIFRoZSBhcnJheSBvZiBjb21tZW50IG5vZGVzIHRvIHNlYXJjaC4KKyAgICAgICAgICog
QHJldHVybnMge0FTVE5vZGV9IFRoZSBub2RlIGlmIGZvdW5kLCBudWxsIGlmIG5vdC4KKyAgICAg
ICAgICogQHByaXZhdGUKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGZpbmRKU0RvY0Nv
bW1lbnQoY29tbWVudHMpIHsKKworICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tpXS50eXBlID09PSAiQmxvY2siICYm
IGNvbW1lbnRzW2ldLnZhbHVlLmNoYXJBdCgwKSA9PT0gIioiKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaW5lIC0gY29tbWVudHNbaV0ubG9jLmVuZC5saW5lIDw9IDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHNbaV07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICBj
YXNlICJGdW5jdGlvbkRlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpT
RG9jQ29tbWVudChub2RlLmxlYWRpbmdDb21tZW50cyk7CisKKyAgICAgICAgICAgIGNhc2UgIkZ1
bmN0aW9uRXhwcmVzc2lvbiI6CisKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgIT09
ICJDYWxsRXhwcmVzc2lvbiIgfHwgcGFyZW50LmNhbGxlZSAhPT0gbm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAocGFyZW50ICYmICFwYXJlbnQubGVhZGluZ0NvbW1lbnRzICYmIHBh
cmVudC50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIiAmJiBwYXJlbnQudHlwZSAhPT0gIkZ1
bmN0aW9uRGVjbGFyYXRpb24iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBw
YXJlbnQucGFyZW50OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudCAmJiAocGFyZW50LnR5cGUgIT09ICJGdW5jdGlvbkRlY2xhcmF0aW9u
IikgPyBmaW5kSlNEb2NDb21tZW50KHBhcmVudC5sZWFkaW5nQ29tbWVudHMpIDogbnVsbDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhIG51bWJlciBvZiB0b2tlbnMgdGhh
dCBwcmVjZWRlIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAg
ICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtp
bnR9IFtiZWZvcmVDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBiZWZvcmUgdGhlIG5vZGUg
dG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMg
cmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGkuZ2V0VG9rZW5zQmVmb3JlID0g
ZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQpIHsKKyAgICAgICAgdmFyIGJlZm9yZVRva2VucyA9
IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzBdIC0gMTsKKyAgICAgICAgd2hpbGUgKGJlZm9yZUNv
dW50ID4gMCAmJiBjdXJzb3IgPj0gMCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNb
Y3Vyc29yXSkgeworICAgICAgICAgICAgICAgIGJlZm9yZVRva2Vucy51bnNoaWZ0KGN1cnJlbnRU
b2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1iZWZvcmVDb3VudDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC0tY3Vyc29yOworICAgICAgICB9CisgICAgICAgIHJldHVybiBi
ZWZvcmVUb2tlbnM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRva2VuIHRo
YXQgcHJlY2VkZXMgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCisg
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0g
e2ludH0gW3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAgYmVmb3JlIHRoZSBnaXZl
biBub2RlLgorICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0
aGUgdG9rZW4uCisgICAgICovCisgICAgYXBpLmdldFRva2VuQmVmb3JlID0gZnVuY3Rpb24obm9k
ZSwgc2tpcCkgeworICAgICAgICBmb3IgKHZhciBjdXJzb3IgPSBub2RlLnJhbmdlWzBdIC0gMTsg
Y3Vyc29yID49IDA7IC0tY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tj
dXJzb3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAg
ICAgICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEg
bnVtYmVyIG9mIHRva2VucyB0aGF0IHByZWNlZGUgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRo
ZSB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tl
bnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19
IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGku
Z2V0VG9rZW5zQWZ0ZXIgPSBmdW5jdGlvbihub2RlLCBhZnRlckNvdW50KSB7CisgICAgICAgIHZh
ciBhZnRlclRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdOworICAgICAgICB3aGls
ZSAoYWZ0ZXJDb3VudCA+IDAgJiYgY3Vyc29yIDwgY3VycmVudFRva2Vucy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICBh
ZnRlclRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAg
LS1hZnRlckNvdW50OworICAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vy
c29yXS5yYW5nZVsxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytj
dXJzb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFmdGVyVG9r
ZW5zOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b2tlbiB0aGF0IGZvbGxv
d3MgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW3Nr
aXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUuCisg
ICAgICogQHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0VG9rZW5BZnRlciA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsK
KyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsgY3Vyc29yIDwgY3VycmVu
dFRva2Vucy5sZW5ndGg7ICsrY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vu
c1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRz
IGFsbCB0b2tlbnMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBb
YmVmb3JlQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBub2RlIHRvIHJl
dHJpZXZlLgorICAgICAqIEBwYXJhbSB7aW50fSBbYWZ0ZXJDb3VudD0wXSBUaGUgbnVtYmVyIG9m
IHRva2VucyBhZnRlciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0dXJucyB7W1Rv
a2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgorICAgICAqLworICAg
IGFwaS5nZXRUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkg
eworICAgICAgICB2YXIgYmVmb3JlVG9rZW5zID0gYXBpLmdldFRva2Vuc0JlZm9yZShub2RlLCBi
ZWZvcmVDb3VudCksCisgICAgICAgICAgICBhZnRlclRva2VucyA9IGFwaS5nZXRUb2tlbnNBZnRl
cihub2RlLCBhZnRlckNvdW50KSwKKyAgICAgICAgICAgIHRva2VucyA9IFtdLAorICAgICAgICAg
ICAgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsKKyAgICAgICAgd2hpbGUgKGN1cnNvciA8IG5vZGUu
cmFuZ2VbMV0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAg
ICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAg
ICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsxXTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytjdXJzb3I7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJlZm9yZVRva2Vucy5jb25jYXQodG9rZW5zLCBh
ZnRlclRva2Vucyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGBj
b3VudGAgdG9rZW5zIG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9rZW4gc3RyZWFtLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtj
b3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAg
ICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9r
ZW5zLgorICAgICAqLworICAgIGFwaS5nZXRGaXJzdFRva2VucyA9IGZ1bmN0aW9uKG5vZGUsIGNv
dW50KSB7CisgICAgICAgIHZhciB0b2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsK
KyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPCBub2RlLnJhbmdlWzFdKSB7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAg
dG9rZW5zLnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAgICAgICAtLWNv
dW50OworICAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5n
ZVsxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytjdXJzb3I7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9Owor
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUn
cyB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNr
aXAuCisgICAgICogQHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0
b2tlbi4KKyAgICAgKi8KKyAgICBhcGkuZ2V0Rmlyc3RUb2tlbiA9IGZ1bmN0aW9uKG5vZGUsIHNr
aXApIHsKKyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsgY3Vyc29yIDwg
bm9kZS5yYW5nZVsxXTsgKytjdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5z
W2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgLS1za2lwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5zW2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMg
dGhlIGxhc3QgYGNvdW50YCB0b2tlbnMgb2YgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2NvdW50
PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAq
IEByZXR1cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMu
CisgICAgICovCisgICAgYXBpLmdldExhc3RUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBjb3VudCkg
eworICAgICAgICB2YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMV0gLSAxOwor
ICAgICAgICB3aGlsZSAoY291bnQgPiAwICYmIGN1cnNvciA+PSBub2RlLnJhbmdlWzBdKSB7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAg
dG9rZW5zLnVuc2hpZnQoY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAgICAgICAt
LWNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLS1jdXJzb3I7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0
aGUgbGFzdCB0b2tlbiBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBb
c2tpcD0wXSBBIG51bWJlciBvZiB0b2tlbnMgdG8gc2tpcC4KKyAgICAgKiBAcmV0dXJucyB7VG9r
ZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgorICAgICAqLworICAgIGFwaS5n
ZXRMYXN0VG9rZW4gPSBmdW5jdGlvbihub2RlLCBza2lwKSB7CisgICAgICAgIGZvciAodmFyIGN1
cnNvciA9IG5vZGUucmFuZ2VbMV0gLSAxOyBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXTsgLS1jdXJz
b3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLS1za2lwOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50
VG9rZW5zW2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgbm9kZXMgdGhhdCBhcmUgYW5jZXN0
b3JzIG9mIGN1cnJlbnQgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZVtdfSBBcnJheSBv
ZiBvYmplY3RzIHJlcHJlc2VudGluZyBhbmNlc3RvcnMuCisgICAgICovCisgICAgYXBpLmdldEFu
Y2VzdG9ycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gY29udHJvbGxlci5wYXJlbnRz
KCk7CisgICAgfTsKKworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2NvcGUgZm9yIHRoZSBj
dXJyZW50IG5vZGUuCisgICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHJlcHJlc2Vu
dGluZyB0aGUgY3VycmVudCBub2RlJ3Mgc2NvcGUuCisgICAgICovCisgICAgYXBpLmdldFNjb3Bl
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBwYXJlbnRzID0gY29udHJvbGxlci5wYXJlbnRz
KCksCisgICAgICAgICAgICBpbm5lckJsb2NrID0gbnVsbCwKKyAgICAgICAgICAgIHNlbGVjdGVk
U2NvcGVJbmRleDsKKworICAgICAgICAvLyBEb24ndCBkbyB0aGlzIGZvciBQcm9ncmFtIG5vZGVz
IC0gdGhleSBoYXZlIG5vIHBhcmVudHMKKyAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoKSB7CisK
KyAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgbm9kZSBpcyBmdW5jdGlvbiBkZWNsYXJhdGlvbiwg
YWRkIGl0IHRvIHRoZSBsaXN0CisgICAgICAgICAgICB2YXIgY3VycmVudCA9IGNvbnRyb2xsZXIu
Y3VycmVudCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVj
bGFyYXRpb24iIHx8IGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAg
ICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goY3VycmVudCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEFzY2VuZCB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50cworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKworICAg
ICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBub2RlIHRoYXQgcmVxdWlyZXMgYSBzY29wZSBpcyB0
aGUgbm9kZSB0aGF0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAvLyBvdXIgY3VycmVudCBub2Rl
J3MgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgICAgIGlmIChlc2NvcGUuU2NvcGUuaXNT
Y29wZVJlcXVpcmVkKHBhcmVudHNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGlubmVyQmxv
Y2sgPSBwYXJlbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0
aGUgaW5uZXJtb3N0IHNjb3BlCisgICAgICAgICAgICBzZWxlY3RlZFNjb3BlSW5kZXggPSBzY29w
ZU1hcFtpbm5lckJsb2NrLnJhbmdlWzBdXTsKKworICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rp
b24gZXhwcmVzc2lvbnMgY3JlYXRlIHR3byBuZXN0ZWQgc2NvcGUgb2JqZWN0cy4gVGhlCisgICAg
ICAgICAgICAvLyBvdXRlciBzY29wZSBjb250YWlucyBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNz
aW9uIG5hbWUuIFdlIHJldHVybgorICAgICAgICAgICAgLy8gdGhlIGlubmVyIHNjb3BlLgorICAg
ICAgICAgICAgaWYgKGlubmVyQmxvY2sudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYg
aW5uZXJCbG9jay5pZCAmJiBpbm5lckJsb2NrLmlkLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAr
K3NlbGVjdGVkU2NvcGVJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRTY29wZXNbc2VsZWN0ZWRTY29wZUluZGV4XTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50U2NvcGVzWzBdOyAgICAvLyBnbG9iYWwgc2NvcGUKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBmaWxlbmFtZSBmb3Ig
dGhlIGN1cnJlbnRseSBwYXJzZWQgc291cmNlLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRo
ZSBmaWxlbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJjZSBiZWluZyBwYXJzZWQuCisgICAg
ICogICAgIERlZmF1bHRzIHRvICI8aW5wdXQ+IiBpZiBubyBmaWxlbmFtZSBpbmZvIGlzIHByZXNl
bnQuCisgICAgICovCisgICAgYXBpLmdldEZpbGVuYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh0eXBlb2YgY3VycmVudEZpbGVuYW1lID09PSAic3RyaW5nIikgeworICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRGaWxlbmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiAiPGlucHV0PiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVm
aW5lcyBhIG5ldyBsaW50aW5nIHJ1bGUuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBB
IHVuaXF1ZSBydWxlIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBydWxlTW9k
dWxlIEZ1bmN0aW9uIGZyb20gY29udGV4dCB0byBvYmplY3QgbWFwcGluZyBBU1Qgbm9kZSB0eXBl
cyB0byBldmVudCBoYW5kbGVycworICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAg
IHZhciBkZWZpbmVSdWxlID0gYXBpLmRlZmluZVJ1bGUgPSBmdW5jdGlvbihydWxlSWQsIHJ1bGVN
b2R1bGUpIHsKKyAgICAgICAgcnVsZXMuZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSk7CisgICAg
fTsKKworICAgIC8qKgorICAgICAqIERlZmluZXMgbWFueSBuZXcgbGludGluZyBydWxlcy4KKyAg
ICAgKiBAcGFyYW0ge29iamVjdH0gcnVsZXMgbWFwIGZyb20gdW5pcXVlIHJ1bGUgaWRlbnRpZmll
ciB0byBydWxlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgYXBpLmRlZmlu
ZVJ1bGVzID0gZnVuY3Rpb24ocnVsZXMpIHsKKyAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMocnVsZXMpLmZvckVhY2goZnVuY3Rpb24ocnVsZUlkKSB7CisgICAgICAgICAgICBkZWZp
bmVSdWxlKHJ1bGVJZCwgcnVsZXNbcnVsZUlkXSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAg
ICAvKioKKyAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGVzbGludCBjb25maWd1cmF0aW9uLgorICAg
ICAqIEByZXR1cm5zIHtPYmplY3R9IE9iamVjdCBtYXBwaW5nIHJ1bGUgSURzIHRvIHRoZWlyIGRl
ZmF1bHQgY29uZmlndXJhdGlvbnMKKyAgICAgKi8KKyAgICBhcGkuZGVmYXVsdHMgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIHJlcXVpcmUoIi4uL2NvbmYvZXNsaW50Lmpzb24iKTsKKyAg
ICB9OworCisgICAgcmV0dXJuIGFwaTsKKworfSgpKTsKKworfSx7Ii4uL2NvbmYvZW52aXJvbm1l
bnRzLmpzb24iOjEsIi4uL2NvbmYvZXNsaW50Lmpzb24iOjIsIi4vcnVsZS1jb250ZXh0IjoxMSwi
Li9ydWxlcyI6MTIsIi4vdXRpbCI6MTUwLCJlc2NvcGUiOjUsImVzcHJpbWEiOjYsImVzdHJhdmVy
c2UiOjcsImV2ZW50cyI6Mywib2JqZWN0LWFzc2lnbiI6OH1dLDEwOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7CisgICAgdmFy
IHJ1bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICBydWxlc1siYmxvY2stc2NvcGVkLXZh
ciJdID0gcmVxdWlyZSgiLi9ydWxlcy9ibG9jay1zY29wZWQtdmFyIik7CisgICAgcnVsZXNbImJy
YWNlLXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2JyYWNlLXN0eWxlIik7CisgICAgcnVsZXNb
ImNhbWVsY2FzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jYW1lbGNhc2UiKTsKKyAgICBydWxlc1si
Y29tbWEtc3BhY2luZyJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zcGFjaW5nIik7CisgICAg
cnVsZXNbImNvbW1hLXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbW1hLXN0eWxlIik7Cisg
ICAgcnVsZXNbImNvbXBsZXhpdHkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tcGxleGl0eSIpOwor
ICAgIHJ1bGVzWyJjb25zaXN0ZW50LXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb25zaXN0
ZW50LXJldHVybiIpOworICAgIHJ1bGVzWyJjb25zaXN0ZW50LXRoaXMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvY29uc2lzdGVudC10aGlzIik7CisgICAgcnVsZXNbImN1cmx5Il0gPSByZXF1aXJlKCIu
L3J1bGVzL2N1cmx5Iik7CisgICAgcnVsZXNbImRlZmF1bHQtY2FzZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy9kZWZhdWx0LWNhc2UiKTsKKyAgICBydWxlc1siZG90LW5vdGF0aW9uIl0gPSByZXF1aXJl
KCIuL3J1bGVzL2RvdC1ub3RhdGlvbiIpOworICAgIHJ1bGVzWyJlb2wtbGFzdCJdID0gcmVxdWly
ZSgiLi9ydWxlcy9lb2wtbGFzdCIpOworICAgIHJ1bGVzWyJlcWVxZXEiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvZXFlcWVxIik7CisgICAgcnVsZXNbImZ1bmMtbmFtZXMiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvZnVuYy1uYW1lcyIpOworICAgIHJ1bGVzWyJmdW5jLXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1
bGVzL2Z1bmMtc3R5bGUiKTsKKyAgICBydWxlc1siZ2xvYmFsLXN0cmljdCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9nbG9iYWwtc3RyaWN0Iik7CisgICAgcnVsZXNbImd1YXJkLWZvci1pbiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9ndWFyZC1mb3ItaW4iKTsKKyAgICBydWxlc1siaGFuZGxlLWNhbGxiYWNr
LWVyciJdID0gcmVxdWlyZSgiLi9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIik7CisgICAgcnVs
ZXNbImtleS1zcGFjaW5nIl0gPSByZXF1aXJlKCIuL3J1bGVzL2tleS1zcGFjaW5nIik7CisgICAg
cnVsZXNbIm1heC1kZXB0aCJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtZGVwdGgiKTsKKyAgICBy
dWxlc1sibWF4LWxlbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbGVuIik7CisgICAgcnVsZXNb
Im1heC1uZXN0ZWQtY2FsbGJhY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1uZXN0ZWQtY2Fs
bGJhY2tzIik7CisgICAgcnVsZXNbIm1heC1wYXJhbXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4
LXBhcmFtcyIpOworICAgIHJ1bGVzWyJtYXgtc3RhdGVtZW50cyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9tYXgtc3RhdGVtZW50cyIpOworICAgIHJ1bGVzWyJuZXctY2FwIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25ldy1jYXAiKTsKKyAgICBydWxlc1sibmV3LXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uZXctcGFyZW5zIik7CisgICAgcnVsZXNbIm5vLWFsZXJ0Il0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLWFsZXJ0Iik7CisgICAgcnVsZXNbIm5vLWFycmF5LWNvbnN0cnVjdG9yIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLWFycmF5LWNvbnN0cnVjdG9yIik7CisgICAgcnVsZXNbIm5vLWJpdHdpc2Ui
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tYml0d2lzZSIpOworICAgIHJ1bGVzWyJuby1jYWxsZXIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY2FsbGVyIik7CisgICAgcnVsZXNbIm5vLWNhdGNoLXNo
YWRvdyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jYXRjaC1zaGFkb3ciKTsKKyAgICBydWxlc1si
bm8tY29tbWEtZGFuZ2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbW1hLWRhbmdsZSIpOwor
ICAgIHJ1bGVzWyJuby1jb25kLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25kLWFz
c2lnbiIpOworICAgIHJ1bGVzWyJuby1jb25zb2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNv
bnNvbGUiKTsKKyAgICBydWxlc1sibm8tY29uc3RhbnQtY29uZGl0aW9uIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLWNvbnN0YW50LWNvbmRpdGlvbiIpOworICAgIHJ1bGVzWyJuby1jb250cm9sLXJl
Z2V4Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbnRyb2wtcmVnZXgiKTsKKyAgICBydWxlc1si
bm8tZGVidWdnZXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVidWdnZXIiKTsKKyAgICBydWxl
c1sibm8tZGVsZXRlLXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kZWxldGUtdmFyIik7Cisg
ICAgcnVsZXNbIm5vLWRpdi1yZWdleCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kaXYtcmVnZXgi
KTsKKyAgICBydWxlc1sibm8tZHVwZS1rZXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWR1cGUt
a2V5cyIpOworICAgIHJ1bGVzWyJuby1lbHNlLXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1lbHNlLXJldHVybiIpOworICAgIHJ1bGVzWyJuby1lbXB0eS1jbGFzcyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1lbXB0eS1jbGFzcyIpOworICAgIHJ1bGVzWyJuby1lbXB0eS1sYWJlbCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1lbXB0eS1sYWJlbCIpOworICAgIHJ1bGVzWyJuby1lbXB0eSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1lbXB0eSIpOworICAgIHJ1bGVzWyJuby1lcS1udWxsIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLWVxLW51bGwiKTsKKyAgICBydWxlc1sibm8tZXZhbCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1ldmFsIik7CisgICAgcnVsZXNbIm5vLWV4LWFzc2lnbiJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1leC1hc3NpZ24iKTsKKyAgICBydWxlc1sibm8tZXh0ZW5kLW5h
dGl2ZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1leHRlbmQtbmF0aXZlIik7CisgICAgcnVsZXNb
Im5vLWV4dHJhLWJpbmQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtYmluZCIpOworICAg
IHJ1bGVzWyJuby1leHRyYS1ib29sZWFuLWNhc3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0
cmEtYm9vbGVhbi1jYXN0Iik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXBhcmVucyJdID0gcmVxdWly
ZSgiLi9ydWxlcy9uby1leHRyYS1wYXJlbnMiKTsKKyAgICBydWxlc1sibm8tZXh0cmEtc2VtaSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1leHRyYS1zZW1pIik7CisgICAgcnVsZXNbIm5vLWV4dHJh
LXN0cmljdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1leHRyYS1zdHJpY3QiKTsKKyAgICBydWxl
c1sibm8tZmFsbHRocm91Z2giXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giKTsK
KyAgICBydWxlc1sibm8tZmxvYXRpbmctZGVjaW1hbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1m
bG9hdGluZy1kZWNpbWFsIik7CisgICAgcnVsZXNbIm5vLWZ1bmMtYXNzaWduIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLWZ1bmMtYXNzaWduIik7CisgICAgcnVsZXNbIm5vLWltcGxpZWQtZXZhbCJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbXBsaWVkLWV2YWwiKTsKKyAgICBydWxlc1sibm8taW5u
ZXItZGVjbGFyYXRpb25zIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9u
cyIpOworICAgIHJ1bGVzWyJuby1pbnZhbGlkLXJlZ2V4cCJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1pbnZhbGlkLXJlZ2V4cCIpOworICAgIHJ1bGVzWyJuby1pdGVyYXRvciJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1pdGVyYXRvciIpOworICAgIHJ1bGVzWyJuby1sYWJlbC12YXIiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tbGFiZWwtdmFyIik7CisgICAgcnVsZXNbIm5vLWxhYmVscyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1sYWJlbHMiKTsKKyAgICBydWxlc1sibm8tbG9uZS1ibG9ja3MiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbG9uZS1ibG9ja3MiKTsKKyAgICBydWxlc1sibm8tbG9uZWx5
LWlmIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxvbmVseS1pZiIpOworICAgIHJ1bGVzWyJuby1s
b29wLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbG9vcC1mdW5jIik7CisgICAgcnVsZXNb
Im5vLW1peGVkLXJlcXVpcmVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW1peGVkLXJlcXVpcmVz
Iik7CisgICAgcnVsZXNbIm5vLW1peGVkLXNwYWNlcy1hbmQtdGFicyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1taXhlZC1zcGFjZXMtYW5kLXRhYnMiKTsKKyAgICBydWxlc1sibm8tbXVsdGktc3Bh
Y2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRpLXNwYWNlcyIpOworICAgIHJ1bGVzWyJu
by1tdWx0aS1zdHIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbXVsdGktc3RyIik7CisgICAgcnVs
ZXNbIm5vLW11bHRpcGxlLWVtcHR5LWxpbmVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRp
cGxlLWVtcHR5LWxpbmVzIik7CisgICAgcnVsZXNbIm5vLW5hdGl2ZS1yZWFzc2lnbiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1uYXRpdmUtcmVhc3NpZ24iKTsKKyAgICBydWxlc1sibm8tbmVnYXRl
ZC1pbi1saHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmVnYXRlZC1pbi1saHMiKTsKKyAgICBy
dWxlc1sibm8tbmVzdGVkLXRlcm5hcnkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmVzdGVkLXRl
cm5hcnkiKTsKKyAgICBydWxlc1sibm8tbmV3LWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bmV3LWZ1bmMiKTsKKyAgICBydWxlc1sibm8tbmV3LW9iamVjdCJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1uZXctb2JqZWN0Iik7CisgICAgcnVsZXNbIm5vLW5ldy1yZXF1aXJlIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLW5ldy1yZXF1aXJlIik7CisgICAgcnVsZXNbIm5vLW5ldy13cmFwcGVycyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXctd3JhcHBlcnMiKTsKKyAgICBydWxlc1sibm8tbmV3
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5ldyIpOworICAgIHJ1bGVzWyJuby1vYmotY2FsbHMi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2JqLWNhbGxzIik7CisgICAgcnVsZXNbIm5vLW9jdGFs
LWVzY2FwZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1vY3RhbC1lc2NhcGUiKTsKKyAgICBydWxl
c1sibm8tb2N0YWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwiKTsKKyAgICBydWxlc1si
bm8tcGF0aC1jb25jYXQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcGF0aC1jb25jYXQiKTsKKyAg
ICBydWxlc1sibm8tcGx1c3BsdXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcGx1c3BsdXMiKTsK
KyAgICBydWxlc1sibm8tcHJvY2Vzcy1lbnYiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcHJvY2Vz
cy1lbnYiKTsKKyAgICBydWxlc1sibm8tcHJvY2Vzcy1leGl0Il0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLXByb2Nlc3MtZXhpdCIpOworICAgIHJ1bGVzWyJuby1wcm90byJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1wcm90byIpOworICAgIHJ1bGVzWyJuby1yZWRlY2xhcmUiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tcmVkZWNsYXJlIik7CisgICAgcnVsZXNbIm5vLXJlZ2V4LXNwYWNlcyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1yZWdleC1zcGFjZXMiKTsKKyAgICBydWxlc1sibm8tcmVzZXJ2ZWQt
a2V5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1yZXNlcnZlZC1rZXlzIik7CisgICAgcnVsZXNb
Im5vLXJlc3RyaWN0ZWQtbW9kdWxlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1yZXN0cmljdGVk
LW1vZHVsZXMiKTsKKyAgICBydWxlc1sibm8tcmV0dXJuLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1yZXR1cm4tYXNzaWduIik7CisgICAgcnVsZXNbIm5vLXNjcmlwdC11cmwiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tc2NyaXB0LXVybCIpOworICAgIHJ1bGVzWyJuby1zZWxmLWNvbXBh
cmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2VsZi1jb21wYXJlIik7CisgICAgcnVsZXNbIm5v
LXNlcXVlbmNlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zZXF1ZW5jZXMiKTsKKyAgICBydWxl
c1sibm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2hh
ZG93LXJlc3RyaWN0ZWQtbmFtZXMiKTsKKyAgICBydWxlc1sibm8tc2hhZG93Il0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXNoYWRvdyIpOworICAgIHJ1bGVzWyJuby1zcGFjZS1iZWZvcmUtc2VtaSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFjZS1iZWZvcmUtc2VtaSIpOworICAgIHJ1bGVzWyJu
by1zcGFjZWQtZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFjZWQtZnVuYyIpOworICAg
IHJ1bGVzWyJuby1zcGFyc2UtYXJyYXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNwYXJzZS1h
cnJheXMiKTsKKyAgICBydWxlc1sibm8tc3luYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zeW5j
Iik7CisgICAgcnVsZXNbIm5vLXRlcm5hcnkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdGVybmFy
eSIpOworICAgIHJ1bGVzWyJuby10cmFpbGluZy1zcGFjZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tdHJhaWxpbmctc3BhY2VzIik7CisgICAgcnVsZXNbIm5vLXVuZGVmLWluaXQiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tdW5kZWYtaW5pdCIpOworICAgIHJ1bGVzWyJuby11bmRlZiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby11bmRlZiIpOworICAgIHJ1bGVzWyJuby11bmRlZmluZWQiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tdW5kZWZpbmVkIik7CisgICAgcnVsZXNbIm5vLXVuZGVyc2NvcmUt
ZGFuZ2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVyc2NvcmUtZGFuZ2xlIik7CisgICAg
cnVsZXNbIm5vLXVucmVhY2hhYmxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVucmVhY2hhYmxl
Iik7CisgICAgcnVsZXNbIm5vLXVudXNlZC1leHByZXNzaW9ucyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby11bnVzZWQtZXhwcmVzc2lvbnMiKTsKKyAgICBydWxlc1sibm8tdW51c2VkLXZhcnMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tdW51c2VkLXZhcnMiKTsKKyAgICBydWxlc1sibm8tdXNlLWJl
Zm9yZS1kZWZpbmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdXNlLWJlZm9yZS1kZWZpbmUiKTsK
KyAgICBydWxlc1sibm8tdm9pZCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby12b2lkIik7CisgICAg
cnVsZXNbIm5vLXdhcm5pbmctY29tbWVudHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8td2Fybmlu
Zy1jb21tZW50cyIpOworICAgIHJ1bGVzWyJuby13aXRoIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LXdpdGgiKTsKKyAgICBydWxlc1sibm8td3JhcC1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LXdyYXAtZnVuYyIpOworICAgIHJ1bGVzWyJvbmUtdmFyIl0gPSByZXF1aXJlKCIuL3J1bGVzL29u
ZS12YXIiKTsKKyAgICBydWxlc1sicGFkZGVkLWJsb2NrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9w
YWRkZWQtYmxvY2tzIik7CisgICAgcnVsZXNbInF1b3RlLXByb3BzIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3F1b3RlLXByb3BzIik7CisgICAgcnVsZXNbInF1b3RlcyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9xdW90ZXMiKTsKKyAgICBydWxlc1sicmFkaXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcmFkaXgi
KTsKKyAgICBydWxlc1sic2VtaSJdID0gcmVxdWlyZSgiLi9ydWxlcy9zZW1pIik7CisgICAgcnVs
ZXNbInNvcnQtdmFycyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zb3J0LXZhcnMiKTsKKyAgICBydWxl
c1sic3BhY2UtYWZ0ZXIta2V5d29yZHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtYWZ0ZXIt
a2V5d29yZHMiKTsKKyAgICBydWxlc1sic3BhY2UtYmVmb3JlLWJsb2NrcyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9zcGFjZS1iZWZvcmUtYmxvY2tzIik7CisgICAgcnVsZXNbInNwYWNlLWluLWJyYWNr
ZXRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWluLWJyYWNrZXRzIik7CisgICAgcnVsZXNb
InNwYWNlLWluLXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1wYXJlbnMiKTsK
KyAgICBydWxlc1sic3BhY2UtaW5maXgtb3BzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWlu
Zml4LW9wcyIpOworICAgIHJ1bGVzWyJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSJdID0gcmVxdWly
ZSgiLi9ydWxlcy9zcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSIpOworICAgIHJ1bGVzWyJzcGFjZS11
bmFyeS13b3JkLW9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS11bmFyeS13b3JkLW9wcyIp
OworICAgIHJ1bGVzWyJzcGFjZWQtbGluZS1jb21tZW50Il0gPSByZXF1aXJlKCIuL3J1bGVzL3Nw
YWNlZC1saW5lLWNvbW1lbnQiKTsKKyAgICBydWxlc1sic3RyaWN0Il0gPSByZXF1aXJlKCIuL3J1
bGVzL3N0cmljdCIpOworICAgIHJ1bGVzWyJ1c2UtaXNuYW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
dXNlLWlzbmFuIik7CisgICAgcnVsZXNbInZhbGlkLWpzZG9jIl0gPSByZXF1aXJlKCIuL3J1bGVz
L3ZhbGlkLWpzZG9jIik7CisgICAgcnVsZXNbInZhbGlkLXR5cGVvZiJdID0gcmVxdWlyZSgiLi9y
dWxlcy92YWxpZC10eXBlb2YiKTsKKyAgICBydWxlc1sidmFycy1vbi10b3AiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvdmFycy1vbi10b3AiKTsKKyAgICBydWxlc1sid3JhcC1paWZlIl0gPSByZXF1aXJl
KCIuL3J1bGVzL3dyYXAtaWlmZSIpOworICAgIHJ1bGVzWyJ3cmFwLXJlZ2V4Il0gPSByZXF1aXJl
KCIuL3J1bGVzL3dyYXAtcmVnZXgiKTsKKyAgICBydWxlc1sieW9kYSJdID0gcmVxdWlyZSgiLi9y
dWxlcy95b2RhIik7CisKKyAgICByZXR1cm4gcnVsZXM7Cit9OworfSx7Ii4vcnVsZXMvYmxvY2st
c2NvcGVkLXZhciI6MTMsIi4vcnVsZXMvYnJhY2Utc3R5bGUiOjE0LCIuL3J1bGVzL2NhbWVsY2Fz
ZSI6MTUsIi4vcnVsZXMvY29tbWEtc3BhY2luZyI6MTYsIi4vcnVsZXMvY29tbWEtc3R5bGUiOjE3
LCIuL3J1bGVzL2NvbXBsZXhpdHkiOjE4LCIuL3J1bGVzL2NvbnNpc3RlbnQtcmV0dXJuIjoxOSwi
Li9ydWxlcy9jb25zaXN0ZW50LXRoaXMiOjIwLCIuL3J1bGVzL2N1cmx5IjoyMSwiLi9ydWxlcy9k
ZWZhdWx0LWNhc2UiOjIyLCIuL3J1bGVzL2RvdC1ub3RhdGlvbiI6MjMsIi4vcnVsZXMvZW9sLWxh
c3QiOjI0LCIuL3J1bGVzL2VxZXFlcSI6MjUsIi4vcnVsZXMvZnVuYy1uYW1lcyI6MjYsIi4vcnVs
ZXMvZnVuYy1zdHlsZSI6MjcsIi4vcnVsZXMvZ2xvYmFsLXN0cmljdCI6MjgsIi4vcnVsZXMvZ3Vh
cmQtZm9yLWluIjoyOSwiLi9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIjozMCwiLi9ydWxlcy9r
ZXktc3BhY2luZyI6MzEsIi4vcnVsZXMvbWF4LWRlcHRoIjozMiwiLi9ydWxlcy9tYXgtbGVuIjoz
MywiLi9ydWxlcy9tYXgtbmVzdGVkLWNhbGxiYWNrcyI6MzQsIi4vcnVsZXMvbWF4LXBhcmFtcyI6
MzUsIi4vcnVsZXMvbWF4LXN0YXRlbWVudHMiOjM2LCIuL3J1bGVzL25ldy1jYXAiOjM3LCIuL3J1
bGVzL25ldy1wYXJlbnMiOjM4LCIuL3J1bGVzL25vLWFsZXJ0IjozOSwiLi9ydWxlcy9uby1hcnJh
eS1jb25zdHJ1Y3RvciI6NDAsIi4vcnVsZXMvbm8tYml0d2lzZSI6NDEsIi4vcnVsZXMvbm8tY2Fs
bGVyIjo0MiwiLi9ydWxlcy9uby1jYXRjaC1zaGFkb3ciOjQzLCIuL3J1bGVzL25vLWNvbW1hLWRh
bmdsZSI6NDQsIi4vcnVsZXMvbm8tY29uZC1hc3NpZ24iOjQ1LCIuL3J1bGVzL25vLWNvbnNvbGUi
OjQ2LCIuL3J1bGVzL25vLWNvbnN0YW50LWNvbmRpdGlvbiI6NDcsIi4vcnVsZXMvbm8tY29udHJv
bC1yZWdleCI6NDgsIi4vcnVsZXMvbm8tZGVidWdnZXIiOjQ5LCIuL3J1bGVzL25vLWRlbGV0ZS12
YXIiOjUwLCIuL3J1bGVzL25vLWRpdi1yZWdleCI6NTEsIi4vcnVsZXMvbm8tZHVwZS1rZXlzIjo1
MiwiLi9ydWxlcy9uby1lbHNlLXJldHVybiI6NTMsIi4vcnVsZXMvbm8tZW1wdHkiOjU2LCIuL3J1
bGVzL25vLWVtcHR5LWNsYXNzIjo1NCwiLi9ydWxlcy9uby1lbXB0eS1sYWJlbCI6NTUsIi4vcnVs
ZXMvbm8tZXEtbnVsbCI6NTcsIi4vcnVsZXMvbm8tZXZhbCI6NTgsIi4vcnVsZXMvbm8tZXgtYXNz
aWduIjo1OSwiLi9ydWxlcy9uby1leHRlbmQtbmF0aXZlIjo2MCwiLi9ydWxlcy9uby1leHRyYS1i
aW5kIjo2MSwiLi9ydWxlcy9uby1leHRyYS1ib29sZWFuLWNhc3QiOjYyLCIuL3J1bGVzL25vLWV4
dHJhLXBhcmVucyI6NjMsIi4vcnVsZXMvbm8tZXh0cmEtc2VtaSI6NjQsIi4vcnVsZXMvbm8tZXh0
cmEtc3RyaWN0Ijo2NSwiLi9ydWxlcy9uby1mYWxsdGhyb3VnaCI6NjYsIi4vcnVsZXMvbm8tZmxv
YXRpbmctZGVjaW1hbCI6NjcsIi4vcnVsZXMvbm8tZnVuYy1hc3NpZ24iOjY4LCIuL3J1bGVzL25v
LWltcGxpZWQtZXZhbCI6NjksIi4vcnVsZXMvbm8taW5uZXItZGVjbGFyYXRpb25zIjo3MCwiLi9y
dWxlcy9uby1pbnZhbGlkLXJlZ2V4cCI6NzEsIi4vcnVsZXMvbm8taXRlcmF0b3IiOjcyLCIuL3J1
bGVzL25vLWxhYmVsLXZhciI6NzMsIi4vcnVsZXMvbm8tbGFiZWxzIjo3NCwiLi9ydWxlcy9uby1s
b25lLWJsb2NrcyI6NzUsIi4vcnVsZXMvbm8tbG9uZWx5LWlmIjo3NiwiLi9ydWxlcy9uby1sb29w
LWZ1bmMiOjc3LCIuL3J1bGVzL25vLW1peGVkLXJlcXVpcmVzIjo3OCwiLi9ydWxlcy9uby1taXhl
ZC1zcGFjZXMtYW5kLXRhYnMiOjc5LCIuL3J1bGVzL25vLW11bHRpLXNwYWNlcyI6ODAsIi4vcnVs
ZXMvbm8tbXVsdGktc3RyIjo4MSwiLi9ydWxlcy9uby1tdWx0aXBsZS1lbXB0eS1saW5lcyI6ODIs
Ii4vcnVsZXMvbm8tbmF0aXZlLXJlYXNzaWduIjo4MywiLi9ydWxlcy9uby1uZWdhdGVkLWluLWxo
cyI6ODQsIi4vcnVsZXMvbm8tbmVzdGVkLXRlcm5hcnkiOjg1LCIuL3J1bGVzL25vLW5ldyI6OTAs
Ii4vcnVsZXMvbm8tbmV3LWZ1bmMiOjg2LCIuL3J1bGVzL25vLW5ldy1vYmplY3QiOjg3LCIuL3J1
bGVzL25vLW5ldy1yZXF1aXJlIjo4OCwiLi9ydWxlcy9uby1uZXctd3JhcHBlcnMiOjg5LCIuL3J1
bGVzL25vLW9iai1jYWxscyI6OTEsIi4vcnVsZXMvbm8tb2N0YWwiOjkzLCIuL3J1bGVzL25vLW9j
dGFsLWVzY2FwZSI6OTIsIi4vcnVsZXMvbm8tcGF0aC1jb25jYXQiOjk0LCIuL3J1bGVzL25vLXBs
dXNwbHVzIjo5NSwiLi9ydWxlcy9uby1wcm9jZXNzLWVudiI6OTYsIi4vcnVsZXMvbm8tcHJvY2Vz
cy1leGl0Ijo5NywiLi9ydWxlcy9uby1wcm90byI6OTgsIi4vcnVsZXMvbm8tcmVkZWNsYXJlIjo5
OSwiLi9ydWxlcy9uby1yZWdleC1zcGFjZXMiOjEwMCwiLi9ydWxlcy9uby1yZXNlcnZlZC1rZXlz
IjoxMDEsIi4vcnVsZXMvbm8tcmVzdHJpY3RlZC1tb2R1bGVzIjoxMDIsIi4vcnVsZXMvbm8tcmV0
dXJuLWFzc2lnbiI6MTAzLCIuL3J1bGVzL25vLXNjcmlwdC11cmwiOjEwNCwiLi9ydWxlcy9uby1z
ZWxmLWNvbXBhcmUiOjEwNSwiLi9ydWxlcy9uby1zZXF1ZW5jZXMiOjEwNiwiLi9ydWxlcy9uby1z
aGFkb3ciOjEwOCwiLi9ydWxlcy9uby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6MTA3LCIuL3J1
bGVzL25vLXNwYWNlLWJlZm9yZS1zZW1pIjoxMDksIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiOjEx
MCwiLi9ydWxlcy9uby1zcGFyc2UtYXJyYXlzIjoxMTEsIi4vcnVsZXMvbm8tc3luYyI6MTEyLCIu
L3J1bGVzL25vLXRlcm5hcnkiOjExMywiLi9ydWxlcy9uby10cmFpbGluZy1zcGFjZXMiOjExNCwi
Li9ydWxlcy9uby11bmRlZiI6MTE2LCIuL3J1bGVzL25vLXVuZGVmLWluaXQiOjExNSwiLi9ydWxl
cy9uby11bmRlZmluZWQiOjExNywiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSI6MTE4LCIu
L3J1bGVzL25vLXVucmVhY2hhYmxlIjoxMTksIi4vcnVsZXMvbm8tdW51c2VkLWV4cHJlc3Npb25z
IjoxMjAsIi4vcnVsZXMvbm8tdW51c2VkLXZhcnMiOjEyMSwiLi9ydWxlcy9uby11c2UtYmVmb3Jl
LWRlZmluZSI6MTIyLCIuL3J1bGVzL25vLXZvaWQiOjEyMywiLi9ydWxlcy9uby13YXJuaW5nLWNv
bW1lbnRzIjoxMjQsIi4vcnVsZXMvbm8td2l0aCI6MTI1LCIuL3J1bGVzL25vLXdyYXAtZnVuYyI6
MTI2LCIuL3J1bGVzL29uZS12YXIiOjEyNywiLi9ydWxlcy9wYWRkZWQtYmxvY2tzIjoxMjgsIi4v
cnVsZXMvcXVvdGUtcHJvcHMiOjEyOSwiLi9ydWxlcy9xdW90ZXMiOjEzMCwiLi9ydWxlcy9yYWRp
eCI6MTMxLCIuL3J1bGVzL3NlbWkiOjEzMiwiLi9ydWxlcy9zb3J0LXZhcnMiOjEzMywiLi9ydWxl
cy9zcGFjZS1hZnRlci1rZXl3b3JkcyI6MTM0LCIuL3J1bGVzL3NwYWNlLWJlZm9yZS1ibG9ja3Mi
OjEzNSwiLi9ydWxlcy9zcGFjZS1pbi1icmFja2V0cyI6MTM2LCIuL3J1bGVzL3NwYWNlLWluLXBh
cmVucyI6MTM3LCIuL3J1bGVzL3NwYWNlLWluZml4LW9wcyI6MTM4LCIuL3J1bGVzL3NwYWNlLXJl
dHVybi10aHJvdy1jYXNlIjoxMzksIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiOjE0MCwi
Li9ydWxlcy9zcGFjZWQtbGluZS1jb21tZW50IjoxNDEsIi4vcnVsZXMvc3RyaWN0IjoxNDIsIi4v
cnVsZXMvdXNlLWlzbmFuIjoxNDMsIi4vcnVsZXMvdmFsaWQtanNkb2MiOjE0NCwiLi9ydWxlcy92
YWxpZC10eXBlb2YiOjE0NSwiLi9ydWxlcy92YXJzLW9uLXRvcCI6MTQ2LCIuL3J1bGVzL3dyYXAt
aWlmZSI6MTQ3LCIuL3J1bGVzL3dyYXAtcmVnZXgiOjE0OCwiLi9ydWxlcy95b2RhIjoxNDl9XSwx
MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZUNvbnRleHQgdXRpbGl0eSBmb3IgcnVsZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4g
WmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
Q29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgUEFTU1RIUk9VR0hTID0g
WworICAgICAgICAiZ2V0U291cmNlIiwKKyAgICAgICAgImdldFNvdXJjZUxpbmVzIiwKKyAgICAg
ICAgImdldFRva2VucyIsCisgICAgICAgICJnZXRUb2tlbnNCZWZvcmUiLAorICAgICAgICAiZ2V0
VG9rZW5CZWZvcmUiLAorICAgICAgICAiZ2V0VG9rZW5zQWZ0ZXIiLAorICAgICAgICAiZ2V0VG9r
ZW5BZnRlciIsCisgICAgICAgICJnZXRGaXJzdFRva2VucyIsCisgICAgICAgICJnZXRGaXJzdFRv
a2VuIiwKKyAgICAgICAgImdldExhc3RUb2tlbnMiLAorICAgICAgICAiZ2V0TGFzdFRva2VuIiwK
KyAgICAgICAgImdldENvbW1lbnRzIiwKKyAgICAgICAgImdldEFuY2VzdG9ycyIsCisgICAgICAg
ICJnZXRTY29wZSIsCisgICAgICAgICJnZXRKU0RvY0NvbW1lbnQiLAorICAgICAgICAiZ2V0Rmls
ZW5hbWUiCisgICAgXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBBY3RzIGFzIGFuIGFic3Ry
YWN0aW9uIGxheWVyIGJldHdlZW4gcnVsZXMgYW5kIHRoZSBtYWluIGVzbGludCBvYmplY3QuCisg
KiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQgVGhlIElEIG9mIHRoZSBy
dWxlIHVzaW5nIHRoaXMgb2JqZWN0LgorICogQHBhcmFtIHtlc2xpbnR9IGVzbGludCBUaGUgZXNs
aW50IG9iamVjdC4KKyAqIEBwYXJhbSB7bnVtYmVyfSBzZXZlcml0eSBUaGUgY29uZmlndXJlZCBz
ZXZlcml0eSBsZXZlbCBvZiB0aGUgcnVsZS4KKyAqIEBwYXJhbSB7YXJyYXl9IG9wdGlvbnMgVGhl
IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdG8gYmUgYWRkZWQgdG8gdGhlIHJ1bGUuCisgKiBA
cGFyYW0ge29iamVjdH0gc2V0dGluZ3MgVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgcGFzc2Vk
IGZyb20gdGhlIGNvbmZpZyBmaWxlLgorICovCitmdW5jdGlvbiBSdWxlQ29udGV4dChydWxlSWQs
IGVzbGludCwgc2V2ZXJpdHksIG9wdGlvbnMsIHNldHRpbmdzKSB7CisKKyAgICAvKioKKyAgICAg
KiBUaGUgcmVhZC1vbmx5IElEIG9mIHRoZSBydWxlLgorICAgICAqLworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0aGlzLCAiaWQiLCB7CisgICAgICAgIHZhbHVlOiBydWxlSWQKKyAgICB9KTsK
KworICAgIC8qKgorICAgICAqIFRoZSByZWFkLW9ubHkgb3B0aW9ucyBvZiB0aGUgcnVsZQorICAg
ICAqLworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAib3B0aW9ucyIsIHsKKyAgICAg
ICAgdmFsdWU6IG9wdGlvbnMKKyAgICB9KTsKKworICAgIC8qKgorICAgICAqIFRoZSByZWFkLW9u
bHkgc2V0dGluZ3Mgc2hhcmVkIGJldHdlZW4gYWxsIHJ1bGVzCisgICAgICovCisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHRoaXMsICJzZXR0aW5ncyIsIHsKKyAgICAgICAgdmFsdWU6IHNldHRp
bmdzCisgICAgfSk7CisKKyAgICAvLyBjb3B5IG92ZXIgcGFzc3Rocm91Z2ggbWV0aG9kcworICAg
IFBBU1NUSFJPVUdIUy5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdGhpc1tuYW1l
XSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIGVzbGludFtuYW1lXS5hcHBseShl
c2xpbnQsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisgICAgfSwgdGhpcyk7CisKKyAgICAvKioK
KyAgICAgKiBQYXNzdGhyb3VnaCB0byBlc2xpbnQucmVwb3J0KCkgdGhhdCBhdXRvbWF0aWNhbGx5
IGFzc2lnbnMgdGhlIHJ1bGUgSUQgYW5kIHNldmVyaXR5LgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgQVNUIG5vZGUgcmVsYXRlZCB0byB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFy
YW0ge09iamVjdD19IGxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB0byB0aGUgdXNl
ci4KKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCB0ZW1wbGF0ZSBkYXRhIHdo
aWNoIHByb2R1Y2VzIGEgZm9ybWF0dGVkIG1lc3NhZ2UKKyAgICAgKiAgICAgd2l0aCBzeW1ib2xz
IGJlaW5nIHJlcGxhY2VkIGJ5IHRoaXMgb2JqZWN0J3MgdmFsdWVzLgorICAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICAqLworICAgIHRoaXMucmVwb3J0ID0gZnVuY3Rpb24obm9kZSwgbG9jYXRp
b24sIG1lc3NhZ2UsIG9wdHMpIHsKKyAgICAgICAgZXNsaW50LnJlcG9ydChydWxlSWQsIHNldmVy
aXR5LCBub2RlLCBsb2NhdGlvbiwgbWVzc2FnZSwgb3B0cyk7CisgICAgfTsKKworfQorCitSdWxl
Q29udGV4dC5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFJ1bGVDb250ZXh0Cit9Owor
Cittb2R1bGUuZXhwb3J0cyA9IFJ1bGVDb250ZXh0OworCit9LHt9XSwxMjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGVmaW5lcyBhIHN0
b3JhZ2UgZm9yIHJ1bGVzLgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVtZW50cwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIGxvYWRSdWxlcyA9IHJlcXVpcmUoIi4vbG9h
ZC1ydWxlcyIpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHJpdmF0ZXMKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBydWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQdWJsaWMgSW50ZXJmYWNlCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisvKioKKyAqIFJlZ2lzdGVycyBhIHJ1bGUgbW9kdWxlIGZvciBydWxl
IGlkIGluIHN0b3JhZ2UuCisgKiBAcGFyYW0ge1N0cmluZ30gcnVsZUlkIFJ1bGUgaWQgKGZpbGUg
bmFtZSkuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBydWxlTW9kdWxlIFJ1bGUgaGFuZGxlci4KKyAq
IEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBkZWZpbmUocnVsZUlkLCBydWxlTW9kdWxl
KSB7CisgICAgcnVsZXNbcnVsZUlkXSA9IHJ1bGVNb2R1bGU7Cit9CisKK2V4cG9ydHMuZGVmaW5l
ID0gZGVmaW5lOworCisvKioKKyAqIExvYWRzIGFuZCByZWdpc3RlcnMgYWxsIHJ1bGVzIGZyb20g
cGFzc2VkIHJ1bGVzIGRpcmVjdG9yeS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBbcnVsZXNEaXJdIFBh
dGggdG8gcnVsZXMgZGlyZWN0b3J5LCBtYXkgYmUgcmVsYXRpdmUuIERlZmF1bHRzIHRvIGBsaWIv
cnVsZXNgLgorICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGxvYWQocnVsZXNEaXIp
IHsKKyAgICB2YXIgbmV3UnVsZXMgPSBsb2FkUnVsZXMocnVsZXNEaXIpOworICAgIE9iamVjdC5r
ZXlzKG5ld1J1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGVJZCkgeworICAgICAgICBkZWZpbmUo
cnVsZUlkLCBuZXdSdWxlc1tydWxlSWRdKTsKKyAgICB9KTsKK30KKworZXhwb3J0cy5sb2FkID0g
bG9hZDsKKworLyoqCisgKiBSZWdpc3RlcnMgYWxsIGdpdmVuIHJ1bGVzIG9mIGEgcGx1Z2luLgor
ICogQHBhcmFtIHtPYmplY3R9IHBsdWdpblJ1bGVzIEEga2V5L3ZhbHVlIG1hcCBvZiBydWxlIGRl
ZmluaXRpb25zLgorICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgVGhlIG5hbWUgb2YgdGhl
IHBsdWdpbiB3aXRob3V0IHByZWZpeCAoYGVzbGludC1wbHVnaW4tYCkuCisgKiBAcmV0dXJucyB7
dm9pZH0KKyAqLworZXhwb3J0cy5pbXBvcnQgPSBmdW5jdGlvbiAocGx1Z2luUnVsZXMsIHBsdWdp
bk5hbWUpIHsKKyAgICBPYmplY3Qua2V5cyhwbHVnaW5SdWxlcykuZm9yRWFjaChmdW5jdGlvbiAo
cnVsZUlkKSB7CisgICAgICAgIHZhciBxdWFsaWZpZWRSdWxlSWQgPSBwbHVnaW5OYW1lICsgIi8i
ICsgcnVsZUlkLAorICAgICAgICAgICAgcnVsZSA9IHBsdWdpblJ1bGVzW3J1bGVJZF07CisKKyAg
ICAgICAgZGVmaW5lKHF1YWxpZmllZFJ1bGVJZCwgcnVsZSk7CisgICAgfSk7Cit9OworCisvKioK
KyAqIEFjY2VzcyBydWxlIGhhbmRsZXIgYnkgaWQgKGZpbGUgbmFtZSkuCisgKiBAcGFyYW0ge1N0
cmluZ30gcnVsZUlkIFJ1bGUgaWQgKGZpbGUgbmFtZSkuCisgKiBAcmV0dXJucyB7RnVuY3Rpb259
IFJ1bGUgaGFuZGxlci4KKyAqLworZXhwb3J0cy5nZXQgPSBmdW5jdGlvbihydWxlSWQpIHsKKyAg
ICByZXR1cm4gcnVsZXNbcnVsZUlkXTsKK307CisKKy8qKgorICogUmVzZXQgcnVsZXMgc3RvcmFn
ZS4KKyAqIFNob3VsZCBiZSB1c2VkIG9ubHkgaW4gdGVzdHMuCisgKiBAcmV0dXJucyB7dm9pZH0K
KyAqLworZXhwb3J0cy50ZXN0Q2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICBydWxlcyA9IE9iamVj
dC5jcmVhdGUobnVsbCk7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5pdGlh
bGl6YXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIGxvYWRzIGJ1aWx0LWluIHJ1
bGVzCitsb2FkKCk7CisKK30seyIuL2xvYWQtcnVsZXMiOjEwfV0sMTM6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hlY2sg
Zm9yICJibG9jayBzY29wZWQiIHZhcmlhYmxlcyBieSBiaW5kaW5nIGNvbnRleHQKKyAqIEBhdXRo
b3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICB2YXIgc2NvcGVTdGFjayA9IFtdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAg
ICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBw
b3NpdGlvbiBvciBpcyBhIG5vbi1kZWNsYXJhdGlvbiByZWZlcmVuY2UuCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBpZCBUaGUgaWRlbnRpZmllci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBh
cmVudCBUaGUgaWRlbnRpZmllcidzIHBhcmVudCBBU1Qgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7
Qm9vbGVhbn0gdHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIGRlY2xhcmF0aW9uIHBvc2l0
aW9uLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzRGVjbGFyYXRpb24oaWQsIHBhcmVudCkgewor
ICAgICAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5wYXJhbXMuaW5kZXhPZihpZCkgPiAtMSB8fCBp
ZCA9PT0gcGFyZW50LmlkOworCisgICAgICAgICAgICBjYXNlICJWYXJpYWJsZURlY2xhcmF0b3Ii
OgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmlkOworCisgICAgICAgICAg
ICBjYXNlICJDYXRjaENsYXVzZSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJl
bnQucGFyYW07CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3
aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgaW4gcHJvcGVydHkgcG9zaXRpb24uCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBpZCBUaGUgaWRlbnRpZmllci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IHBhcmVudCBUaGUgaWRlbnRpZmllcidzIHBhcmVudCBBU1Qgbm9kZS4KKyAgICAgKiBAcmV0dXJu
cyB7Qm9vbGVhbn0gdHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0
aW9uLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkoaWQsIHBhcmVudCkgeworICAg
ICAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJNZW1iZXJFeHBy
ZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5wcm9wZXJ0eSAm
JiAhcGFyZW50LmNvbXB1dGVkOworCisgICAgICAgICAgICBjYXNlICJQcm9wZXJ0eSI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQua2V5OworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qKgorICAgICAqIFB1c2hlcyBhIG5ldyBzY29wZSBvYmplY3Qgb24gdGhlIHNjb3BlIHN0
YWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHB1c2hT
Y29wZSgpIHsKKyAgICAgICAgc2NvcGVTdGFjay5wdXNoKFtdKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBSZW1vdmVzIHRoZSB0b3Btb3N0IHNjb3BlIG9iamVjdCBmcm9tIHRoZSBzY29wZSBz
dGFjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBwb3BT
Y29wZSgpIHsKKyAgICAgICAgc2NvcGVTdGFjay5wb3AoKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBEZWNsYXJlcyB0aGUgZ2l2ZW4gbmFtZXMgaW4gdGhlIHRvcG1vc3Qgc2NvcGUgb2JqZWN0
LgorICAgICAqIEBwYXJhbSB7W1N0cmluZ119IG5hbWVzIEEgbGlzdCBvZiBuYW1lcyB0byBkZWNs
YXJlLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGRlY2xh
cmUobmFtZXMpIHsKKyAgICAgICAgW10ucHVzaC5hcHBseShzY29wZVN0YWNrW3Njb3BlU3RhY2su
bGVuZ3RoIC0gMV0sIG5hbWVzKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9u
IGZ1bmN0aW9uSGFuZGxlcihub2RlKSB7CisgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICBk
ZWNsYXJlKG5vZGUucGFyYW1zLm1hcChmdW5jdGlvbihpZCkgeworICAgICAgICAgICAgcmV0dXJu
IGlkLm5hbWU7CisgICAgICAgIH0pKTsKKyAgICAgICAgZGVjbGFyZShub2RlLmlkID8gW25vZGUu
aWQubmFtZV0gOiBbXSk7CisgICAgICAgIGRlY2xhcmUoWyJhcmd1bWVudHMiXSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRsZXIobm9kZSkgeworICAgICAg
ICBkZWNsYXJlKG5vZGUuZGVjbGFyYXRpb25zLm1hcChmdW5jdGlvbihkZWNsKSB7CisgICAgICAg
ICAgICByZXR1cm4gZGVjbC5pZC5uYW1lOworICAgICAgICB9KSk7CisgICAgfQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNjb3Bl
U3RhY2sgPSBbY29udGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcy5tYXAoZnVuY3Rpb24odikgewor
ICAgICAgICAgICAgICAgIHJldHVybiB2Lm5hbWU7CisgICAgICAgICAgICB9KV07CisgICAgICAg
IH0sCisKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgdmFyIHN0YXRlbWVudHMgPSBub2RlLmJvZHk7CisgICAgICAgICAgICBwdXNoU2NvcGUo
KTsKKyAgICAgICAgICAgIHN0YXRlbWVudHMuZm9yRWFjaChmdW5jdGlvbihzdG10KSB7CisgICAg
ICAgICAgICAgICAgaWYgKHN0bXQudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKHN0bXQpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RtdC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlv
biIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjbGFyZShbc3RtdC5pZC5uYW1lXSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkJs
b2NrU3RhdGVtZW50OmV4aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAgICAgICAgIGRl
Y2xhcmUoW25vZGUucGFyYW0ubmFtZV0pOworICAgICAgICB9LAorICAgICAgICAiQ2F0Y2hDbGF1
c2U6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVu
Y3Rpb25IYW5kbGVyLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogcG9wU2Nv
cGUsCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uSGFuZGxlciwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkZv
clN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOwor
ICAgICAgICAgICAgaWYgKG5vZGUuaW5pdCAmJiBub2RlLmluaXQudHlwZSA9PT0gIlZhcmlhYmxl
RGVjbGFyYXRpb24iKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRs
ZXIobm9kZS5pbml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkZvclN0
YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkZvckluU3RhdGVtZW50IjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAgICAgICBpZiAo
bm9kZS5sZWZ0LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAgICAg
ICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5vZGUubGVmdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisK
KyAgICAgICAgIklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIg
YW5jZXN0b3IgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgaWYg
KGlzRGVjbGFyYXRpb24obm9kZSwgYW5jZXN0b3IpIHx8IGlzUHJvcGVydHkobm9kZSwgYW5jZXN0
b3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzY29wZVN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmIChzY29wZVN0YWNrW2ldLmluZGV4T2Yobm9kZS5uYW1lKSA+IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJcIiIgKyBub2Rl
Lm5hbWUgKyAiXCIgdXNlZCBvdXRzaWRlIG9mIGJpbmRpbmcgY29udGV4dC4iKTsKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYmxvY2sgc3RhdGVtZW50
cyB0aGF0IGRvIG5vdCB1c2UgdGhlIG9uZSB0cnVlIGJyYWNlIHN0eWxlCisgKiBAYXV0aG9yIElh
biBDaHJpc3RpYW4gTXllcnMKKyAqLworCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworICAgIHZhciBzdHlsZSA9IGNv
bnRleHQub3B0aW9uc1swXSB8fCAiMXRicyI7CisgICAgdmFyIHBhcmFtcyA9IGNvbnRleHQub3B0
aW9uc1sxXSB8fCB7fTsKKworICAgIHZhciBPUEVOX01FU1NBR0UgPSAiT3BlbmluZyBjdXJseSBi
cmFjZSBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyBjb250cm9sbGluZyBzdGF0
ZW1lbnQuIiwKKyAgICAgICAgQk9EWV9NRVNTQUdFID0gIlN0YXRlbWVudCBpbnNpZGUgb2YgY3Vy
bHkgYnJhY2VzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmUuIiwKKyAgICAgICAgQ0xPU0VfTUVTU0FH
RSA9ICJDbG9zaW5nIGN1cmx5IGJyYWNlIGRvZXMgbm90IGFwcGVhciBvbiB0aGUgc2FtZSBsaW5l
IGFzIHRoZSBzdWJzZXF1ZW50IGJsb2NrLiIsCisgICAgICAgIENMT1NFX01FU1NBR0VfU0lOR0xF
ID0gIkNsb3NpbmcgY3VybHkgYnJhY2Ugc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3Bl
bmluZyBjdXJseSBicmFjZSBvciBvbiB0aGUgbGluZSBhZnRlciB0aGUgcHJldmlvdXMgYmxvY2su
IiwKKyAgICAgICAgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQID0gIkNsb3NpbmcgY3VybHkgYnJh
Y2UgYXBwZWFycyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBzdWJzZXF1ZW50IGJsb2NrLiI7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEJpbmRzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRv
IGEgZnVuY3Rpb24gdGhhdCB2ZXJpZmllcyB0aGF0IHRoZSBvcGVuaW5nCisgICAgICogY3VybHkg
YnJhY2UgaXMgb24gdGhlIHNhbWUgbGluZSBhcyBpdHMgY29udHJvbGxpbmcgc3RhdGVtZW50IG9m
IGEgZ2l2ZW4KKyAgICAgKiBub2RlLgorICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBUaGUgcHJv
cGVydGllcyB0byBjaGVjayBvbiB0aGUgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259
IEEgZnVuY3Rpb24gdGhhdCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrIG9uIGEgbm9kZQorICAgICAq
LworICAgIGZ1bmN0aW9uIGNoZWNrQmxvY2soKSB7CisgICAgICAgIHZhciBibG9ja1Byb3BlcnRp
ZXMgPSBhcmd1bWVudHM7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwoYmxvY2tQcm9wZXJ0aWVzLCBmdW5jdGlvbihibG9ja1Byb3Ap
IHsKKyAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF0sIHByZXZpb3Vz
VG9rZW4sIGN1cmx5VG9rZW4sIGN1cmx5VG9rZW5FbmQsIGN1cmx5VG9rZW5zT25TYW1lTGluZTsK
KyAgICAgICAgICAgICAgICBibG9jayA9IG5vZGVbYmxvY2tQcm9wXTsKKyAgICAgICAgICAgICAg
ICBpZiAoYmxvY2sgJiYgYmxvY2sudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShibG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIGN1cmx5VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9r
ZW4oYmxvY2spOworICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuRW5kID0gY29udGV4dC5n
ZXRMYXN0VG9rZW4oYmxvY2spOworICAgICAgICAgICAgICAgICAgICBjdXJseVRva2Vuc09uU2Ft
ZUxpbmUgPSBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09PSBjdXJseVRva2VuRW5kLmxvYy5z
dGFydC5saW5lOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Rva2VuLmxvYy5z
dGFydC5saW5lICE9PSBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrLmJvZHkubGVuZ3RoICYmIHBhcmFtcy5hbGxvd1Np
bmdsZUxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJseVRva2VuLmxvYy5z
dGFydC5saW5lID09PSBibG9jay5ib2R5WzBdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vu
c09uU2FtZUxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChibG9jay5ib2R5WzBdLCBCT0RZX01FU1NBR0UpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjdXJseVRva2VuRW5kLmxvYy5zdGFydC5saW5lID09PSBibG9jay5ib2R5W2Js
b2NrLmJvZHkubGVuZ3RoIC0gMV0ubG9jLnN0YXJ0LmxpbmUgJiYgIWN1cmx5VG9rZW5zT25TYW1l
TGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGJsb2Nr
LmJvZHlbYmxvY2suYm9keS5sZW5ndGggLSAxXSwgQ0xPU0VfTUVTU0FHRV9TSU5HTEUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJs
b2NrLmJvZHkubGVuZ3RoICYmIGN1cmx5VG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJv
ZHlbMF0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGJsb2NrLmJvZHlbMF0sIEJPRFlfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBv
biBJZlN0YXRlbWVudHMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQW4gSWZTdGF0ZW1l
bnQgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja0lmU3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2VuczsKKworICAgICAgICBj
aGVja0Jsb2NrKCJjb25zZXF1ZW50IiwgImFsdGVybmF0ZSIpKG5vZGUpOworCisgICAgICAgIGlm
IChub2RlLmFsdGVybmF0ZSAmJiBub2RlLmFsdGVybmF0ZS50eXBlID09PSAiQmxvY2tTdGF0ZW1l
bnQiKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vuc0JlZm9yZShub2Rl
LmFsdGVybmF0ZSwgMik7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT09ICIxdGJzIikgeworICAg
ICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sxXS5s
b2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LmFsdGVybmF0ZSwgQ0xPU0VfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3RydXAiKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5l
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYWx0ZXJuYXRlLCBD
TE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuZm9yY2VzIHRoZSBjb25m
aWd1cmVkIGJyYWNlIHN0eWxlIG9uIFRyeVN0YXRlbWVudHMKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgQSBUcnlTdGF0ZW1lbnQgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja1RyeVN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZh
ciB0b2tlbnM7CisKKyAgICAgICAgY2hlY2tCbG9jaygiYmxvY2siLCAiZmluYWxpemVyIikobm9k
ZSk7CisKKyAgICAgICAgaWYgKG5vZGUuZmluYWxpemVyICYmIG5vZGUuZmluYWxpemVyLnR5cGUg
PT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0
VG9rZW5zQmVmb3JlKG5vZGUuZmluYWxpemVyLCAyKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSA9
PT0gIjF0YnMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGlu
ZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUuZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAic3Ryb3VzdHJ1cCIpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lID09PSB0b2tlbnNb
MV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZS5maW5hbGl6ZXIsIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog
RW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gQ2F0Y2hDbGF1c2VzCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgQ2F0Y2hDbGF1c2Ugbm9kZS4KKyAgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NhdGNoQ2xhdXNlKG5vZGUp
IHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5v
ZGUpLAorICAgICAgICAgICAgZmlyc3RUb2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2Rl
KTsKKworICAgICAgICBjaGVja0Jsb2NrKCJib2R5Iikobm9kZSk7CisKKyAgICAgICAgaWYgKG5v
ZGUuYm9keSAmJiBub2RlLmJvZHkudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAg
ICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlv
dXNUb2tlbi5sb2Muc3RhcnQubGluZSAhPT0gZmlyc3RUb2tlbi5sb2Muc3RhcnQubGluZSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBDTE9TRV9NRVNTQUdFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAic3Ry
b3VzdHJ1cCIpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Muc3RhcnQu
bGluZSA9PT0gZmlyc3RUb2tlbi5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgor
ICAgICAqIEVuZm9yY2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIFN3aXRjaFN0YXRl
bWVudHMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQSBTd2l0Y2hTdGF0ZW1lbnQgbm9k
ZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja1N3
aXRjaFN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0b2tlbnM7CisgICAgICAgIGlmIChu
b2RlLmNhc2VzICYmIG5vZGUuY2FzZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBj
b250ZXh0LmdldFRva2Vuc0JlZm9yZShub2RlLmNhc2VzWzBdLCAyKTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIE9QRU5fTUVTU0FHRSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250
ZXh0LmdldExhc3RUb2tlbnMobm9kZSwgMyk7CisgICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxv
Yy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1Ymxp
YyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIkZ1bmN0
aW9uRXhwcmVzc2lvbiI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIklmU3RhdGVtZW50
IjogY2hlY2tJZlN0YXRlbWVudCwKKyAgICAgICAgIlRyeVN0YXRlbWVudCI6IGNoZWNrVHJ5U3Rh
dGVtZW50LAorICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBjaGVja0NhdGNoQ2xhdXNlLAorICAgICAg
ICAiRG9XaGlsZVN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIldoaWxl
U3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAorICAgICAgICAiV2l0aFN0YXRlbWVudCI6
IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IGNoZWNrQmxvY2so
ImJvZHkiKSwKKyAgICAgICAgIkZvckluU3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAor
ICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogY2hlY2tTd2l0Y2hTdGF0ZW1lbnQKKyAgICB9Owor
Cit9OworCit9LHt9XSwxNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG5vbi1jYW1lbGNhc2VkIGlkZW50aWZpZXJz
CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHN0cmluZyBjb250YWlucyBh
biB1bmRlcnNjb3JlIGFuZCBpc24ndCBhbGwgdXBwZXItY2FzZQorICAgICAqIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lIFRoZSBzdHJpbmcgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59
IGlmIHRoZSBzdHJpbmcgaXMgdW5kZXJzY29yZWQKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGlzVW5kZXJzY29yZWQobmFtZSkgeworCisgICAgICAgIC8vIGlmIHRoZXJl
J3MgYW4gdW5kZXJzY29yZSwgaXQgbWlnaHQgYmUgQV9DT05TVEFOVCwgd2hpY2ggaXMgb2theQor
ICAgICAgICByZXR1cm4gbmFtZS5pbmRleE9mKCJfIikgPiAtMSAmJiBuYW1lICE9PSBuYW1lLnRv
VXBwZXJDYXNlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhbiBBU1Qgbm9k
ZSBhcyBhIHJ1bGUgdmlvbGF0aW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
bm9kZSB0byByZXBvcnQuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkgeworICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiSWRlbnRpZmllciAne3tuYW1lfX0nIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIs
IHsgbmFtZTogbm9kZS5uYW1lIH0pOworICAgIH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIExlYWRpbmcg
YW5kIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGFyZSBjb21tb25seSB1c2VkIHRvIGZsYWcgcHJpdmF0
ZS9wcm90ZWN0ZWQgaWRlbnRpZmllcnMsIHN0cmlwIHRoZW0KKyAgICAgICAgICAgIHZhciBuYW1l
ID0gbm9kZS5uYW1lLnJlcGxhY2UoL15fK3xfKyQvZywgIiIpLAorICAgICAgICAgICAgICAgIGVm
ZmVjdGl2ZVBhcmVudCA9IChub2RlLnBhcmVudC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIp
ID8gbm9kZS5wYXJlbnQucGFyZW50IDogbm9kZS5wYXJlbnQ7CisKKyAgICAgICAgICAgIC8vIE1l
bWJlckV4cHJlc3Npb25zIGdldCBzcGVjaWFsIHJ1bGVzCisgICAgICAgICAgICBpZiAobm9kZS5w
YXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBBbHdheXMgcmVwb3J0IHVuZGVyc2NvcmVkIG9iamVjdCBuYW1lcworICAgICAgICAgICAgICAg
IGlmIChub2RlLnBhcmVudC5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5vYmplY3QubmFtZSA9PT0gbm9kZS5uYW1lICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBpc1VuZGVyc2NvcmVkKG5hbWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKworICAgICAgICAgICAgICAgIC8vIFJlcG9ydCBB
c3NpZ25tZW50RXhwcmVzc2lvbnMgb25seSBpZiB0aGV5IGFyZSB0aGUgbGVmdCBzaWRlIG9mIHRo
ZSBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZmZlY3RpdmVQYXJlbnQu
dHlwZSA9PT0gIkFzc2lnbm1lbnRFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgaXNVbmRlcnNjb3JlZChuYW1lKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGVmZmVj
dGl2ZVBhcmVudC5yaWdodC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnR5cGUgPT09ICJNZW1iZXJFeHBy
ZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlUGFyZW50LmxlZnQu
cHJvcGVydHkubmFtZSA9PT0gbm9kZS5uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICByZXBv
cnQobm9kZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXBvcnQgYW55
dGhpbmcgdGhhdCBpcyB1bmRlcnNjb3JlZCB0aGF0IGlzbid0IGEgQ2FsbEV4cHJlc3Npb24KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNVbmRlcnNjb3JlZChuYW1lKSAmJiBlZmZlY3RpdmVQYXJl
bnQudHlwZSAhPT0gIkNhbGxFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHJlcG9ydChu
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDE2
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBDb21tYSBzcGFjaW5nIC0gdmFsaWRhdGVzIHNwYWNpbmcgYmVmb3JlIGFuZCBhZnRlciBjb21t
YQorICogQGF1dGhvciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4uCisgKiBAY29weXJp
Z2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgYmVmb3JlOiBjb250ZXh0Lm9wdGlv
bnNbMF0gPyAhIWNvbnRleHQub3B0aW9uc1swXS5iZWZvcmUgOiBmYWxzZSwKKyAgICAgICAgYWZ0
ZXI6IGNvbnRleHQub3B0aW9uc1swXSA/ICEhY29udGV4dC5vcHRpb25zWzBdLmFmdGVyIDogdHJ1
ZQorICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhl
ciB0d28gYWRqYWNlbnQgdG9rZW5zIGhhdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCisgICAg
ICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCisgICAgICog
QHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlcmUgaXMgc3BhY2UgYmV0d2VlbiB0
aGUgdG9rZW5zLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJpZ2h0KSB7
CisgICAgICAgIHJldHVybiBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF07CisgICAgfQor
CisgICAgLyoqCisgICAgICogUnVuIHJlcG9ydC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2suCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IG1zZyBUaGUgZXJyb3IgbXNnIHRvIHNob3cuCisgICAgICogQHByaXZhdGUKKyAgICAg
KiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnQobm9kZSwgbXNn
KSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG1zZyk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogU2hvdyBzcGFjZSByZXF1aXJlZCBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBkaXIgVGhlIGxvY2F0aW9uIG9mIHNwYWNpbmcuCisgICAgICogQHByaXZhdGUKKyAgICAg
KiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3BhY2luZyBlcnJvciBtc2cuCisgICAgICovCisgICAg
ZnVuY3Rpb24gZ2V0U3BhY2VSZXFNc2coZGlyKSB7CisgICAgICAgIHJldHVybiAiQSBzcGFjZSBp
cyByZXF1aXJlZCAiICsgZGlyICsgIiAnLCcuIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBT
aG93IG5vIHNwYWNlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGRpciBUaGUgbG9j
YXRpb24gb2Ygc3BhY2luZworICAgICAqIEBwcml2YXRlCisgICAgICogQHJldHVybnMge3N0cmlu
Z30gVGhlIHNwYWNpbmcgZXJyb3IgbXNnLgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldE5vU3Bh
Y2VNc2coZGlyKSB7CisgICAgICAgIHJldHVybiAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlICIg
KyBkaXIgKyAiICcsJy4iOworICAgIH0KKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlcyB0aGUg
c3BhY2luZyBiZWZvcmUgYW5kIGFmdGVyIGNvbW1hcy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2suCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBvZiB0aGUgbm9kZS4KKyAgICAgKiBAcHJp
dmF0ZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHZhbGlk
YXRlQ29tbWFTcGFjaW5nKG5vZGUsIHByb3BlcnR5KSB7CisgICAgICAgIHZhciBpdGVtcyA9IG5v
ZGVbcHJvcGVydHldOworCisgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAxKSB7
CisgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7CisgICAg
ICAgICAgICAgICAgdmFyIHRva2VuQmVmb3JlID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShpdGVt
KSwKKyAgICAgICAgICAgICAgICAgICAgaXRlbUJlZm9yZSA9IGl0ZW1zW2luZGV4IC0gMV0sCisg
ICAgICAgICAgICAgICAgICAgIHRva2VuRW5kTGluZTsKKworICAgICAgICAgICAgICAgIGlmICh0
b2tlbkJlZm9yZSAmJiB0b2tlbkJlZm9yZS52YWx1ZSA9PT0gIiwiKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRva2VuRW5kTGluZSA9IHRva2VuQmVmb3JlLmxvYy5lbmQubGluZTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBzaW5nbGUgbGluZQorICAgICAgICAgICAgICAgICAgICBpZiAodG9r
ZW5FbmRMaW5lID09PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW5FbmRMaW5lID09PSBpdGVtLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUgJiYgb3B0aW9ucy5hZnRlcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQoaXRlbUJlZm9yZSwgdG9r
ZW5CZWZvcmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVt
LCBnZXRTcGFjZVJlcU1zZygiYmVmb3JlIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQmVmb3Jl
LCBpdGVtKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwg
Z2V0U3BhY2VSZXFNc2coImFmdGVyIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5iZWZvcmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2Vu
QmVmb3JlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwg
Z2V0U3BhY2VSZXFNc2coImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQmVmb3JlLCBp
dGVtKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0
Tm9TcGFjZU1zZygiYWZ0ZXIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFmdGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRlbSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNwYWNlUmVx
TXNnKCJhZnRlciIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVmb3JlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFj
ZU1zZygiYmVmb3JlIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVmb3JlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYmVmb3JlIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXROb1NwYWNlTXNnKCJhZnRlciIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVE
ZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFT
cGFjaW5nKG5vZGUsICJkZWNsYXJhdGlvbnMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIk9iamVj
dEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1h
U3BhY2luZyhub2RlLCAicHJvcGVydGllcyIpOworICAgICAgICB9LAorICAgICAgICAiQXJyYXlF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNw
YWNpbmcobm9kZSwgImVsZW1lbnRzIik7CisgICAgICAgIH0sCisgICAgICAgICJTZXF1ZW5jZUV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3Bh
Y2luZyhub2RlLCAiZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bmN0aW9u
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFT
cGFjaW5nKG5vZGUsICJwYXJhbXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bmN0aW9uRGVj
bGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3Bh
Y2luZyhub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwx
NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgQ29tbWEgc3R5bGUgLSBlbmZvcmNlcyBjb21tYSBzdHlsZXMgb2YgdHdvIHR5cGVzOiBsYXN0
IGFuZCBmaXJzdAorICogQGF1dGhvciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4KKyAq
IEBjb3B5cmlnaHQgMjAxNCBWaWduZXNoIEFuYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBd
IHx8ICJsYXN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBjb21t
YSBwbGFjZW1lbnQgd2l0aCByZWdhcmRzIHRvIGEgZGVjbGFyYXRpb24vcHJvcGVydHkvZWxlbWVu
dAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Npb24gbm9k
ZSB0byBjaGVjaworICAgICAqIEBwcml2YXRlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAg
ICovCisgICAgZnVuY3Rpb24gdmFsaWRhdGVDb21tYShub2RlKSB7CisgICAgICAgIHZhciBpdGVt
cyA9IG5vZGUuZGVjbGFyYXRpb25zIHx8IG5vZGUucHJvcGVydGllcyB8fCBub2RlLmVsZW1lbnRz
OworCisgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpdGVtcy5m
b3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHRva2Vu
QmVmb3JlID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShpdGVtKSwKKyAgICAgICAgICAgICAgICAg
ICAgaXRlbUJlZm9yZSA9IGl0ZW1zW2luZGV4IC0gMV07CisKKyAgICAgICAgICAgICAgICBpZiAo
dG9rZW5CZWZvcmUudmFsdWUgPT09ICIsIikgeworICAgICAgICAgICAgICAgICAgICAvLyBpZiBz
aW5nbGUgbGluZQorICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5CZWZvcmUubG9jLmVuZC5s
aW5lID09PSBpdGVtLmxvYy5zdGFydC5saW5lICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgPT09IGl0ZW1CZWZvcmUubG9jLmVuZC5saW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgLy8gbG9uZSBjb21tYQorICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmICh0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgIT09IGl0ZW0ubG9jLnN0YXJ0LmxpbmUgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSAhPT0gaXRl
bUJlZm9yZS5sb2MuZW5kLmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGl0ZW0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0b2tlbkJl
Zm9yZS5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0
b2tlbkJlZm9yZS5sb2Muc3RhcnQuY29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICB9LCAi
QmFkIGxpbmUgYnJlYWtpbmcgYmVmb3JlIGFuZCBhZnRlciAnLCcuIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUgPT09ICJmaXJzdCIg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5zdGFydC5saW5lICE9
PSBpdGVtLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChpdGVtLCAiJywnIHNob3VsZCBiZSBwbGFjZWQgZmlyc3QuIik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUgPT09ICJsYXN0
IiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5CZWZvcmUubG9jLmVuZC5saW5lID09
PSBpdGVtLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChpdGVtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogaXRlbUJl
Zm9yZS5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBp
dGVtQmVmb3JlLmxvYy5lbmQuY29sdW1uCisgICAgICAgICAgICAgICAgICAgICAgICB9LCAiJywn
IHNob3VsZCBiZSBwbGFjZWQgbGFzdC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIHJldHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogdmFsaWRhdGVD
b21tYSwKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiB2YWxpZGF0ZUNvbW1hLAorICAgICAg
ICAiQXJyYXlFeHByZXNzaW9uIjogdmFsaWRhdGVDb21tYQorICAgIH07CisKK307CisKK30se31d
LDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBDb3VudHMgdGhlIGN5Y2xvbWF0aWMgY29tcGxleGl0eSBvZiBlYWNoIGZ1bmN0aW9uIG9m
IHRoZSBzY3JpcHQuIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N5Y2xvbWF0aWNf
Y29tcGxleGl0eS4KKyAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGlmLCBjb25kaXRpb25hbCwgZm9y
LCB3aGlsdGUsIHRyeSwgc3dpdGNoL2Nhc2UsCisgKiBAYXV0aG9yIFBhdHJpY2sgQnJvc3NldAor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIFRIUkVTSE9MRCA9IGNvbnRleHQub3B0
aW9uc1swXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gVXNpbmcgYSBzdGFjayB0byBzdG9yZSBjb21w
bGV4aXR5IChoYW5kbGluZyBuZXN0ZWQgZnVuY3Rpb25zKQorICAgIHZhciBmbnMgPSBbXTsKKwor
ICAgIC8vIFdoZW4gcGFyc2luZyBhIG5ldyBmdW5jdGlvbiwgc3RvcmUgaXQgaW4gb3VyIGZ1bmN0
aW9uIHN0YWNrCisgICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKKyAgICAgICAgZm5zLnB1
c2goMSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24obm9kZSkgeworICAgICAg
ICB2YXIgY29tcGxleGl0eSA9IGZucy5wb3AoKSwgbmFtZSA9ICJhbm9ueW1vdXMiOworCisgICAg
ICAgIGlmIChub2RlLmlkKSB7CisgICAgICAgICAgICBuYW1lID0gbm9kZS5pZC5uYW1lOworICAg
ICAgICB9CisgICAgICAgIGlmIChjb21wbGV4aXR5ID4gVEhSRVNIT0xEKSB7CisgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRnVuY3Rpb24gJ3t7bmFtZX19JyBoYXMgYSBjb21wbGV4
aXR5IG9mIHt7Y29tcGxleGl0eX19LiIsIHsgbmFtZTogbmFtZSwgY29tcGxleGl0eTogY29tcGxl
eGl0eSB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNlQ29tcGxl
eGl0eSgpIHsKKyAgICAgICAgaWYgKGZucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGZuc1tmbnMu
bGVuZ3RoIC0gMV0gKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFz
ZVN3aXRjaENvbXBsZXhpdHkobm9kZSkgeworICAgICAgICAvLyBBdm9pZGluZyBgZGVmYXVsdGAK
KyAgICAgICAgaWYgKG5vZGUudGVzdCkgeworICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5
KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVhc2VMb2dpY2Fs
Q29tcGxleGl0eShub2RlKSB7CisgICAgICAgIC8vIEF2b2lkaW5nICYmCisgICAgICAgIGlmIChu
b2RlLm9wZXJhdG9yID09PSAifHwiKSB7CisgICAgICAgICAgICBpbmNyZWFzZUNvbXBsZXhpdHko
bm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7Cisg
ICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1
bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpl
eGl0IjogZW5kRnVuY3Rpb24sCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogaW5jcmVhc2VDb21w
bGV4aXR5LAorICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogaW5jcmVhc2VDb21wbGV4
aXR5LAorICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBpbmNyZWFzZUxvZ2ljYWxDb21wbGV4
aXR5LAorICAgICAgICAiRm9yU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAg
ICAiRm9ySW5TdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAgICJJZlN0YXRl
bWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAgICAgICAgIlN3aXRjaENhc2UiOiBpbmNyZWFz
ZVN3aXRjaENvbXBsZXhpdHksCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGluY3JlYXNlQ29t
cGxleGl0eSwKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHkK
KyAgICB9OworCit9OworCit9LHt9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNvbnNpc3RlbnQgcmV0dXJu
IHZhbHVlcworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgdmFyIGZ1bmN0aW9ucyA9IFtdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBlbnRl
ckZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvbnMucHVzaCh7fSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZXhpdEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvbnMucG9wKCk7CisgICAg
fQorCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJh
dGlvbiI6IGVudGVyRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBlbnRl
ckZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZXhpdEZ1bmN0
aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBleGl0RnVuY3Rpb24sCisK
KyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgdmFyIHJldHVybkluZm8gPSBmdW5jdGlvbnNbZnVuY3Rpb25zLmxlbmd0aCAtIDFdLAorICAg
ICAgICAgICAgICAgIHJldHVyblR5cGVEZWZpbmVkID0gInR5cGUiIGluIHJldHVybkluZm87CisK
KyAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlRGVmaW5lZCkgeworCisgICAgICAgICAgICAgICAg
aWYgKHJldHVybkluZm8udHlwZSAhPT0gISFub2RlLmFyZ3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCAiICsgKHJldHVybkluZm8udHlw
ZSA/ICJhIiA6ICJubyIpICsgIiByZXR1cm4gdmFsdWUuIik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybkluZm8udHlwZSA9
ICEhbm9kZS5hcmd1bWVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sMjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBjb25zaXN0ZW50IG5hbWluZyBvZiAidGhp
cyIgY29udGV4dCB2YXJpYWJsZXMKKyAqIEBhdXRob3IgUmFwaGFlbCBQaWd1bGxhCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGFsaWFzID0gY29udGV4dC5vcHRp
b25zWzBdOworCisgICAgICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9u
KGRlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlkLm5hbWUg
PT09IGFsaWFzICYmCisgICAgICAgICAgICAgICAgICAgICAgICAhKGRlY2xhcmF0aW9uLmluaXQg
JiYgZGVjbGFyYXRpb24uaW5pdC50eXBlID09PSAiVGhpc0V4cHJlc3Npb24iKSkgeworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJEZXNpZ25hdGVkICd0aGlzJyBhbGlhcyAn
e3thbGlhc319JyBpcyBub3QgYXNzaWduZWQgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRvIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB7IGFsaWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KKyAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRp
b24uaW5pdCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uaW5pdC50eXBl
ID09PSAiVGhpc0V4cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJh
dGlvbi5pZC5uYW1lICE9PSBhbGlhcykgeworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJVbmV4cGVjdGVkIGFsaWFzICd7e2FsaWFzfX0nIGZvciAndGhpcycuIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsgYWxpYXM6IGRlY2xhcmF0aW9uLmlkLm5hbWUgfQorICAgICAg
ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBzdGF0ZW1lbnRz
IHdpdGhvdXQgY3VybHkgYnJhY2VzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICB2YXIgbXVsdGlPbmx5ID0gKGNvbnRleHQub3B0aW9uc1swXSA9
PT0gIm11bHRpIik7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgYm9k
eSBvZiBhIG5vZGUgdG8gc2VlIGlmIGl0J3MgYSBibG9jayBzdGF0ZW1lbnQuIERlcGVuZGluZyBv
bgorICAgICAqIHRoZSBydWxlIG9wdGlvbnMsIHJlcG9ydHMgdGhlIGFwcHJvcHJpYXRlIHByb2Js
ZW1zLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZXBvcnQgaWYg
dGhlcmUncyBhIHByb2JsZW0uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBib2R5
IG5vZGUgdG8gY2hlY2sgZm9yIGJsb2Nrcy4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBU
aGUgbmFtZSB0byByZXBvcnQgaWYgdGhlcmUncyBhIHByb2JsZW0uCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IHN1ZmZpeCBBZGRpdGlvbmFsIHN0cmluZyB0byBhZGQgdG8gdGhlIGVuZCBvZiBhIHJl
cG9ydC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVj
a0JvZHkobm9kZSwgYm9keSwgbmFtZSwgc3VmZml4KSB7CisgICAgICAgIHZhciBoYXNCbG9jayA9
IChib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpOworCisgICAgICAgIGlmIChtdWx0aU9u
bHkpIHsKKyAgICAgICAgICAgIGlmIChoYXNCbG9jayAmJiBib2R5LmJvZHkubGVuZ3RoID09PSAx
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJ5IHsg
YWZ0ZXIgJ3t7bmFtZX19J3t7c3VmZml4fX0uIiwKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN1ZmZpeDogKHN1ZmZpeCA/ICIgIiArIHN1ZmZpeCA6ICIiKQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICghaGFzQmxvY2spIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiRXhwZWN0ZWQgeyBhZnRlciAne3tuYW1lfX0ne3tzdWZmaXh9fS4iLAorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4OiAoc3VmZml4ID8gIiAiICsgc3VmZml4IDog
IiIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBjaGVja0Jv
ZHkobm9kZSwgbm9kZS5jb25zZXF1ZW50LCAiaWYiLCAiY29uZGl0aW9uIik7CisKKyAgICAgICAg
ICAgIGlmIChub2RlLmFsdGVybmF0ZSAmJiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZTdGF0
ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUuYWx0ZXJuYXRl
LCAiZWxzZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0sCisKKyAgICAgICAgIldoaWxl
U3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUs
IG5vZGUuYm9keSwgIndoaWxlIiwgImNvbmRpdGlvbiIpOworICAgICAgICB9LAorCisgICAgICAg
ICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNr
Qm9keShub2RlLCBub2RlLmJvZHksICJkbyIpOworICAgICAgICB9LAorCisgICAgICAgICJGb3JT
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0JvZHkobm9kZSwg
bm9kZS5ib2R5LCAiZm9yIiwgImNvbmRpdGlvbiIpOworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IHJlcXVpcmUgZGVmYXVsdCBjYXNlIGluIHN3aXRjaCBzdGF0ZW1lbnRzCisg
KiBAYXV0aG9yIEFsaWFrc2VpIFNoeXRraW4KKyAqLworInVzZSBzdHJpY3QiOworCit2YXIgQ09N
TUVOVF9WQUxVRSA9ICJubyBkZWZhdWx0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFNo
b3J0Y3V0IHRvIGdldCBsYXN0IGVsZW1lbnQgb2YgYXJyYXkKKyAgICAgKiBAcGFyYW0gIHsqW119
IGNvbGxlY3Rpb24gQXJyYXkKKyAgICAgKiBAcmV0dXJucyB7Kn0gTGFzdCBlbGVtZW50CisgICAg
ICovCisgICAgZnVuY3Rpb24gbGFzdChjb2xsZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBjb2xs
ZWN0aW9uW2NvbGxlY3Rpb24ubGVuZ3RoIC0gMV07CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKwor
ICAgICAgICAgICAgaWYgKCFub2RlLmNhc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8v
IHNraXAgY2hlY2sgb2YgZW1wdHkgc3dpdGNoIGJlY2F1c2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkK
KyAgICAgICAgICAgICAgICAvLyB0byBleHRyYWN0IGNvbW1lbnRzIGluc2lkZSBpdCBub3cKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBo
YXNEZWZhdWx0ID0gbm9kZS5jYXNlcy5zb21lKGZ1bmN0aW9uKHYpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdi50ZXN0ID09PSBudWxsOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IGlmICghaGFzRGVmYXVsdCkgeworCisgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbW1lbnRzOworCisgICAgICAgICAgICAgICAgdmFyIGxhc3RDYXNl
ID0gbGFzdChub2RlLmNhc2VzKTsKKyAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbnRleHQu
Z2V0Q29tbWVudHMobGFzdENhc2UpLnRyYWlsaW5nOworCisgICAgICAgICAgICAgICAgaWYgKGNv
bW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gbGFzdChjb21t
ZW50cyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFjb21tZW50
IHx8IGNvbW1lbnQudmFsdWUudHJpbSgpICE9PSBDT01NRU5UX1ZBTFVFKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGRlZmF1bHQgY2FzZS4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
fTsKKworfSx7fV0sMjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gd2FybiBhYm91dCB1c2luZyBkb3Qgbm90YXRpb24gaW5z
dGVhZCBvZiBzcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3aGVuIHBvc3NpYmxlLgorICogQGF1dGhv
ciBKb3NoIFBlcmV6CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIHZh
bGlkSWRlbnRpZmllciA9IC9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJC87Cit2YXIga2V5d29y
ZHMgPSBbCisgICAgInRoaXMiLAorICAgICJmdW5jdGlvbiIsCisgICAgImlmIiwKKyAgICAicmV0
dXJuIiwKKyAgICAidmFyIiwKKyAgICAiZWxzZSIsCisgICAgImZvciIsCisgICAgIm5ldyIsCisg
ICAgImFyZ3VtZW50cyIsCisgICAgImluIiwKKyAgICAidHlwZW9mIiwKKyAgICAid2hpbGUiLAor
ICAgICJjYXNlIiwKKyAgICAiYnJlYWsiLAorICAgICJ0cnkiLAorICAgICJjYXRjaCIsCisgICAg
ImRlbGV0ZSIsCisgICAgInRocm93IiwKKyAgICAic3dpdGNoIiwKKyAgICAiY29udGludWUiLAor
ICAgICJkZWZhdWx0IiwKKyAgICAiaW5zdGFuY2VvZiIsCisgICAgImRvIiwKKyAgICAidm9pZCIs
CisgICAgImZpbmFsbHkiLAorICAgICJ3aXRoIiwKKyAgICAiZGVidWdnZXIiLAorICAgICJldmFs
IiwKKyAgICAiaW1wbGVtZW50cyIsCisgICAgImludGVyZmFjZSIsCisgICAgInBhY2thZ2UiLAor
ICAgICJwcml2YXRlIiwKKyAgICAicHJvdGVjdGVkIiwKKyAgICAicHVibGljIiwKKyAgICAic3Rh
dGljIiwKKyAgICAieWllbGQiLAorICAgICJsZXQiLAorICAgICJjbGFzcyIsCisgICAgImVudW0i
LAorICAgICJleHBvcnQiLAorICAgICJleHRlbmRzIiwKKyAgICAiaW1wb3J0IiwKKyAgICAic3Vw
ZXIiLAorICAgICJ0cnVlIiwKKyAgICAiZmFsc2UiLAorICAgICJudWxsIiwKKyAgICAiYWJzdHJh
Y3QiLAorICAgICJib29sZWFuIiwKKyAgICAiYnl0ZSIsCisgICAgImNoYXIiLAorICAgICJjb25z
dCIsCisgICAgImRvdWJsZSIsCisgICAgImZpbmFsIiwKKyAgICAiZmxvYXQiLAorICAgICJnb3Rv
IiwKKyAgICAiaW50IiwKKyAgICAibG9uZyIsCisgICAgIm5hdGl2ZSIsCisgICAgInNob3J0IiwK
KyAgICAic3luY2hyb25pemVkIiwKKyAgICAidGhyb3dzIiwKKyAgICAidHJhbnNpZW50IiwKKyAg
ICAidm9sYXRpbGUiCitdOworCitmdW5jdGlvbiBjYW5CZVdyaXR0ZW5JbkRvdE5vdGF0aW9uKG5v
ZGUpIHsKKyAgICByZXR1cm4gbm9kZS5jb21wdXRlZCA9PT0gdHJ1ZSAmJgorICAgICAgICBub2Rl
LnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJgorICAgICAgICB2YWxpZElkZW50aWZpZXIu
dGVzdChub2RlLnByb3BlcnR5LnZhbHVlKSAmJgorICAgICAgICBrZXl3b3Jkcy5pbmRleE9mKCIi
ICsgbm9kZS5wcm9wZXJ0eS52YWx1ZSkgPT09IC0xOworfQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKyAgICByZXR1cm4geworICAgICAgICAiTWVtYmVyRXhwcmVzc2lv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChjYW5CZVdyaXR0ZW5JbkRvdE5v
dGF0aW9uKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlsn
IiArIG5vZGUucHJvcGVydHkudmFsdWUgKyAiJ10gaXMgYmV0dGVyIHdyaXR0ZW4gaW4gZG90IG5v
dGF0aW9uLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisKK30se31d
LDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSZXF1aXJlIGZpbGUgdG8gZW5kIHdpdGggc2luZ2xlIG5ld2xpbmUuCisgKiBAYXV0aG9y
IE5vZGVjYSBUZWFtIDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhPgorICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlv
biBjaGVja0JhZEVPRihub2RlKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHdob2xlIHNvdXJj
ZSBjb2RlLCBub3QgZm9yIG5vZGUgb25seS4KKyAgICAgICAgICAgIHZhciBzcmMgPSBjb250ZXh0
LmdldFNvdXJjZSgpLCBsb2NhdGlvbiA9IHtjb2x1bW46IDF9OworCisgICAgICAgICAgICBpZiAo
c3JjLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNyY1tzcmMubGVuZ3RoIC0gMV0gIT09ICJcbiIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBmaWxlIGlzIG5vdCBuZXdsaW5lLXRlcm1pbmF0ZWQKKyAgICAgICAg
ICAgICAgICBsb2NhdGlvbi5saW5lID0gc3JjLnNwbGl0KC9cbi9nKS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24sICJOZXdsaW5lIHJlcXVpcmVk
IGF0IGVuZCBvZiBmaWxlIGJ1dCBub3QgZm91bmQuIik7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KC9cblxzKlxuJC8udGVzdChzcmMpKSB7CisgICAgICAgICAgICAgICAgLy8gbGFzdCBsaW5lIGlz
IGVtcHR5CisgICAgICAgICAgICAgICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZyku
bGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2NhdGlv
biwgIlVuZXhwZWN0ZWQgYmxhbmsgbGluZSBhdCBlbmQgb2YgZmlsZS4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMjU6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBz
dGF0ZW1lbnRzIHRoYXQgdXNlICE9IGFuZCA9PSBpbnN0ZWFkIG9mICE9PSBhbmQgPT09CisgKiBA
YXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAv
KioKKyAgICAgKiBDaGVja3MgaWYgZWl0aGVyIG9wZXJhbmQgb2YgYSBiaW5hcnkgZXhwcmVzc2lv
biBpcyBhIHR5cGVvZiBvcGVyYXRpb24KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgb25lIG9mIHRoZSBv
cGVyYW5kcyBpcyB0eXBlb2YKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9u
IGlzVHlwZU9mKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIFtub2RlLmxlZnQsIG5vZGUucmlnaHRd
LnNvbWUoZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0g
IlVuYXJ5RXhwcmVzc2lvbiIgJiYgbm9kZS5vcGVyYXRvciA9PT0gInR5cGVvZiI7CisgICAgICAg
IH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBvcGVyYW5kcyBhcmUgbGl0
ZXJhbHMgb2YgdGhlIHNhbWUgdHlwZSAodmlhIHR5cGVvZikKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYg
b3BlcmFuZHMgYXJlIG9mIHNhbWUgdHlwZQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAg
ZnVuY3Rpb24gYXJlTGl0ZXJhbHNBbmRTYW1lVHlwZShub2RlKSB7CisgICAgICAgIHJldHVybiBu
b2RlLmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVy
YWwiICYmCisgICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUubGVmdC52YWx1ZSA9PT0gdHlwZW9m
IG5vZGUucmlnaHQudmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIG9u
ZSBvZiB0aGUgb3BlcmFuZHMgaXMgYSBsaXRlcmFsIG51bGwKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYg
b3BlcmFuZHMgYXJlIG51bGwKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9u
IGlzTnVsbENoZWNrKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIChub2RlLnJpZ2h0LnR5cGUgPT09
ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnZhbHVlID09PSBudWxsKSB8fAorICAgICAgICAgICAg
ICAgIChub2RlLmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUubGVmdC52YWx1ZSA9PT0g
bnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbG9jYXRpb24gKGxpbmUg
YW5kIGNvbHVtbikgb2YgdGhlIGJpbmFyeSBleHByZXNzaW9uJ3Mgb3BlcmF0b3IKKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2sK
KyAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGZpbmQKKyAg
ICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGxpbmUsIGNvbHVtbiB9IGxvY2F0aW9uIG9mIG9wZXJh
dG9yCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRPcGVyYXRvckxv
Y2F0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIG9wVG9rZW4gPSBjb250ZXh0LmdldFRva2Vucyhu
b2RlKVtjb250ZXh0LmdldFRva2Vucyhub2RlLmxlZnQpLmxlbmd0aF07CisgICAgICAgIHJldHVy
biB7bGluZTogb3BUb2tlbi5sb2Muc3RhcnQubGluZSwgY29sdW1uOiBvcFRva2VuLmxvYy5zdGFy
dC5jb2x1bW59OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJCaW5hcnlFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgIT09
ICI9PSIgJiYgbm9kZS5vcGVyYXRvciAhPT0gIiE9IikgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSA9
PT0gInNtYXJ0IiAmJiAoaXNUeXBlT2Yobm9kZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgYXJl
TGl0ZXJhbHNBbmRTYW1lVHlwZShub2RlKSkgfHwgaXNOdWxsQ2hlY2sobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250
ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbGxvdy1udWxsIiAmJiBpc051bGxDaGVjayhub2RlKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoCisgICAgICAgICAgICAgICAgbm9kZSwgZ2V0T3BlcmF0b3JMb2NhdGlvbihu
b2RlKSwKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgJ3t7b3B9fT0nIGFuZCBpbnN0ZWFkIHNh
dyAne3tvcH19Jy4iLAorICAgICAgICAgICAgICAgIHtvcDogbm9kZS5vcGVyYXRvcn0KKyAgICAg
ICAgICAgICk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyNjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3
YXJuIHdoZW4gYSBmdW5jdGlvbiBleHByZXNzaW9uIGRvZXMgbm90IGhhdmUgYSBuYW1lLgorICog
QGF1dGhvciBLeWxlIFQuIE51bmVyeQorICovCisgInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICByZXR1cm4gewor
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICB2YXIgbmFtZSA9IG5vZGUuaWQgJiYgbm9kZS5pZC5uYW1lOworCisgICAgICAgICAgICBp
ZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTWlzc2lu
ZyBmdW5jdGlvbiBleHByZXNzaW9uIG5hbWUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworfTsKKworfSx7fV0sMjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBhIHBhcnRpY3VsYXIgZnVu
Y3Rpb24gc3R5bGUKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJp
Y3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1swXSwKKyAgICAgICAgZW5mb3Jj
ZURlY2xhcmF0aW9ucyA9IChzdHlsZSA9PT0gImRlY2xhcmF0aW9uIik7CisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgaWYgKCFlbmZvcmNlRGVjbGFyYXRpb25zKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZXhwcmVzc2lvbi4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3Rv
cnMoKS5wb3AoKTsKKworICAgICAgICAgICAgaWYgKGVuZm9yY2VEZWNsYXJhdGlvbnMgJiYgcGFy
ZW50LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0b3IiKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQocGFyZW50LCAiRXhwZWN0ZWQgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDI4OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgb3IgcmVxdWlyZSBnbG9iYWwgc3RyaWN0IG1vZGUuCisgKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgbW9kZSA9IGNvbnRleHQu
b3B0aW9uc1swXTsKKworICAgIGlmIChtb2RlID09PSAiYWx3YXlzIikgeworCisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXRlbWVudCA9IG5vZGUuYm9keVswXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
IShzdGF0ZW1lbnQudHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmIHN0YXRlbWVudC5l
eHByZXNzaW9uLnZhbHVlID09PSAidXNlIHN0cmljdCIpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVXNlIHRoZSBnbG9iYWwgZm9ybSBvZiBcInVzZSBz
dHJpY3RcIi4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIH0gZWxzZSB7IC8vIG1vZGUgPSAibmV2ZXIi
CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0Lmdl
dEFuY2VzdG9ycygpLnBvcCgpOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lv
bi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiICYmIHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZnVuY3Rp
b24gZm9ybSBvZiBcInVzZSBzdHJpY3RcIi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30se31dLDI5OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgZm9yLWluIGxvb3BzIHdpdGhvdXQgaWYgc3RhdGVtZW50cyBpbnNpZGUKKyAqIEBhdXRob3Ig
TmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIkZvckluU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICogSWYgdGhlIGZvci1pbiBzdGF0ZW1lbnQgaGFzIHt9LCB0
aGVuIHRoZSByZWFsIGJvZHkgaXMgdGhlIGJvZHkKKyAgICAgICAgICAgICAqIG9mIHRoZSBCbG9j
a1N0YXRlbWVudC4gT3RoZXJ3aXNlLCBqdXN0IHVzZSBib2R5IGFzIHByb3ZpZGVkLgorICAgICAg
ICAgICAgICovCisgICAgICAgICAgICB2YXIgYm9keSA9IG5vZGUuYm9keS50eXBlID09PSAiQmxv
Y2tTdGF0ZW1lbnQiID8gbm9kZS5ib2R5LmJvZHlbMF0gOiBub2RlLmJvZHk7CisKKyAgICAgICAg
ICAgIGlmIChib2R5ICYmIGJvZHkudHlwZSAhPT0gIklmU3RhdGVtZW50IikgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgYm9keSBvZiBhIGZvci1pbiBzaG91bGQg
YmUgd3JhcHBlZCBpbiBhbiBpZiBzdGF0ZW1lbnQgdG8gZmlsdGVyIHVud2FudGVkIHByb3BlcnRp
ZXMgZnJvbSB0aGUgcHJvdG90eXBlLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sMzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IEVuc3VyZSBoYW5kbGluZyBvZiBlcnJvcnMgd2hlbiB3ZSBr
bm93IHRoZXkgZXhpc3QuCisgKiBAYXV0aG9yIEphbXVuZCBGZXJndXNvbgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgdmFyIGVycm9yQXJndW1lbnQgPSBjb250ZXh0Lm9wdGlvbnNbMF0g
fHwgImVyciI7CisgICAgdmFyIGNhbGxiYWNrcyA9IFtdOworICAgIHZhciBzY29wZXMgPSAwOwor
CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudCBzaG91bGQgYmUg
aW50ZXJwcmV0ZWQgYXMgYSByZWdleHAgcGF0dGVybi4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
c3RyaW5nVG9DaGVjayBUaGUgc3RyaW5nIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLgorICAgICAq
IEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIHNob3VsZCBiZSBp
bnRlcnByZXRlZCBhcyBhIHBhdHRlcm4uCisgICAgICovCisgICAgZnVuY3Rpb24gaXNQYXR0ZXJu
KHN0cmluZ1RvQ2hlY2spIHsKKyAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHN0cmluZ1RvQ2hlY2tb
MF07CisgICAgICAgIHJldHVybiBmaXJzdENoYXIgPT09ICJeIjsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIG5hbWUgbWF0Y2hlcyB0aGUgY29uZmlndXJlZCBl
cnJvciBhcmd1bWVudC4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSB3aGlj
aCBzaG91bGQgYmUgY29tcGFyZWQuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIg
b3Igbm90IHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgZXJyb3IgdmFyaWFi
bGUgbmFtZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtYXRjaGVzQ29uZmlndXJlZEVycm9yTmFt
ZShuYW1lKSB7CisgICAgICAgIGlmIChpc1BhdHRlcm4oZXJyb3JBcmd1bWVudCkpIHsKKyAgICAg
ICAgICAgIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKGVycm9yQXJndW1lbnQpOworICAgICAgICAg
ICAgcmV0dXJuIHJlZ2V4cC50ZXN0KG5hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
YW1lID09PSBlcnJvckFyZ3VtZW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIHRo
ZSBhcmd1bWVudHMgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc3RhcnQgdHJhY2tpbmcgdGhlIGVycm9y
IG9iamVjdC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHN0YXJ0
RnVuY3Rpb24obm9kZSkgeworCisgICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbmVzdGVkIHNjb3Bl
cworICAgICAgICBzY29wZXMrKzsKKworICAgICAgICAvLyBjaGVjayBpZiB0aGUgZmlyc3QgYXJn
dW1lbnQgbWF0Y2hlcyBvdXIgYXJndW1lbnQgbmFtZQorICAgICAgICB2YXIgZmlyc3RBcmcgPSBu
b2RlLnBhcmFtcyAmJiBub2RlLnBhcmFtc1swXTsKKyAgICAgICAgaWYgKGZpcnN0QXJnICYmIG1h
dGNoZXNDb25maWd1cmVkRXJyb3JOYW1lKGZpcnN0QXJnLm5hbWUpKSB7CisgICAgICAgICAgICBj
YWxsYmFja3MucHVzaCh7aGFuZGxlZDogZmFsc2UsIGRlcHRoOiBzY29wZXMsIGVycm9yVmFyaWFi
bGVOYW1lOiBmaXJzdEFyZy5uYW1lfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBBdCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24gY2hlY2sgdG8gc2VlIGlmIHRoZSBlcnJvciB3
YXMgaGFuZGxlZC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRv
IGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGVu
ZEZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICB2YXIgY2FsbGJhY2sgPSBjYWxsYmFja3NbY2Fs
bGJhY2tzLmxlbmd0aCAtIDFdIHx8IHt9OworCisgICAgICAgIC8vIGNoZWNrIGlmIGEgY2FsbGJh
Y2sgaXMgZW5kaW5nLCBpZiBzbyBwb3AgaXQgb2ZmIHRoZSBzdGFjaworICAgICAgICBpZiAoY2Fs
bGJhY2suZGVwdGggPT09IHNjb3BlcykgeworICAgICAgICAgICAgY2FsbGJhY2tzLnBvcCgpOwor
CisgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSB3ZXJlIG5vIGhhbmRsZWQgZXJyb3JzIHNp
bmNlIHRoZSBsYXN0IGNhbGxiYWNrCisgICAgICAgICAgICBpZiAoIWNhbGxiYWNrLmhhbmRsZWQp
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgZXJyb3Ig
dG8gYmUgaGFuZGxlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IGxlc3MgbmVzdGVkIGZ1bmN0aW9ucworICAgICAgICBzY29wZXMtLTsKKworICAgIH0KKworICAg
IC8qKgorICAgICAqIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBoYW5kbGluZyB0aGUgZXJyb3Igb2Jq
ZWN0IHByb3Blcmx5LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUg
dG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24g
Y2hlY2tGb3JFcnJvcihub2RlKSB7CisgICAgICAgIGlmIChjYWxsYmFja3MubGVuZ3RoID4gMCkg
eworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzW2NhbGxiYWNrcy5sZW5ndGgg
LSAxXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBub2RlJ3MgbmFtZSBt
YXRjaGVzIG91ciBlcnJvciBhcmd1bWVudCBuYW1lCisgICAgICAgICAgICB2YXIgaXNBYm91dEVy
cm9yID0gbm9kZS5uYW1lID09PSBjYWxsYmFjay5lcnJvclZhcmlhYmxlTmFtZTsKKworICAgICAg
ICAgICAgLy8gd2UgZG9uJ3QgY29uc2lkZXIgdGhlc2UgdXNlIGNhc2VzIGFzICJoYW5kbGluZyIg
dGhlIGVycm9yCisgICAgICAgICAgICB2YXIgZG9Ob3RDb3VudCA9IFsiRnVuY3Rpb25EZWNsYXJh
dGlvbiIsICJGdW5jdGlvbkV4cHJlc3Npb24iLCAiQ2F0Y2hDbGF1c2UiXTsKKworICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHRoaXMgaWRlbnRpZmllciBpc24ndCB1c2VkIGFzIHBhcnQgb2Ygb25l
IG9mIHRoZW0KKyAgICAgICAgICAgIHZhciBpc0hhbmRsZWQgPSBkb05vdENvdW50LmluZGV4T2Yo
bm9kZS5wYXJlbnQudHlwZSkgPT09IC0xOworCisgICAgICAgICAgICBpZiAoaXNBYm91dEVycm9y
ICYmIGlzSGFuZGxlZCkgeworICAgICAgICAgICAgICAgIC8vIHJlY29yZCB0aGF0IHRoaXMgY2Fs
bGJhY2sgaGFuZGxlZCBpdHMgZXJyb3IKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5oYW5kbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7
CisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAg
IkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJJZGVudGlmaWVy
IjogY2hlY2tGb3JFcnJvciwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVu
ZEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlv
bgorICAgIH07CisKK307CisKK30se31dLDMxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHNwZWNpZnkgc3BhY2luZyBvZiBv
YmplY3QgbGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMKKyAqIEBhdXRob3IgQnJhbmRvbiBNaWxscwor
ICogQGNvcHlyaWdodCAyMDE0IEJyYW5kb24gTWlsbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhlbHBlcnMK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogR2V0cyBhbiBvYmplY3QgbGl0ZXJh
bCBwcm9wZXJ0eSdzIGtleSBhcyB0aGUgaWRlbnRpZmllciBuYW1lIG9yIHN0cmluZyB2YWx1ZS4K
KyAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgbm9kZSB3aG9zZSBrZXkgdG8g
cmV0cmlldmUuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcHJvcGVydHkncyBrZXkuCisgKi8K
K2Z1bmN0aW9uIGdldEtleShwcm9wZXJ0eSkgeworICAgIHJldHVybiBwcm9wZXJ0eS5rZXkubmFt
ZSB8fCBwcm9wZXJ0eS5rZXkudmFsdWU7Cit9CisKKy8qKgorICogR2V0cyB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgaW4gYSBrZXksIGluY2x1ZGluZyBxdW90ZXMgYXJvdW5kIHN0cmluZyBrZXlz
LgorICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBQcm9wZXJ0eSBvZiBvbiBvYmplY3QgbGl0
ZXJhbC4KKyAqIEByZXR1cm5zIHtpbnR9IFdpZHRoIG9mIHRoZSBrZXksIGluY2x1ZGluZyBzdHJp
bmcgcXVvdGVzIHdoZXJlIHByZXNlbnQuCisgKi8KK2Z1bmN0aW9uIGdldEtleVdpZHRoKHByb3Bl
cnR5KSB7CisgICAgdmFyIGtleSA9IHByb3BlcnR5LmtleTsKKyAgICByZXR1cm4gKGtleS50eXBl
ID09PSAiSWRlbnRpZmllciIgPyBrZXkubmFtZSA6IGtleS5yYXcpLmxlbmd0aDsKK30KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwordmFyIG1lc3NhZ2VzID0geworICAgIGtleTogInt7ZXJyb3J9fSBzcGFjZSBh
ZnRlciBrZXkgXCJ7e2tleX19XCIuIiwKKyAgICB2YWx1ZTogInt7ZXJyb3J9fSBzcGFjZSBiZWZv
cmUgdmFsdWUgZm9yIGtleSBcInt7a2V5fX1cIi4iCit9OworCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8qKgorICAgICAqIE9QVElPTlMKKyAgICAgKiAia2V5
LXNwYWNpbmciOiBbMiwgeworICAgICAqICAgICBiZWZvcmVDb2xvbjogZmFsc2UsCisgICAgICog
ICAgIGFmdGVyQ29sb246IHRydWUsCisgICAgICogICAgIGFsaWduOiAiY29sb24iIC8vIE9wdGlv
bmFsLCBvciAidmFsdWUiCisgICAgICogfQorICAgICAqLworCisgICAgdmFyIG9wdGlvbnMgPSBj
b250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisgICAgICAgIGFsaWduID0gb3B0aW9ucy5hbGlnbiwK
KyAgICAgICAgYmVmb3JlQ29sb24gPSArISFvcHRpb25zLmJlZm9yZUNvbG9uLCAvLyBEZWZhdWx0
cyB0byBmYWxzZQorICAgICAgICBhZnRlckNvbG9uID0gKyEob3B0aW9ucy5hZnRlckNvbG9uID09
PSBmYWxzZSk7IC8vIERlZmF1bHRzIHRvIHRydWUKKworICAgIC8qKgorICAgICAqIEdldHMgdGhl
IHNwYWNpbmcgYXJvdW5kIHRoZSBjb2xvbiBpbiBhbiBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eQor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgbm9kZSBmcm9tIGFuIG9i
amVjdCBsaXRlcmFsCisgICAgICogQHJldHVybnMge09iamVjdH0gU3BhY2luZyBiZWZvcmUgYW5k
IGFmdGVyIHRoZSBwcm9wZXJ0eSdzIGNvbG9uCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0UHJv
cGVydHlTcGFjaW5nKHByb3BlcnR5KSB7CisgICAgICAgIHZhciB3aGl0ZXNwYWNlID0gL14oXHMq
KTooXHMqKS8uZXhlYyhjb250ZXh0LmdldFNvdXJjZSgpLnNsaWNlKAorICAgICAgICAgICAgcHJv
cGVydHkua2V5LnJhbmdlWzFdLCBwcm9wZXJ0eS52YWx1ZS5yYW5nZVswXQorICAgICAgICApKTsK
KworICAgICAgICBpZiAod2hpdGVzcGFjZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICBiZWZvcmVDb2xvbjogd2hpdGVzcGFjZVsxXS5sZW5ndGgsCisgICAgICAgICAg
ICAgICAgYWZ0ZXJDb2xvbjogd2hpdGVzcGFjZVsyXS5sZW5ndGgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIGFuIGFwcHJvcHJpYXRl
bHktZm9ybWF0dGVkIGVycm9yIGlmIHNwYWNpbmcgaXMgaW5jb3JyZWN0IG9uIG9uZQorICAgICAq
IHNpZGUgb2YgdGhlIGNvbG9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgS2V5
LXZhbHVlIHBhaXIgaW4gYW4gb2JqZWN0IGxpdGVyYWwuCisgICAgICogQHBhcmFtIHtzdHJpbmd9
IHNpZGUgU2lkZSBiZWluZyB2ZXJpZmllZCAtIGVpdGhlciAia2V5IiBvciAidmFsdWUiLgorICAg
ICAqIEBwYXJhbSB7aW50fSBkaWZmIERpZmZlcmVuY2UgYmV0d2VlbiBhY3R1YWwgYW5kIGV4cGVj
dGVkIHNwYWNpbmcuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rp
b24gcmVwb3J0KHByb3BlcnR5LCBzaWRlLCBkaWZmKSB7CisgICAgICAgIGlmIChkaWZmKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChwcm9wZXJ0eVtzaWRlXSwgbWVzc2FnZXNbc2lkZV0s
IHsKKyAgICAgICAgICAgICAgICBlcnJvcjogZGlmZiA+IDAgPyAiRXh0cmEiIDogIk1pc3Npbmci
LAorICAgICAgICAgICAgICAgIGtleTogZ2V0S2V5KHByb3BlcnR5KQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWxpZ24pIHsgLy8gVmVyaWZ5IHZlcnRpY2Fs
IGFsaWdubWVudAorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAiT2JqZWN0RXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9
IG5vZGUucHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydGll
cy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHdpZHRocyA9IHByb3BlcnRpZXMubWFwKGdl
dEtleVdpZHRoKSwgLy8gV2lkdGggb2Yga2V5cywgaW5jbHVkaW5nIHF1b3RlcworICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRXaWR0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpZHRocyksCisg
ICAgICAgICAgICAgICAgICAgIGksIHByb3BlcnR5LCBzcGFjaW5nLCB3aWR0aDsKKworICAgICAg
ICAgICAgICAgIC8vIENvbmRpdGlvbmFsbHkgaW5jbHVkZSBvbmUgc3BhY2UgYmVmb3JlIG9yIGFm
dGVyIGNvbG9uCisgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGggKz0gKGFsaWduID09PSAiY29s
b24iID8gYmVmb3JlQ29sb24gOiBhZnRlckNvbG9uKTsKKworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9
IHByb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAgICAgIHNwYWNpbmcgPSBnZXRQcm9wZXJ0
eVNwYWNpbmcocHJvcGVydHkpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghc3BhY2luZykg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIE9iamVjdCBsaXRlcmFsIGdl
dHRlcnMvc2V0dGVycyBsYWNrIGEgY29sb24KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGhzW2ldOworCisgICAgICAgICAgICAgICAgICAg
IGlmIChhbGlnbiA9PT0gInZhbHVlIikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0
KHByb3BlcnR5LCAia2V5Iiwgc3BhY2luZy5iZWZvcmVDb2xvbiAtIGJlZm9yZUNvbG9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9wZXJ0eSwgInZhbHVlIiwgKHdpZHRoICsg
c3BhY2luZy5hZnRlckNvbG9uKSAtIHRhcmdldFdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsgLy8gYWxpZ24gPSAiY29sb24iCisgICAgICAgICAgICAgICAgICAgICAgICByZXBv
cnQocHJvcGVydHksICJrZXkiLCAod2lkdGggKyBzcGFjaW5nLmJlZm9yZUNvbG9uKSAtIHRhcmdl
dFdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9wZXJ0eSwgInZhbHVl
Iiwgc3BhY2luZy5hZnRlckNvbG9uIC0gYWZ0ZXJDb2xvbik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICB9
IGVsc2UgeyAvLyBTdHJpY3RseSBvYmV5IGJlZm9yZUNvbG9uIGFuZCBhZnRlckNvbG9uIGluIGVh
Y2ggcHJvcGVydHkKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgIlByb3BlcnR5Ijog
ZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3BhY2luZyA9IGdldFByb3Bl
cnR5U3BhY2luZyhub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2luZykgeyAvLyBPYmpl
Y3QgbGl0ZXJhbCBnZXR0ZXJzL3NldHRlcnMgbGFjayBjb2xvbiBzcGFjaW5nCisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLCAia2V5Iiwgc3BhY2luZy5iZWZvcmVDb2xvbiAtIGJlZm9y
ZUNvbG9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUsICJ2YWx1ZSIsIHNwYWNp
bmcuYWZ0ZXJDb2xvbiAtIGFmdGVyQ29sb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgIH0KKworfTsKKworfSx7fV0sMzI6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBz
ZXQgdGhlIG1heGltdW0gZGVwdGggYmxvY2sgY2FuIGJlIG5lc3RlZCBpbiBhIGZ1bmN0aW9uLgor
ICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHZhciBmdW5jdGlvblN0YWNrID0gW10sCisgICAgICAgIG1heERlcHRo
ID0gY29udGV4dC5vcHRpb25zWzBdIHx8IDQ7CisKKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZW5kRnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucG9wKCk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcHVzaEJsb2NrKG5vZGUpIHsKKyAgICAgICAgdmFyIGxlbiA9ICsrZnVu
Y3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmIChsZW4g
PiBtYXhEZXB0aCkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrcyBh
cmUgbmVzdGVkIHRvbyBkZWVwbHkgKHt7ZGVwdGh9fSkuIiwKKyAgICAgICAgICAgICAgICAgICAg
eyBkZXB0aDogbGVuIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcG9wQmxv
Y2soKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXS0t
OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0i
OiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVu
Y3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorCisg
ICAgICAgICJJZlN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVu
dCI6IHB1c2hCbG9jaywKKyAgICAgICAgIlRyeVN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAgICAg
ICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJXaGlsZVN0YXRlbWVu
dCI6IHB1c2hCbG9jaywKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAg
ICAgICJGb3JTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6
IHB1c2hCbG9jaywKKworICAgICAgICAiSWZTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAg
ICAgICAiU3dpdGNoU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIlRyeVN0YXRl
bWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50OmV4aXQiOiBw
b3BCbG9jaywKKyAgICAgICAgIldoaWxlU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAg
ICAgIldpdGhTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiRm9yU3RhdGVtZW50
OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIkZvckluU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9j
aywKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCisg
ICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAgICAi
UHJvZ3JhbTpleGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwzMzpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBjaGVjayBmb3IgbWF4IGxlbmd0aCBvbiBhIGxpbmUuCisgKiBAYXV0aG9yIE1hdHQgRHVW
YWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICogQGNvcHlyaWdodCAyMDEzIE1hdHQg
RHVWYWxsLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgbWFkZSB1cCBvZiByZXBlYXRpbmcg
YSBnaXZlbiBzdHJpbmcgYSBjZXJ0YWluCisgICAgICogbnVtYmVyIG9mIHRpbWVzLiBUaGlzIHVz
ZXMgZXhwb25lbnRpYXRpb24gb2Ygc3F1YXJlcyB0byBhY2hpZXZlIHNpZ25pZmljYW50CisgICAg
ICogcGVyZm9ybWFuY2UgZ2FpbnMgb3ZlciB0aGUgbW9yZSB0cmFkaXRpb25hbCBpbXBsZW1lbnRh
dGlvbiBvZiBzdWNoCisgICAgICogZnVuY3Rpb25hbGl0eS4KKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gc3RyIFRoZSBzdHJpbmcgdG8gcmVwZWF0LgorICAgICAqIEBwYXJhbSB7aW50fSBudW0gVGhl
IG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy4KKyAgICAgKiBAcmV0dXJucyB7
c3RyaW5nfSBUaGUgY3JlYXRlZCBzdHJpbmcuCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBzdHJpbmdSZXBlYXQoc3RyLCBudW0pIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
ICIiOworICAgICAgICBmb3IgKG51bSB8PSAwOyBudW0gPiAwOyBudW0gPj4+PSAxLCBzdHIgKz0g
c3RyKSB7CisgICAgICAgICAgICBpZiAobnVtICYgMSkgeworICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBzdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICB2YXIgdGFiV2lkdGggPSBjb250ZXh0Lm9wdGlvbnNbMV07CisKKyAg
ICB2YXIgbWF4TGVuZ3RoID0gY29udGV4dC5vcHRpb25zWzBdLAorICAgICAgICB0YWJTdHJpbmcg
PSBzdHJpbmdSZXBlYXQoIiAiLCB0YWJXaWR0aCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBmdW5jdGlvbiBj
aGVja1Byb2dyYW1Gb3JNYXhMZW5ndGgobm9kZSkgeworICAgICAgICB2YXIgbGluZXMgPSBjb250
ZXh0LmdldFNvdXJjZUxpbmVzKCk7CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgdGFicworICAg
ICAgICAvLyBTcGxpdCAoaG9ub3JzIGxpbmUtZW5kaW5nKQorICAgICAgICAvLyBJdGVyYXRlCisg
ICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSwgaSkgeworICAgICAgICAgICAgaWYg
KGxpbmUucmVwbGFjZSgvXHQvZywgdGFiU3RyaW5nKS5sZW5ndGggPiBtYXhMZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB7IGxpbmU6IGkgKyAxLCBjb2w6IDEg
fSwgIkxpbmUgIiArIChpICsgMSkgKyAiIGV4Y2VlZHMgdGhlIG1heGltdW0gbGluZSBsZW5ndGgg
b2YgIiArIG1heExlbmd0aCArICIuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGNo
ZWNrUHJvZ3JhbUZvck1heExlbmd0aAorICAgIH07CisKK307CisKK30se31dLDM0OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGVuZm9yY2UgYSBtYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgY2FsbGJhY2tzLgorICogQGF1dGhv
ciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQ29uc3RhbnRzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgdmFyIFRIUkVTSE9MRCA9IGNvbnRleHQub3B0aW9uc1swXTsKKworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgdmFyIGNhbGxiYWNrU3RhY2sgPSBbXTsKKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICB2
YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAg
aWYgKHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2tTdGFjay5wdXNoKG5vZGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoY2FsbGJhY2tTdGFjay5sZW5ndGggPiBUSFJFU0hPTEQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgb3B0cyA9IHtudW06IGNhbGxiYWNrU3RhY2subGVuZ3RoLCBtYXg6IFRIUkVTSE9MRH07Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRvbyBtYW55IG5lc3RlZCBjYWxs
YmFja3MgKHt7bnVtfX0pLiBNYXhpbXVtIGFsbG93ZWQgaXMge3ttYXh9fS4iLCBvcHRzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKworCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246
ZXhpdCI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY2FsbGJhY2tTdGFjay5wb3AoKTsKKyAg
ICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGEg
ZnVuY3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGlu
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbnVtUGFyYW1zID0gY29udGV4dC5v
cHRpb25zWzBdIHx8IDM7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxl
bmd0aCA+IG51bVBhcmFtcykgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJUaGlzIGZ1bmN0aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzICh7e2NvdW50fX0pLiBNYXhp
bXVtIGFsbG93ZWQgaXMge3ttYXh9fS4iLCB7CisgICAgICAgICAgICAgICAgICAgIGNvdW50OiBu
b2RlLnBhcmFtcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIG1heDogbnVtUGFyYW1zCisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAg
IkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlLnBhcmFtcy5sZW5ndGggPiBudW1QYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycyAoe3tj
b3VudH19KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgeworICAgICAgICAgICAgICAg
ICAgICBjb3VudDogbm9kZS5wYXJhbXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBtYXg6
IG51bVBhcmFtcworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBzZXQgdGhlIG1heGltdW0gbnVt
YmVyIG9mIHN0YXRlbWVudHMgaW4gYSBmdW5jdGlvbi4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlh
biBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRp
b24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgZnVu
Y3Rpb25TdGFjayA9IFtdLAorICAgICAgICBtYXhTdGF0ZW1lbnRzID0gY29udGV4dC5vcHRpb25z
WzBdIHx8IDEwOworCisgICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKKyAgICAgICAgZnVu
Y3Rpb25TdGFjay5wdXNoKDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gZnVuY3Rpb25TdGFjay5wb3AoKTsKKworICAgICAg
ICBpZiAoY291bnQgPiBtYXhTdGF0ZW1lbnRzKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgc3RhdGVtZW50cyAoe3tjb3VudH19
KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwKKyAgICAgICAgICAgICAgICAgICAgeyBj
b3VudDogY291bnQsIG1heDogbWF4U3RhdGVtZW50cyB9KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNvdW50U3RhdGVtZW50cyhub2RlKSB7CisgICAgICAgIGZ1bmN0aW9uU3Rh
Y2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSArPSBub2RlLmJvZHkubGVuZ3RoOworICAgIH0K
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRp
b24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRG
dW5jdGlvbiwKKworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBjb3VudFN0YXRlbWVudHMsCisK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAg
ICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbgorICAgIH07CisKK307CisK
K30se31dLDM3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGNvbnN0cnVjdG9ycyB3aXRob3V0IGNhcGl0
YWwgbGV0dGVycworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICogQGNvcHlyaWdodCAy
MDEzLTIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKwor
InVzZSBzdHJpY3QiOworCit2YXIgQ0FQU19BTExPV0VEID0gWworICAgICJOdW1iZXIiLAorICAg
ICJTdHJpbmciLAorICAgICJCb29sZWFuIiwKKyAgICAiRGF0ZSIsCisgICAgIkFycmF5IiwKKyAg
ICAiU3ltYm9sIiwKKyAgICAiUmVnRXhwIgorXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgY29uZmlnID0gY29udGV4dC5v
cHRpb25zWzBdIHx8IHt9OworICAgIGNvbmZpZy5uZXdJc0NhcCA9IGNvbmZpZy5uZXdJc0NhcCA9
PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisgICAgY29uZmlnLmNhcElzTmV3ID0gY29uZmlnLmNh
cElzTmV3ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKKworICAgIHZhciBsaXN0ZW5lcnMgPSB7
fTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogR2V0IGV4YWN0IGNhbGxlZSBuYW1lIGZy
b20gZXhwcmVzc2lvbgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBDYWxsRXhwcmVzc2lv
biBvciBOZXdFeHByZXNzaW9uIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBuYW1lCisg
ICAgICovCisgICAgZnVuY3Rpb24gZXh0cmFjdE5hbWVGcm9tRXhwcmVzc2lvbihub2RlKSB7CisK
KyAgICAgICAgdmFyIG5hbWUgPSAiIiwKKyAgICAgICAgICAgIHByb3BlcnR5OworCisgICAgICAg
IGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAg
ICAgIHByb3BlcnR5ID0gbm9kZS5jYWxsZWUucHJvcGVydHk7CisKKyAgICAgICAgICAgIGlmIChw
cm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgKHR5cGVvZiBwcm9wZXJ0eS52YWx1ZSA9PT0g
InN0cmluZyIpKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LnZhbHVlOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgIW5v
ZGUuY2FsbGVlLmNvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5Lm5h
bWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0g
bm9kZS5jYWxsZWUubmFtZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjYXBpdGFsaXphdGlvbiBzdGF0ZSBvZiB0
aGUgc3RyaW5nIC0KKyAgICAgKiBXaGV0aGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdXBwZXJj
YXNlLCBsb3dlcmNhc2UsIG9yIG5vbi1hbHBoYWJldGljCisgICAgICogQHBhcmFtIHtTdHJpbmd9
IHN0ciBTdHJpbmcKKyAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBjYXBpdGFsaXphdGlvbiBzdGF0
ZTogIm5vbi1hbHBoYSIsICJsb3dlciIsIG9yICJ1cHBlciIKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBnZXRDYXAoc3RyKSB7CisgICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHIuY2hhckF0KDApOwor
CisgICAgICAgIHZhciBmaXJzdENoYXJMb3dlciA9IGZpcnN0Q2hhci50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICB2YXIgZmlyc3RDaGFyVXBwZXIgPSBmaXJzdENoYXIudG9VcHBlckNhc2UoKTsKKwor
ICAgICAgICBpZiAoZmlyc3RDaGFyTG93ZXIgPT09IGZpcnN0Q2hhclVwcGVyKSB7CisgICAgICAg
ICAgICAvLyBjaGFyIGhhcyBubyB1cHBlcmNhc2UgdmFyaWFudCwgc28gaXQncyBub24tYWxwaGFi
ZXRpYworICAgICAgICAgICAgcmV0dXJuICJub24tYWxwaGEiOworICAgICAgICB9IGVsc2UgaWYg
KGZpcnN0Q2hhciA9PT0gZmlyc3RDaGFyTG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAibG93
ZXIiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICJ1cHBlciI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBjYXBpdGFsaXphdGlvbiBp
cyBhbGxvd2VkIGZvciBhIENhbGxFeHByZXNzaW9uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIENhbGxFeHByZXNzaW9uIG5vZGUKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2FsbGVlTmFt
ZSBDYXBpdGFsaXplZCBjYWxsZWUgbmFtZSBmcm9tIGEgQ2FsbEV4cHJlc3Npb24KKyAgICAgKiBA
cmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZWUgbWF5IGJlIGNhcGl0
YWxpemVkCisgICAgICovCisgICAgZnVuY3Rpb24gaXNDYXBBbGxvd2VkKG5vZGUsIGNhbGxlZU5h
bWUpIHsKKyAgICAgICAgaWYgKENBUFNfQUxMT1dFRC5pbmRleE9mKGNhbGxlZU5hbWUpID49IDAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjYWxs
ZWVOYW1lID09PSAiVVRDIiAmJiBub2RlLmNhbGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lv
biIpIHsKKyAgICAgICAgICAgIC8vIGFsbG93IGlmIGNhbGxlZSBpcyBEYXRlLlVUQworICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYK
KyAgICAgICAgICAgICAgICAgICBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gIkRhdGUiOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAg
aWYgKGNvbmZpZy5uZXdJc0NhcCkgeworICAgICAgICBsaXN0ZW5lcnMuTmV3RXhwcmVzc2lvbiA9
IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGV4
dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSk7CisgICAgICAgICAgICBpZiAoY29uc3RydWN0
b3JOYW1lICYmIGdldENhcChjb25zdHJ1Y3Rvck5hbWUpID09PSAibG93ZXIiKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgY29uc3RydWN0b3IgbmFtZSBzaG91bGQg
bm90IHN0YXJ0IHdpdGggYSBsb3dlcmNhc2UgbGV0dGVyLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0KKworICAgIGlmIChjb25maWcuY2FwSXNOZXcpIHsKKyAgICAgICAgbGlz
dGVuZXJzLkNhbGxFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2
YXIgY2FsbGVlTmFtZSA9IGV4dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSk7CisgICAgICAg
ICAgICBpZiAoY2FsbGVlTmFtZSAmJiBnZXRDYXAoY2FsbGVlTmFtZSkgPT09ICJ1cHBlciIgJiYg
IWlzQ2FwQWxsb3dlZChub2RlLCBjYWxsZWVOYW1lKSkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJBIGZ1bmN0aW9uIHdpdGggYSBuYW1lIHN0YXJ0aW5nIHdpdGggYW4g
dXBwZXJjYXNlIGxldHRlciBzaG91bGQgb25seSBiZSB1c2VkIGFzIGEgY29uc3RydWN0b3IuIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJuIGxpc3RlbmVy
czsKK307CisKK30se31dLDM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB1c2luZyBjb25zdHJ1Y3RvciB3
aXRob3V0IHBhcmVudGhlc2VzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vu
cyhub2RlKTsKKyAgICAgICAgICAgIHZhciBwcmVudGljZXNUb2tlbnMgPSB0b2tlbnMuZmlsdGVy
KGZ1bmN0aW9uKHRva2VuKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlID09
PSAiKCIgfHwgdG9rZW4udmFsdWUgPT09ICIpIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaWYgKHByZW50aWNlc1Rva2Vucy5sZW5ndGggPCAyKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgJygpJyBpbnZva2luZyBhIGNvbnN0cnVjdG9yIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwzOTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVzZSBvZiBhbGVydCwgY29uZmlybSwgcHJvbXB0CisgKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIEhlbHBlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIG1hdGNo
UHJvaGliaXRlZChuYW1lKSB7CisgICAgcmV0dXJuIG5hbWUubWF0Y2goL14oYWxlcnR8Y29uZmly
bXxwcm9tcHQpJC8pOworfQorCitmdW5jdGlvbiByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0
KSB7CisgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQge3tuYW1lfX0uIiwgeyBu
YW1lOiByZXN1bHRbMV0gfSk7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDYWxsRXhw
cmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIHJlc3VsdDsKKwor
ICAgICAgICAgICAgLy8gd2l0aG91dCB3aW5kb3cuCisgICAgICAgICAgICBpZiAobm9kZS5jYWxs
ZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBt
YXRjaFByb2hpYml0ZWQobm9kZS5jYWxsZWUubmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChjb250ZXh0LCBub2RlLCByZXN1
bHQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNh
bGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHku
dHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXRj
aFByb2hpYml0ZWQobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ICYmIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSAid2luZG93Iikgewor
ICAgICAgICAgICAgICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IERpc2FsbG93IGNvbnN0cnVjdGlvbiBvZiBkZW5zZSBhcnJheXMgdXNpbmcg
dGhlIEFycmF5IGNvbnN0cnVjdG9yCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3
Lm1hdHRkdXZhbGwuY29tLz4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9u
IGNoZWNrKG5vZGUpIHsKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMu
bGVuZ3RoICE9PSAxICYmCisgICAgICAgICAgICBub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRp
ZmllciIgJiYKKyAgICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICJBcnJheSIKKyAgICAg
ICAgKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGFycmF5IGxpdGVy
YWwgbm90YXRpb24gW10gaXMgcHJlZmVycmFibGUuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBjaGVjaywKKyAgICAgICAgIk5l
d0V4cHJlc3Npb24iOiBjaGVjaworICAgIH07CisKK307CisKK30se31dLDQxOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgYml0d2lzZSBpZGVudGlmaWVycworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgdXNlIG9mICd7e29wZXJhdG9yfX0n
LiIsIHsgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsK
KyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAg
ICAgIC8vIHdhcm4gZm9yIF4gfCAmIH4gPDwgPj4gPj4+CisgICAgICAgICAgICBpZiAobm9kZS5v
cGVyYXRvci5tYXRjaCgvXig/OltcXiZcfH5dfDw8fD4+Pj8pJC8pKSB7CisgICAgICAgICAgICAg
ICAgcmVwb3J0KG5vZGUpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0sCisKKyAgICAgICAg
IlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgLy8gd2Fy
biBmb3IgfgorICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ+IikgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYXJndW1lbnRzLmNhbGxl
ZSBhbmQgYXJndW1lbnRzLmNhbGxlci4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgb2JqZWN0TmFtZSA9
IG5vZGUub2JqZWN0Lm5hbWUsCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbm9kZS5w
cm9wZXJ0eS5uYW1lOworCisgICAgICAgICAgICBpZiAob2JqZWN0TmFtZSA9PT0gImFyZ3VtZW50
cyIgJiYgIW5vZGUuY29tcHV0ZWQgJiYgcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZS5tYXRj
aCgvXmNhbGxlW2VyXSQvKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJBdm9pZCBhcmd1bWVudHMue3twcm9wZXJ0eX19LiIsIHsgcHJvcGVydHk6IHByb3BlcnR5TmFt
ZSB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB2YXJpYWJsZSBsZWFrIGluIENhdGNoQ2xhdXNlcyBpbiBJRSA4IGFu
ZCBlYXJsaWVyCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gcGFyYW1Jc1NoYWRvd2luZyhzY29w
ZSwgbmFtZSkgeworICAgICAgICB2YXIgZm91bmQgPSBzY29wZS52YXJpYWJsZXMuc29tZShmdW5j
dGlvbih2YXJpYWJsZSkgeworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLm5hbWUgPT09IG5h
bWU7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBwYXJhbUlzU2hhZG93aW5nKHNjb3BlLnVwcGVyLCBuYW1lKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworCisgICAgICAgICAgICBp
ZiAocGFyYW1Jc1NoYWRvd2luZyhzY29wZSwgbm9kZS5wYXJhbS5uYW1lKSkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJWYWx1ZSBvZiAne3tuYW1lfX0nIG1heSBiZSBv
dmVyd3JpdHRlbiBpbiBJRSA4IGFuZCBlYXJsaWVyLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB7IG5hbWU6IG5vZGUucGFyYW0ubmFtZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK307CisKK30se31dLDQ0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdHJhaWxpbmcgY29tbWFzIGlu
IG9iamVjdCBsaXRlcmFscy4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAvLyBIZWxw
ZXJzCisgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFp
bGluZ0NvbW1hKG5vZGUpIHsKKyAgICAgICAgdmFyIHNlY29uZFRvTGFzdFRva2VuID0gY29udGV4
dC5nZXRMYXN0VG9rZW5zKG5vZGUsIDIpWzBdOworCisgICAgICAgIHZhciBpdGVtcyA9IG5vZGUu
cHJvcGVydGllcyB8fCBub2RlLmVsZW1lbnRzLAorICAgICAgICAgICAgbGFzdEl0ZW0gPSBpdGVt
c1tpdGVtcy5sZW5ndGggLSAxXTsKKyAgICAgICAgLy8gVGhlIGxhc3QgdG9rZW4gaW4gYW4gb2Jq
ZWN0L2FycmF5IGxpdGVyYWwgd2lsbCBhbHdheXMgYmUgYSBjbG9zaW5nCisgICAgICAgIC8vIGN1
cmx5LCBzbyB3ZSBjaGVjayB0aGUgc2Vjb25kIHRvIGxhc3QgdG9rZW4gZm9yIGEgY29tbWEuCisg
ICAgICAgIGlmIChzZWNvbmRUb0xhc3RUb2tlbi52YWx1ZSA9PT0gIiwiICYmIGl0ZW1zLmxlbmd0
aCAmJiBsYXN0SXRlbSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobGFzdEl0ZW0sIHNl
Y29uZFRvTGFzdFRva2VuLmxvYy5zdGFydCwgIlRyYWlsaW5nIGNvbW1hLiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiT2JqZWN0RXhw
cmVzc2lvbiI6IGNoZWNrRm9yVHJhaWxpbmdDb21tYSwKKyAgICAgICAgIkFycmF5RXhwcmVzc2lv
biI6IGNoZWNrRm9yVHJhaWxpbmdDb21tYQorICAgIH07CisKK307CisKK30se31dLDQ1OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgYXNzaWdubWVudCBpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KKyAqIEBhdXRo
b3IgU3RlcGhlbiBNdXJyYXkgPHNwbXVycmF5enp6PgorICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
ZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9r
ZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAorICAgICAgICAgICAgbmV4dFRva2Vu
ID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworCisgICAgICAgIHJldHVybiBwcmV2aW91
c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2RlLnJh
bmdlWzBdICYmCisgICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0VG9r
ZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1Bh
cmVudGhlc2lzZWRUd2ljZShub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29u
dGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLCAxKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNv
bnRleHQuZ2V0VG9rZW5BZnRlcihub2RlLCAxKTsKKworICAgICAgICByZXR1cm4gaXNQYXJlbnRo
ZXNpc2VkKG5vZGUpICYmCisgICAgICAgICAgICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIg
JiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdICYmCisgICAgICAgICAg
ICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5y
YW5nZVsxXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0Rm9yQXNzaWduKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUudGVzdCAmJiAobm9kZS50ZXN0LnR5cGUgPT09ICJBc3NpZ25tZW50RXhw
cmVzc2lvbiIpICYmICFpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBjb25kaXRpb25hbCBleHByZXNz
aW9uIGFuZCBpbnN0ZWFkIHNhdyBhbiBhc3NpZ25tZW50LiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIklmU3RhdGVtZW50IjogdGVzdEZvckFzc2lnbiwKKyAg
ICAgICAgIldoaWxlU3RhdGVtZW50IjogdGVzdEZvckFzc2lnbiwKKyAgICAgICAgIkRvV2hpbGVT
dGF0ZW1lbnQiOiB0ZXN0Rm9yQXNzaWduLAorICAgICAgICAiRm9yU3RhdGVtZW50IjogdGVzdEZv
ckFzc2lnbgorICAgIH07CisKK307CisKK30se31dLDQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGNv
bnNvbGUgb2JqZWN0CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9iamVjdC5uYW1lID09
PSAiY29uc29sZSIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5l
eHBlY3RlZCBjb25zb2xlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2UgY29uc3RhbnQgY29u
ZGl0aW9ucworICogQGF1dGhvciBDaHJpc3RpYW4gU2NodWx6IDxodHRwOi8vcm5kbS5kZT4KKyAq
LworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVj
a3MgaWYgYSBub2RlIGhhcyBhIGNvbnN0YW50IHRydXRoaW5lc3MgdmFsdWUuCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJu
cyB7Qm9vbH0gdHJ1ZSB3aGVuIG5vZGUncyB0cnV0aGluZXNzIGlzIGNvbnN0YW50CisgICAgICog
QHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0NvbnN0YW50KG5vZGUpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSAiTGl0ZXJhbCI6CisgICAgICAg
IGNhc2UgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6CisgICAgICAgIGNhc2UgIk9iamVjdEV4cHJlc3Np
b24iOgorICAgICAgICBjYXNlICJBcnJheUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgIlVuYXJ5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1
cm4gaXNDb25zdGFudChub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVz
c2lvbiI6CisgICAgICAgIGNhc2UgIkxvZ2ljYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJl
dHVybiBpc0NvbnN0YW50KG5vZGUubGVmdCkgJiYgaXNDb25zdGFudChub2RlLnJpZ2h0KTsKKyAg
ICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQobm9kZS5yaWdodCk7CisgICAgICAgIGNhc2UgIlNlcXVlbmNlRXhwcmVzc2lvbiI6
CisgICAgICAgICAgICByZXR1cm4gaXNDb25zdGFudChub2RlLmV4cHJlc3Npb25zW25vZGUuZXhw
cmVzc2lvbnMubGVuZ3RoIC0gMV0pOworICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydHMg
d2hlbiB0aGUgZ2l2ZW4gbm9kZSBjb250YWlucyBhIGNvbnN0YW50IGNvbmRpdGlvbi4KKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNoZWNrLgorICAgICAqIEBy
ZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hl
Y2tDb25zdGFudENvbmRpdGlvbihub2RlKSB7CisgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXND
b25zdGFudChub2RlLnRlc3QpKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCBjb25zdGFudCBjb25kaXRpb24uIik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNo
ZWNrQ29uc3RhbnRDb25kaXRpb24sCisgICAgICAgICJJZlN0YXRlbWVudCI6IGNoZWNrQ29uc3Rh
bnRDb25kaXRpb24sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25k
aXRpb24sCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlv
biwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24KKyAgICB9
OworCit9OworCit9LHt9XSw0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmb3JiaWQgY29udHJvbCBjaGFyYWN0ZXMgZnJv
bSByZWd1bGFyIGV4cHJlc3Npb25zLgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisKKyAgICBmdW5jdGlvbiBnZXRSZWdFeHAobm9kZSkgewor
CisgICAgICAgIGlmIChub2RlLnZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAgICAg
ICByZXR1cm4gbm9kZS52YWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZS52YWx1
ZSA9PT0gInN0cmluZyIpIHsKKworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0
QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgICAgICBpZiAoKHBhcmVudC50eXBlID09PSAiTmV3
RXhwcmVzc2lvbiIgfHwgcGFyZW50LnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIpICYmCisgICAg
ICAgICAgICBwYXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBwYXJlbnQuY2Fs
bGVlLm5hbWUgPT09ICJSZWdFeHAiKSB7CisKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3Vs
ZCBiZSBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcKKyAgICAgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChub2RlLnZhbHVl
KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICB9CisK
KworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsK
KworICAgICAgICAgICAgdmFyIGNvbXB1dGVkVmFsdWUsCisgICAgICAgICAgICAgICAgcmVnZXgg
PSBnZXRSZWdFeHAobm9kZSk7CisKKyAgICAgICAgICAgIGlmIChyZWdleCkgeworICAgICAgICAg
ICAgICAgIGNvbXB1dGVkVmFsdWUgPSByZWdleC50b1N0cmluZygpOworICAgICAgICAgICAgICAg
IGlmICgvW1x4MDAtXHgxZl0vLnRlc3QoY29tcHV0ZWRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXIg
aW4gcmVndWxhciBleHByZXNzaW9uLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQ5OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNl
IG9mIGEgZGVidWdnZXIgc3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisg
Ki8KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJEZWJ1Z2dl
clN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkICdkZWJ1Z2dlcicgc3RhdGVtZW50LiIpOworICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sNTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGRlbGV0aW5nIHZhcmlh
YmxlcworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAiZGVsZXRlIiAmJiBub2RlLmFy
Z3VtZW50LnR5cGUgPT09ICJJZGVudGlmaWVyIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJWYXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTE6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hl
Y2sgZm9yIGFtYmlndW91cyBkaXYgb3BlcmF0b3IgaW4gcmVnZXhlcworICogQGF1dGhvciBNYXR0
IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDEp
WzBdLAorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gdG9rZW4udHlwZSwKKyAgICAgICAgICAg
ICAgICBzb3VyY2U7CisKKyAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHBy
ZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tl
bnMobm9kZSwgMSlbMF0udmFsdWU7CisKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlWzFdID09
PSAiPSIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgcmVn
dWxhciBleHByZXNzaW9uIGxpdGVyYWwgY2FuIGJlIGNvbmZ1c2VkIHdpdGggJy89Jy4iKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9Owor
Cit9LHt9XSw1MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBkdXBsaWNhdGUga2V5cyBpbiBhbiBvYmpl
Y3QuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIE9iamVjdCB0aGF0IHdpbGwgYmUgYSBtYXAgb2Yg
cHJvcGVydGllcy0tc2FmZSBiZWNhdXNlIHdlIHdpbGwKKyAgICAgICAgICAgIC8vIHByZWZpeCBh
bGwgb2YgdGhlIGtleXMuCisgICAgICAgICAgICB2YXIgbm9kZVByb3BzID0ge307CisKKyAgICAg
ICAgICAgIG5vZGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAg
ICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZSB8fCBwcm9wZXJ0eS5r
ZXkudmFsdWU7CisgICAgICAgICAgICAgICAgdmFyIGtleSA9IHByb3BlcnR5LmtpbmQgKyAiLSIg
KyBrZXlOYW1lOworCisgICAgICAgICAgICAgICAgaWYgKG5vZGVQcm9wc1trZXldKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEdXBsaWNhdGUga2V5ICd7e2tl
eX19Jy4iLCB7IGtleToga2V5TmFtZSB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBub2RlUHJvcHNba2V5XSA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDUz
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgYGVsc2VgIGFmdGVyIGEgYHJldHVybmAgaW4gYGlmYAorICogQGF1dGhv
ciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIGZ1bmN0aW9uIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KG5vZGUsIGFsdGVybmF0ZSkg
eworICAgICAgICBpZiAobm9kZS50eXBlID09PSAiUmV0dXJuU3RhdGVtZW50IikgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQoYWx0ZXJuYXRlLCAiVW5leHBlY3RlZCAnZWxzZScgYWZ0ZXIg
J3JldHVybicuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICAvLyBEb24ndCBib3RoZXIgZmluZGluZyBhIFJldHVyblN0YXRlbWVudCwgaWYgdGhlcmUn
cyBubyBgZWxzZWAKKyAgICAgICAgICAgIC8vIG9yIGlmIHRoZSBhbHRlcm5hdGUgaXMgYWxzbyBh
biBpZiAoaW5kaWNhdGluZyBhbiBlbHNlIGlmKS4KKyAgICAgICAgICAgIGlmIChub2RlLmFsdGVy
bmF0ZSAmJiBub2RlLmNvbnNlcXVlbnQgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3Rh
dGVtZW50IikgeworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIEJsb2NrU3RhdGVt
ZW50LCBjaGVjayBlYWNoIGNvbnNlcXVlbnQgYm9keSBub2RlLgorICAgICAgICAgICAgICAgIGlm
IChub2RlLmNvbnNlcXVlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAgICAg
ICAgICAgICAgICBub2RlLmNvbnNlcXVlbnQuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChib2R5Tm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JSZXR1cm5TdGF0ZW1lbnQoYm9k
eU5vZGUsIG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiBub3QgYSBibG9jayBzdGF0ZW1lbnQsIG1ha2Ugc3VyZSB0aGUgY29u
c2VxdWVudCBpc24ndCBhCisgICAgICAgICAgICAgICAgLy8gUmV0dXJuU3RhdGVtZW50CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JSZXR1cm5T
dGF0ZW1lbnQobm9kZS5jb25zZXF1ZW50LCBub2RlLmFsdGVybmF0ZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw1
NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHRoZSB1c2Ugb2YgZW1wdHkgY2hhcmFjdGVyIGNsYXNzZXMgaW4gcmVn
dWxhciBleHByZXNzaW9ucworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5z
KG5vZGUpOworICAgICAgICAgICAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBwbGFpbi1FbmdsaXNoIGRlc2NyaXB0
aW9uIG9mIHRoZSBmb2xsb3dpbmcgcmVnZXhwOgorICAgICAgICAgICAgICAgIDAuIGBeYCBmaXgg
dGhlIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZworICAgICAgICAgICAgICAg
IDEuIGBcL2A6IHRoZSBgL2AgdGhhdCBiZWdpbnMgdGhlIHJlZ2V4cAorICAgICAgICAgICAgICAg
IDIuIGAoW15cXFtdfFxcLnxcWyhbXlxcXF1dfFxcLikrXF0pKmA6IHJlZ2V4cCBjb250ZW50czsg
MCBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgIDIuMC4gYFteXFxb
XWA6IGFueSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBhIGBcYCBvciBhIGBbYCAoYW55dGhpbmcgYnV0
IGVzY2FwZSBzZXF1ZW5jZXMgYW5kIGNoYXJhY3RlciBjbGFzc2VzKQorICAgICAgICAgICAgICAg
ICAgMi4xLiBgXFwuYDogYW4gZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICAgICAgICAgICAyLjIu
IGBcWyhbXlxcXF1dfFxcLikrXF1gOiBhIGNoYXJhY3RlciBjbGFzcyB0aGF0IGlzbid0IGVtcHR5
CisgICAgICAgICAgICAgICAgMy4gYFwvYCB0aGUgYC9gIHRoYXQgZW5kcyB0aGUgcmVnZXhwCisg
ICAgICAgICAgICAgICAgNC4gYFtnaW15XSpgOiBvcHRpb25hbCByZWdleHAgZmxhZ3MKKyAgICAg
ICAgICAgICAgICA1LiBgJGA6IGZpeCB0aGUgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5n
CisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0g
IlJlZ3VsYXJFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICEvXlwvKFteXFxbXXxcXC58
XFsoW15cXFxdXXxcXC4pK1xdKSpcL1tnaW15XSokLy50ZXN0KHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgY2xhc3MuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIH07CisK
K307CisKK30se31dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBsYWJlbCBpcyBub3QgdXNlZCBmb3Ig
YSBsb29wIG9yIHN3aXRjaAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT09ICJGb3JT
dGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiV2hpbGVTdGF0ZW1lbnQiICYmIG5vZGUu
Ym9keS50eXBlICE9PSAiRG9XaGlsZVN0YXRlbWVudCIgJiYgbm9kZS5ib2R5LnR5cGUgIT09ICJT
d2l0Y2hTdGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiRm9ySW5TdGF0ZW1lbnQiKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWwg
e3tsfX0iLCB7bDogbm9kZS5sYWJlbC5uYW1lfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSw1NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhbiBlbXB0eSBi
bG9jayBzdGF0ZW1lbnQKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0
b3JzKCksCisgICAgICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5n
dGggLSAxXSwKKyAgICAgICAgICAgICAgICBwYXJlbnRUeXBlID0gcGFyZW50LnR5cGUsCisgICAg
ICAgICAgICAgICAgaXNGaW5hbGx5QmxvY2sgPSAocGFyZW50VHlwZSA9PT0gIlRyeVN0YXRlbWVu
dCIpICYmIChwYXJlbnQuZmluYWxpemVyID09PSBub2RlKTsKKworICAgICAgICAgICAgaWYgKC9G
dW5jdGlvbkV4cHJlc3Npb258RnVuY3Rpb25EZWNsYXJhdGlvbnxDYXRjaENsYXVzZS8udGVzdChw
YXJlbnRUeXBlKSB8fAorICAgICAgICAgICAgICAgICAgICAoaXNGaW5hbGx5QmxvY2sgJiYgIXBh
cmVudC5oYW5kbGVycy5sZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA9PT0gMCkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFbXB0eSBibG9jayBzdGF0ZW1lbnQu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVu
dCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmNhc2Vz
ID09PSAidW5kZWZpbmVkIiB8fCBub2RlLmNhc2VzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFbXB0eSBzd2l0Y2ggc3RhdGVtZW50LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyBjb21wYXJpc29ucyB0byBudWxsIHdpdGhvdXQgYSB0eXBlLWNoZWNraW5nCisgKiBv
cGVyYXRvci4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgYmFkT3BlcmF0b3IgPSBub2RlLm9wZXJhdG9y
ID09PSAiPT0iIHx8IG5vZGUub3BlcmF0b3IgPT09ICIhPSI7CisKKyAgICAgICAgICAgIGlmIChu
b2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnJhdyA9PT0gIm51bGwi
ICYmIGJhZE9wZXJhdG9yIHx8CisgICAgICAgICAgICAgICAgICAgIG5vZGUubGVmdC50eXBlID09
PSAiTGl0ZXJhbCIgJiYgbm9kZS5sZWZ0LnJhdyA9PT0gIm51bGwiICYmIGJhZE9wZXJhdG9yKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSDigJg9PT3igJkgdG8g
Y29tcGFyZSB3aXRoIOKAmG51bGzigJkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSw1ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBldmFsKCkgc3RhdGVt
ZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICB2YXIgSU1QTElFRF9FVkFMID0gL3NldCg/OlRpbWVvdXR8SW50ZXJ2YWwpLzsKKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiBhIG5vZGUgcmVwcmVzZW50
cyBhIGNhbGwgdG8gc2V0VGltZW91dC9zZXRJbnRlcnZhbCB3aXRoCisgICAgICogYSBzdHJpbmcg
YXJndW1lbnQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNr
LgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2RlIG1hdGNoZXMsIGZh
bHNlIGlmIG5vdC4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzSW1w
bGllZEV2YWwobm9kZSkgeworCisgICAgICAgIHZhciBpc01lbWJlckV4cHJlc3Npb24gPSAobm9k
ZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSwKKyAgICAgICAgICAgIGlzSWRl
bnRpZmllciA9IChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIpLAorICAgICAgICAg
ICAgaXNTZXRNZXRob2QgPSAoaXNJZGVudGlmaWVyICYmIElNUExJRURfRVZBTC50ZXN0KG5vZGUu
Y2FsbGVlLm5hbWUpKSB8fAorICAgICAgICAgICAgICAgIChpc01lbWJlckV4cHJlc3Npb24gJiYg
bm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJ3aW5kb3ciICYmCisgICAgICAgICAgICAgICAg
SU1QTElFRF9FVkFMLnRlc3Qobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSkpLAorICAgICAgICAg
ICAgaGFzU3RyaW5nQXJndW1lbnQgPSBub2RlLmFyZ3VtZW50cy5sZW5ndGggJiYgKHR5cGVvZiBu
b2RlLmFyZ3VtZW50c1swXS52YWx1ZSA9PT0gInN0cmluZyIpOworCisgICAgICAgIHJldHVybiBp
c1NldE1ldGhvZCAmJiBoYXNTdHJpbmdBcmd1bWVudDsKKyAgICB9CisKKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gImV2YWwiKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgImV2YWwgY2FuIGJlIGhhcm1mdWwuIik7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzSW1wbGllZEV2YWwobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICYmICh0eXBlb2Ygbm9kZS5hcmd1bWVudHNbMF0u
dmFsdWUgPT09ICJzdHJpbmciKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiSW1wbGllZCBldmFsIGNhbiBiZSBoYXJtZnVsLiBQYXNzIGEgZnVuY3Rpb24gaW5z
dGVhZCBvZiBhIHN0cmluZy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGFzc2lnbm1l
bnQgb2YgdGhlIGV4Y2VwdGlvbiBwYXJhbWV0ZXIKKyAqIEBhdXRob3IgU3RlcGhlbiBNdXJyYXkg
PHNwbXVycmF5enp6PgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGluQ2F0Y2gg
PSBmYWxzZSwKKyAgICAgICAgZXhjZXB0aW9uTmFtZSA9IG51bGw7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlu
Q2F0Y2ggPSB0cnVlOworICAgICAgICAgICAgZXhjZXB0aW9uTmFtZSA9IG5vZGUucGFyYW0ubmFt
ZTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ2F0Y2hDbGF1c2U6ZXhpdCI6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgaW5DYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgZXhjZXB0aW9uTmFt
ZSA9IG51bGw7CisgICAgICAgIH0sCisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAoaW5DYXRjaCkgeworCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUubGVmdC5uYW1lID09PSBleGNlcHRpb25OYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgYXNzaWduIHRvIHRoZSBl
eGNlcHRpb24gcGFyYW1ldGVyLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNjA6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhZGRp
bmcgcHJvcGVydGllcyB0byBuYXRpdmUgb2JqZWN0J3MgcHJvdG90eXBlcy4KKyAqIEBhdXRob3Ig
RGF2aWQgTmVsc29uCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVt
ZW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIEJVSUxUSU5TID0gWworICAgICJP
YmplY3QiLCAiRnVuY3Rpb24iLCAiQXJyYXkiLCAiU3RyaW5nIiwgIkJvb2xlYW4iLCAiTnVtYmVy
IiwgIkRhdGUiLAorICAgICJSZWdFeHAiLCAiRXJyb3IiLCAiRXZhbEVycm9yIiwgIlJhbmdlRXJy
b3IiLCAiUmVmZXJlbmNlRXJyb3IiLAorICAgICJTeW50YXhFcnJvciIsICJUeXBlRXJyb3IiLCAi
VVJJRXJyb3IiCitdOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgLy8gaGFuZGxlIHRoZSBBcnJheS5wcm90b3R5cGUuZXh0cmEgc3R5bGUgY2FzZQorICAgICAg
ICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2
YXIgbGhzID0gbm9kZS5sZWZ0LCBhZmZlY3RzUHJvdG87CisKKyAgICAgICAgICAgIGlmIChsaHMu
dHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iIHx8IGxocy5vYmplY3QudHlwZSAhPT0gIk1lbWJl
ckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBhZmZlY3RzUHJvdG8gPSBsaHMub2JqZWN0LmNvbXB1dGVkID8KKyAgICAg
ICAgICAgICAgICBsaHMub2JqZWN0LnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBsaHMu
b2JqZWN0LnByb3BlcnR5LnZhbHVlID09PSAicHJvdG90eXBlIiA6CisgICAgICAgICAgICAgICAg
bGhzLm9iamVjdC5wcm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIjsKKworICAgICAgICAgICAg
aWYgKCFhZmZlY3RzUHJvdG8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEJVSUxUSU5TLmZvckVhY2goZnVuY3Rpb24oYnVpbHRpbikgewor
ICAgICAgICAgICAgICAgIGlmIChsaHMub2JqZWN0Lm9iamVjdC5uYW1lID09PSBidWlsdGluKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGJ1aWx0aW4gKyAiIHBy
b3RvdHlwZSBpcyByZWFkIG9ubHksIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZC4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAg
ICAvLyBoYW5kbGUgdGhlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUpIGNh
c2UKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWUsCisgICAgICAgICAgICAgICAgc3ViamVjdCwK
KyAgICAgICAgICAgICAgICBvYmplY3Q7CisKKyAgICAgICAgICAgIC8vIG9ubHkgd29ycnkgYWJv
dXQgT2JqZWN0LmRlZmluZVByb3BlcnR5CisgICAgICAgICAgICBpZiAoY2FsbGVlLnR5cGUgPT09
ICJNZW1iZXJFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgIGNhbGxlZS5vYmplY3QubmFt
ZSA9PT0gIk9iamVjdCIgJiYKKyAgICAgICAgICAgICAgICBjYWxsZWUucHJvcGVydHkubmFtZSA9
PT0gImRlZmluZVByb3BlcnR5IikgeworCisgICAgICAgICAgICAgICAgLy8gdmVyaWZ5IHRoZSBv
YmplY3QgYmVpbmcgYWRkZWQgdG8gaXMgYSBuYXRpdmUgcHJvdG90eXBlCisgICAgICAgICAgICAg
ICAgc3ViamVjdCA9IG5vZGUuYXJndW1lbnRzWzBdOworICAgICAgICAgICAgICAgIG9iamVjdCA9
IHN1YmplY3Qub2JqZWN0OworCisgICAgICAgICAgICAgICAgaWYgKG9iamVjdCAmJgorICAgICAg
ICAgICAgICAgICAgICBvYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAgICAg
ICAgICAgICAgIChCVUlMVElOUy5pbmRleE9mKG9iamVjdC5uYW1lKSA+IC0xKSAmJgorICAgICAg
ICAgICAgICAgICAgICBzdWJqZWN0LnByb3BlcnR5Lm5hbWUgPT09ICJwcm90b3R5cGUiKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgb2JqZWN0Lm5hbWUgKyAi
IHByb3RvdHlwZSBpcyByZWFkIG9ubHksIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZC4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDYxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdW5uZWNlc3NhcnkgYmluZCBjYWxscwor
ICogQGF1dGhvciBCZW5jZSBEw6FueWkgPGJlbmNlQGRhbnlpLm1lPgorICogQGNvcHlyaWdodCAy
MDE0IEJlbmNlIETDoW55aS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIHZhciBzY29wZSA9IFt7CisgICAgICAgIGRlcHRoOiAtMSwKKyAgICAgICAgZm91bmQ6
IDAKKyAgICB9XTsKKworICAgIC8qKgorICAgICAqIEdldCB0aGUgdG9wbW9zdCBzY29wZQorICAg
ICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSB0b3Btb3N0IHNjb3BlCisgICAgICovCisgICAgZnVu
Y3Rpb24gZ2V0VG9wU2NvcGUoKSB7CisgICAgICAgIHJldHVybiBzY29wZVtzY29wZS5sZW5ndGgg
LSAxXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmNyZW1lbnQgdGhlIGRlcHRoIG9mIHRo
ZSB0b3Agc2NvcGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpbmNyZW1lbnRTY29wZURlcHRoKCkgeworICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUo
KTsKKyAgICAgICAgdG9wLmRlcHRoKys7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjcmVt
ZW50IHRoZSBkZXB0aCBvZiB0aGUgdG9wIHNjb3BlCisgICAgICogQHJldHVybnMge3ZvaWR9Cisg
ICAgICovCisgICAgZnVuY3Rpb24gZGVjcmVtZW50U2NvcGVEZXB0aCgpIHsKKyAgICAgICAgdmFy
IHRvcCA9IGdldFRvcFNjb3BlKCk7CisgICAgICAgIHRvcC5kZXB0aC0tOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYKKyAgICAgICAgICAg
ICAgICBub2RlLmNhbGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAg
ICAgICAgICBub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAiYmluZCIgJiYKKyAgICAgICAg
ICAgICAgICBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIp
IHsKKyAgICAgICAgICAgICAgICBzY29wZS5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bDogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgZGVwdGg6IC0xLAorICAgICAgICAgICAgICAg
ICAgICBmb3VuZDogMAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICAiQ2FsbEV4cHJlc3Npb246ZXhpdCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOworICAgICAgICAgICAgaWYgKHRvcC5j
YWxsID09PSBub2RlICYmIHRvcC5mb3VuZCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJUaGUgZnVuY3Rpb24gYmluZGluZyBpcyB1bm5lY2Vzc2FyeS4iKTsK
KyAgICAgICAgICAgICAgICBzY29wZS5wb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGluY3JlbWVudFNjb3BlRGVwdGgsCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGRlY3JlbWVudFNjb3BlRGVwdGgsCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogaW5jcmVtZW50U2NvcGVEZXB0aCwKKyAgICAgICAg
IkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGRlY3JlbWVudFNjb3BlRGVwdGgsCisgICAgICAg
ICJUaGlzRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRvcCA9IGdl
dFRvcFNjb3BlKCk7CisgICAgICAgICAgICBpZiAodG9wLmRlcHRoID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgdG9wLmZvdW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSw2MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IGRvdWJsZSBuZWdhdGlv
biBpbiBCb29sZWFuIGNvbnRleHRzCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJVbmFyeUV4cHJlc3Npb24i
OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQu
Z2V0QW5jZXN0b3JzKCksCisgICAgICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgp
LAorICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworCisgICAg
ICAgICAgICAvLyBFeGl0IGVhcmx5IGlmIGl0J3MgZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2gKKyAg
ICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yICE9PSAiISIgfHwKKyAgICAgICAgICAgICAgICAg
ICAgcGFyZW50LnR5cGUgIT09ICJVbmFyeUV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAgICAg
ICAgIHBhcmVudC5vcGVyYXRvciAhPT0gIiEiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiAoPGJvb2w+KSAuLi4KKyAgICAgICAg
ICAgIGlmIChncmFuZHBhcmVudC50eXBlID09PSAiSWZTdGF0ZW1lbnQiKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4g
YW4gaWYgc3RhdGVtZW50IGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gZG8gLi4uIHdo
aWxlICg8Ym9vbD4pCisgICAgICAgICAgICB9IGVsc2UgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09
ICJEb1doaWxlU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgZG8gd2hpbGUgbG9vcCBjb25kaXRp
b24uIik7CisKKyAgICAgICAgICAgIC8vIHdoaWxlICg8Ym9vbD4pIC4uLgorICAgICAgICAgICAg
fSBlbHNlIGlmIChncmFuZHBhcmVudC50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRp
b24gaW4gYSB3aGlsZSBsb29wIGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gPGJvb2w+
ID8gLi4uIDogLi4uCisgICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09
PSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQg
PT09IGdyYW5kcGFyZW50LnRlc3QpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYSB0ZXJuYXJ5IGNvbmRpdGlvbi4i
KTsKKworICAgICAgICAgICAgLy8gZm9yICguLi47IDxib29sPjsgLi4uKSAuLi4KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiICYmCisg
ICAgICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQudGVzdCkpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlv
biBpbiBhIGZvciBsb29wIGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gITxib29sPgor
ICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIlVuYXJ5RXhwcmVz
c2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQub3BlcmF0b3IgPT09ICIh
IikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IG11
bHRpcGxlIG5lZ2F0aW9uLiIpOworCisgICAgICAgICAgICAvLyBCb29sZWFuKDxib29sPikKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJDYWxsRXhwcmVzc2lv
biIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJ
ZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUubmFt
ZSA9PT0gIkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGNhbGwgdG8gQm9vbGVhbigpLiIpOworCisg
ICAgICAgICAgICAvLyBuZXcgQm9vbGVhbig8Ym9vbD4pCisgICAgICAgICAgICB9IGVsc2UgaWYg
KChncmFuZHBhcmVudC50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAg
ICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAg
ICAgICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIkJvb2xlYW4iKSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5l
Z2F0aW9uIGluIEJvb2xlYW4gY29uc3RydWN0b3IgY2FsbC4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDYzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBwYXJlbnRoZXNlc2lz
bmcgaGlnaGVyIHByZWNlZGVuY2Ugc3ViZXhwcmVzc2lvbnMuCisgKiBAYXV0aG9yIE1pY2hhZWwg
RmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2Vk
KG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVm
b3JlKG5vZGUpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVy
KG5vZGUpOworCisgICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgor
ICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4u
cmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVl
ID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIg
cHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAg
ICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAg
ICAgcmV0dXJuIGlzUGFyZW50aGVzaXNlZChub2RlKSAmJiBwcmV2aW91c1Rva2VuICYmIG5leHRU
b2tlbiAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZp
b3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRv
a2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07
CisgICAgfQorCisgICAgZnVuY3Rpb24gcHJlY2VkZW5jZShub2RlKSB7CisKKyAgICAgICAgc3dp
dGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgIlNlcXVlbmNlRXhwcmVzc2lvbiI6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhc2UgIkFzc2lnbm1l
bnRFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAg
Y2FzZSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsK
KworICAgICAgICAgICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcGVyYXRvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJ8fCI6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiJiYiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgICAg
ICAgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvKiBmYWxscyB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNz
aW9uIjoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAifCI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiXiI6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gNzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJiI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gODsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT0iOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlICIhPSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj09PSI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiE9PSI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gOTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPCI6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgIjw9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPiI6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgIj49IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiaW4iOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlICJpbnN0YW5jZW9mIjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxMDsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPDwiOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlICI+PiI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4+PiI6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTE7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgIisiOgorICAgICAgICAgICAgICAgICAgICBjYXNlICItIjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiKiI6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIi8iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICIlIjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMzsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gbm8gZGVmYXVsdAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBmYWxs
cyB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAg
ICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgICAgIGNhc2UgIlVwZGF0ZUV4cHJlc3Npb24i
OgorICAgICAgICAgICAgICAgIHJldHVybiAxNTsKKyAgICAgICAgICAgIGNhc2UgIkNhbGxFeHBy
ZXNzaW9uIjoKKyAgICAgICAgICAgICAgICAvLyBJSUZFIGlzIGFsbG93ZWQgdG8gaGF2ZSBwYXJl
bnMgaW4gYW55IHBvc2l0aW9uICgjNjU1KQorICAgICAgICAgICAgICAgIGlmIChub2RlLmNhbGxl
ZS50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAxNjsK
KyAgICAgICAgICAgIGNhc2UgIk5ld0V4cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHJldHVy
biAxNzsKKyAgICAgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gMTg7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkdyYXR1aXRvdXMgcGFyZW50aGVzZXMgYXJvdW5kIGV4cHJlc3Np
b24uIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5VW5hcnlVcGRhdGUobm9kZSkgeworICAg
ICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuYXJndW1lbnQpICYmIHByZWNlZGVuY2Uobm9k
ZS5hcmd1bWVudCkgPj0gcHJlY2VkZW5jZShub2RlKSkgeworICAgICAgICAgICAgcmVwb3J0KG5v
ZGUuYXJndW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5Q2FsbE5l
dyhub2RlKSB7CisgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5jYWxsZWUpICYmIHBy
ZWNlZGVuY2Uobm9kZS5jYWxsZWUpID49IHByZWNlZGVuY2Uobm9kZSkgJiYKKyAgICAgICAgIShu
b2RlLnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIkZ1
bmN0aW9uRXhwcmVzc2lvbiIpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZS5jYWxsZWUpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAg
ICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLmFyZ3VtZW50c1swXSkgJiYg
cHJlY2VkZW5jZShub2RlLmFyZ3VtZW50c1swXSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2ln
bm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1l
bnRzWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFtd
LmZvckVhY2guY2FsbChub2RlLmFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChhcmcpICYmIHByZWNlZGVuY2UoYXJnKSA+PSBwcmVj
ZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0KGFyZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBkcnlCaW5hcnlMb2dpY2FsKG5vZGUpIHsK
KyAgICAgICAgdmFyIHByZWMgPSBwcmVjZWRlbmNlKG5vZGUpOworICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUubGVmdCkgJiYgcHJlY2VkZW5jZShub2RlLmxlZnQpID49IHByZWMpIHsK
KyAgICAgICAgICAgIHJlcG9ydChub2RlLmxlZnQpOworICAgICAgICB9CisgICAgICAgIGlmIChp
c1BhcmVudGhlc2lzZWQobm9kZS5yaWdodCkgJiYgcHJlY2VkZW5jZShub2RlLnJpZ2h0KSA+IHBy
ZWMpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB7CisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5lbGVtZW50cywgZnVuY3Rpb24o
ZSkgeworICAgICAgICAgICAgICAgIGlmIChlICYmIGlzUGFyZW50aGVzaXNlZChlKSAmJiBwcmVj
ZWRlbmNlKGUpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkg
eworICAgICAgICAgICAgICAgICAgICByZXBvcnQoZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5y
aWdodCkgJiYgcHJlY2VkZW5jZShub2RlLnJpZ2h0KSA+PSBwcmVjZWRlbmNlKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUucmlnaHQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGRyeUJpbmFyeUxvZ2ljYWwsCisgICAg
ICAgICJDYWxsRXhwcmVzc2lvbiI6IGRyeUNhbGxOZXcsCisgICAgICAgICJDb25kaXRpb25hbEV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNp
c2VkKG5vZGUudGVzdCkgJiYgcHJlY2VkZW5jZShub2RlLnRlc3QpID49IHByZWNlZGVuY2Uoe3R5
cGU6ICJMb2dpY2FsRXhwcmVzc2lvbiIsIG9wZXJhdG9yOiAifHwifSkpIHsKKyAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChp
c1BhcmVudGhlc2lzZWQobm9kZS5jb25zZXF1ZW50KSAmJiBwcmVjZWRlbmNlKG5vZGUuY29uc2Vx
dWVudCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7Cisg
ICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuY29uc2VxdWVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuYWx0ZXJuYXRlKSAmJiBwcmVjZWRl
bmNlKG5vZGUuYWx0ZXJuYXRlKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJl
c3Npb24ifSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hbHRlcm5hdGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRl
c3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIGZpcnN0VG9rZW47CisgICAgICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUuZXhwcmVzc2lvbikpIHsKKyAgICAgICAgICAgICAgICBmaXJzdFRva2Vu
ID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUuZXhwcmVzc2lvbik7CisgICAgICAgICAgICAg
ICAgaWYgKGZpcnN0VG9rZW4udmFsdWUgIT09ICJmdW5jdGlvbiIgJiYgZmlyc3RUb2tlbi52YWx1
ZSAhPT0gInsiKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmV4cHJlc3Npb24p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
IkZvckluU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFy
ZW50aGVzaXNlZChub2RlLnJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnJp
Z2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmluaXQgJiYgaXNQYXJlbnRo
ZXNpc2VkKG5vZGUuaW5pdCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5pbml0KTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc1BhcmVudGhl
c2lzZWQobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS51cGRhdGUgJiYgaXNQYXJlbnRo
ZXNpc2VkKG5vZGUudXBkYXRlKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnVwZGF0
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2Rl
LnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGRyeUJpbmFyeUxv
Z2ljYWwsCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgIGlzUGFyZW50aGVzaXNlZChub2RlLm9iamVj
dCkgJiYKKyAgICAgICAgICAgICAgICBwcmVjZWRlbmNlKG5vZGUub2JqZWN0KSA+PSBwcmVjZWRl
bmNlKG5vZGUpICYmCisgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LmNvbXB1dGVkIHx8CisgICAgICAgICAgICAgICAgICAgICEoCisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLm9iamVjdC50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVvZiBub2RlLm9iamVjdC52YWx1ZSA9PT0gIm51bWJlciIgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC9eWzAtOV0rJC8udGVzdChjb250ZXh0LmdldEZpcnN0VG9rZW4obm9k
ZS5vYmplY3QpLnZhbHVlKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUub2JqZWN0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkcnlD
YWxsTmV3LAorICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIFtdLmZvckVhY2guY2FsbChub2RlLnByb3BlcnRpZXMsIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgdiA9IGUudmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHYg
JiYgaXNQYXJlbnRoZXNpc2VkKHYpICYmIHByZWNlZGVuY2UodikgPj0gcHJlY2VkZW5jZSh7dHlw
ZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9y
dCh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAg
ICAgICAgIlJldHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLmFyZ3VtZW50ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSkgeworICAg
ICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIFtdLmZvckVhY2guY2FsbChub2RlLmV4cHJlc3Npb25zLCBmdW5jdGlvbihlKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChlKSAmJiBwcmVjZWRlbmNlKGUp
ID49IHByZWNlZGVuY2Uobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICAi
U3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnRlc3Qg
JiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUudGVzdCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQo
bm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRjaFN0
YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lz
ZWRUd2ljZShub2RlLmRpc2NyaW1pbmFudCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9k
ZS5kaXNjcmltaW5hbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiVGhy
b3dTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRo
ZXNpc2VkKG5vZGUuYXJndW1lbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJn
dW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiVW5hcnlFeHByZXNz
aW9uIjogZHJ5VW5hcnlVcGRhdGUsCisgICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZHJ5VW5h
cnlVcGRhdGUsCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLmluaXQp
ICYmIHByZWNlZGVuY2Uobm9kZS5pbml0KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVu
dEV4cHJlc3Npb24ifSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5pbml0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIldoaWxlU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVz
dCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5vYmplY3QpKSB7CisgICAg
ICAgICAgICAgICAgcmVwb3J0KG5vZGUub2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDY0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHVubmVjZXNz
YXJ5IHNlbWljb2xvbnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkVtcHR5U3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVj
ZXNzYXJ5IHNlbWljb2xvbi4iKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDY1
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgdW5uZWNlc3Nhcnkgc3RyaWN0IGRpcmVjdGl2ZXMuCisgKiBAYXV0aG9y
IElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGRp
cmVjdGl2ZXMoYmxvY2spIHsKKyAgICAgICAgdmFyIGRzID0gW10sIGJvZHkgPSBibG9jay5ib2R5
LCBlLCBpLCBsOworCisgICAgICAgIGZvciAoaSA9IDAsIGwgPSBib2R5Lmxlbmd0aDsgaSA8IGw7
ICsraSkgeworICAgICAgICAgICAgZSA9IGJvZHlbaV07CisKKyAgICAgICAgICAgIGlmICgKKyAg
ICAgICAgICAgICAgICBlLnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAg
ICAgICAgICAgIGUuZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgICAg
ICAgICB0eXBlb2YgZS5leHByZXNzaW9uLnZhbHVlID09PSAic3RyaW5nIgorICAgICAgICAgICAg
KSB7CisgICAgICAgICAgICAgICAgZHMucHVzaChlLmV4cHJlc3Npb24pOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZHM7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTdHJpY3QoZGly
ZWN0aXZlKSB7CisgICAgICAgIHJldHVybiBkaXJlY3RpdmUudmFsdWUgPT09ICJ1c2Ugc3RyaWN0
IjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0ZvclVubmVjZXNzYXJ5VXNlU3RyaWN0KG5v
ZGUpIHsKKyAgICAgICAgdmFyIHVzZVN0cmljdERpcmVjdGl2ZXMsIHNjb3BlLCB1cHBlcjsKKyAg
ICAgICAgdXNlU3RyaWN0RGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMobm9kZSkuZmlsdGVyKGlzU3Ry
aWN0KTsKKworICAgICAgICBzd2l0Y2ggKHVzZVN0cmljdERpcmVjdGl2ZXMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKyAg
ICAgICAgICAgICAgICB1cHBlciA9IHNjb3BlLnVwcGVyOworCisgICAgICAgICAgICAgICAgaWYg
KHVwcGVyICYmIHVwcGVyLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHVwcGVyID0gdXBwZXIudXBwZXI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKHVwcGVyICYmIHVwcGVyLmlzU3RyaWN0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KHVzZVN0cmljdERpcmVjdGl2ZXNbMF0sICJVbm5lY2Vzc2FyeSAn
dXNlIHN0cmljdCcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KHVzZVN0cmljdERpcmVjdGl2ZXNbMV0sICJNdWx0aXBsZSAndXNlIHN0cmljdCcgZGlyZWN0aXZl
cy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dy
YW0iOiBjaGVja0ZvclVubmVjZXNzYXJ5VXNlU3RyaWN0LAorCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0ZvclVubmVjZXNz
YXJ5VXNlU3RyaWN0KG5vZGUuYm9keSk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkZ1bmN0aW9u
RGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0ZvclVubmVj
ZXNzYXJ5VXNlU3RyaWN0KG5vZGUuYm9keSk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSw2NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIGZhbGwtdGhyb3VnaCBjYXNlcyBpbiBzd2l0Y2ggc3RhdGVt
ZW50cy4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly9tYXR0ZHV2YWxsLmNvbS8+Cisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworCit2YXIgRkFMTFRIUk9VR0hfQ09NTUVOVCA9IC9mYWxsc1xz
dGhyb3VnaC87CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIHN3aXRjaGVzID0gW107CisKKyAgICByZXR1cm4geworCisgICAg
ICAgICJTd2l0Y2hDYXNlIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2YXIgY29u
c2VxdWVudCA9IG5vZGUuY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhID0g
c3dpdGNoZXNbc3dpdGNoZXMubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICAgICAgaSwKKyAgICAg
ICAgICAgICAgICBjb21tZW50cywKKyAgICAgICAgICAgICAgICBjb21tZW50OworCisgICAgICAg
ICAgICAvKgorICAgICAgICAgICAgICogU29tZSBkZXZlbG9wZXJzIHdyYXAgY2FzZSBib2RpZXMg
aW4gYmxvY2tzLCBzbyBpZiB0aGVyZSBpcyBqdXN0IG9uZQorICAgICAgICAgICAgICogbm9kZSBh
bmQgaXQncyBhIGJsb2NrIHN0YXRlbWVudCwgY2hlY2sgaW5zaWRlLgorICAgICAgICAgICAgICov
CisgICAgICAgICAgICBpZiAoY29uc2VxdWVudC5sZW5ndGggPT09IDEgJiYgY29uc2VxdWVudFsw
XS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAgY29uc2VxdWVu
dCA9IGNvbnNlcXVlbnRbMF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNoZWNr
aW5nIG9uIHByZXZpb3VzIGNhc2UKKyAgICAgICAgICAgIGlmICghc3dpdGNoRGF0YS5sYXN0Q2Fz
ZUNsb3NlZCkgeworCisgICAgICAgICAgICAgICAgLy8gYSBmYWxsIHRocm91Z2ggY29tbWVudCB3
aWxsIGJlIHRoZSBsYXN0IHRyYWlsaW5nIGNvbW1lbnQgb2YgdGhlIGxhc3QgY2FzZQorICAgICAg
ICAgICAgICAgIGNvbW1lbnRzID0gY29udGV4dC5nZXRDb21tZW50cyhzd2l0Y2hEYXRhLmxhc3RD
YXNlKS50cmFpbGluZzsKKyAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY29tbWVu
dHMubGVuZ3RoIC0gMV07CisKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgY29tbWVudAor
ICAgICAgICAgICAgICAgIGlmICghY29tbWVudCB8fCAhRkFMTFRIUk9VR0hfQ09NTUVOVC50ZXN0
KGNvbW1lbnQudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHN3
aXRjaERhdGEubGFzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBc
ImJyZWFrXCIgc3RhdGVtZW50IGJlZm9yZSBcInt7Y29kZX19XCIuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsgY29kZTogbm9kZS50ZXN0ID8gImNhc2UiIDogImRlZmF1bHQiIH0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbm93IGRlYWxp
bmcgd2l0aCB0aGUgY3VycmVudCBjYXNlCisgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNl
Q2xvc2VkID0gZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlID0gbm9kZTsK
KworICAgICAgICAgICAgLy8gdHJ5IHRvIHZlcmlmeSB1c2luZyBzdGF0ZW1lbnRzIC0gZ28gYmFj
a3dhcmRzIGFzIGEgZmFzdCBwYXRoIGZvciB0aGUgc2VhcmNoCisgICAgICAgICAgICBpZiAoY29u
c2VxdWVudC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSBjb25zZXF1ZW50Lmxl
bmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgvKD86QnJl
YWt8Q29udGludWV8UmV0dXJufFRocm93KVN0YXRlbWVudC8udGVzdChjb25zZXF1ZW50W2ldLnR5
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgY2FzZSBzdGF0ZW1lbnQgaGFzIG5vIHN0YXRlbWVudHMsIHNvIGl0IG11
c3QgbG9naWNhbGx5IGZhbGwgdGhyb3VnaAorICAgICAgICAgICAgICAgIHN3aXRjaERhdGEubGFz
dENhc2VDbG9zZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICogQW55IHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbmV4dCBTd2l0
Y2hDYXNlIG9jY3Vycy4KKyAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gd2FybiBv
biB0aGUgbGFzdCBTd2l0Y2hDYXNlLCBzaW5jZSBpdCBjYW4ndAorICAgICAgICAgICAgICogZmFs
bCB0aHJvdWdoIHRvIGFueXRoaW5nLgorICAgICAgICAgICAgICovCisgICAgICAgIH0sCisKKyAg
ICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHN3
aXRjaGVzLnB1c2goeworICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAg
ICAgbGFzdENhc2VDbG9zZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgbGFzdENhc2U6IG51bGwK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQ6
ZXhpdCI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc3dpdGNoZXMucG9wKCk7CisgICAgICAg
IH0KKyAgICB9OworCit9OworCit9LHt9XSw2NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhIGxlYWRp
bmcvdHJhaWxpbmcgZGVjaW1hbCBwb2ludCBpbiBhIG51bWVyaWMgbGl0ZXJhbAorICogQGF1dGhv
ciBKYW1lcyBBbGxhcmRpY2UKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7
CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAo
dHlwZW9mIG5vZGUudmFsdWUgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUucmF3LmluZGV4T2YoIi4iKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiQSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJlIGNvbmZ1c2VkIHdp
dGggYSBkb3QuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChub2Rl
LnJhdy5pbmRleE9mKCIuIikgPT09IG5vZGUucmF3Lmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgdHJhaWxpbmcgZGVjaW1hbCBwb2ludCBj
YW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2ODpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHVzZSBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpZGVudGlmaWVycyBhcyB2YXJpYWJsZXMuCisg
KiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLyoKKyAgICAgKiBXYWxrIHRoZSBzY29wZSBjaGFpbiBsb29raW5nIGZv
ciBlaXRoZXIgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIG9yIGEKKyAgICAgKiBWYXJpYWJsZURlY2xh
cmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUKKyAgICAg
KiBBc3NpZ25tZW50RXhwcmVzc2lvbi4gSWYgd2UgZmluZCB0aGUgRnVuY3Rpb25EZWNsYXJhdGlv
biBmaXJzdCwgdGhlbiB3ZQorICAgICAqIHdhcm4sIGJlY2F1c2UgYSBGdW5jdGlvbkRlY2xhcmF0
aW9uIGlzIHRyeWluZyB0byBiZWNvbWUgYSBWYXJpYWJsZSBvciBhCisgICAgICogRnVuY3Rpb25F
eHByZXNzaW9uLiBJZiB3ZSBmaW5kIGEgVmFyaWFibGVEZWNsYXJhdGlvbiBmaXJzdCwgdGhlbiB3
ZSBoYXZlCisgICAgICogYSBsZWdpdGltYXRlIHNoYWRvdyB2YXJpYWJsZS4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBjaGVja0lmSWRlbnRpZmllcklzRnVuY3Rpb24oc2NvcGUsIG5hbWUpIHsKKyAg
ICAgICAgdmFyIHZhcmlhYmxlLAorICAgICAgICAgICAgZGVmLAorICAgICAgICAgICAgaSwKKyAg
ICAgICAgICAgIGo7CisKKyAgICAgICAgLy8gTG9vcCBvdmVyIGFsbCBvZiB0aGUgaWRlbnRpZmll
cnMgYXZhaWxhYmxlIGluIHNjb3BlLgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NvcGUudmFy
aWFibGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHNjb3BlLnZhcmlh
Ymxlc1tpXTsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggaWRlbnRpZmllciwgc2VlIGlmIGl0
IHdhcyBkZWZpbmVkIGluIF90aGlzXyBzY29wZS4KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGog
PCB2YXJpYWJsZS5kZWZzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgZGVmID0gdmFy
aWFibGUuZGVmc1tqXTsKKworICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSBmdW5j
dGlvbiBhbmQgd2FzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICAgICAgICAgICAgICBpZiAo
ZGVmLm5hbWUubmFtZSA9PT0gbmFtZSAmJiBkZWYudHlwZSA9PT0gIkZ1bmN0aW9uTmFtZSIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gSWRlbnRpZmllciBpcyBhIHZhcmlhYmxlIGFuZCB3YXMgZGVjbGFy
ZWQgaW4gdGhpcyBzY29wZS4gVGhpcworICAgICAgICAgICAgICAgIC8vIGlzIGEgbGVnaXRpbWF0
ZSBzaGFkb3cgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lLm5hbWUgPT09
IG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoZSB1
cHBlciBzY29wZS4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7CisgICAgICAgICAgICByZXR1
cm4gY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLnVwcGVyLCBuYW1lKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGdsb2JhbCBzY29wZSBhbmQgaGF2
ZW4ndCBmb3VuZCBhbnl0aGluZy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNj
b3BlKCksCisgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUubGVmdC5uYW1lOworCisgICAgICAg
ICAgICBpZiAoY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLCBuYW1lKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICIne3tuYW1lfX0nIGlzIGEgZnVuY3Rp
b24uIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAg
IH07CisKK307CisKK30se31dLDY5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGltcGxpZWQgZXZhbCB2
aWEgc2V0VGltZW91dCBhbmQgc2V0SW50ZXJ2YWwKKyAqIEBhdXRob3IgSmFtZXMgQWxsYXJkaWNl
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxl
ZS50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FsbGVlID0g
bm9kZS5jYWxsZWUubmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChjYWxsZWUgPT09ICJzZXRU
aW1lb3V0IiB8fCBjYWxsZWUgPT09ICJzZXRJbnRlcnZhbCIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHNbMF07CisgICAgICAgICAgICAgICAgICAg
IGlmIChhcmd1bWVudCAmJiBhcmd1bWVudC50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIGFy
Z3VtZW50LnZhbHVlID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkltcGxpZWQgZXZhbC4gQ29uc2lkZXIgcGFzc2luZyBhIGZ1bmN0
aW9uIGluc3RlYWQgb2YgYSBzdHJpbmcuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSw3MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGRlY2xhcmF0aW9ucyBpbiBwcm9ncmFtIG9yIGZ1bmN0
aW9uIGJvZHkgcm9vdC4KKyAqIEBhdXRob3IgQnJhbmRvbiBNaWxscworICovCisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBz
dHJpY3QiOworCisgICAgLyoqCisgICAgICogRmluZCB0aGUgbmVhcmVzdCBQcm9ncmFtIG9yIEZ1
bmN0aW9uIGFuY2VzdG9yIG5vZGUuCisgICAgICogQHJldHVybnMge09iamVjdH0gQW5jZXN0b3In
cyB0eXBlIGFuZCBkaXN0YW5jZSBmcm9tIG5vZGUuCisgICAgICovCisgICAgZnVuY3Rpb24gbmVh
cmVzdEJvZHkoKSB7CisgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9y
cygpLAorICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3RvcnMucG9wKCksCisgICAgICAgICAg
ICBnZW5lcmF0aW9uID0gMTsKKworICAgICAgICB3aGlsZSAoYW5jZXN0b3IgJiYgWyJQcm9ncmFt
IiwgIkZ1bmN0aW9uRGVjbGFyYXRpb24iLAorICAgICAgICAgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iXS5pbmRleE9mKGFuY2VzdG9yLnR5cGUpIDwgMCkgeworICAgICAgICAgICAgZ2VuZXJh
dGlvbiArPSAxOworICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3RvcnMucG9wKCk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLy8gVHlwZSBvZiBjb250YWlu
aW5nIGFuY2VzdG9yCisgICAgICAgICAgICB0eXBlOiBhbmNlc3Rvci50eXBlLAorICAgICAgICAg
ICAgLy8gU2VwYXJhdGlvbiBiZXR3ZWVuIGFuY2VzdG9yIGFuZCBub2RlCisgICAgICAgICAgICBk
aXN0YW5jZTogZ2VuZXJhdGlvbgorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAq
IEVuc3VyZSB0aGF0IGEgZ2l2ZW4gbm9kZSBpcyBhdCBhIHByb2dyYW0gb3IgZnVuY3Rpb24gYm9k
eSdzIHJvb3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIERlY2xhcmF0aW9uIG5vZGUg
dG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24g
Y2hlY2sobm9kZSkgeworICAgICAgICB2YXIgYm9keSA9IG5lYXJlc3RCb2R5KG5vZGUpLAorICAg
ICAgICAgICAgdmFsaWQgPSAoKGJvZHkudHlwZSA9PT0gIlByb2dyYW0iICYmIGJvZHkuZGlzdGFu
Y2UgPT09IDEpIHx8CisgICAgICAgICAgICAgICAgYm9keS5kaXN0YW5jZSA9PT0gMik7CisKKyAg
ICAgICAgaWYgKCF2YWxpZCkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1v
dmUge3t0eXBlfX0gZGVjbGFyYXRpb24gdG8ge3tib2R5fX0gcm9vdC4iLAorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogKG5vZGUudHlwZSA9PT0gIkZ1bmN0aW9u
RGVjbGFyYXRpb24iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIgOiAidmFy
aWFibGUiKSwKKyAgICAgICAgICAgICAgICAgICAgYm9keTogKGJvZHkudHlwZSA9PT0gIlByb2dy
YW0iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIiA6ICJmdW5jdGlvbiBib2R5
IikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrLAor
ICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJib3RoIikgeworICAgICAgICAgICAgICAg
IGNoZWNrKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9Owor
Cit9LHt9XSw3MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgVmFsaWRhdGUgc3RyaW5ncyBwYXNzZWQgdG8gdGhlIFJlZ0V4cCBjb25zdHJ1
Y3RvcgorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IGZ1bmN0aW9uIGlzU3RyaW5nKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS50
eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUudmFsdWUgPT09ICJzdHJpbmciOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUuY2FsbGVl
LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLmNhbGxlZS5uYW1lID09PSAiUmVnRXhwIiAm
JiBpc1N0cmluZyhub2RlLmFyZ3VtZW50c1swXSkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzU3RyaW5nKG5vZGUuYXJndW1lbnRzWzFdKSkgeworICAgICAgICAg
ICAgICAgICAgICB2b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1bWVudHNbMF0udmFsdWUsIG5vZGUu
YXJndW1lbnRzWzFdLnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICB2b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1bWVudHNbMF0udmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsIGUubWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBjaGVj
aywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBjaGVjaworICAgIH07CisKK307CisKK30se31d
LDcyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19pdGVyYXRvcl9fIHByb3BlcnR5CisgKiBAYXV0
aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisK
KyAgICAgICAgICAgIGlmIChub2RlLnByb3BlcnR5ICYmCisgICAgICAgICAgICAgICAgICAgIChu
b2RlLnByb3BlcnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLnByb3BlcnR5Lm5hbWUg
PT09ICJfX2l0ZXJhdG9yX18iICYmICFub2RlLmNvbXB1dGVkKSB8fAorICAgICAgICAgICAgICAg
ICAgICAobm9kZS5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5wcm9wZXJ0eS52
YWx1ZSA9PT0gIl9faXRlcmF0b3JfXyIpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlJlc2VydmVkIG5hbWUgJ19faXRlcmF0b3JfXycuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw3MzpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGxhYmVs
cyB0aGF0IGFyZSB0aGUgc2FtZSBhcyBhbiBpZGVudGlmaWVyCisgKiBAYXV0aG9yIElhbiBDaHJp
c3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVu
Y3Rpb24gZmluZElkZW50aWZpZXIoc2NvcGUsIGlkZW50aWZpZXIpIHsKKyAgICAgICAgdmFyIGZv
dW5kID0gZmFsc2U7CisKKyAgICAgICAgc2NvcGUudmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24o
dmFyaWFibGUpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSBpZGVudGlmaWVy
KSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKworICAgICAgICBzY29wZS5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24ocmVmZXJl
bmNlKSB7CisgICAgICAgICAgICBpZiAocmVmZXJlbmNlLmlkZW50aWZpZXIubmFtZSA9PT0gaWRl
bnRpZmllcikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBub3QgZm91bmQgdGhlIGlkZW50
aWZpZXIgaW4gdGhpcyBzY29wZSwgY2hlY2sgdGhlIHBhcmVudAorICAgICAgICAvLyBzY29wZS4K
KyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmICFmb3VuZCkgeworICAgICAgICAgICAgcmV0dXJu
IGZpbmRJZGVudGlmaWVyKHNjb3BlLnVwcGVyLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIC8vIEZldGNoIHRoZSBpbm5lcm1vc3Qgc2NvcGUuCisgICAgICAgICAgICB2YXIgc2Nv
cGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisKKyAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZp
bmQgdGhlIGlkZW50aWZpZXIgd2Fsa2luZyB1cCB0aGUgc2NvcGUsIHN0YXJ0aW5nCisgICAgICAg
ICAgICAvLyB3aXRoIHRoZSBpbm5lcm1vc3Qgc2NvcGUuCisgICAgICAgICAgICBpZiAoZmluZElk
ZW50aWZpZXIoc2NvcGUsIG5vZGUubGFiZWwubmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgaWRlbnRpZmllciB3aXRoIHNhbWUgbmFtZSBhcyBsYWJl
bC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0s
NzQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IERpc2FsbG93IExhYmVsZWQgU3RhdGVtZW50cworICogQGF1dGhvciBOaWNob2xhcyBDLiBa
YWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbGVkIHN0YXRlbWVudC4iKTsKKyAgICAg
ICAgfSwKKworICAgICAgICAiQnJlYWtTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIGlmIChub2RlLmxhYmVsKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWwgaW4gYnJlYWsgc3RhdGVtZW50LiIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgIH0sCisKKyAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50IjogZnVu
Y3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5sYWJlbCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGNvbnRpbnVl
IHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKworICAgIH07CisK
K307CisKK30se31dLDc1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYmxvY2tzIHdpdGggbm8gcmVhc29uIHRvIGV4
aXN0CisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHJldHVybiB7CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7
CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYW55IG9jY3VycmVuY2Ugb2YgQmxvY2tTdGF0ZW1l
bnQgPiBCbG9ja1N0YXRlbWVudCBvcgorICAgICAgICAgICAgLy8gUHJvZ3JhbSA+IEJsb2NrU3Rh
dGVtZW50CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5w
b3AoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IiB8
fCBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkJsb2NrIGlzIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBibG9jay4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDc2OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGRpc2FsbG93IGlmIGFzIHRoZSBvbmx5IHN0YXRtZW5ldCBpbiBhbiBlbHNlIGJsb2NrCisgKiBA
YXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7Cisg
ICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBh
bmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgICAgIHBhcmVu
dCA9IGFuY2VzdG9ycy5wb3AoKSwKKyAgICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2Vz
dG9ycy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0g
IkJsb2NrU3RhdGVtZW50IiAmJgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQuYm9keS5sZW5n
dGggPT09IDEgJiYgZ3JhbmRwYXJlbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJl
bnQudHlwZSA9PT0gIklmU3RhdGVtZW50IiAmJgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQg
PT09IGdyYW5kcGFyZW50LmFsdGVybmF0ZSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJVbmV4cGVjdGVkIGlmIGFzIHRoZSBvbmx5IHN0YXRlbWVudCBpbiBhbiBlbHNl
IGJsb2NrLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sNzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjcmVhdGlvbiBvZiBmdW5jdGlvbiBpbnNpZGUgYSBsb29wCisg
KiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVu
Y3Rpb24gY2hlY2tGb3JMb29wcyhub2RlKSB7CisgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250
ZXh0LmdldEFuY2VzdG9ycygpOworCisgICAgICAgIGlmIChhbmNlc3RvcnMuc29tZShmdW5jdGlv
bihhbmNlc3RvcikgeworICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yLnR5cGUgPT09ICJGb3JT
dGF0ZW1lbnQiIHx8IGFuY2VzdG9yLnR5cGUgPT09ICJXaGlsZVN0YXRlbWVudCIgfHwgYW5jZXN0
b3IudHlwZSA9PT0gIkRvV2hpbGVTdGF0ZW1lbnQiOworICAgICAgICB9KSkgeworICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IG1ha2UgZnVuY3Rpb25zIHdpdGhpbiBhIGxv
b3AiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBjaGVja0Zvckxvb3BzLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IGNoZWNrRm9yTG9vcHMKKyAgICB9OworfTsKKworfSx7fV0sNzg6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3Jj
ZSBncm91cGVkIHJlcXVpcmUgc3RhdGVtZW50cyBmb3IgTm9kZS5KUworICogQGF1dGhvciBSYXBo
YWVsIFBpZ3VsbGEKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIHRoZSBsaXN0IG9mIGJ1aWx0LWluIG1vZHVsZXMuCisgICAgICoKKyAgICAgKiBAcmV0dXJu
cyB7c3RyaW5nW119IEFuIGFycmF5IG9mIGJ1aWx0LWluIE5vZGUuanMgbW9kdWxlcy4KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBnZXRCdWlsdGluTW9kdWxlcygpIHsKKyAgICAgICAgLy8gVGhpcyBs
aXN0IGlzIGdlbmVyYXRlZCB1c2luZyBgcmVxdWlyZSgicmVwbCIpLl9idWlsdGluTGlicy5jb25j
YXQoJ3JlcGwnKS5zb3J0KClgCisgICAgICAgIC8vIFRoaXMgcGFydGljdWxhciBsaXN0IHdhcyBn
ZW5lcmF0ZWQgdXNpbmcgbm9kZSB2MC4xMS45CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAg
ICAiYXNzZXJ0IiwgImJ1ZmZlciIsICJjaGlsZF9wcm9jZXNzIiwgImNsdXN0ZXIiLCAiY3J5cHRv
IiwKKyAgICAgICAgICAgICJkZ3JhbSIsICJkbnMiLCAiZG9tYWluIiwgImV2ZW50cyIsICJmcyIs
ICJodHRwIiwgImh0dHBzIiwKKyAgICAgICAgICAgICJuZXQiLCAib3MiLCAicGF0aCIsICJwdW55
Y29kZSIsICJxdWVyeXN0cmluZyIsICJyZWFkbGluZSIsCisgICAgICAgICAgICAicmVwbCIsICJz
bWFsbG9jIiwgInN0cmVhbSIsICJzdHJpbmdfZGVjb2RlciIsICJ0bHMiLCAidHR5IiwKKyAgICAg
ICAgICAgICJ1cmwiLCAidXRpbCIsICJ2bSIsICJ6bGliIgorICAgICAgICBdOworICAgIH0KKwor
ICAgIHZhciBCVUlMVElOX01PRFVMRVMgPSBnZXRCdWlsdGluTW9kdWxlcygpOworCisgICAgdmFy
IERFQ0xfUkVRVUlSRSA9ICJyZXF1aXJlIiwKKyAgICAgICAgREVDTF9VTklOSVRJQUxJWkVEID0g
InVuaW5pdGlhbGl6ZWQiLAorICAgICAgICBERUNMX09USEVSID0gIm90aGVyIjsKKworICAgIHZh
ciBSRVFfQ09SRSA9ICJjb3JlIiwKKyAgICAgICAgUkVRX0ZJTEUgPSAiZmlsZSIsCisgICAgICAg
IFJFUV9NT0RVTEUgPSAibW9kdWxlIiwKKyAgICAgICAgUkVRX0NPTVBVVEVEID0gImNvbXB1dGVk
IjsKKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgYSBkZWNsYXJhdGlv
biBzdGF0ZW1lbnQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0RXhwcmVzc2lvbiBUaGUg
aW5pdCBub2RlIG9mIHRoZSBWYXJpYWJsZURlY2xhcmF0b3IuCisgICAgICogQHJldHVybnMge3N0
cmluZ30gVGhlIHR5cGUgb2YgZGVjbGFyYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIGV4cHJlc3Np
b24uCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25UeXBlKGluaXRFeHByZXNz
aW9uKSB7CisgICAgICAgIGlmICghaW5pdEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIC8vICJ2
YXIgeDsiCisgICAgICAgICAgICByZXR1cm4gREVDTF9VTklOSVRJQUxJWkVEOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGluaXRFeHByZXNzaW9uLnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIg
JiYKKyAgICAgICAgICAgIGluaXRFeHByZXNzaW9uLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmll
ciIgJiYKKyAgICAgICAgICAgIGluaXRFeHByZXNzaW9uLmNhbGxlZS5uYW1lID09PSAicmVxdWly
ZSIKKyAgICAgICAgKSB7CisgICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCd1dGlsJyk7
IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xfUkVRVUlSRTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bml0RXhwcmVzc2lvbi50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAg
IC8vICJ2YXIgeCA9IHJlcXVpcmUoJ2dsb2InKS5HbG9iOyIKKyAgICAgICAgICAgIHJldHVybiBn
ZXREZWNsYXJhdGlvblR5cGUoaW5pdEV4cHJlc3Npb24ub2JqZWN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vICJ2YXIgeCA9IDQyOyIKKyAgICAgICAgcmV0dXJuIERFQ0xfT1RIRVI7CisgICAg
fQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBtb2R1bGUgdGhhdCBp
cyBsb2FkZWQgdmlhIHJlcXVpcmUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0RXhwcmVz
c2lvbiBUaGUgaW5pdCBub2RlIG9mIHRoZSBWYXJpYWJsZURlY2xhcmF0b3IuCisgICAgICogQHJl
dHVybnMge3N0cmluZ30gVGhlIG1vZHVsZSB0eXBlLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlu
ZmVyTW9kdWxlVHlwZShpbml0RXhwcmVzc2lvbikgeworICAgICAgICBpZiAoaW5pdEV4cHJlc3Np
b24udHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAvLyAidmFyIHgg
PSByZXF1aXJlKCdnbG9iJykuR2xvYjsiCisgICAgICAgICAgICByZXR1cm4gaW5mZXJNb2R1bGVU
eXBlKGluaXRFeHByZXNzaW9uLm9iamVjdCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdEV4cHJl
c3Npb25bImFyZ3VtZW50cyJdLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgLy8gInZhciB4
ID0gcmVxdWlyZSgpOyIKKyAgICAgICAgICAgIHJldHVybiBSRVFfQ09NUFVURUQ7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgYXJnID0gaW5pdEV4cHJlc3Npb25bImFyZ3VtZW50cyJdWzBdOwor
CisgICAgICAgIGlmIChhcmcudHlwZSAhPT0gIkxpdGVyYWwiIHx8IHR5cGVvZiBhcmcudmFsdWUg
IT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKDQyKTsiCisg
ICAgICAgICAgICByZXR1cm4gUkVRX0NPTVBVVEVEOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KEJVSUxUSU5fTU9EVUxFUy5pbmRleE9mKGFyZy52YWx1ZSkgIT09IC0xKSB7CisgICAgICAgICAg
ICAvLyAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0NP
UkU7CisgICAgICAgIH0gZWxzZSBpZiAoL15cLnswLDJ9XC8vLnRlc3QoYXJnLnZhbHVlKSkgewor
ICAgICAgICAgICAgLy8gInZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsiCisgICAgICAg
ICAgICByZXR1cm4gUkVRX0ZJTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAi
dmFyIGFzeW5jID0gcmVxdWlyZSgnYXN5bmMnKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX01P
RFVMRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBs
aXN0IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpcyBtaXhlZCwgaS5lLiB3aGV0aGVyIGl0Cisg
ICAgICogY29udGFpbnMgYm90aCByZXF1aXJlIGFuZCBvdGhlciBkZWNsYXJhdGlvbnMuCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBkZWNsYXJhdGlvbnMgVGhlIGxpc3Qgb2YgVmFyaWFibGVEZWNs
YXJhdG9ycy4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZGVjbGFyYXRp
b25zIGFyZSBtaXhlZCwgZmFsc2UgaWYgbm90LgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTWl4
ZWQoZGVjbGFyYXRpb25zKSB7CisgICAgICAgIHZhciBjb250YWlucyA9IHt9OworCisgICAgICAg
IGRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgeworICAgICAgICAg
ICAgdmFyIHR5cGUgPSBnZXREZWNsYXJhdGlvblR5cGUoZGVjbGFyYXRpb24uaW5pdCk7CisgICAg
ICAgICAgICBjb250YWluc1t0eXBlXSA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJl
dHVybiAhISgKKyAgICAgICAgICAgIGNvbnRhaW5zW0RFQ0xfUkVRVUlSRV0gJiYKKyAgICAgICAg
ICAgIChjb250YWluc1tERUNMX1VOSU5JVElBTElaRURdIHx8IGNvbnRhaW5zW0RFQ0xfT1RIRVJd
KQorICAgICAgICApOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIGFsbCByZXF1
aXJlIGRlY2xhcmF0aW9ucyBpbiB0aGUgZ2l2ZW4gbGlzdCBhcmUgb2YgdGhlIHNhbWUKKyAgICAg
KiB0eXBlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25zIFRoZSBsaXN0IG9m
IFZhcmlhYmxlRGVjbGFyYXRvcnMuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYg
dGhlIGRlY2xhcmF0aW9ucyBhcmUgZ3JvdXBlZCwgZmFsc2UgaWYgbm90LgorICAgICAqLworICAg
IGZ1bmN0aW9uIGlzR3JvdXBlZChkZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgdmFyIGZvdW5kID0g
e307CisKKyAgICAgICAgZGVjbGFyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGRlY2xhcmF0aW9u
KSB7CisgICAgICAgICAgICBpZiAoZ2V0RGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uLmluaXQp
ID09PSBERUNMX1JFUVVJUkUpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFtpbmZlck1vZHVsZVR5
cGUoZGVjbGFyYXRpb24uaW5pdCldID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvdW5kKS5sZW5ndGggPD0gMTsKKyAgICB9
CisKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgZ3JvdXBpbmcgPSAhIWNvbnRleHQub3B0aW9u
c1swXTsKKworICAgICAgICAgICAgaWYgKGlzTWl4ZWQobm9kZS5kZWNsYXJhdGlvbnMpKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICJEbyBub3QgbWl4ICdyZXF1aXJlJyBhbmQgb3RoZXIgZGVj
bGFyYXRpb25zLiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIGlmIChn
cm91cGluZyAmJiAhaXNHcm91cGVkKG5vZGUuZGVjbGFyYXRpb25zKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAg
ICAgICAgICAgICAiRG8gbm90IG1peCBjb3JlLCBtb2R1bGUsIGZpbGUgYW5kIGNvbXB1dGVkIHJl
cXVpcmVzLiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sNzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IG1peGVkIHNwYWNlcyBhbmQgdGFicyBm
b3IgaW5kZW50YXRpb24KKyAqIEBhdXRob3IgSmFyeSBOaWVidXIKKyAqIEBjb3B5cmlnaHQgMjAx
NCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEBjb3B5cmlnaHQg
MjAxNCBKYXJ5IE5pZWJ1ci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIHZhciBzbWFydFRhYnMgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICB2YXIgQ09N
TUVOVF9TVEFSVCA9IC9eXHMqXC9cKi8sCisgICAgICAgIE1BWUJFX0NPTU1FTlQgPSAvXlxzKlwq
LzsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEF0IGxlYXN0IG9uZSBz
cGFjZSBmb2xsb3dlZCBieSBhIHRhYgorICAgICAgICAgICAgICogb3IgdGhlIHJldmVyc2UgYmVm
b3JlIG5vbi10YWIvLXNwYWNlCisgICAgICAgICAgICAgKiBjaGFyYWN0ZXJzIGJlZ2luLgorICAg
ICAgICAgICAgICovCisgICAgICAgICAgICB2YXIgcmVnZXggPSAvXig/PVtcdCBdKihcdCB8IFx0
KSkvLAorICAgICAgICAgICAgICAgIG1hdGNoLAorICAgICAgICAgICAgICAgIGxpbmVzID0gY29u
dGV4dC5nZXRTb3VyY2VMaW5lcygpOworCisgICAgICAgICAgICBpZiAoc21hcnRUYWJzKSB7Cisg
ICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBdCBsZWFzdCBvbmUgc3BhY2Ug
Zm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAgICAgICAgICAgKiBiZWZvcmUgbm9uLXRhYi8tc3Bh
Y2UgY2hhcmFjdGVycyBiZWdpbi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg
ICByZWdleCA9IC9eKD89W1x0IF0qIFx0KS87CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSwgaSkgeworICAgICAgICAgICAgICAgIG1hdGNo
ID0gcmVnZXguZXhlYyhsaW5lKTsKKworICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgeworCisg
ICAgICAgICAgICAgICAgICAgIGlmICghTUFZQkVfQ09NTUVOVC50ZXN0KGxpbmUpICYmICFDT01N
RU5UX1NUQVJULnRlc3QobGluZXNbaSAtIDFdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29sdW1uOiBtYXRjaC5pbmRleCAr
IDEgfSwgIk1peGVkIHNwYWNlcyBhbmQgdGFicy4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIH07
CisKK307CisKK30se31dLDgwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB1c2Ugb2YgbXVsdGlwbGUgc3BhY2VzLgorICog
QGF1dGhvciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4uCisgKiBAY29weXJpZ2h0IDIw
MTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIHZhciBPUEVSQVRPUlMgPSBbCisgICAgICAgICIqIiwgIi8iLCAiJSIsICIrIiwgIi0i
LCAiPDwiLCAiPj4iLCAiPj4+IiwgIjwiLCAiPD0iLCAiPiIsICI+PSIsICJpbiIsCisgICAgICAg
ICJpbnN0YW5jZW9mIiwgIj09IiwgIiE9IiwgIj09PSIsICIhPT0iLCAiJiIsICJeIiwgInwiLCAi
JiYiLCAifHwiLCAiPSIsCisgICAgICAgICIrPSIsICItPSIsICIqPSIsICIvPSIsICIlPSIsICI8
PD0iLCAiPj49IiwgIj4+Pj0iLCAiJj0iLCAiXj0iLCAifD0iLAorICAgICAgICAiPyIsICI6Iiwg
IiwiCisgICAgXSwgZXJyT3BzID0gW107CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIFJl
cG9ydHMgYW4gQVNUIG5vZGUgYXMgYSBydWxlIHZpb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVwb3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk11bHRpcGxlIHNwYWNlcyBmb3VuZCBhcm91bmQg
JyIgKyBlcnJPcHMuc2hpZnQoKSArICInLiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENo
ZWNrcyB3aGV0aGVyIHRoZSBvcGVyYXRvciBpcyBpbiBzYW1lIGxpbmUgYXMgdHdvIGFkamFjZW50
IHRva2Vucy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIHRva2VuIGxlZnQgdG8g
dGhlIG9wZXJhdG9yLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHRva2VuIHJp
Z2h0IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRo
ZSBvcGVyYXRvci4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgb3BlcmF0
b3IgaXMgaW4gc2FtZSBsaW5lIGFzIHR3byBhZGphY2VudCB0b2tlbnMuCisgICAgICogQHByaXZh
dGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0LCBvcGVyYXRv
cikgeworICAgICAgICByZXR1cm4gb3BlcmF0b3IubG9jLmVuZC5saW5lID09PSBsZWZ0LmxvYy5l
bmQubGluZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubG9jLmVuZC5saW5l
ID09PSByaWdodC5sb2Muc3RhcnQubGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVj
ayB3aGV0aGVyIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYXJvdW5kIHRoZSBvcGVyYXRvci4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIHRva2VuIGxlZnQgdG8gdGhlIG9wZXJh
dG9yLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHRva2VuIHJpZ2h0IHRvIHRo
ZSBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBvcGVyYXRv
ci4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGVyZSBhcmUgbXVsdGlwbGUg
c3BhY2VzLgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNNdWx0aVNw
YWNlZChsZWZ0LCByaWdodCwgb3BlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLnJh
bmdlWzBdIC0gbGVmdC5yYW5nZVsxXSA+IDEgfHwKKyAgICAgICAgICAgICAgICByaWdodC5yYW5n
ZVswXSAtIG9wZXJhdG9yLnJhbmdlWzFdID4gMTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBH
ZXQgdG9rZW5zIGFuZCB2YWxpZGF0ZSB0aGUgc3BhY2luZy4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IGxlZnQgVGhlIHRva2VuIGxlZnQgdG8gdGhlIG9wZXJhdG9yLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gcmlnaHQgVGhlIHRva2VuIHJpZ2h0IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBtdWx0aXBsZSBzcGFjZXMgd2VyZSBmb3VuZC4KKyAg
ICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3BhY2luZyhsZWZ0
LCByaWdodCkgeworICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMoe3Jhbmdl
OiBbbGVmdC5yYW5nZVsxXSwgcmlnaHQucmFuZ2VbMF1dfSwgMSwgMSksCisgICAgICAgICAgICBv
cGVyYXRvcjsKKworICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5ndGggLSAx
OyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBsZWZ0ID0gdG9rZW5zW2kgLSAxXTsKKyAgICAg
ICAgICAgIG9wZXJhdG9yID0gdG9rZW5zW2ldOworICAgICAgICAgICAgcmlnaHQgPSB0b2tlbnNb
aSArIDFdOworCisgICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IudHlwZSA9PT0g
IlB1bmN0dWF0b3IiICYmIE9QRVJBVE9SUy5pbmRleE9mKG9wZXJhdG9yLnZhbHVlKSA+PSAwICYm
CisgICAgICAgICAgICAgICAgaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpICYmIGlz
TXVsdGlTcGFjZWQobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSkgeworICAgICAgICAgICAgICAgIGVy
ck9wcy5wdXNoKG9wZXJhdG9yLnZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKworICAgIC8qKgorICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2Vz
IG9uIHRoZSBleHByZXNzaW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9k
ZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGNoZWNrRXhwcmVzc2lvbihub2RlKSB7CisgICAgICAgIGlmICh2
YWxpZGF0ZVNwYWNpbmcobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KSkgeworICAgICAgICAgICAgcmVw
b3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0IGlm
IHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYXJvdW5kIGNvbmRpdGlvbmFsIHRlcm5hcnkgb3Bl
cmF0b3JzLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1
bmN0aW9uIGNoZWNrQ29uZGl0aW9uYWwobm9kZSkgeworICAgICAgICBpZiAodmFsaWRhdGVTcGFj
aW5nKG5vZGUudGVzdCwgbm9kZS5jb25zZXF1ZW50KSkgeworICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOworICAgICAgICB9CisgICAgICAgIGlmICh2YWxpZGF0ZVNwYWNpbmcobm9kZS5jb25zZXF1
ZW50LCBub2RlLmFsdGVybmF0ZSkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlw
bGUgc3BhY2VzIGFyb3VuZCBlcXVhbCBvcGVyYXRvciBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbi4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAgICog
QHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja1Zhcihub2RlKSB7CisgICAgICAgIGlmIChub2RlLmluaXQgJiYgdmFsaWRhdGVTcGFjaW5n
KG5vZGUuaWQsIG5vZGUuaW5pdCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlw
bGUgc3BhY2VzIGFyb3VuZCBsaXN0IG9mIGl0ZW1zIGluIG9iamVjdHMsIGFycmF5cywKKyAgICAg
KiBmdW5jdGlvbiBwYXJhbWV0ZXJzLCBzZXF1ZW5jZXMgYW5kIGRlY2xhcmF0aW9ucy4KKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBvZiBub2RlLgorICAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tMaXN0
KG5vZGUsIHByb3BlcnR5KSB7CisgICAgICAgIHZhciBpdGVtcyA9IG5vZGVbcHJvcGVydHldOwor
CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgbGVmdCA9IGl0ZW1zW2kgLSAxXSwKKyAgICAgICAgICAgICAgICBy
aWdodCA9IGl0ZW1zW2ldLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gY29udGV4dC5nZXRU
b2tlbkJlZm9yZShyaWdodCk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRv
ci50eXBlID09PSAiUHVuY3R1YXRvciIgJiYgb3BlcmF0b3IudmFsdWUgPT09ICIsIikgeworICAg
ICAgICAgICAgICAgIGlmIChpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikgJiYgaXNN
dWx0aVNwYWNlZChsZWZ0LCByaWdodCwgb3BlcmF0b3IpKSB7CisgICAgICAgICAgICAgICAgICAg
IGVyck9wcy5wdXNoKG9wZXJhdG9yLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0
KHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNz
aW9uIjogY2hlY2tFeHByZXNzaW9uLAorICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGNoZWNr
RXhwcmVzc2lvbiwKKyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogY2hlY2tFeHByZXNzaW9u
LAorICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tDb25kaXRpb25hbCwKKyAg
ICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNrVmFyLAorICAgICAgICAiQXJyYXlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tMaXN0KG5vZGUsICJl
bGVtZW50cyIpOworICAgICAgICB9LAorICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAicHJvcGVydGllcyIpOwor
ICAgICAgICB9LAorICAgICAgICAiU2VxdWVuY2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgY2hlY2tMaXN0KG5vZGUsICJleHByZXNzaW9ucyIpOworICAgICAgICB9
LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgY2hlY2tMaXN0KG5vZGUsICJwYXJhbXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1
bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0xp
c3Qobm9kZSwgInBhcmFtcyIpOworICAgICAgICB9LAorICAgICAgICAiVmFyaWFibGVEZWNsYXJh
dGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZGVj
bGFyYXRpb25zIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHdoZW4gdXNpbmcgbXVsdGlsaW5lIHN0cmluZ3MKKyAqIEBhdXRob3IgSWx5YSBWb2xv
ZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0
ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBsaW5lQnJlYWsgPSAvXG4v
OworICAgICAgICAgICAgaWYgKGxpbmVCcmVhay50ZXN0KG5vZGUucmF3KSkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNdWx0aWxpbmUgc3VwcG9ydCBpcyBsaW1pdGVk
IHRvIGJyb3dzZXJzIHN1cHBvcnRpbmcgRVM1IG9ubHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG11bHRpcGxlIGJsYW5r
IGxpbmVzLgorICogaW1wbGVtZW50YXRpb24gYWRhcHRlZCBmcm9tIHRoZSBuby10cmFpbGluZy1z
cGFjZXMgcnVsZS4KKyAqIEBhdXRob3IgR3JlZyBDb2NoYXJkCisgKiBAY29weXJpZ2h0IDIwMTQg
R3JlZyBDb2NoYXJkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgLy8gVXNlIG9wdGlvbnMubWF4IG9yIDIgYXMgZGVmYXVsdAorICAgIHZhciBudW1MaW5lcyA9
IDI7CisKKyAgICBpZiAoY29udGV4dC5vcHRpb25zLmxlbmd0aCkgeworICAgICAgICBudW1MaW5l
cyA9IGNvbnRleHQub3B0aW9uc1swXS5tYXg7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbiBjaGVja0JsYW5rTGluZXMobm9kZSkg
eworICAgICAgICAgICAgdmFyIGxpbmVzID0gY29udGV4dC5nZXRTb3VyY2VMaW5lcygpLAorICAg
ICAgICAgICAgICAgIGN1cnJlbnRMb2NhdGlvbiA9IC0xLAorICAgICAgICAgICAgICAgIGxhc3RM
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICBibGFua0NvdW50ZXIgPSAwLAorICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgIHRyaW1tZWRMaW5lcyA9IGxpbmVzLm1hcChm
dW5jdGlvbihzdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci50cmltKCk7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSBhbmQgY291bnQg
YmxhbmsgbGluZXMKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBsYXN0TG9jYXRp
b24gPSBjdXJyZW50TG9jYXRpb247CisgICAgICAgICAgICAgICAgY3VycmVudExvY2F0aW9uID0g
dHJpbW1lZExpbmVzLmluZGV4T2YoIiIsY3VycmVudExvY2F0aW9uICsgMSk7CisgICAgICAgICAg
ICAgICAgaWYgKGxhc3RMb2NhdGlvbiA9PT0gY3VycmVudExvY2F0aW9uIC0gMSkgeworICAgICAg
ICAgICAgICAgICAgICBibGFua0NvdW50ZXIrKzsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmxhbmtDb3VudGVyID49IG51bUxpbmVzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBsYXN0TG9jYXRpb24gKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogbGluZXNbbGFzdExvY2F0aW9uXS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2Nh
dGlvbiwgIk11bHRpcGxlIGJsYW5rIGxpbmVzIG5vdCBhbGxvd2VkLiIpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxseSwgcmVzZXQgdGhlIGJs
YW5rIGNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyID0gMDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50TG9jYXRpb24gIT09IC0x
KTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDgzOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hl
biByZS1hc3NpZ25pbmcgbmF0aXZlIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbmF0aXZlT2JqZWN0cyA9IFsiQXJyYXki
LCAiQm9vbGVhbiIsICJEYXRlIiwgImRlY29kZVVSSSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVjb2RlVVJJQ29tcG9uZW50IiwgImVuY29kZVVSSSIsICJlbmNvZGVVUklDb21wb25lbnQi
LAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwgImV2YWwiLCAiRXZhbEVycm9yIiwg
IkZ1bmN0aW9uIiwgImlzRmluaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpc05hTiIs
ICJKU09OIiwgIk1hdGgiLCAiTnVtYmVyIiwgIk9iamVjdCIsICJwYXJzZUludCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAicGFyc2VGbG9hdCIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVy
cm9yIiwgIlJlZ0V4cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIiwgIlN5bnRh
eEVycm9yIiwgIlR5cGVFcnJvciIsICJVUklFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiTWFwIiwgIk5hTiIsICJTZXQiLCAiV2Vha01hcCIsICJJbmZpbml0eSIsICJ1bmRlZmluZWQi
XTsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2Rl
LmxlZnQubmFtZSkgPj0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IG5vZGUubGVmdC5uYW1lICsgIiBpcyBhIHJlYWQtb25seSBuYXRpdmUgb2JqZWN0LiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobmF0aXZlT2JqZWN0cy5pbmRleE9mKG5v
ZGUuaWQubmFtZSkgPj0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJSZWRlZmluaXRpb24gb2YgJ3t7bmF0aXZlT2JqZWN0fX0nLiIsIHsgbmF0aXZlT2JqZWN0OiBu
b2RlLmlkLm5hbWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9Owor
Cit9LHt9XSw4NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgQSBydWxlIHRvIGRpc2FsbG93IG5lZ2F0ZWQgbGVmdCBvcGVyYW5kcyBvZiB0
aGUgYGluYCBvcGVyYXRvcgorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImlu
IiAmJiBub2RlLmxlZnQudHlwZSA9PT0gIlVuYXJ5RXhwcmVzc2lvbiIgJiYgbm9kZS5sZWZ0Lm9w
ZXJhdG9yID09PSAiISIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VGhlIGBpbmAgZXhwcmVzc2lvbidzIGxlZnQgb3BlcmFuZCBpcyBuZWdhdGVkIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4NTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IG5lc3RlZCB0ZXJuYXJ5IGV4cHJlc3Npb25zCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXll
cnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJDb25k
aXRpb25hbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5hbHRlcm5hdGUudHlwZSA9PT0gIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIgfHwKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5jb25zZXF1ZW50LnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Np
b24iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCBuZXN0
IHRlcm5hcnkgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
Cit9OworCit9LHt9XSw4NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgbmV3IEZ1bmN0aW9uCisg
KiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0
dXJuIHsKKworICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLmNhbGxlZS5uYW1lID09PSAiRnVuY3Rpb24iKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBl
dmFsLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
ODc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IEEgcnVsZSB0byBkaXNhbGxvdyBjYWxscyB0byB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yCisg
KiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tLz4KKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9
PT0gIk9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhl
IG9iamVjdCBsaXRlcmFsIG5vdGF0aW9uIHt9IGlzIHByZWZlcnJhYmxlLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODg6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxs
b3cgdXNlIG9mIG5ldyBvcGVyYXRvciB3aXRoIHRoZSBgcmVxdWlyZWAgZnVuY3Rpb24KKyAqIEBh
dXRob3IgV2lsIE1vb3JlIElJSQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUu
bmFtZSA9PT0gInJlcXVpcmUiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgdXNlIG9mIG5ldyB3aXRoIHJlcXVpcmUuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4OTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4g
dXNpbmcgY29uc3RydWN0b3IgZm9yIHdyYXBwZXIgb2JqZWN0cworICogQGF1dGhvciBJbHlhIFZv
bG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
Ik5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgd3JhcHBl
ck9iamVjdHMgPSBbIlN0cmluZyIsICJOdW1iZXIiLCAiQm9vbGVhbiIsICJNYXRoIiwgIkpTT04i
XTsKKyAgICAgICAgICAgIGlmICh3cmFwcGVyT2JqZWN0cy5pbmRleE9mKG5vZGUuY2FsbGVlLm5h
bWUpID4gLTEpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90
IHVzZSB7e2ZufX0gYXMgYSBjb25zdHJ1Y3Rvci4iLCB7IGZuOiBub2RlLmNhbGxlZS5uYW1lIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sOTA6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyBzdGF0ZW1lbnRzIHdpdGggZnVuY3Rpb24gaW52b2NhdGlvbiBwcmVjZWRlZCBi
eQorICogIm5ldyIgYW5kIG5vdCBwYXJ0IG9mIGFzc2lnbm1lbnQKKyAqIEBhdXRob3IgSWx5YSBW
b2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBp
ZiAobm9kZS5leHByZXNzaW9uLnR5cGUgPT09ICJOZXdFeHByZXNzaW9uIikgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgdXNlICduZXcnIGZvciBzaWRlIGVm
ZmVjdHMuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSw5MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhbiBvYmplY3QgcHJvcGVydHkgb2YgdGhlIGdsb2Jh
bCBvYmplY3QgKE1hdGggYW5kIEpTT04pIGFzIGEgZnVuY3Rpb24KKyAqIEBhdXRob3IgSmFtZXMg
QWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAg
ICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChu
b2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICB2YXIg
bmFtZSA9IG5vZGUuY2FsbGVlLm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJN
YXRoIiB8fCBuYW1lID09PSAiSlNPTiIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIid7e25hbWV9fScgaXMgbm90IGEgZnVuY3Rpb24uIiwgeyBuYW1lOiBuYW1l
IH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDkyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgb2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBp
biBzdHJpbmcgbGl0ZXJhbHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT09ICJz
dHJpbmciKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIG1hdGNoID0gbm9kZS5yYXcubWF0Y2goL14oW15cXF18XFxbXjAtN10pKlxcKFsw
LTddKS8pLAorICAgICAgICAgICAgICAgIG9jdGFsRGlnaXQ7CisKKyAgICAgICAgICAgIGlmICht
YXRjaCkgeworICAgICAgICAgICAgICAgIG9jdGFsRGlnaXQgPSBtYXRjaFsyXTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG9uJ3QgdXNlIG9jdGFsOiAnXFx7e29jdGFs
RGlnaXR9fScuIFVzZSAnXFx1Li4uLicgaW5zdGVhZC4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgeyBvY3RhbERpZ2l0OiBvY3RhbERpZ2l0IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICB9OworCit9OworCit9LHt9XSw5MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gaW5pdGlhbGl6
aW5nIG9jdGFsIGxpdGVyYWwKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAibnVtYmVyIiAm
JiAvXjBbMC03XS8udGVzdChub2RlLnJhdykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiT2N0YWwgbGl0ZXJhbHMgc2hvdWxkIG5vdCBiZSB1c2VkLiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sOTQ6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHN0
cmluZyBjb25jYXRlbmF0aW9uIHdoZW4gdXNpbmcgX19kaXJuYW1lIGFuZCBfX2ZpbGVuYW1lCisg
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
TUFUQ0hFUiA9IC9eX18oPzpkaXJ8ZmlsZSluYW1lJC87CisKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgdmFyIGxlZnQgPSBub2RlLmxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQgPSBu
b2RlLnJpZ2h0OworCisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gIisiICYmCisg
ICAgICAgICAgICAgICAgICAgICgobGVmdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYgTUFUQ0hF
Ui50ZXN0KGxlZnQubmFtZSkpIHx8CisgICAgICAgICAgICAgICAgICAgIChyaWdodC50eXBlID09
PSAiSWRlbnRpZmllciIgJiYgTUFUQ0hFUi50ZXN0KHJpZ2h0Lm5hbWUpKSkKKyAgICAgICAgICAg
ICkgeworCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSBwYXRoLmpv
aW4oKSBvciBwYXRoLnJlc29sdmUoKSBpbnN0ZWFkIG9mICsgdG8gY3JlYXRlIHBhdGhzLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw5NTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVzZSBvZiB1bmFyeSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvcGVyYXRvcnMu
CisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIlVwZGF0ZUV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5hcnkgb3BlcmF0b3Ig
JyIgKyBub2RlLm9wZXJhdG9yICsgIicgdXNlZC4iKTsKKyAgICAgICAgfQorCisgICAgfTsKKwor
fTsKKworfSx7fV0sOTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHRoZSB1c2Ugb2YgcHJvY2Vzcy5lbnYoKQorICogQGF1
dGhvciBWaWduZXNoIEFuYW5kCisgKiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2
YXIgb2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0Lm5hbWUsCisgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lOworCisgICAgICAgICAgICBpZiAob2JqZWN0TmFt
ZSA9PT0gInByb2Nlc3MiICYmICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9w
ZXJ0eU5hbWUgPT09ICJlbnYiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgdXNlIG9mIHByb2Nlc3MuZW52LiIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDk3OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9m
IHByb2Nlc3MuZXhpdCgpCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ug
c3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2FsbEV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxs
ZWU7CisKKyAgICAgICAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24i
ICYmIGNhbGxlZS5vYmplY3QubmFtZSA9PT0gInByb2Nlc3MiICYmCisgICAgICAgICAgICAgICAg
Y2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICJleGl0IgorICAgICAgICAgICAgKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBwcm9jZXNzLmV4aXQoKTsg
dGhyb3cgYW4gZXJyb3IgaW5zdGVhZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgfTsKKworfTsKKworfSx7fV0sOTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2FnZSBvZiBfX3Byb3RvX18g
cHJvcGVydHkKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgorICAgICAgICAgICAg
ICAgICAgICAobm9kZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9w
ZXJ0eS5uYW1lID09PSAiX19wcm90b19fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJv
cGVydHkudmFsdWUgPT09ICJfX3Byb3RvX18iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJUaGUgJ19fcHJvdG9fXycgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDk5OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgd2hlbiB0aGUgc2FtZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBtb3JlIHRoZW4gb25j
ZS4KKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICBmdW5jdGlvbiBmaW5kVmFyaWFibGVzKCkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0
LmdldFNjb3BlKCk7CisKKyAgICAgICAgc2NvcGUudmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24o
dmFyaWFibGUpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS5pZGVudGlmaWVycyAmJiB2YXJp
YWJsZS5pZGVudGlmaWVycy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUu
aWRlbnRpZmllcnMuc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhLnJhbmdlWzFdIC0gYi5yYW5nZVsxXTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gdmFyaWFibGUuaWRlbnRpZmllcnMubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHZh
cmlhYmxlLmlkZW50aWZpZXJzW2ldLCAie3thfX0gaXMgYWxyZWFkeSBkZWZpbmVkIiwge2E6IHZh
cmlhYmxlLm5hbWV9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlh
YmxlcywKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9
LHt9XSwxMDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gY291bnQgbXVsdGlwbGUgc3BhY2VzIGluIHJlZ3VsYXIgZXhwcmVz
c2lvbnMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20v
PgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0
ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IGNvbnRleHQu
Z2V0Rmlyc3RUb2tlbnMobm9kZSwgMSlbMF0sCisgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSB0
b2tlbi50eXBlLAorICAgICAgICAgICAgICAgIG5vZGVWYWx1ZSA9IHRva2VuLnZhbHVlLAorICAg
ICAgICAgICAgICAgIG11bHRpcGxlU3BhY2VzUmVnZXggPSAvKCB7Mix9KSs/LywKKyAgICAgICAg
ICAgICAgICByZWdleFJlc3VsdHM7CisKKyAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJl
Z3VsYXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHJlZ2V4UmVzdWx0cyA9IG11bHRp
cGxlU3BhY2VzUmVnZXguZXhlYyhub2RlVmFsdWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJl
Z2V4UmVzdWx0cyAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiU3BhY2VzIGFyZSBoYXJkIHRvIGNvdW50LiBVc2UgeyIgKyByZWdleFJlc3VsdHNb
MF0ubGVuZ3RoICsgIn0uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTAxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHJlc2Vy
dmVkIHdvcmRzIGJlaW5nIHVzZWQgYXMga2V5cworICogQGF1dGhvciBFbWlsIEJheQorICogQGNv
cHlyaWdodCAyMDE0IEVtaWwgQmF5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgdmFyIE1FU1NBR0UgPSAiUmVzZXJ2ZWQgd29yZCAne3trZXl9fScg
dXNlZCBhcyBrZXkuIjsKKworICAgIHZhciByZXNlcnZlZFdvcmRzID0gWworICAgICAgICAiYWJz
dHJhY3QiLAorICAgICAgICAiYm9vbGVhbiIsICJicmVhayIsICJieXRlIiwKKyAgICAgICAgImNh
c2UiLCAiY2F0Y2giLCAiY2hhciIsICJjbGFzcyIsICJjb25zdCIsICJjb250aW51ZSIsCisgICAg
ICAgICJkZWJ1Z2dlciIsICJkZWZhdWx0IiwgImRlbGV0ZSIsICJkbyIsICJkb3VibGUiLAorICAg
ICAgICAiZWxzZSIsICJlbnVtIiwgImV4cG9ydCIsICJleHRlbmRzIiwKKyAgICAgICAgImZpbmFs
IiwgImZpbmFsbHkiLCAiZmxvYXQiLCAiZm9yIiwgImZ1bmN0aW9uIiwKKyAgICAgICAgImdvdG8i
LAorICAgICAgICAiaWYiLCAiaW1wbGVtZW50cyIsICJpbXBvcnQiLCAiaW4iLCAiaW5zdGFuY2Vv
ZiIsICJpbnQiLCAiaW50ZXJmYWNlIiwKKyAgICAgICAgImxvbmciLAorICAgICAgICAibmF0aXZl
IiwgIm5ldyIsCisgICAgICAgICJwYWNrYWdlIiwgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgInB1
YmxpYyIsCisgICAgICAgICJyZXR1cm4iLAorICAgICAgICAic2hvcnQiLCAic3RhdGljIiwgInN1
cGVyIiwgInN3aXRjaCIsICJzeW5jaHJvbml6ZWQiLAorICAgICAgICAidGhpcyIsICJ0aHJvdyIs
ICJ0aHJvd3MiLCAidHJhbnNpZW50IiwgInRyeSIsICJ0eXBlb2YiLAorICAgICAgICAidmFyIiwg
InZvaWQiLCAidm9sYXRpbGUiLAorICAgICAgICAid2hpbGUiLCAid2l0aCIKKyAgICBdOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIG5vZGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5
KSB7CisKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09ICJJZGVudGlm
aWVyIikgeworICAgICAgICAgICAgICAgICAgICB2YXIga2V5TmFtZSA9IHByb3BlcnR5LmtleS5u
YW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZFdvcmRzLmluZGV4T2YoIiIg
KyBrZXlOYW1lKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsIE1FU1NBR0UsIHsga2V5OiBrZXlOYW1lIH0pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9KTsKKworICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sMTAyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXN0cmljdCB1c2FnZSBvZiBzcGVjaWZpZWQgbm9k
ZSBtb2R1bGVzLgorICogQGF1dGhvciBDaHJpc3RpYW4gU2NodWx6CisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkg
eworICAgIC8vIHRyaW0gcmVzdHJpY3RlZCBtb2R1bGUgbmFtZXMKKyAgICB2YXIgcmVzdHJpY3Rl
ZE1vZHVsZXMgPSBjb250ZXh0Lm9wdGlvbnM7CisKKyAgICAvLyBpZiBubyBtb2R1bGVzIGFyZSBy
ZXN0cmljdGVkIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIENhbGxFeHByZXNzaW9ucworICAg
IGlmIChyZXN0cmljdGVkTW9kdWxlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuIHt9
OworICAgIH0KKworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBp
cyBhIHN0cmluZyBsaXRlcmFsLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9k
ZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgdGhlIG5vZGUgaXMgYSBz
dHJpbmcgbGl0ZXJhbC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1N0cmluZyhub2RlKSB7Cisg
ICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBu
b2RlLnZhbHVlID09PSAic3RyaW5nIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlv
biB0byBjaGVjayBpZiBhIG5vZGUgaXMgYSByZXF1aXJlIGNhbGwuCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBJZiB0aGUgbm9kZSBpcyBhIHJlcXVpcmUgY2FsbC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c1JlcXVpcmVDYWxsKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUuY2FsbGVlLnR5cGUgPT09
ICJJZGVudGlmaWVyIiAmJiBub2RlLmNhbGxlZS5uYW1lID09PSAicmVxdWlyZSI7CisgICAgfQor
CisgICAgLyoqCisgICAgICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBub2RlIGhhcyBhbiBhcmd1
bWVudCB0aGF0IGlzIGFuIHJlc3RyaWN0ZWQgbW9kdWxlIGFuZCByZXR1cm4gaXRzIG5hbWUuCisg
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJl
dHVybnMge3VuZGVmaW5lZHxTdHJpbmd9IHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWUgb3IgdW5kZWZp
bmVkIGlmIG5vZGUgYXJndW1lbnQgaXNuJ3QgcmVzdHJpY3RlZC4KKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBnZXRSZXN0cmljdGVkTW9kdWxlTmFtZShub2RlKSB7CisgICAgICAgIHZhciBtb2R1bGVO
YW1lOworCisgICAgICAgIC8vIG5vZGUgaGFzIGFyZ3VtZW50cyBhbmQgZmlyc3QgYXJndW1lbnQg
aXMgc3RyaW5nCisgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggJiYgaXNTdHJpbmco
bm9kZS5hcmd1bWVudHNbMF0pKSB7CisgICAgICAgICAgICB2YXIgYXJndW1lbnRWYWx1ZSA9IG5v
ZGUuYXJndW1lbnRzWzBdLnZhbHVlLnRyaW0oKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgaWYg
YXJndW1lbnQgdmFsdWUgaXMgaW4gcmVzdHJpY3RlZCBtb2R1bGVzIGFycmF5CisgICAgICAgICAg
ICBpZiAocmVzdHJpY3RlZE1vZHVsZXMuaW5kZXhPZihhcmd1bWVudFZhbHVlKSAhPT0gLTEpIHsK
KyAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gYXJndW1lbnRWYWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtb2R1bGVOYW1lOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7Cisg
ICAgICAgICAgICBpZiAoaXNSZXF1aXJlQ2FsbChub2RlKSkgeworICAgICAgICAgICAgICAgIHZh
ciByZXN0cmljdGVkTW9kdWxlTmFtZSA9IGdldFJlc3RyaWN0ZWRNb2R1bGVOYW1lKG5vZGUpOwor
CisgICAgICAgICAgICAgICAgaWYgKHJlc3RyaWN0ZWRNb2R1bGVOYW1lKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICIne3ttb2R1bGVOYW1lfX0nIG1vZHVsZSBp
cyByZXN0cmljdGVkIGZyb20gYmVpbmcgdXNlZC4iLCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtb2R1bGVOYW1lOiByZXN0cmljdGVkTW9kdWxlTmFtZQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
fTsKKworfSx7fV0sMTAzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiByZXR1cm4gc3RhdGVtZW50IGNvbnRh
aW5zIGFzc2lnbm1lbnQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudCAmJiBub2RlLmFyZ3VtZW50LnR5
cGUgPT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiUmV0dXJuIHN0YXRlbWVudCBzaG91bGQgbm90IGNvbnRhaW4gYXNzaWdu
bWVudC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31d
LDEwNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgamF2YXNjcmlwdDogdXJscworICogQGF1dGhv
ciBJbHlhIFZvbG9kaW4KKyAqLworLypqc2hpbnQgc2NyaXB0dXJsOiB0cnVlICovCisvKmVzbGlu
dCBuby1zY3JpcHQtdXJsOiAwKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1
ZTsKKworICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUgJiYgdHlwZW9mKG5vZGUudmFsdWUpID09
PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZS50b0xvd2Vy
Q2FzZSgpOworCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoImphdmFzY3JpcHQ6
IikgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlNj
cmlwdCBVUkwgaXMgYSBmb3JtIG9mIGV2YWwuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTA1OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgY29tcGFyaXNvbiB3aGVyZSBsZWZ0IHBhcnQgaXMgdGhlIHNhbWUgYXMgdGhlIHJpZ2h0Cisg
KiBwYXJ0LgorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIG9wZXJhdG9ycyA9IFsiPT09IiwgIj09IiwgIiE9PSIsICIh
PSIsICI+IiwgIjwiLCAiPj0iLCAiPD0iXTsKKyAgICAgICAgICAgIGlmIChvcGVyYXRvcnMuaW5k
ZXhPZihub2RlLm9wZXJhdG9yKSA+IC0xICYmCisgICAgICAgICAgICAgICAgKG5vZGUubGVmdC50
eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiSWRlbnRpZmllciIg
JiYgbm9kZS5sZWZ0Lm5hbWUgPT09IG5vZGUucmlnaHQubmFtZSB8fAorICAgICAgICAgICAgICAg
IG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgbm9kZS5sZWZ0LnZhbHVlID09PSBub2RlLnJpZ2h0LnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJDb21wYXJpbmcgdG8gaXRzZWxmIGlzIHBv
dGVudGlhbGx5IHBvaW50bGVzcy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDEwNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb21tYSBvcGVyYXRvcgor
ICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAv
KioKKyAgICAgKiBQYXJ0cyBvZiB0aGUgZ3JhbW1hciB0aGF0IGFyZSByZXF1aXJlZCB0byBoYXZl
IHBhcmVucy4KKyAgICAgKi8KKyAgICB2YXIgcGFyZW50aGVzaXplZCA9IHsKKyAgICAgICAgIkRv
V2hpbGVTdGF0ZW1lbnQiOiAidGVzdCIsCisgICAgICAgICJJZlN0YXRlbWVudCI6ICJ0ZXN0IiwK
KyAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6ICJkaXNjcmltaW5hbnQiLAorICAgICAgICAiV2hp
bGVTdGF0ZW1lbnQiOiAidGVzdCIsCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogIm9iamVjdCIK
KworICAgICAgICAvLyBPbWl0dGluZyBDYWxsRXhwcmVzc2lvbiAtIGNvbW1hcyBhcmUgcGFyc2Vk
IGFzIGFyZ3VtZW50IHNlcGFyYXRvcnMKKyAgICAgICAgLy8gT21pdHRpbmcgTmV3RXhwcmVzc2lv
biAtIGNvbW1hcyBhcmUgcGFyc2VkIGFzIGFyZ3VtZW50IHNlcGFyYXRvcnMKKyAgICAgICAgLy8g
T21pdHRpbmcgRm9ySW5TdGF0ZW1lbnQgLSBwYXJ0cyBhcmVuJ3QgaW5kaXZpZHVhbGx5IHBhcmVu
dGhlc2lzZWQKKyAgICAgICAgLy8gT21pdHRpbmcgRm9yU3RhdGVtZW50IC0gcGFydHMgYXJlbid0
IGluZGl2aWR1YWxseSBwYXJlbnRoZXNpc2VkCisgICAgfTsKKworICAgIC8qKgorICAgICAqIERl
dGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgcmVxdWlyZWQgYnkgdGhlIGdyYW1tYXIgdG8gYmUg
d3JhcHBlZCBpbgorICAgICAqIHBhcmVucywgZS5nLiB0aGUgdGVzdCBvZiBhbiBpZiBzdGF0ZW1l
bnQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCisgICAgICog
QHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgcGFyZW5zIGFyb3VuZCBub2RlIGJlbG9uZyB0byBw
YXJlbnQgbm9kZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiByZXF1aXJlc0V4dHJhUGFyZW5zKG5v
ZGUpIHsKKyAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50ICYmIHBhcmVudGhlc2l6ZWRbbm9kZS5w
YXJlbnQudHlwZV0gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG5vZGUgPT09IG5vZGUucGFy
ZW50W3BhcmVudGhlc2l6ZWRbbm9kZS5wYXJlbnQudHlwZV1dOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrIGlmIGEgbm9kZSBpcyB3cmFwcGVkIGluIHBhcmVucy4KKyAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgQVNUIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gVHJ1ZSBpZiB0aGUgbm9kZSBoYXMgYSBwYXJlbiBvbiBlYWNoIHNpZGUuCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3Vz
VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAorICAgICAgICAgICAgbmV4dFRv
a2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworCisgICAgICAgIHJldHVybiBwcmV2
aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1
ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgor
ICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBd
ID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgYSBu
b2RlIGlzIHdyYXBwZWQgaW4gdHdvIGxldmVscyBvZiBwYXJlbnMuCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRy
dWUgaWYgdHdvIHBhcmVucyBzdXJyb3VuZCB0aGUgbm9kZSBvbiBlYWNoIHNpZGUuCisgICAgICov
CisgICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIg
cHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAg
ICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAg
ICAgcmV0dXJuIGlzUGFyZW50aGVzaXNlZChub2RlKSAmJiBwcmV2aW91c1Rva2VuICYmIG5leHRU
b2tlbiAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZp
b3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRv
a2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07
CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIC8vIEFsd2F5cyBhbGxvdyBzZXF1ZW5jZXMgaW4g
Zm9yIHN0YXRlbWVudCB1cGRhdGUKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlID09
PSAiRm9yU3RhdGVtZW50IiAmJgorICAgICAgICAgICAgICAgICAgICAobm9kZSA9PT0gbm9kZS5w
YXJlbnQuaW5pdCB8fCBub2RlID09PSBub2RlLnBhcmVudC51cGRhdGUpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXcmFwcGluZyBh
IHNlcXVlbmNlIGluIGV4dHJhIHBhcmVucyBpbmRpY2F0ZXMgaW50ZW50CisgICAgICAgICAgICBp
ZiAocmVxdWlyZXNFeHRyYVBhcmVucyhub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1Bh
cmVudGhlc2lzZWRUd2ljZShub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiBjb21tYSBvcGVyYXRvci4iKTsKKyAgICAg
ICAgfQorICAgIH07CisKK307CisKK30se31dLDEwNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgc2hhZG93aW5nIG9mIE5h
TiwgdW5kZWZpbmVkLCBhbmQgSW5maW5pdHkgKEVTNSBzZWN0aW9uIDE1LjEuMSkKKyAqIEBhdXRo
b3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgUkVTVFJJQ1RF
RCA9IFsidW5kZWZpbmVkIiwgIk5hTiIsICJJbmZpbml0eSIsICJhcmd1bWVudHMiLCAiZXZhbCJd
OworCisgICAgZnVuY3Rpb24gY2hlY2tGb3JWaW9sYXRpb24oaWQpIHsKKyAgICAgICAgaWYgKFJF
U1RSSUNURUQuaW5kZXhPZihpZC5uYW1lKSA+IC0xKSB7CisgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChpZCwgIlNoYWRvd2luZyBvZiBnbG9iYWwgcHJvcGVydHkgXCIiICsgaWQubmFtZSArICJc
Ii4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJWYXJpYWJs
ZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0ZvclZpb2xh
dGlvbihub2RlLmlkKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlkKSB7CisgICAgICAgICAg
ICAgICAgY2hlY2tGb3JWaW9sYXRpb24obm9kZS5pZCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBbXS5tYXAuY2FsbChub2RlLnBhcmFtcywgY2hlY2tGb3JWaW9sYXRpb24pOworICAgICAg
ICB9LAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOworICAgICAgICAgICAgW10ubWFw
LmNhbGwobm9kZS5wYXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgIkNhdGNoQ2xhdXNlIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JW
aW9sYXRpb24obm9kZS5wYXJhbSk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwx
MDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyBvbiBkZWNsYXJpbmcgdmFyaWFibGVzIGFscmVhZHkgZGVjbGFyZWQg
aW4gdGhlIG91dGVyIHNjb3BlCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgdmFyaWFibGUgaXMgY29u
dGFpbmVkIGluIHRoZSBsaXN0IG9mIGdpdmVuIHNjb3BlIHZhcmlhYmxlcy4KKyAgICAgKiBAcGFy
YW0ge09iamVjdH0gdmFyaWFibGUgVGhlIHZhcmlhYmxlIHRvIGNoZWNrLgorICAgICAqIEBwYXJh
bSB7QXJyYXl9IHNjb3BlVmFycyBUaGUgc2NvcGUgdmFyaWFibGVzIHRvIGxvb2sgZm9yLgorICAg
ICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgdmFyaWFibGUgaXMgY29u
dGFpbnMgaW4gdGhlIGxpc3Qgb2Ygc2NvcGUgdmFyaWFibGVzLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGlzQ29udGFpbmVkSW5TY29wZVZhcnModmFyaWFibGUsIHNjb3BlVmFycykgeworICAgICAg
ICByZXR1cm4gc2NvcGVWYXJzLnNvbWUoZnVuY3Rpb24gKHNjb3BlVmFyKSB7CisgICAgICAgICAg
ICBpZiAoc2NvcGVWYXIuaWRlbnRpZmllcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB2YXJpYWJsZS5uYW1lID09PSBzY29wZVZhci5uYW1lOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhcmlhYmxlcyBhcmUgc2hhZG93ZWQgaW4gdGhl
IGdpdmVuIHNjb3BlLgorICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhcmlhYmxlcyBUaGUgdmFyaWFi
bGVzIHRvIGxvb2sgZm9yCisgICAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFRoZSBzY29wZSB0
byBiZSBjaGVja2VkLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0
aW9uIGNoZWNrU2hhZG93c0luU2NvcGUodmFyaWFibGVzLCBzY29wZSkgeworICAgICAgICB2YXJp
YWJsZXMuZm9yRWFjaChmdW5jdGlvbiAodmFyaWFibGUpIHsKKyAgICAgICAgICAgIGlmIChpc0Nv
bnRhaW5lZEluU2NvcGVWYXJzKHZhcmlhYmxlLCBzY29wZS52YXJpYWJsZXMpKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQodmFyaWFibGUuaWRlbnRpZmllcnNbMF0sICJ7e2F9fSBp
cyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSB1cHBlciBzY29wZS4iLCB7YTogdmFyaWFibGUubmFt
ZX0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBGaWx0ZXJzIGFsbCB2YXJpYWJsZXMgb2YgYSBsaXN0IHdoaWNoIGFscmVhZHkgb2NjdXIgaW4g
YW5vdGhlciBsaXN0LgorICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhcmlhYmxlTGlzdEEgTGlzdCBv
ZiB2YXJpYWJsZXMgd2hpY2ggc2hvdWxkIGJlIGZpbHRlcmVkLgorICAgICAqIEBwYXJhbSB7QXJy
YXl9IHZhcmlhYmxlTGlzdEIgTGlzdCBvZiB2YXJpYWJsZXMgd2hpY2ggc2hvdWxkIG5vIG9jY3Vy
IGluIHZhcmlhYmxlTGlzdEEuCisgICAgICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBsaXN0
IG9mIHZhcmlhYmxlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBmaWx0ZXJWYXJpYWJsZUxpc3Qo
dmFyaWFibGVMaXN0QSwgdmFyaWFibGVMaXN0QikgeworICAgICAgICByZXR1cm4gdmFyaWFibGVM
aXN0QS5maWx0ZXIoZnVuY3Rpb24gKHZhcmlhYmxlQSkgeworICAgICAgICAgICAgcmV0dXJuICF2
YXJpYWJsZUxpc3RCLnNvbWUoZnVuY3Rpb24gKHZhcmlhYmxlQikgeworICAgICAgICAgICAgICAg
IHJldHVybiB2YXJpYWJsZUEubmFtZSA9PT0gdmFyaWFibGVCLm5hbWU7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBnaXZl
biBub2RlIGZvciBzaGFkb3dlZCB2YXJpYWJsZXMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBBU1Qgbm9kZSBvZiBhIEZ1bmN0aW9uRGVjbGFyYXRpb24gb3IgRnVuY3Rpb25FeHBy
ZXNzaW9uLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNo
ZWNrRm9yU2hhZG93cyhub2RlKSB7CisgICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2Nv
cGUoKSwKKyAgICAgICAgICAgIGFyZ3MgPSBub2RlLnBhcmFtcywKKyAgICAgICAgICAgIHZhcmlh
YmxlcyA9IGZpbHRlclZhcmlhYmxlTGlzdChzY29wZS52YXJpYWJsZXMsIGFyZ3MpOworCisgICAg
ICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdmFyaWFibGVzIGFuZCBmaW5kIGR1
cGxpY2F0ZXMgd2l0aCB0aGUgdXBwZXIgc2NvcGUKKyAgICAgICAgdmFyIHVwcGVyID0gc2NvcGUu
dXBwZXI7CisgICAgICAgIHdoaWxlICh1cHBlcikgeworICAgICAgICAgICAgY2hlY2tTaGFkb3dz
SW5TY29wZSh2YXJpYWJsZXMsIHVwcGVyKTsKKyAgICAgICAgICAgIHVwcGVyID0gdXBwZXIudXBw
ZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6IGNoZWNrRm9yU2hhZG93cywKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lv
biI6IGNoZWNrRm9yU2hhZG93cworICAgIH07CisKK307CisKK30se31dLDEwOTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBy
ZXF1aXJlIHZhcmlhYmxlcyBkZWNsYXJlZCB3aXRob3V0IHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBs
aW5lcyBzZW1pY29sb24KKyAqIEBhdXRob3IgSm9uYXRoYW4gS2luZ3N0b24KKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHZhciBzZW1pY29sb25XaGl0ZXNwYWNlID0gL1xzOyQvOworCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICB2YXIgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2Uobm9kZSk7Cisg
ICAgICAgICAgICBpZiAoc2VtaWNvbG9uV2hpdGVzcGFjZS50ZXN0KHNvdXJjZSkpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVmFyaWFibGUgZGVjbGFyZWQgd2l0aCB0
cmFpbGluZyB3aGl0ZXNwYWNlIGJlZm9yZSBzZW1pY29sb24iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICB2YXIgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2Uobm9kZSk7CisgICAg
ICAgICAgICBpZiAoc2VtaWNvbG9uV2hpdGVzcGFjZS50ZXN0KHNvdXJjZSkpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwcmVzc2lvbiBjYWxsZWQgd2l0aCB0cmFp
bGluZyB3aGl0ZXNwYWNlIGJlZm9yZSBzZW1pY29sb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07Cit9OworCit9LHt9XSwxMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hlY2sgdGhhdCBzcGFjZWQg
ZnVuY3Rpb24gYXBwbGljYXRpb24KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cu
bWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBk
ZXRlY3RPcGVuU3BhY2VzKG5vZGUpIHsKKyAgICAgICAgdmFyIGxhc3RDYWxsZWVUb2tlbiA9IGNv
bnRleHQuZ2V0TGFzdFRva2VuKG5vZGUuY2FsbGVlKTsKKyAgICAgICAgdmFyIHRva2VucyA9IGNv
bnRleHQuZ2V0VG9rZW5zKG5vZGUpOworICAgICAgICB2YXIgaSA9IHRva2Vucy5pbmRleE9mKGxh
c3RDYWxsZWVUb2tlbiksIGwgPSB0b2tlbnMubGVuZ3RoOworICAgICAgICB3aGlsZSAoaSA8IGwg
JiYgdG9rZW5zW2ldLnZhbHVlICE9PSAiKCIpIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaSA+PSBsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgLy8gbG9vayBmb3IgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjYWxsZWUgYW5kIHRoZSBv
cGVuIHBhcmVuCisgICAgICAgIGlmICh0b2tlbnNbaSAtIDFdLnJhbmdlWzFdICE9PSB0b2tlbnNb
aV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVj
dGVkIHNwYWNlIGJldHdlZW4gZnVuY3Rpb24gbmFtZSBhbmQgcGFyZW4uIik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBkZXRlY3RP
cGVuU3BhY2VzLAorICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGRldGVjdE9wZW5TcGFjZXMKKyAg
ICB9OworCit9OworCit9LHt9XSwxMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHNwYXJzZSBhcnJheXMKKyAqIEBhdXRo
b3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkFycmF5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KworICAgICAgICAgICAgdmFyIGVtcHR5U3BvdCA9IG5vZGUuZWxlbWVudHMuaW5kZXhPZihudWxs
KSA+IC0xOworCisgICAgICAgICAgICBpZiAoZW1wdHlTcG90KSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgY29tbWEgaW4gbWlkZGxlIG9mIGFycmF5
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwx
MTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gY2hlY2sgZm9yIHByb3BlcnRpZXMgd2hvc2UgaWRlbnRpZmllciBlbmRzIHdp
dGggdGhlIHN0cmluZyBTeW5jCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsPGh0dHA6Ly9tYXR0ZHV2
YWxsLmNvbS8+CisgKi8KKworLypqc2hpbnQgbm9kZTp0cnVlKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IG5vZGUucHJvcGVydHkubmFt
ZSwKKyAgICAgICAgICAgICAgICBzeW5jUmVnZXggPSAvLipTeW5jJC87CisKKyAgICAgICAgICAg
IGlmIChzeW5jUmVnZXguZXhlYyhwcm9wZXJ0eU5hbWUpICE9PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgc3luYyBtZXRob2Q6ICciICsg
cHJvcGVydHlOYW1lICsgIicuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdGVybmFyeSBvcGVyYXRvcnMu
CisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUZXJuYXJ5IG9w
ZXJhdG9yIHVzZWQuIik7CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDExNDpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
RGlzYWxsb3cgdHJhaWxpbmcgc3BhY2VzIGF0IHRoZSBlbmQgb2YgbGluZXMuCisgKiBAYXV0aG9y
IE5vZGVjYSBUZWFtIDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhPgorICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgdmFyIFRSQUlMRVIgPSAiWyBcdFx1MDBhMFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAw
M1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAwYlx1MjAyOFx1
MjAyOVx1MzAwMF0rJCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGlj
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJv
Z3JhbSI6IGZ1bmN0aW9uIGNoZWNrVHJhaWxpbmdTcGFjZXMobm9kZSkgeworCisgICAgICAgICAg
ICAvLyBMZXQncyBoYWNrLiBTaW5jZSBFc3ByaW1hIGRvZXMgbm90IHJldHVybiB3aGl0ZXNwYWNl
IG5vZGVzLAorICAgICAgICAgICAgLy8gZmV0Y2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkbyBibGFj
ayBtYWdpYyB2aWEgcmVnZXhwcy4KKworICAgICAgICAgICAgdmFyIHNyYyA9IGNvbnRleHQuZ2V0
U291cmNlKCksCisgICAgICAgICAgICAgICAgcmUgPSBuZXcgUmVnRXhwKFRSQUlMRVIsICJtZyIp
LAorICAgICAgICAgICAgICAgIG1hdGNoLCBsaW5lcywgbG9jYXRpb247CisKKyAgICAgICAgICAg
IHdoaWxlICgobWF0Y2ggPSByZS5leGVjKHNyYykpICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgbGluZXMgPSBzcmMuc2xpY2UoMCwgcmUubGFzdEluZGV4KS5zcGxpdCgvXHI/XG4vZyk7CisK
KyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTog
bGluZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGxpbmVzW2xpbmVzLmxl
bmd0aCAtIDFdLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aCArIDEKKyAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBub2RlIGlzIGEgYml0IGRpcnR5LCBiZWNh
dXNlIG1lc3NhZ2UgZGF0YSB3aWxsIGNvbnRhaW4KKyAgICAgICAgICAgICAgICAvLyBiaWcgdGV4
dCBpbiBgc291cmNlYC4gQnV0Li4uIHdobyBjYXJlcyA6KSA/CisgICAgICAgICAgICAgICAgLy8g
T25lIG1vcmUga2x1ZGdlIHdpbGwgbm90IG1ha2Ugd29yc2UgdGhlIGJsb29keSB3aXphcmRyeSBv
ZiB0aGlzIHBsdWdpbi4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2Nh
dGlvbiwgIlRyYWlsaW5nIHNwYWNlcyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgfTsKK307CisKK30se31dLDExNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gaW5p
dGlhbGl6aW5nIHRvIHVuZGVmaW5lZAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFy
YXRvciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gbm9kZS5pZC5u
YW1lOworICAgICAgICAgICAgdmFyIGluaXQgPSBub2RlLmluaXQgJiYgbm9kZS5pbml0Lm5hbWU7
CisKKyAgICAgICAgICAgIGlmIChpbml0ID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJdCdzIG5vdCBuZWNlc3NhcnkgdG8gaW5pdGlhbGl6
ZSAne3tuYW1lfX0nIHRvIHVuZGVmaW5lZC4iLCB7IG5hbWU6IG5hbWUgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMTY6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBy
ZWZlcmVuY2VzIHRvIHVuZGVjbGFyZWQgdmFyaWFibGVzLgorICogQGF1dGhvciBNYXJrIE1hY2Rv
bmFsZAorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBI
ZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBpc0ltcGxpY2l0R2xv
YmFsKHZhcmlhYmxlKSB7CisgICAgcmV0dXJuIHZhcmlhYmxlLmRlZnMuZXZlcnkoZnVuY3Rpb24o
ZGVmKSB7CisgICAgICAgIHJldHVybiBkZWYudHlwZSA9PT0gIkltcGxpY2l0R2xvYmFsVmFyaWFi
bGUiOworICAgIH0pOworfQorCisvKioKKyAqIEdldHMgdGhlIGRlY2xhcmVkIHZhcmlhYmxlLCBk
ZWZpbmVkIGluIGBzY29wZWAsIHRoYXQgYHJlZmAgcmVmZXJzIHRvLgorICogQHBhcmFtIHtTY29w
ZX0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIHNlYXJjaC4KKyAqIEBwYXJhbSB7UmVmZXJl
bmNlfSByZWYgVGhlIHJlZmVyZW5jZSB0byBmaW5kIGluIHRoZSBzY29wZS4KKyAqIEByZXR1cm5z
IHtWYXJpYWJsZX0gVGhlIHZhcmlhYmxlLCBvciBudWxsIGlmIHJlZiByZWZlcnMgdG8gYW4gdW5k
ZWNsYXJlZCB2YXJpYWJsZS4KKyAqLworZnVuY3Rpb24gZ2V0RGVjbGFyZWRHbG9iYWxWYXJpYWJs
ZShzY29wZSwgcmVmKSB7CisgICAgdmFyIGRlY2xhcmVkR2xvYmFsID0gbnVsbDsKKyAgICBzY29w
ZS52YXJpYWJsZXMuc29tZShmdW5jdGlvbih2YXJpYWJsZSkgeworICAgICAgICBpZiAodmFyaWFi
bGUubmFtZSA9PT0gcmVmLmlkZW50aWZpZXIubmFtZSkgeworICAgICAgICAgICAgLy8gSWYgaXQn
cyBhbiBpbXBsaWNpdCBnbG9iYWwsIGl0IG11c3QgaGF2ZSBhIGB3cml0ZWFibGVgIGZpZWxkIChp
bmRpY2F0aW5nIGl0IHdhcyBkZWNsYXJlZCkKKyAgICAgICAgICAgIGlmICghaXNJbXBsaWNpdEds
b2JhbCh2YXJpYWJsZSkgfHwge30uaGFzT3duUHJvcGVydHkuY2FsbCh2YXJpYWJsZSwgIndyaXRl
YWJsZSIpKSB7CisgICAgICAgICAgICAgICAgZGVjbGFyZWRHbG9iYWwgPSB2YXJpYWJsZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIGRlY2xhcmVkR2xvYmFsOwor
fQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbigvKm5vZGUqLykg
eworCisgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisK
KyAgICAgICAgICAgIGdsb2JhbFNjb3BlLnRocm91Z2guZm9yRWFjaChmdW5jdGlvbihyZWYpIHsK
KyAgICAgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXREZWNsYXJlZEdsb2JhbFZhcmlhYmxl
KGdsb2JhbFNjb3BlLCByZWYpLAorICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVmLmlkZW50
aWZpZXIubmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFtZX19JyBpcyBu
b3QgZGVmaW5lZC4iLCB7IG5hbWU6IG5hbWUgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChyZWYuaXNXcml0ZSgpICYmIHZhcmlhYmxlLndyaXRlYWJsZSA9PT0gZmFsc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocmVmLmlkZW50aWZpZXIsICIne3tuYW1lfX0n
IGlzIHJlYWQgb25seS4iLCB7IG5hbWU6IG5hbWUgfSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMTc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlZmluZWQgdmFyaWFibGUuCisgKiBAYXV0aG9y
IE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiSWRlbnRpZmllciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
Lm5hbWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNv
bnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQg
fHwgcGFyZW50LnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBub2RlICE9PSBwYXJlbnQu
cHJvcGVydHkgfHwgcGFyZW50LmNvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiB1bmRlZmluZWQuIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sMTE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgdHJhaWxpbmcgdW5kZXJzY29yZXMgaW4gdmFyaWFibGUgZGVj
bGFyYXRpb25zLgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxs
LmNvbT4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGhh
c1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSB7CisgICAgICAgIHZhciBsZW4gPSBpZGVu
dGlmaWVyLmxlbmd0aDsKKworICAgICAgICByZXR1cm4gaWRlbnRpZmllciAhPT0gIl8iICYmIChp
ZGVudGlmaWVyWzBdID09PSAiXyIgfHwgaWRlbnRpZmllcltsZW4gLSAxXSA9PT0gIl8iKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJl
c3Npb24oaWRlbnRpZmllcikgeworICAgICAgICByZXR1cm4gaWRlbnRpZmllciA9PT0gIl9fcHJv
dG9fXyI7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJJblZh
cmlhYmxlRXhwcmVzc2lvbihpZGVudGlmaWVyKSB7CisgICAgICAgIC8vIENoZWNrcyBmb3IgdGhl
IHVuZGVyc2NvcmUgbGlicmFyeSB1c2FnZSBoZXJlCisgICAgICAgIHJldHVybiBpZGVudGlmaWVy
ID09PSAiXyI7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2Nv
cmVJbkZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgeworICAgICAgICB2YXIgaWRlbnRpZmllciA9
IG5vZGUuaWQubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZpZXIgIT09ICJ1bmRl
ZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSkgeworICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18nIGluICciICsg
aWRlbnRpZmllciArICInLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJblZhcmlhYmxlRXhwcmVzc2lvbihub2RlKSB7CisgICAg
ICAgIHZhciBpZGVudGlmaWVyID0gbm9kZS5pZC5uYW1lOworCisgICAgICAgIGlmICh0eXBlb2Yg
aWRlbnRpZmllciAhPT0gInVuZGVmaW5lZCIgJiYgaGFzVHJhaWxpbmdVbmRlcnNjb3JlKGlkZW50
aWZpZXIpICYmCisgICAgICAgICAgICAhaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJJblZhcmlhYmxl
RXhwcmVzc2lvbihpZGVudGlmaWVyKSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciArICInLiIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2Nv
cmVJbk1lbWJlckV4cHJlc3Npb24obm9kZSkgeworICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5v
ZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZpZXIgIT09ICJ1
bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSAmJgorICAgICAg
ICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlmaWVyRm9yTWVtYmVyRXhwcmVzc2lvbihpZGVudGlm
aWVyKSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFu
Z2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciArICInLiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAg
ICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJblZh
cmlhYmxlRXhwcmVzc2lvbiwKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBjaGVja0ZvclRy
YWlsaW5nVW5kZXJzY29yZUluTWVtYmVyRXhwcmVzc2lvbgorICAgIH07CisKK307CisKK30se31d
LDExOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgQ2hlY2tzIGZvciB1bnJlYWNoYWJsZSBjb2RlIGR1ZSB0byByZXR1cm4sIHRocm93cywg
YnJlYWssIGFuZCBjb250aW51ZS4KKyAqIEBhdXRob3IgSm9lbCBGZWVuc3RyYQorICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJzCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisKK2Z1bmN0aW9uIHJlcG9ydChjb250ZXh0LCBub2RlLCB1bnJl
YWNoYWJsZVR5cGUpIHsKKyAgICB2YXIga2V5d29yZDsKKyAgICBzd2l0Y2ggKHVucmVhY2hhYmxl
VHlwZSkgeworICAgICAgICBjYXNlICJCcmVha1N0YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3
b3JkID0gImJyZWFrIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJDb250aW51
ZVN0YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gImNvbnRpbnVlIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgorICAgICAgICAgICAg
a2V5d29yZCA9ICJyZXR1cm4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlRo
cm93U3RhdGVtZW50IjoKKyAgICAgICAgICAgIGtleXdvcmQgPSAidGhyb3ciOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJGb3VuZCB1bmV4cGVjdGVkIHN0YXRlbWVudCBhZnRl
ciBhIHt7dHlwZX19LiIsIHsgdHlwZToga2V5d29yZCB9KTsKK30KKworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8qKgorICAgICAq
IENoZWNrcyBpZiBhIG5vZGUgaXMgYW4gZXhjZXB0aW9uIGZvciBuby11bnJlYWNoYWJsZSBiZWNh
dXNlIG9mIHZhcmlhYmxlL2Z1bmN0aW9uIGhvaXN0aW5nCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
aWYgdGhlIG5vZGUgZG9lc24ndCB0cmlnZ2VyIHVucmVhY2hhYmxlCisgICAgICogQHByaXZhdGUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1VucmVhY2hhYmxlQWxsb3dlZChub2RlKSB7CisgICAg
ICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIiB8fAorICAgICAg
ICAgICAgbm9kZS50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIgJiYKKyAgICAgICAgICAg
IG5vZGUuZGVjbGFyYXRpb25zLmV2ZXJ5KGZ1bmN0aW9uKGRlY2xhcmF0aW9uKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0b3Ii
ICYmIGRlY2xhcmF0aW9uLmluaXQgPT09IG51bGw7CisgICAgICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKgorICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIG5vZGUgaXMgdGhlIGxhc3Qg
bm9kZSBvciBmb2xsb3dlZCBleGNsdXNpdmVseSBieQorICAgICAqIGhvaXN0ZWQgZGVjbGFyYXRp
b25zCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIE5vZGUgdGhhdCBzaG91bGQgYmUgdGhl
IGxhc3Qgbm9kZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAg
ICovCisgICAgZnVuY3Rpb24gY2hlY2tOb2RlKG5vZGUpIHsKKyAgICAgICAgdmFyIHBhcmVudCA9
IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgIHZhciBmaWVsZCwgaSwgc2li
bGluZzsKKworICAgICAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7CisgICAgICAgICAgICBjYXNl
ICJTd2l0Y2hDYXNlIjoKKyAgICAgICAgICAgICAgICBmaWVsZCA9ICJjb25zZXF1ZW50IjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIlByb2dyYW0iOgorICAgICAg
ICAgICAgY2FzZSAiQmxvY2tTdGF0ZW1lbnQiOgorICAgICAgICAgICAgICAgIGZpZWxkID0gImJv
ZHkiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSBwYXJlbnRb
ZmllbGRdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBzaWJsaW5nID0g
cGFyZW50W2ZpZWxkXVtpXTsKKyAgICAgICAgICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBGb3VuZCB0aGUgbGFzdCByZWFjaGFibGUgc3RhdGVt
ZW50LCBhbGwgZG9uZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlzVW5yZWFj
aGFibGVBbGxvd2VkKHNpYmxpbmcpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQs
IHNpYmxpbmcsIG5vZGUudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogY2hlY2tOb2RlLAorICAg
ICAgICAiVGhyb3dTdGF0ZW1lbnQiOiBjaGVja05vZGUsCisgICAgICAgICJDb250aW51ZVN0YXRl
bWVudCI6IGNoZWNrTm9kZSwKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogY2hlY2tOb2RlCisg
ICAgfTsKKworfTsKKworfSx7fV0sMTIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBGbGFnIGV4cHJlc3Npb25zIGluIHN0YXRlbWVudCBw
b3NpdGlvbiB0aGF0IGRvIG5vdCBzaWRlIGVmZmVjdAorICogQGF1dGhvciBNaWNoYWVsIEZpY2Fy
cmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSAtIGFueSBub2RlCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdp
dmVuIG5vZGUgc3RydWN0dXJhbGx5IHJlcHJlc2VudHMgYSBkaXJlY3RpdmUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBsb29rc0xpa2VEaXJlY3RpdmUobm9kZSkgeworICAgICAgIHJldHVybiBub2Rl
LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICAgICBub2RlLmV4cHJl
c3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLmV4cHJlc3Npb24udmFsdWUg
PT09ICJzdHJpbmciOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IHByZWRpY2F0ZSAtIChbYV0gLT4gQm9vbGVhbikgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbWFrZSB0
aGUgZGV0ZXJtaW5hdGlvbgorICAgICAqIEBwYXJhbSB7YVtdfSBsaXN0IC0gdGhlIGlucHV0IGxp
c3QKKyAgICAgKiBAcmV0dXJucyB7YVtdfSB0aGUgbGVhZGluZyBzZXF1ZW5jZSBvZiBtZW1iZXJz
IGluIHRoZSBnaXZlbiBsaXN0IHRoYXQgcGFzcyB0aGUgZ2l2ZW4gcHJlZGljYXRlCisgICAgICov
CisgICAgZnVuY3Rpb24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgbGlzdCkgeworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIXByZWRpY2F0ZShsaXN0W2ldKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBbXS5zbGljZS5jYWxsKGxpc3QsIDAs
IGkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGEg
UHJvZ3JhbSBvciBCbG9ja1N0YXRlbWVudCBub2RlCisgICAgICogQHJldHVybnMge0FTVE5vZGVb
XX0gdGhlIGxlYWRpbmcgc2VxdWVuY2Ugb2YgZGlyZWN0aXZlIG5vZGVzIGluIHRoZSBnaXZlbiBu
b2RlJ3MgYm9keQorICAgICAqLworICAgIGZ1bmN0aW9uIGRpcmVjdGl2ZXMobm9kZSkgeworICAg
ICAgICByZXR1cm4gdGFrZVdoaWxlKGxvb2tzTGlrZURpcmVjdGl2ZSwgbm9kZS5ib2R5KTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBhbnkgbm9kZQor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBhbmNlc3RvcnMgLSB0aGUgZ2l2ZW4gbm9kZSdzIGFu
Y2VzdG9ycworICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiBub2Rl
IGlzIGNvbnNpZGVyZWQgYSBkaXJlY3RpdmUgaW4gaXRzIGN1cnJlbnQgcG9zaXRpb24KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBpc0RpcmVjdGl2ZShub2RlLCBhbmNlc3RvcnMpIHsKKyAgICAgICAg
dmFyIHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV0sCisgICAgICAgICAg
ICBncmFuZHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMl07CisgICAgICAg
IHJldHVybiAocGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIiB8fCBwYXJlbnQudHlwZSA9PT0gIkJs
b2NrU3RhdGVtZW50IiAmJiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lv
biIgfHwgZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSkgJiYKKyAg
ICAgICAgICAgIGRpcmVjdGl2ZXMocGFyZW50KS5pbmRleE9mKG5vZGUpID49IDA7CisgICAgfQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0gbm9kZS5leHByZXNzaW9uLnR5cGUsCisg
ICAgICAgICAgICAgICAgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTsKKworICAg
ICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICEvXig/OkFzc2lnbm1lbnR8Q2FsbHxOZXd8
VXBkYXRlKUV4cHJlc3Npb24kLy50ZXN0KHR5cGUpICYmCisgICAgICAgICAgICAgICAgKHR5cGUg
IT09ICJVbmFyeUV4cHJlc3Npb24iIHx8IFsiZGVsZXRlIiwgInZvaWQiXS5pbmRleE9mKG5vZGUu
ZXhwcmVzc2lvbi5vcGVyYXRvcikgPCAwKSAmJgorICAgICAgICAgICAgICAgICFpc0RpcmVjdGl2
ZShub2RlLCBhbmNlc3RvcnMpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBvciBmdW5jdGlvbiBjYWxs
IGFuZCBpbnN0ZWFkIHNhdyBhbiBleHByZXNzaW9uLiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgZGVjbGFyZWQgYnV0
IHVudXNlZCB2YXJpYWJsZXMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgIHZhciBjb25maWcgPSB7CisgICAgICAgIHZhcnM6ICJhbGwiLAorICAgICAg
ICBhcmdzOiAiYWZ0ZXItdXNlZCIKKyAgICB9OworCisgICAgaWYgKGNvbnRleHQub3B0aW9uc1sw
XSkgeworICAgICAgICBpZiAodHlwZW9mKGNvbnRleHQub3B0aW9uc1swXSkgPT09ICJzdHJpbmci
KSB7CisgICAgICAgICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9uc1swXTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbmZpZy52YXJzID0gY29udGV4dC5vcHRpb25zWzBd
LnZhcnMgfHwgY29uZmlnLnZhcnM7CisgICAgICAgICAgICBjb25maWcuYXJncyA9IGNvbnRleHQu
b3B0aW9uc1swXS5hcmdzIHx8IGNvbmZpZy5hcmdzOworICAgICAgICB9CisgICAgfQorCisgICAg
dmFyIE1FU1NBR0UgPSAie3tuYW1lfX0gaXMgZGVmaW5lZCBidXQgbmV2ZXIgdXNlZCI7CisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1JlZmVyZW5jZX0gcmVmIC0gYW4gZXNjb3BlIFJlZmVyZW5j
ZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiByZWZlcmVuY2Ug
cmVwcmVzZW50cyBhIHJlYWQgb3BlcmF0aW9uCisgICAgICovCisgICAgZnVuY3Rpb24gaXNSZWFk
UmVmKHJlZikgeworICAgICAgICByZXR1cm4gcmVmLmlzUmVhZCgpOworICAgIH0KKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7U2NvcGV9IHNjb3BlIC0gYW4gZXNjb3BlIFNjb3BlIG9iamVjdAor
ICAgICAqIEByZXR1cm5zIHtWYXJpYWJsZVtdfSBtb3N0IG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMg
d2l0aCBubyByZWFkIHJlZmVyZW5jZXMKKyAgICAgKi8KKyAgICBmdW5jdGlvbiB1bnVzZWRMb2Nh
bHMoc2NvcGUpIHsKKyAgICAgICAgdmFyIHVudXNlZCA9IFtdOworICAgICAgICB2YXIgdmFyaWFi
bGVzID0gc2NvcGUudmFyaWFibGVzOworICAgICAgICBpZiAoc2NvcGUudHlwZSAhPT0gImdsb2Jh
bCIpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFyaWFibGVzLmxlbmd0aDsg
aSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIHNraXAgZnVuY3Rpb24gZXhwcmVzc2lv
biBuYW1lcworICAgICAgICAgICAgICAgIGlmIChzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29w
ZSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgLy8gc2tpcCBpbXBsaWNpdCAiYXJndW1lbnRzIiB2YXJpYWJsZQorICAg
ICAgICAgICAgICAgIGlmIChzY29wZS50eXBlID09PSAiZnVuY3Rpb24iICYmIHZhcmlhYmxlc1tp
XS5uYW1lID09PSAiYXJndW1lbnRzIiAmJiB2YXJpYWJsZXNbaV0uaWRlbnRpZmllcnMubGVuZ3Ro
ID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHZhcmlhYmxlc1tpXS5kZWZzWzBdLnR5cGU7
CisgICAgICAgICAgICAgICAgLy8gc2tpcCBjYXRjaCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAg
ICBpZiAodHlwZSA9PT0gIkNhdGNoQ2xhdXNlIikgeworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gaWYgImFyZ3MiIG9w
dGlvbiBpcyAibm9uZSIsIHNraXAgYW55IHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIGlmIChj
b25maWcuYXJncyA9PT0gIm5vbmUiICYmIHR5cGUgPT09ICJQYXJhbWV0ZXIiKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBpZiAiYXJncyIgb3B0aW9uIGlzICJhZnRlci11c2VkIiwgc2tpcCBhbGwgYnV0IHRoZSBs
YXN0IHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXJncyA9PT0gImFmdGVy
LXVzZWQiICYmIHR5cGUgPT09ICJQYXJhbWV0ZXIiICYmIHZhcmlhYmxlc1tpXS5kZWZzWzBdLmlu
ZGV4IDwgdmFyaWFibGVzW2ldLmRlZnNbMF0ubm9kZS5wYXJhbXMubGVuZ3RoIC0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlc1tpXS5yZWZlcmVuY2VzLmZpbHRlcihpc1JlYWRSZWYpLmxlbmd0
aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnVzZWQucHVzaCh2YXJpYWJsZXNbaV0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gW10uY29uY2F0LmFwcGx5KHVudXNlZCwgW10ubWFwLmNhbGwoc2NvcGUuY2hpbGRTY29w
ZXMsIHVudXNlZExvY2FscykpOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9n
cmFtIjogZnVuY3Rpb24ocHJvZ3JhbU5vZGUpIHsKKyAgICAgICAgICAgIHZhciBnbG9iYWxTY29w
ZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKyAgICAgICAgICAgIHZhciB1bnVzZWQgPSB1bnVzZWRM
b2NhbHMoZ2xvYmFsU2NvcGUpOworICAgICAgICAgICAgdmFyIGksIGw7CisKKyAgICAgICAgICAg
IC8vIGRldGVybWluZSB1bnVzZWQgZ2xvYmFscworICAgICAgICAgICAgaWYgKGNvbmZpZy52YXJz
ID09PSAiYWxsIikgeworICAgICAgICAgICAgICAgIHZhciB1bnJlc29sdmVkUmVmcyA9IGdsb2Jh
bFNjb3BlLnRocm91Z2guZmlsdGVyKGlzUmVhZFJlZikubWFwKGZ1bmN0aW9uKHJlZikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gZ2xvYmFsU2NvcGUudmFy
aWFibGVzLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW5y
ZXNvbHZlZFJlZnMuaW5kZXhPZihnbG9iYWxTY29wZS52YXJpYWJsZXNbaV0ubmFtZSkgPCAwKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWQucHVzaChnbG9iYWxTY29wZS52YXJpYWJs
ZXNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdW51c2VkLmxlbmd0aDsgaSA8
IGw7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh1bnVzZWRbaV0uZXNsaW50RXhwbGljaXRH
bG9iYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocHJvZ3JhbU5vZGUs
IE1FU1NBR0UsIHVudXNlZFtpXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bnVzZWRb
aV0uZGVmcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KHVudXNlZFtpXS5pZGVudGlmaWVyc1swXSwgTUVTU0FHRSwgdW51c2VkW2ldKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSwxMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdmFyaWFibGVzIGJlZm9yZSB0aGV5IGFyZSBkZWZp
bmVkCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBDb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBOT19GVU5D
ID0gIm5vZnVuYyI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRp
b24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gZmluZERlY2xh
cmF0aW9uKG5hbWUsIHNjb3BlKSB7CisgICAgICAgIC8vIHRyeSBzZWFyY2hpbmcgaW4gdGhlIGN1
cnJlbnQgc2NvcGUgZmlyc3QKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzY29wZS52YXJp
YWJsZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2NvcGUudmFyaWFi
bGVzW2ldLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUudmFy
aWFibGVzW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGNoZWNrIGlm
IHRoZXJlJ3MgdXBwZXIgc2NvcGUgYW5kIGNhbGwgcmVjdXJzaXZseSB0aWxsIHdlIGZpbmQgdGhl
IHZhcmlhYmxlCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAgcmV0dXJu
IGZpbmREZWNsYXJhdGlvbihuYW1lLCBzY29wZS51cHBlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaW5kVmFyaWFibGVzKCkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250
ZXh0LmdldFNjb3BlKCk7CisgICAgICAgIHZhciB0eXBlT3B0aW9uID0gY29udGV4dC5vcHRpb25z
WzBdOworCisgICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9jYXRpb25BbmRSZXBvcnQocmVmZXJlbmNl
LCBkZWNsYXJhdGlvbikgeworICAgICAgICAgICAgaWYgKHR5cGVPcHRpb24gIT09IE5PX0ZVTkMg
fHwgZGVjbGFyYXRpb24uZGVmc1swXS50eXBlICE9PSAiRnVuY3Rpb25OYW1lIikgeworICAgICAg
ICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZGVudGlmaWVyc1swXS5yYW5nZVsxXSA+IHJlZmVy
ZW5jZS5pZGVudGlmaWVyLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KHJlZmVyZW5jZS5pZGVudGlmaWVyLCAie3thfX0gd2FzIHVzZWQgYmVmb3JlIGl0IHdh
cyBkZWZpbmVkIiwge2E6IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWV9KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzY29wZS5yZWZlcmVu
Y2VzLmZvckVhY2goZnVuY3Rpb24ocmVmZXJlbmNlKSB7CisgICAgICAgICAgICAvLyBpZiB0aGUg
cmVmZXJlbmNlIGlzIHJlc29sdmVkIGNoZWNrIGZvciBkZWNsYXJhdGlvbiBsb2NhdGlvbgorICAg
ICAgICAgICAgLy8gaWYgbm90LCBpdCBjb3VsZCBiZSBmdW5jdGlvbiBpbnZvY2F0aW9uLCB0cnkg
dG8gZmluZCBtYW51YWxseQorICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5yZXNvbHZlZCAmJiBy
ZWZlcmVuY2UucmVzb2x2ZWQuaWRlbnRpZmllcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
ICAgIGNoZWNrTG9jYXRpb25BbmRSZXBvcnQocmVmZXJlbmNlLCByZWZlcmVuY2UucmVzb2x2ZWQp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24g
PSBmaW5kRGVjbGFyYXRpb24ocmVmZXJlbmNlLmlkZW50aWZpZXIubmFtZSwgc2NvcGUpOworICAg
ICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3JlIG5vIGlkZW50aWZpZXJzLCB0aGlzIGlzIGEgZ2xv
YmFsIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9u
ICYmIGRlY2xhcmF0aW9uLmlkZW50aWZpZXJzLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAg
ICAgICAgICBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgZGVjbGFyYXRpb24pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBmaW5kVmFyaWFibGVzLAorICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uIjogZmluZFZhcmlhYmxlcywKKyAgICAgICAgIkZ1bmN0aW9uRGVj
bGFyYXRpb24iOiBmaW5kVmFyaWFibGVzCisgICAgfTsKK307CisKK30se31dLDEyMzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBkaXNhbGxvdyB1c2Ugb2Ygdm9pZCBvcGVyYXRvci4KKyAqIEBhdXRob3IgTWlrZSBTaWRvcm92
CisgKiBAY29weXJpZ2h0IDIwMTQgTWlrZSBTaWRvcm92LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1Ymxp
YworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJVbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5vcGVy
YXRvciA9PT0gInZvaWQiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IkV4cGVjdGVkICd1bmRlZmluZWQnIGFuZCBpbnN0ZWFkIHNhdyAndm9pZCcuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMjQ6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdGhhdCB3
YXJucyBhYm91dCB1c2VkIHdhcm5pbmcgY29tbWVudHMKKyAqIEBhdXRob3IgQWxleGFuZGVyIFNj
aG1pZHQgPGh0dHBzOi8vZ2l0aHViLmNvbS9seGFuZGVycz4KKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisg
ICAgICAgIHdhcm5pbmdUZXJtcyA9IGNvbmZpZ3VyYXRpb24udGVybXMgfHwgWyJ0b2RvIiwgImZp
eG1lIiwgInh4eCJdLAorICAgICAgICBsb2NhdGlvbiA9IGNvbmZpZ3VyYXRpb24ubG9jYXRpb24g
fHwgInN0YXJ0IjsKKworICAgIC8qKgorICAgICAqIFByZXBhcmVzIGEgc3BlY2lmaWVkIGNvbW1l
bnQgZm9yIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnQgVGhl
IGNvbW1lbnQgdG8gcHJlcGFyZS4KKyAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgc3BlY2lm
aWVkIGNvbW1lbnQgcHJlcGFyZWQgZm9yIGJlaW5nIGNoZWNrZWQuCisgICAgICovCisgICAgZnVu
Y3Rpb24gcHJlcGFyZUNvbW1lbnRGb3JDaGVja2luZyhjb21tZW50KSB7CisgICAgICAgIHZhciBj
b21tZW50VG9DaGVjazsKKworICAgICAgICBjb21tZW50VG9DaGVjayA9IGNvbW1lbnQudG9Mb3dl
ckNhc2UoKTsKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50VG9DaGVjay50cmltKCk7
CisKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGNvbW1lbnQgc3RhcnRzIHdpdGggYSBzcGVjaWZp
ZWQgdGVybS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNvbW1l
bnQgdG8gY2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhlIHRl
cm0gdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUg
Y29tbWVudCBzdGFydGVkIHdpdGggdGhlIHNwZWNpZmllZCB0ZXJtLCBlbHNlIGZhbHNlLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50VG9DaGVjaywg
bG93ZXJDYXNlVGVybSkgeworICAgICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhPZihs
b3dlckNhc2VUZXJtKSA9PT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYg
dGhlIHNwZWNpZmllZCBjb21tZW50IGNvbnRhaW5zIGEgc3BlY2lmaWVkIHRlcm0gYXQgYW55IGxv
Y2F0aW9uLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50VG9DaGVjayBUaGUgY29tbWVu
dCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbG93ZXJDYXNlVGVybSBUaGUgdGVy
bSB0byBzZWFyY2ggZm9yLgorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB0
ZXJtIHdhcyBjb250YWluZWQgaW4gdGhlIGNvbW1lbnQsIGVsc2UgZmFsc2UuCisgICAgICovCisg
ICAgZnVuY3Rpb24gY29tbWVudENvbnRhaW5zVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJDYXNl
VGVybSkgeworICAgICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhPZihsb3dlckNhc2VU
ZXJtKSAhPT0gLTE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIHNwZWNp
ZmllZCBjb21tZW50IGZvciBtYXRjaGVzIG9mIHRoZSBjb25maWd1cmVkIHdhcm5pbmcgdGVybXMg
YW5kIHJldHVybnMgdGhlIG1hdGNoZXMuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnQg
VGhlIGNvbW1lbnQgd2hpY2ggaXMgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9IEFs
bCBtYXRjaGVkIHdhcm5pbmcgdGVybXMgZm9yIHRoaXMgY29tbWVudC4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBjb21tZW50Q29udGFpbnNXYXJuaW5nVGVybShjb21tZW50KSB7CisgICAgICAgIHZh
ciBtYXRjaGVzID0gW107CisKKyAgICAgICAgd2FybmluZ1Rlcm1zLmZvckVhY2goZnVuY3Rpb24g
KHRlcm0pIHsKKyAgICAgICAgICAgIHZhciBsb3dlckNhc2VUZXJtID0gdGVybS50b0xvd2VyQ2Fz
ZSgpLAorICAgICAgICAgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gcHJlcGFyZUNvbW1lbnRGb3JD
aGVja2luZyhjb21tZW50KTsKKworICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAic3RhcnQi
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50VG9D
aGVjaywgbG93ZXJDYXNlVGVybSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNo
KHRlcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRp
b24gPT09ICJhbnl3aGVyZSIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWVudENvbnRhaW5z
VGVybShjb21tZW50VG9DaGVjaywgbG93ZXJDYXNlVGVybSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5wdXNoKHRlcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAgfQorCisgICAgLyoq
CisgICAgICogQ2hlY2tzIHRoZSBzcGVjaWZpZWQgbm9kZSBmb3IgbWF0Y2hpbmcgd2FybmluZyBj
b21tZW50cyBhbmQgcmVwb3J0cyB0aGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgQVNUIG5vZGUgYmVpbmcgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZp
bmVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ29tbWVudChub2RlKSB7CisgICAgICAg
IHZhciBtYXRjaGVzID0gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0obm9kZS52YWx1ZSk7CisK
KyAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaGVkVGVybSkgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgIiArIG1hdGNoZWRUZXJtICsg
IiBjb21tZW50LiIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAg
ICAiQmxvY2tDb21tZW50IjogY2hlY2tDb21tZW50LAorICAgICAgICAiTGluZUNvbW1lbnQiOiBj
aGVja0NvbW1lbnQKKyAgICB9OworfTsKKworfSx7fV0sMTI1OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9m
IHdpdGggc3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJXaXRoU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhw
ZWN0ZWQgdXNlIG9mICd3aXRoJyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSwxMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3cmFwcGluZyBub25lLWlmZmUgaW4gcGFyZW5z
CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCisg
ICAgICAgICAgICAgICAgcHJldmlvdXNUb2tlbiwgbmV4dFRva2VuOworCisgICAgICAgICAgICBp
ZiAoIS9DYWxsRXhwcmVzc2lvbnxOZXdFeHByZXNzaW9uLy50ZXN0KGFuY2VzdG9ycy5wb3AoKS50
eXBlKSkgeworICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2Vu
QmVmb3JlKG5vZGUpOworICAgICAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9r
ZW5BZnRlcihub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi52YWx1ZSA9
PT0gIigiICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwcGluZyBub24tSUlGRSBmdW5jdGlvbiBsaXRlcmFs
cyBpbiBwYXJlbnMgaXMgdW5uZWNlc3NhcnkuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTI3OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8g
ZW5zdXJlIHRoZSB1c2Ugb2YgYSBzaW5nbGUgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgKiBAYXV0
aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgdmFyIGZ1bmN0aW9uU3RhY2sgPSBbXTsKKworICAgIGZ1bmN0aW9uIHN0YXJ0RnVu
Y3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucHVzaChmYWxzZSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucG9wKCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tEZWNsYXJhdGlvbnMobm9kZSkgeworICAgICAg
ICBpZiAoZnVuY3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7CisgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQ29tYmluZSB0aGlzIHdpdGggdGhlIHByZXZpb3Vz
ICd2YXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZ1bmN0
aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogc3Rh
cnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9u
LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKworICAgICAg
ICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGNoZWNrRGVjbGFyYXRpb25zLAorCisgICAgICAgICJQ
cm9ncmFtOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246
ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBl
bmRGdW5jdGlvbgorICAgIH07CisKK307CisKK30se31dLDEyODpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3VyZSBi
bGFuayBsaW5lcyB3aXRoaW4gYmxvY2tzLgorICogQGF1dGhvciBNYXRoaWFzIFNjaHJlY2sgPGh0
dHBzOi8vZ2l0aHViLmNvbS9sbzF0dW1hPgorICogQGNvcHlyaWdodCAyMDE0IE1hdGhpYXMgU2No
cmVjay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAgICB2YXIg
cmVxdWlyZVBhZGRpbmcgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAgICAv
KioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBh
IGJsYW5rIGxpbmUgYmVmb3JlIGl0cyBmaXJzdCBjaGlsZCBub2RlLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyB3aXRoIGEg
YmxhbmsgbGluZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tUb3BQYWRk
ZWQobm9kZSkgeworICAgICAgICB2YXIgYmxvY2tTdGFydCA9IG5vZGUubG9jLnN0YXJ0LmxpbmUs
CisgICAgICAgICAgICBmaXJzdCA9IG5vZGUuYm9keVswXSwKKyAgICAgICAgICAgIGZpcnN0TGlu
ZSA9IGZpcnN0LmxvYy5zdGFydC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRGaXJzdExpbmUg
PSBibG9ja1N0YXJ0ICsgMiwKKyAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IGNvbnRleHQu
Z2V0Q29tbWVudHMoZmlyc3QpLmxlYWRpbmc7CisKKyAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50
cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmaXJzdExpbmUgPSBsZWFkaW5nQ29tbWVudHNb
MF0ubG9jLnN0YXJ0LmxpbmU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwZWN0ZWRG
aXJzdExpbmUgPD0gZmlyc3RMaW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBp
ZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgaGFzIGEgYmxhbmsgbGluZSBhZnRlciBp
dHMgbGFzdCBjaGlsZCBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hl
dGhlciBvciBub3QgdGhlIGJsb2NrIGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpIHsKKyAgICAgICAg
dmFyIGJsb2NrRW5kID0gbm9kZS5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICBsYXN0ID0gbm9k
ZS5ib2R5W25vZGUuYm9keS5sZW5ndGggLSAxXSwKKyAgICAgICAgICAgIGxhc3RMaW5lID0gbGFz
dC5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICBleHBlY3RlZExhc3RMaW5lID0gYmxvY2tFbmQg
LSAyLAorICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMo
bGFzdCkudHJhaWxpbmc7CisKKyAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgbGFzdExpbmUgPSB0cmFpbGluZ0NvbW1lbnRzW3RyYWlsaW5nQ29t
bWVudHMubGVuZ3RoIC0gMV0ubG9jLmVuZC5saW5lOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGxhc3RMaW5lIDw9IGV4cGVjdGVkTGFzdExpbmU7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBzdGFydHMgQU5EIGVu
ZHMgd2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBB
U1Qgbm9kZSBvZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBX
aGV0aGVyIG9yIG5vdCB0aGUgYmxvY2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBsaW5l
LgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSB7Cisg
ICAgICAgIHJldHVybiBpc05vbkVtcHR5QmxvY2tUb3BQYWRkZWQobm9kZSkgJiYgaXNOb25FbXB0
eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNr
cyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIE9SIGVuZHMgd2l0aCBh
IGJsYW5rIGxpbmUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBv
ZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9y
IG5vdCB0aGUgYmxvY2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRpbmcobm9kZSkgeworICAg
ICAgICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpIHx8IGlzTm9uRW1wdHlC
bG9ja0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
dGhlIGdpdmVuIEJsb2NrU3RhdGVtZW50IG5vZGUgdG8gYmUgcGFkZGVkIGlmIHRoZSBibG9jayBp
cyBub3QgZW1wdHkuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBv
ZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHt2b2lkfSB1bmRlZmluZWQuCisg
ICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tQYWRkaW5nKG5vZGUpIHsKKyAgICAgICAgaWYgKG5v
ZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAocmVxdWlyZVBhZGRpbmcpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sgbXVzdCBiZSBwYWRk
ZWQgYnkgYmxhbmsgbGluZXMuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTm9uRW1wdHlCbG9ja0V4dHJhUGFkZGluZyhu
b2RlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sg
bXVzdCBub3QgYmUgcGFkZGVkIGJ5IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJCbG9ja1N0YXRlbWVudCI6IGNoZWNrUGFkZGluZworICAgIH07CisKK307CisKK30se31dLDEy
OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIG5vbi1xdW90ZWQgcHJvcGVydHkgbmFtZXMgaW4gb2JqZWN0IGxpdGVy
YWxzLgorICogQGF1dGhvciBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUv
PgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmltYSIp
OworCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBNT0RFID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgc3dpdGNo
IChNT0RFKSB7CisKKyAgICAgICAgY2FzZSAiYXMtbmVlZGVkIjoKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAvLyBF
bnN1cmUgdGhhdCBhbnkgcXVvdGVkIHByb3BlcnR5IG5hbWVzIHJlcXVpcmVkIHF1b3RpbmcKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGtleS50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIGtl
eS52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGVzcHJpbWEudG9rZW5pemUo
a2V5LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0
aCAhPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0ID0gdG9rZW5zWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gIklkZW50aWZpZXIi
IHx8IHQudHlwZSA9PT0gIk51bGwiIHx8IHQudHlwZSA9PT0gIkJvb2xlYW4iIHx8IHQudHlwZSA9
PT0gIk51bWVyaWMiICYmICIiICsgK3QudmFsdWUgPT09IHQudmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3NhcmlseSBxdW90
ZWQgcHJvcGVydHkgYHt7bmFtZX19YCBmb3VuZC4iLCBrZXkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICBQcm9wZXJ0eTogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIga2V5ID0gbm9kZS5rZXk7CisgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhbGwg
cHJvcGVydHkgbmFtZXMgYXJlIHF1b3RlZAorICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnR5
cGUgIT09ICJMaXRlcmFsIiB8fCB0eXBlb2Yga2V5LnZhbHVlICE9PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVucXVvdGVkIHByb3Bl
cnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30seyJlc3By
aW1hIjo2fV0sMTMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gY2hvb3NlIGJldHdlZW4gc2luZ2xlIGFuZCBkb3VibGUg
cXVvdGUgbWFya3MKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFs
bC5jb20vPiwgQnJhbmRvbiBQYXl0b24KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgUVVPVEVfU0VUVElO
R1MgPSB7CisgICAgImRvdWJsZSI6IHsKKyAgICAgICAgcXVvdGU6ICJcIiIsCisgICAgICAgIGFs
dGVybmF0ZVF1b3RlOiAiJyIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiZG91YmxlcXVvdGUiCisg
ICAgfSwKKyAgICAic2luZ2xlIjogeworICAgICAgICBxdW90ZTogIiciLAorICAgICAgICBhbHRl
cm5hdGVRdW90ZTogIlwiIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJzaW5nbGVxdW90ZSIKKyAg
ICB9Cit9OworCit2YXIgQVZPSURfRVNDQVBFID0gImF2b2lkLWVzY2FwZSI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBz
dHJpY3QiOworCisgICAgLyoqCisgICAgICogVmFsaWRhdGUgdGhhdCBhIHN0cmluZyBwYXNzZWQg
aW4gaXMgc3Vycm91bmRlZCBieSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcgorICAgICAqIEBwYXJh
bSAge3N0cmluZ30gdmFsIFRoZSB0ZXh0IHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSAge3N0cmlu
Z30gY2hhcmFjdGVyIFRoZSBjaGFyYWN0ZXIgdG8gc2VlIGlmIGl0J3Mgc3Vycm91bmRlZCBieS4K
KyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGV4dCBpcyBzdXJyb3VuZGVk
IGJ5IHRoZSBjaGFyYWN0ZXIsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c1N1cnJvdW5kZWRCeSh2YWwsIGNoYXJhY3RlcikgeworICAgICAgICByZXR1cm4gdmFsWzBdID09
PSBjaGFyYWN0ZXIgJiYgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gY2hhcmFjdGVyOworICAgIH0K
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICB2YXIgdmFsID0gbm9kZS52YWx1ZSwKKyAgICAgICAgICAgICAgICByYXdWYWwg
PSBub2RlLnJhdywKKyAgICAgICAgICAgICAgICBxdW90ZU9wdGlvbiA9IGNvbnRleHQub3B0aW9u
c1swXSwKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IFFVT1RFX1NFVFRJTkdTW3F1b3RlT3B0
aW9uXSwKKyAgICAgICAgICAgICAgICBhdm9pZEVzY2FwZSA9IGNvbnRleHQub3B0aW9uc1sxXSA9
PT0gQVZPSURfRVNDQVBFLAorICAgICAgICAgICAgICAgIGlzVmFsaWQ7CisKKyAgICAgICAgICAg
IGlmIChzZXR0aW5ncyAmJiB0eXBlb2YgdmFsID09PSAic3RyaW5nIikgeworICAgICAgICAgICAg
ICAgIGlzVmFsaWQgPSBpc1N1cnJvdW5kZWRCeShyYXdWYWwsIHNldHRpbmdzLnF1b3RlKTsKKwor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBhdm9pZEVzY2FwZSkgeworICAgICAgICAg
ICAgICAgICAgICBpc1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5hbHRl
cm5hdGVRdW90ZSkgJiYgcmF3VmFsLmluZGV4T2Yoc2V0dGluZ3MucXVvdGUpID49IDA7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTdHJpbmdzIG11c3QgdXNlICIgKyBz
ZXR0aW5ncy5kZXNjcmlwdGlvbiArICIuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTMxOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcg
dXNlIG9mIHBhcnNlSW50IHdpdGhvdXQgYSByYWRpeCBhcmd1bWVudAorICogQGF1dGhvciBKYW1l
cyBBbGxhcmRpY2UKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAg
ICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFy
IHJhZGl4OworCisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gInBhcnNlSW50
IikgeworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgcmFkaXgg
cGFyYW1ldGVyLiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgcmFkaXggPSBub2RlLmFyZ3VtZW50c1sxXTsKKworICAgICAgICAgICAgICAgICAgICAv
LyBkb24ndCBhbGxvdyBub24tbnVtZXJpYyBsaXRlcmFscyBvciB1bmRlZmluZWQKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKChyYWRpeC50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIHJhZGl4
LnZhbHVlICE9PSAibnVtYmVyIikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyYWRpeC50
eXBlID09PSAiSWRlbnRpZmllciIgJiYgcmFkaXgubmFtZSA9PT0gInVuZGVmaW5lZCIpCisgICAg
ICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkludmFsaWQgcmFkaXggcGFyYW1ldGVyLiIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCit9OworCit9LHt9XSwxMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBtaXNzaW5nIHNlbWljb2xvbnMuCisg
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIE9Q
VF9PVVRfUEFUVEVSTiA9IC9bXFtcKFwvXCtcLV0vOworCisgICAgdmFyIGFsd2F5cyA9IGNvbnRl
eHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICog
Q2hlY2tzIGEgbm9kZSB0byBzZWUgaWYgaXQncyBmb2xsb3dlZCBieSBhIHNlbWljb2xvbi4KKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJl
dHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tGb3JTZW1pY29sb24obm9k
ZSkgeworICAgICAgICB2YXIgbGFzdFRva2VuID0gY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZSks
CisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7CisK
KyAgICAgICAgaWYgKGFsd2F5cykgeworICAgICAgICAgICAgaWYgKGxhc3RUb2tlbi50eXBlICE9
PSAiUHVuY3R1YXRvciIgfHwgbGFzdFRva2VuLnZhbHVlICE9PSAiOyIpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsYXN0VG9rZW4ubG9jLmVuZCwgIk1pc3Npbmcgc2Vt
aWNvbG9uLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGxhc3RUb2tlbi50eXBlID09PSAiUHVuY3R1YXRvciIgJiYgbGFzdFRva2VuLnZhbHVlID09
PSAiOyIpIHsKKworICAgICAgICAgICAgICAgIGlmICghbmV4dFRva2VuIHx8ICEoT1BUX09VVF9Q
QVRURVJOLnRlc3QobmV4dFRva2VuLnZhbHVlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgbm9kZS5sb2MuZW5kLCAiRXh0cmEgc2VtaWNvbG9uLiIpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGVyZSdzIGEgc2VtaWNvbG9uIGFmdGVyIGEg
dmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBu
b2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0
aW9uIGNoZWNrRm9yU2VtaWNvbG9uRm9yVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSB7CisKKyAg
ICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCisgICAgICAgICAg
ICBwYXJlbnRJbmRleCA9IGFuY2VzdG9ycy5sZW5ndGggLSAxLAorICAgICAgICAgICAgcGFyZW50
ID0gYW5jZXN0b3JzW3BhcmVudEluZGV4XTsKKworICAgICAgICBpZiAoKHBhcmVudC50eXBlICE9
PSAiRm9yU3RhdGVtZW50IiB8fCBwYXJlbnQuaW5pdCAhPT0gbm9kZSkgJiYKKyAgICAgICAgICAg
IChwYXJlbnQudHlwZSAhPT0gIkZvckluU3RhdGVtZW50IiB8fCBwYXJlbnQubGVmdCAhPT0gbm9k
ZSkKKyAgICAgICAgKSB7CisgICAgICAgICAgICBjaGVja0ZvclNlbWljb2xvbihub2RlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMg
QVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAi
VmFyaWFibGVEZWNsYXJhdGlvbiI6IGNoZWNrRm9yU2VtaWNvbG9uRm9yVmFyaWFibGVEZWNsYXJh
dGlvbiwKKyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwK
KyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAi
RGVidWdnZXJTdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkJyZWFrU3Rh
dGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6
IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiRW1wdHlTdGF0ZW1lbnQiOiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgICAgdmFyIG5leHRUb2tlbjsKKworICAgICAgICAgICAgaWYgKCFh
bHdheXMpIHsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0
ZXIobm9kZSkgfHwgY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIShPUFRfT1VUX1BBVFRFUk4udGVzdChuZXh0VG9rZW4udmFsdWUpKSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXh0cmEgc2VtaWNvbG9uLiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxMzM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBzb3J0aW5nIG9mIHZhcmlhYmxlcyB3
aXRoaW4gYSBzaW5nbGUgVmFyaWFibGUgRGVjbGFyYXRpb24gYmxvY2sKKyAqIEBhdXRob3IgSWx5
YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgY29uZmlndXJhdGlv
biA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKKyAgICAgICAgaWdub3JlQ2FzZSA9IGNvbmZp
Z3VyYXRpb24uaWdub3JlQ2FzZSB8fCBmYWxzZTsKKworICAgIHJldHVybiB7CisgICAgICAgICJW
YXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgbm9kZS5k
ZWNsYXJhdGlvbnMucmVkdWNlKGZ1bmN0aW9uKG1lbW8sIGRlY2wpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbGFzdFZhcmlhYmxlTmFtZSA9IG1lbW8uaWQubmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVuVmFyaWFibGVOYW1lID0gZGVjbC5pZC5uYW1lOworCisgICAgICAgICAgICAgICAg
aWYgKGlnbm9yZUNhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFZhcmlhYmxlTmFtZSA9
IGxhc3RWYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVuVmFyaWFibGVOYW1lID0gY3VycmVuVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlblZhcmlhYmxlTmFtZSA8
IGxhc3RWYXJpYWJsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
ZGVjbCwgIlZhcmlhYmxlcyB3aXRoaW4gdGhlIHNhbWUgZGVjbGFyYXRpb24gYmxvY2sgc2hvdWxk
IGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWVtbzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGVjbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBub2RlLmRlY2xhcmF0
aW9uc1swXSk7CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTM0OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVu
Zm9yY2UgdGhlIG51bWJlciBvZiBzcGFjZXMgYWZ0ZXIgY2VydGFpbiBrZXl3b3JkcworICogQGF1
dGhvciBOaWNrIEZpc2hlcgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8gdW5sZXNzIHRoZSBm
aXJzdCBvcHRpb24gaXMgYCJuZXZlciJgLCB0aGVuIGEgc3BhY2UgaXMgcmVxdWlyZWQKKyAgICB2
YXIgcmVxdWlyZXNTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIiwKKyAgICAg
ICAgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzFdIHx8IHsgY2hlY2tGdW5jdGlvbktleXdvcmQ6
IGZhbHNlIH07CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgc2VwYXJhdGlvbiBvZiB0
d28gYWRqYWNlbnQgdG9rZW5zIG1lZXRzIHRoZSBzcGFjaW5nIHJ1bGVzLCBhbmQgcmVwb3J0IGEg
cHJvYmxlbSBpZiBub3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgIFRo
ZSBub2RlIHRvIHdoaWNoIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBiZWxvbmdzLgorICAgICAqIEBw
YXJhbSB7VG9rZW59IGxlZnQgICAgVGhlIGZpcnN0IHRva2VuLgorICAgICAqIEBwYXJhbSB7VG9r
ZW59IHJpZ2h0ICAgVGhlIHNlY29uZCB0b2tlbgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGNoZWNrVG9rZW5zKG5vZGUsIGxlZnQsIHJpZ2h0KSB7CisgICAg
ICAgIHZhciBoYXNTcGFjZSA9IGxlZnQucmFuZ2VbMV0gPCByaWdodC5yYW5nZVswXSwKKyAgICAg
ICAgICAgIHZhbHVlID0gbGVmdC52YWx1ZTsKKworICAgICAgICBpZiAoaGFzU3BhY2UgIT09IHJl
cXVpcmVzU3BhY2UpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJLZXl3b3Jk
IFwie3t2YWx1ZX19XCIgbXVzdCB7e25vdH19YmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS4iLCB7
CisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIG5vdDogcmVx
dWlyZXNTcGFjZSA/ICIiIDogIm5vdCAiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBub2RlIChgaWZgLCBgZm9y
YCwgYHdoaWxlYCwgZXRjKSwgaGFzIHRoZSBjb3JyZWN0IHNwYWNpbmcgYWZ0ZXIgaXQuCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAg
dmFyIHRva2VucyA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMik7CisgICAgICAgIGNo
ZWNrVG9rZW5zKG5vZGUsIHRva2Vuc1swXSwgdG9rZW5zWzFdKTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAg
ICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUgYGVsc2VgCisgICAgICAg
ICAgICBpZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3Rh
dGVtZW50IikgeworICAgICAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUuYWx0ZXJuYXRlLCBj
b250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUuYWx0ZXJuYXRlKSwgY29udGV4dC5nZXRGaXJzdFRv
a2VuKG5vZGUuYWx0ZXJuYXRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
ICJGb3JTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkZvck9mU3RhdGVtZW50IjogY2hlY2ss
CisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiV2hpbGVTdGF0ZW1l
bnQiOiBjaGVjaywKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkg
eworICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUgYHdo
aWxlYAorICAgICAgICAgICAgdmFyIHdoaWxlVG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZv
cmUobm9kZS50ZXN0LCAyKTsKKyAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUsIHdoaWxlVG9r
ZW5zWzBdLCB3aGlsZVRva2Vuc1sxXSk7CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hTdGF0
ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIlRyeVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7
CisgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBgZmlu
YWxseWAKKyAgICAgICAgICAgIGlmIChub2RlLmZpbmFsaXplcikgeworICAgICAgICAgICAgICAg
IGNoZWNrVG9rZW5zKG5vZGUuZmluYWxpemVyLCBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUu
ZmluYWxpemVyKSwgY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUuZmluYWxpemVyKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJDYXRjaFN0YXRlbWVudCI6IGNoZWNrLAor
ICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChjb25maWcuY2hlY2tGdW5j
dGlvbktleXdvcmQpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwxMzU6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1cmUg
d2hpdGVzcGFjZSBiZWZvcmUgYmxvY2tzLgorICogQGF1dGhvciBNYXRoaWFzIFNjaHJlY2sgPGh0
dHBzOi8vZ2l0aHViLmNvbS9sbzF0dW1hPgorICogQGNvcHlyaWdodCAyMDE0IE1hdGhpYXMgU2No
cmVjay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAgICB2YXIg
cmVxdWlyZVNwYWNlID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOworCisgICAgLyoq
CisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIGhhdmUg
d2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCisgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBU
aGUgbGVmdCB0b2tlbiBvYmplY3QuCisgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhl
IHJpZ2h0IHRva2VuIG9iamVjdC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBv
ciBub3QgdGhlcmUgaXMgc3BhY2UgYmV0d2VlbiB0aGUgdG9rZW5zLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBsZWZ0LnJhbmdl
WzFdIDwgcmlnaHQucmFuZ2VbMF07CisgICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5l
cyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAg
ICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCisgICAgICog
QHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHRva2VucyBhcmUgb24gdGhlIHNh
bWUgbGluZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0KSB7
CisgICAgICAgIHJldHVybiBsZWZ0LmxvYy5zdGFydC5saW5lID09PSByaWdodC5sb2Muc3RhcnQu
bGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIGdpdmVuIEJsb2NrU3Rh
dGVtZW50IG5vZGUgaGFzIGEgcHJlY2VkaW5nIHNwYWNlIGlmIGl0IGRvZXNu4oCZdCBzdGFydCBv
biBhIG5ldyBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUg
b2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVkLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrUHJlY2VkaW5nU3BhY2Uobm9kZSkgeworICAgICAg
ICB2YXIgcHJlY2VkaW5nVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAorICAg
ICAgICAgICAgaGFzU3BhY2U7CisKKyAgICAgICAgaWYgKHByZWNlZGluZ1Rva2VuICYmIGlzU2Ft
ZUxpbmUocHJlY2VkaW5nVG9rZW4sIG5vZGUpKSB7CisgICAgICAgICAgICBoYXNTcGFjZSA9IGlz
U3BhY2VkKHByZWNlZGluZ1Rva2VuLCBub2RlKTsKKworICAgICAgICAgICAgaWYgKHJlcXVpcmVT
cGFjZSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzU3BhY2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3Npbmcgc3BhY2UgYmVmb3JlIG9wZW5pbmcg
YnJhY2UuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgc3BhY2UgYmVmb3JlIG9wZW5pbmcgYnJhY2UuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogY2hlY2tQcmVjZWRpbmdTcGFjZQor
ICAgIH07CisKK307CisKK30se31dLDEzNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVuZm9yY2VzIHNwYWNlcyBp
bnNpZGUgb2YgYnJhY2tldHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqIEBj
b3B5cmlnaHQgMjAxNCBCcmFuZHluIEJlbm5ldHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBA
Y29weXJpZ2h0IDIwMTQgTWljaGFlbCBGaWNhcnJhLiBObyByaWdodHMgcmVzZXJ2ZWQuCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgc3BhY2VkOiBjb250
ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiLAorICAgICAgICBzaW5nbGVFbGVtZW50RXhjZXB0
aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5z
aW5nbGVWYWx1ZSwKKyAgICAgICAgb2JqZWN0c0luQXJyYXlzRXhjZXB0aW9uOiBjb250ZXh0Lm9w
dGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5vYmplY3RzSW5BcnJheXMs
CisgICAgICAgIGFycmF5c0luQXJyYXlzRXhjZXB0aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0g
bnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5hcnJheXNJbkFycmF5cywKKyAgICAgICAgcHJv
cGVydHlOYW1lOiBjb250ZXh0Lm9wdGlvbnNbMV0gPT0gbnVsbCB8fCBjb250ZXh0Lm9wdGlvbnNb
MV0ucHJvcGVydHlOYW1lID09IG51bGwgfHwgISFjb250ZXh0Lm9wdGlvbnNbMV0ucHJvcGVydHlO
YW1lCisgICAgfTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0
aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIGhhdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0u
CisgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KKyAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlcmUgaXMgc3BhY2UgYmV0
d2VlbiB0aGUgdG9rZW5zLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJp
Z2h0KSB7CisgICAgICAgIHJldHVybiBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF07Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0
b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQg
LSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCisgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0g
VGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhl
ciBvciBub3QgdGhlIHRva2VucyBhcmUgb24gdGhlIHNhbWUgbGluZS4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBsZWZ0Lmxv
Yy5zdGFydC5saW5lID09PSByaWdodC5sb2Muc3RhcnQubGluZTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAqIFJlcG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzcGFjZSBhZnRlciB0aGUg
Zmlyc3QgdG9rZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJl
cG9ydCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFyYW0ge09iamVjdFtdfSB0
b2tlbnMgLSBUaGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCisgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5vQmVnaW5uaW5nU3BhY2Uo
bm9kZSwgdG9rZW5zKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1swXS5s
b2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2Ug
YWZ0ZXIgJyIgKyB0b2tlbnNbMF0udmFsdWUgKyAiJyIpOworICAgIH0KKworICAgIC8qKgorICAg
ICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZG4ndCBiZSBhIHNwYWNlIGJlZm9yZSB0aGUgbGFz
dCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0
IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2Vu
cyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4KKyAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0
b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zW3Rva2Vucy5sZW5n
dGggLSAxXS5sb2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICJUaGVyZSBzaG91bGQgYmUg
bm8gc3BhY2UgYmVmb3JlICciICsgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSArICIn
Iik7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkIGJl
IGEgc3BhY2UgYWZ0ZXIgdGhlIGZpcnN0IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgLSBUaGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICog
QHBhcmFtIHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBz
cGFjaW5nLgorICAgICogQHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBv
cnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2VucykgeworICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCB0b2tlbnNbMF0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAi
QSBzcGFjZSBpcyByZXF1aXJlZCBhZnRlciAnIiArIHRva2Vuc1swXS52YWx1ZSArICInIik7Cisg
ICAgfQorCisgICAgLyoqCisgICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgc3Bh
Y2UgYmVmb3JlIHRoZSBsYXN0IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBU
aGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICogQHBhcmFt
IHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5n
LgorICAgICogQHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnRSZXF1
aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2VucykgeworICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLmxvYy5zdGFydCwKKyAgICAgICAgICAgICAg
ICAgICAgIkEgc3BhY2UgaXMgcmVxdWlyZWQgYmVmb3JlICciICsgdG9rZW5zW3Rva2Vucy5sZW5n
dGggLSAxXS52YWx1ZSArICInIik7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsK
KworICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiBvcHRpb25zLnByb3BlcnR5TmFtZSA/IGZ1bmN0
aW9uIGNoZWNrTWVtYmVyKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7
CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUucHJv
cGVydHksIDEsIDEpOworICAgICAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRv
a2VuQiA9IHRva2Vuc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgdG9rZW5DID0gdG9rZW5zW3Rv
a2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNTYW1lTGlu
ZSh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3Bh
Y2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQSwgdG9r
ZW5CKSAmJiBpc1NhbWVMaW5lKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNT
cGFjZWQodG9rZW5DLCB0b2tlbkQpICYmIGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2Rl
LCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQSwg
dG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5n
U3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiBmdW5jdGlvbigpIHt9LAorCisg
ICAgICAgIEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5z
KG5vZGUpOworICAgICAgICAgICAgdmFyIHRva2VuQSA9IHRva2Vuc1swXSwgdG9rZW5CID0gdG9r
ZW5zWzFdLAorICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0g
Ml0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07CisKKyAgICAgICAgICAgIHZh
ciBvcGVuaW5nQnJhY2tldE11c3RCZVNwYWNlZCA9CisgICAgICAgICAgICAgICAgb3B0aW9ucy5v
YmplY3RzSW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5CLnZhbHVlID09PSAieyIgfHwKKyAgICAg
ICAgICAgICAgICBvcHRpb25zLmFycmF5c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQi52YWx1
ZSA9PT0gIlsiIHx8CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zaW5nbGVFbGVtZW50RXhjZXB0
aW9uICYmIG5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAxCisgICAgICAgICAgICAgICAgPyAhb3B0
aW9ucy5zcGFjZWQgOiBvcHRpb25zLnNwYWNlZDsKKworICAgICAgICAgICAgdmFyIGNsb3NpbmdC
cmFja2V0TXVzdEJlU3BhY2VkID0KKyAgICAgICAgICAgICAgICBvcHRpb25zLm9iamVjdHNJbkFy
cmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkMudmFsdWUgPT09ICJ9IiB8fAorICAgICAgICAgICAgICAg
IG9wdGlvbnMuYXJyYXlzSW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5DLnZhbHVlID09PSAiXSIg
fHwKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNpbmdsZUVsZW1lbnRFeGNlcHRpb24gJiYgbm9k
ZS5lbGVtZW50cy5sZW5ndGggPT09IDEKKyAgICAgICAgICAgICAgICA/ICFvcHRpb25zLnNwYWNl
ZCA6IG9wdGlvbnMuc3BhY2VkOworCisgICAgICAgICAgICBpZiAoaXNTYW1lTGluZSh0b2tlbkEs
IHRva2VuQikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob3BlbmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgIWlzU3BhY2VkKHRva2VuQSwgdG9r
ZW5CKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNl
KG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb3BlbmluZ0JyYWNr
ZXRNdXN0QmVTcGFjZWQgJiYgaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdCcmFja2V0TXVzdEJlU3BhY2Vk
ICYmICFpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVw
b3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWNsb3NpbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmIGlzU3BhY2VkKHRva2VuQywg
dG9rZW5EKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUs
IHRva2Vucyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAor
CisgICAgICAgIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLnByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0
VG9rZW5zKG5vZGUpOworICAgICAgICAgICAgdmFyIHRva2VuQSA9IHRva2Vuc1swXSwgdG9rZW5C
ID0gdG9rZW5zWzFdLAorICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMubGVu
Z3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAgICAg
ICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRv
a2VuRCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zcGFjZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2Vk
KHRva2VuQywgdG9rZW5EKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWly
ZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRv
a2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9CZWdpbm5p
bmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgfTsKKworfTsKKworfSx7fV0sMTM3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvd3Mgb3IgZW5mb3JjZXMgc3BhY2Vz
IGluc2lkZSBvZiBwYXJlbnRoZXNlcy4KKyAqIEBhdXRob3IgSm9uYXRoYW4gUmFqYXZ1b3JpCisg
KiBAY29weXJpZ2h0IDIwMTQgSm9uYXRoYW4gUmFqYXZ1b3JpLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIFJFLCBNRVNTQUdFOworCisgICAgaWYgKGNv
bnRleHQub3B0aW9uc1swXSA9PT0gImFsd2F5cyIpIHsKKyAgICAgICAgUkUgPSAvXChbXiBcKV18
W14gXChdXCkvbWc7CisgICAgICAgIE1FU1NBR0UgPSAiVGhlcmUgbXVzdCBiZSBhIHNwYWNlIGlu
c2lkZSB0aGlzIHBhcmVuLiI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkUgPSAvXCggfCBcKS9t
ZzsKKyAgICAgICAgTUVTU0FHRSA9ICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2VzIGluc2lkZSB0
aGlzIHBhcmVuLiI7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
SGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZhciBza2lwUmFuZ2VzID0g
W107CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSByYW5nZSBvZiBhIG5vZGUgdG8gdGhlIHNl
dCB0byBiZSBza2lwcGVkIHdoZW4gY2hlY2tpbmcgcGFyZW5zCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBub2RlIHRvIHNraXAKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAg
KiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGFkZFNraXBSYW5nZShub2RlKSB7Cisg
ICAgICAgIHNraXBSYW5nZXMucHVzaChub2RlLnJhbmdlKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBTb3J0cyB0aGUgc2tpcFJhbmdlcyBhcnJheS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHNo
b3VsZFNraXAKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAq
LworICAgIGZ1bmN0aW9uIHNvcnRTa2lwUmFuZ2VzKCkgeworICAgICAgICBza2lwUmFuZ2VzLnNv
cnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhWzBdIC0gYlswXTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgY2VydGFpbiBw
b3NpdGlvbiBpbiB0aGUgc291cmNlIHNob3VsZCBiZSBza2lwcGVkCisgICAgICogQHBhcmFtIHtO
dW1iZXJ9IHBvcyBUaGUgMC1iYXNlZCBpbmRleCBpbiB0aGUgc291cmNlCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvc2l0aW9uIHNob3VsZCBiZSBza2lwcGVkCisgICAg
ICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzaG91bGRTa2lwKHBvcykgeworICAg
ICAgICB2YXIgaSwgbGVuLCByYW5nZTsKKyAgICAgICAgZm9yIChpID0gMCwgbGVuID0gc2tpcFJh
bmdlcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAgICAgICAgICAgcmFuZ2UgPSBza2lw
UmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKHBvcyA8IHJhbmdlWzBdKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IHJhbmdlWzFdKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJQcm9ncmFtOmV4aXQiOiBmdW5jdGlvbiBjaGVja1BhcmVuU3BhY2VzKG5vZGUpIHsK
KworICAgICAgICAgICAgdmFyIG1hdGNoLAorICAgICAgICAgICAgICAgIG5leHRMaW5lLAorICAg
ICAgICAgICAgICAgIGNvbHVtbiwKKyAgICAgICAgICAgICAgICBsaW5lID0gMSwKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpLAorICAgICAgICAgICAgICAgIHBv
cyA9IDA7CisKKyAgICAgICAgICAgIHNvcnRTa2lwUmFuZ2VzKCk7CisKKyAgICAgICAgICAgIHdo
aWxlICgobWF0Y2ggPSBSRS5leGVjKHNvdXJjZSkpICE9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZS5jaGFyQXQobWF0Y2guaW5kZXgpICE9PSAiKCIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTWF0Y2hlZCBhIGNsb3NpbmcgcGFyZW4gcGF0dGVybgorICAgICAgICAgICAg
ICAgICAgICBtYXRjaC5pbmRleCArPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmICghc2hvdWxkU2tpcChtYXRjaC5pbmRleCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKChuZXh0TGluZSA9IHNvdXJjZS5pbmRleE9mKCJcbiIsIHBvcykpICE9PSAtMSAm
JiBuZXh0TGluZSA8IG1hdGNoLmluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3Mg
PSBuZXh0TGluZSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICs9IDE7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gbWF0Y2guaW5k
ZXggLSBwb3M7CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBs
aW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiB9LCBNRVNTQUdFKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSwKKworCisgICAgICAgIC8vIFRoZXNlIG5vZGVz
IGNhbiBjb250YWluIHBhcmVudGhlc2VzIHRoYXQgdGhpcyBydWxlIGRvZXNuJ3QgY2FyZSBhYm91
dAorCisgICAgICAgIExpbmVDb21tZW50OiBhZGRTa2lwUmFuZ2UsCisKKyAgICAgICAgQmxvY2tD
b21tZW50OiBhZGRTa2lwUmFuZ2UsCisKKyAgICAgICAgTGl0ZXJhbDogYWRkU2tpcFJhbmdlCisK
KyAgICB9OworCit9OworCit9LHt9XSwxMzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGFyb3VuZCBpbmZpeCBv
cGVyYXRvcnMKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgT1BFUkFUT1JTID0gWworICAgICAgICAiKiIsICIvIiwgIiUiLCAiKyIsICItIiwg
Ijw8IiwgIj4+IiwgIj4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiaW4iLAorICAgICAgICAi
aW5zdGFuY2VvZiIsICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwgIiYiLCAiXiIsICJ8IiwgIiYm
IiwgInx8IiwgIj0iLAorICAgICAgICAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0iLCAiPDw9
IiwgIj4+PSIsICI+Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKKyAgICAgICAgIj8iLCAiOiIsICIs
IgorICAgIF07CisKKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAg
ICB2YXIgb3AsIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xlZnQucmFuZ2Vb
MV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpOworICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9
IHRva2Vucy5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBvcCA9IHRva2Vu
c1tpXTsKKyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBvcC50eXBlID09PSAiUHVu
Y3R1YXRvciIgJiYKKyAgICAgICAgICAgICAgICBPUEVSQVRPUlMuaW5kZXhPZihvcC52YWx1ZSkg
Pj0gMCAmJgorICAgICAgICAgICAgICAgICh0b2tlbnNbaSAtIDFdLnJhbmdlWzFdID49IG9wLnJh
bmdlWzBdIHx8IG9wLnJhbmdlWzFdID49IHRva2Vuc1tpICsgMV0ucmFuZ2VbMF0pCisgICAgICAg
ICAgICApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNS
aWdodFNwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIgb3AsIHRva2VucyA9IGNvbnRl
eHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xlZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEs
IDEpOworICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5ndGggLSAxOyBpIDwg
bDsgKytpKSB7CisgICAgICAgICAgICBvcCA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlmICgK
KyAgICAgICAgICAgICAgICBvcC50eXBlID09PSAiUHVuY3R1YXRvciIgJiYKKyAgICAgICAgICAg
ICAgICBPUEVSQVRPUlMuaW5kZXhPZihvcC52YWx1ZSkgPj0gMCAmJgorICAgICAgICAgICAgICAg
IG9wLnJhbmdlWzFdID49IHRva2Vuc1tpICsgMV0ucmFuZ2VbMF0KKyAgICAgICAgICAgICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkg
eworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSW5maXggb3BlcmF0b3JzIG11c3QgYmUg
c3BhY2VkLiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrQmluYXJ5KG5vZGUpIHsKKyAg
ICAgICAgaWYgKCFpc1NwYWNlZChub2RlLmxlZnQsIG5vZGUucmlnaHQpKSB7CisgICAgICAgICAg
ICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1Nl
cXVlbmNlKG5vZGUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmV4cHJlc3Np
b25zLmxlbmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghaXNSaWdodFNw
YWNlZChub2RlLmV4cHJlc3Npb25zW2ldLCBub2RlLmV4cHJlc3Npb25zW2kgKyAxXSkpIHsKKyAg
ICAgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0NvbmRpdGlv
bmFsKG5vZGUpIHsKKyAgICAgICAgaWYgKCFpc1NwYWNlZChub2RlLnRlc3QsIG5vZGUuY29uc2Vx
dWVudCkgfHwgIWlzU3BhY2VkKG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpKSB7Cisg
ICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBjaGVja1Zhcihub2RlKSB7CisgICAgICAgIGlmIChub2RlLmluaXQgJiYgIWlzU3BhY2VkKG5v
ZGUuaWQsIG5vZGUuaW5pdCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGNoZWNrQmluYXJ5LAorICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGNoZWNrQmluYXJ5LAor
ICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBjaGVja0JpbmFyeSwKKyAgICAgICAgIkNvbmRp
dGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uZGl0aW9uYWwsCisgICAgICAgICJTZXF1ZW5jZUV4
cHJlc3Npb24iOiBjaGVja1NlcXVlbmNlLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjog
Y2hlY2tWYXIKKyAgICB9OworCit9OworCit9LHt9XSwxMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGZvbGxv
d2luZyByZXR1cm4sIHRocm93LCBhbmQgY2FzZQorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAg
dmFyIHRva2VucyA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMiksCisgICAgICAgICAg
ICB2YWx1ZSA9IHRva2Vuc1swXS52YWx1ZTsKKworICAgICAgICBpZiAodG9rZW5zWzBdLnJhbmdl
WzFdID49IHRva2Vuc1sxXS5yYW5nZVswXSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIktleXdvcmQgXCIiICsgdmFsdWUgKyAiXCIgbXVzdCBiZSBmb2xsb3dlZCBieSB3aGl0
ZXNwYWNlLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlJl
dHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmFy
Z3VtZW50KSB7CisgICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hDYXNlIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUudGVzdCkgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiVGhyb3dTdGF0ZW1lbnQiOiBjaGVjawor
ICAgIH07CisKK307CisKK30se31dLDE0MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVxdWlyZSBzcGFjZXMgZm9sbG93aW5nIHVuYXJ5
IHdvcmQgb3BlcmF0b3JzCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOwor
ICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpOworICAgICAg
ICBpZiAodG9rZW5zWzBdLnJhbmdlWzFdID49IHRva2Vuc1sxXS5yYW5nZVswXSkgeworICAgICAg
ICAgICAgc3dpdGNoICh0b2tlbnNbMF0udmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJk
ZWxldGUiOgorICAgICAgICAgICAgICAgIGNhc2UgIm5ldyI6CisgICAgICAgICAgICAgICAgY2Fz
ZSAidHlwZW9mIjoKKyAgICAgICAgICAgICAgICBjYXNlICJ2b2lkIjoKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IHdvcmQgb3BlcmF0b3IgXCIiICsgdG9r
ZW5zWzBdLnZhbHVlICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAg
Ik5ld0V4cHJlc3Npb24iOiBjaGVjaywKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGNoZWNr
CisgICAgfTsKKworfTsKKworfSx7fV0sMTQxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBFbmZvcmNlcyBvciBkaXNhbGxvd3MgYSBzcGFj
ZSBiZWdpbm5pbmcgYSBzaW5nbGUtbGluZSBjb21tZW50LgorICogQGF1dGhvciBHcmVnIENvY2hh
cmQKKyAqIEBjb3B5cmlnaHQgMjAxNCBHcmVnIENvY2hhcmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvLyBVbmxlc3MgdGhlIGZpcnN0IG9wdGlvbiBpcyBu
ZXZlciwgcmVxdWlyZSBhIHNwYWNlCisgICAgdmFyIHJlcXVpcmVTcGFjZSA9IGNvbnRleHQub3B0
aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAgIC8vIERlZmF1bHQgdG8gbWF0Y2ggYW55dGhpbmcs
IHNvIGFsbCB3aWxsIGZhaWwgaWYgdGhlcmUgYXJlIG5vIGV4Y2VwdGlvbnMKKyAgICB2YXIgZXhj
ZXB0aW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoIiAiKTsKKworICAgIC8vIEdyYWIgdGhlIGV4Y2Vw
dGlvbnMgYXJyYXkgYW5kIGJ1aWxkIGEgUmVnRXhwIG1hdGNoZXIgZm9yIGl0CisgICAgdmFyIGhh
c0V4Y2VwdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnMubGVuZ3RoID09PSAyOworICAgIHZhciB1bmVz
Y2FwZWRFeGNlcHRpb25zID0gaGFzRXhjZXB0aW9ucyA/IGNvbnRleHQub3B0aW9uc1sxXS5leGNl
cHRpb25zIDogW107CisgICAgdmFyIGV4Y2VwdGlvbnM7CisKKyAgICBpZiAodW5lc2NhcGVkRXhj
ZXB0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgZXhjZXB0aW9ucyA9IHVuZXNjYXBlZEV4Y2VwdGlv
bnMubWFwKGZ1bmN0aW9uKHMpIHsKKyAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoLyhbLior
PyR7fSgpfFxeXFtcXVwvXFxdKS9nLCAiXFwkMSIpOworICAgICAgICB9KTsKKyAgICAgICAgZXhj
ZXB0aW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoIiheKCIgKyBleGNlcHRpb25zLmpvaW4oIikrJCl8
KF4oIikgKyAiKSskKSIpOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgIkxpbmVDb21tZW50IjogZnVuY3Rpb24gY2hlY2tDb21tZW50Rm9yU3BhY2Uobm9kZSkg
eworCisgICAgICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSA9PT0gMSAmJiAvXiMhLy50
ZXN0KGNvbnRleHQuZ2V0U291cmNlTGluZXMoKVswXSkpIHsKKworICAgICAgICAgICAgICAgIC8q
CisgICAgICAgICAgICAgICAgICogSEFDSzogcmV0dXJuIGlmIHdlIGFyZSBvbiB0aGUgZmlyc3Qg
bGluZSBhbmQKKyAgICAgICAgICAgICAgICAgKiBlbmNvdW50ZXIgYSBzaGViYW5nIGF0IHRoZSBi
ZWdpbm5pbmcuCisgICAgICAgICAgICAgICAgICogSXQgc2VlbXMgdGhlIHBhcnNlciB3aWxsIHJl
dHVybiB0aGlzIGFzIGEKKyAgICAgICAgICAgICAgICAgKiBjb21tZW50IGFuZCBmaWx0ZXIgb3V0
IHRoZSAjIHNvIHdlIG11c3QgZmV0Y2gKKyAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHNv
dXJjZSBsaW5lLiBJcyB0aGlzIGJlaW5nIGNhdXNlZAorICAgICAgICAgICAgICAgICAqIGJ5IGVz
cHJpbWEgb3IgZXNsaW50PyBTb21ldGhpbmcgZWxzZT8KKyAgICAgICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChy
ZXF1aXJlU3BhY2UpIHsKKworICAgICAgICAgICAgICAgIC8vIFNwYWNlIGV4cGVjdGVkIGFuZCBu
b3QgZm91bmQKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YWx1ZS5pbmRleE9mKCIgIikgIT09
IDApIHsKKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBE
byB0d28gdGVzdHM7IG9uZSBmb3Igc3BhY2Ugc3RhcnRpbmcgdGhlIGxpbmUsCisgICAgICAgICAg
ICAgICAgICAgICAqIGFuZCBvbmUgZm9yIGEgY29tbWVudCBjb21wcmlzZWQgb25seSBvZiBleGNl
cHRpb25zCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRXhjZXB0aW9ucyAmJiAhZXhjZXB0aW9uTWF0Y2hlci50ZXN0KG5vZGUudmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgZXhj
ZXB0aW9uIGJsb2NrIG9yIHNwYWNlIGFmdGVyIC8vIGluIGNvbW1lbnQuIik7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBzcGFjZSBhZnRlciAvLyBpbiBj
b21tZW50LiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUuaW5k
ZXhPZigiICIpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIC8vIGluIGNvbW1lbnQuIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworfTsKKworfSx7fV0s
MTQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGVuc3VyZSBjb2RlIGlzIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUuCisgKiBA
YXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKiBAY29weXJpZ2h0IDIwMTMtMjAxNCBOaWNob2xh
cyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IHZhciBzY29wZXMgPSBbXTsKKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgYSBnaXZl
biBub2RlIGlzICJ1c2Ugc3RyaWN0Ii4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG5v
ZGUgaXMgYSBzdHJpY3QgcHJhZ21hLCBmYWxzZSBpZiBub3QuCisgICAgICogQHZvaWQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBpc1N0cmljdFByYWdtYShub2RlKSB7CisgICAgICAgIHJldHVybiAo
bm9kZSAmJiBub2RlLnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICAg
ICAgICAgIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBXaGVuIHlvdSBlbnRlciBhIHNjb3BlLCBwdXNoIHRoZSBzdHJpY3Qg
dmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NvcGUKKyAgICAgKiBvbnRvIHRoZSBzdGFjay4KKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIGJlaW5nIGNoZWNrZWQuCisg
ICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBlbnRlclNjb3BlKG5vZGUpIHsKKworICAgICAgICB2YXIgaXNTdHJpY3QgPSBmYWxzZSwK
KyAgICAgICAgICAgIGlzUHJvZ3JhbSA9IChub2RlLnR5cGUgPT09ICJQcm9ncmFtIiksCisgICAg
ICAgICAgICBpc1BhcmVudEdsb2JhbCA9IHNjb3Blcy5sZW5ndGggPT09IDEsCisgICAgICAgICAg
ICBpc1BhcmVudFN0cmljdCA9IHNjb3Blcy5sZW5ndGggPyBzY29wZXNbc2NvcGVzLmxlbmd0aCAt
IDFdIDogZmFsc2U7CisKKyAgICAgICAgLy8gbG9vayBmb3IgdGhlICJ1c2Ugc3RyaWN0IiBwcmFn
bWEKKyAgICAgICAgaWYgKGlzUHJvZ3JhbSkgeworICAgICAgICAgICAgaXNTdHJpY3QgPSBpc1N0
cmljdFByYWdtYShub2RlLmJvZHlbMF0pIHx8IGlzUGFyZW50U3RyaWN0OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaXNTdHJpY3QgPSBpc1N0cmljdFByYWdtYShub2RlLmJvZHkuYm9k
eVswXSkgfHwgaXNQYXJlbnRTdHJpY3Q7CisgICAgICAgIH0KKworICAgICAgICBzY29wZXMucHVz
aChpc1N0cmljdCk7CisKKyAgICAgICAgLy8gbmV2ZXIgd2FybiBpZiB0aGUgcGFyZW50IGlzIHN0
cmljdCBvciB0aGUgZnVuY3Rpb24gaXMgc3RyaWN0CisgICAgICAgIGlmICghaXNQYXJlbnRTdHJp
Y3QgJiYgIWlzU3RyaWN0ICYmIGlzUGFyZW50R2xvYmFsKSB7CisgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiTWlzc2luZyBcInVzZSBzdHJpY3RcIiBzdGF0ZW1lbnQuIik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaGVuIHlvdSBleGl0IGEgc2NvcGUsIHBv
cCBvZmYgdGhlIHRvcCBzY29wZSBhbmQgc2VlIGlmIGl0J3MgdHJ1ZSBvcgorICAgICAqIGZhbHNl
LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAg
ZnVuY3Rpb24gZXhpdFNjb3BlKCkgeworICAgICAgICBzY29wZXMucG9wKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGVudGVyU2NvcGUsCisgICAgICAgICJG
dW5jdGlvbkRlY2xhcmF0aW9uIjogZW50ZXJTY29wZSwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVz
c2lvbiI6IGVudGVyU2NvcGUsCisKKyAgICAgICAgIlByb2dyYW06ZXhpdCI6IGV4aXRTY29wZSwK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRTY29wZSwKKyAgICAgICAg
IkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZXhpdFNjb3BlCisgICAgfTsKKworfTsKKworfSx7
fV0sMTQzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgY29tcGFyaXNvbnMgdG8gdGhlIHZhbHVlIE5hTgorICogQGF1
dGhvciBKYW1lcyBBbGxhcmRpY2UKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVy
biB7CisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAg
ICAgICAgICBpZiAoIS9eW3wmXl0kLy50ZXN0KG5vZGUub3BlcmF0b3IpICYmIG5vZGUubGVmdC5u
YW1lID09PSAiTmFOIiB8fCBub2RlLnJpZ2h0Lm5hbWUgPT09ICJOYU4iKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgaXNOYU4gZnVuY3Rpb24gdG8gY29t
cGFyZSB3aXRoIE5hTi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307
CisKK30se31dLDE0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgVmFsaWRhdGVzIEpTRG9jIGNvbW1lbnRzIGFyZSBzeW50YWN0aWNhbGx5
IGNvcnJlY3QKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVxdWlyZW1lbnRzCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2YXIgZG9jdHJpbmUgPSByZXF1aXJlKCJkb2N0cmluZSIpOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IHZhciBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBwcmVmZXIg
PSBvcHRpb25zLnByZWZlciB8fCB7fSwKKworICAgICAgICAvLyB0aGVzZSBib3RoIGRlZmF1bHQg
dG8gdHJ1ZSwgc28geW91IGhhdmUgdG8gZXhwbGljaXRseSBtYWtlIHRoZW0gZmFsc2UKKyAgICAg
ICAgcmVxdWlyZVJldHVybiA9IG9wdGlvbnMucmVxdWlyZVJldHVybiA9PT0gZmFsc2UgPyBmYWxz
ZSA6IHRydWUsCisgICAgICAgIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uID0gb3B0aW9ucy5yZXF1
aXJlUGFyYW1EZXNjcmlwdGlvbiA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIC8vIFVzaW5nIGEgc3RhY2sgdG8gc3RvcmUgaWYgYSBmdW5jdGlvbiByZXR1cm5zIG9y
IG5vdCAoaGFuZGxpbmcgbmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107CisKKyAg
ICAvKioKKyAgICAgKiBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91
ciBmdW5jdGlvbiBzdGFjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZucy5w
dXNoKHtyZXR1cm5QcmVzZW50OiBmYWxzZX0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIElu
ZGljYXRlIHRoYXQgcmV0dXJuIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9u
LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgcmV0dXJuIG5vZGUuCisgICAgICog
QHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBh
ZGRSZXR1cm4obm9kZSkgeworICAgICAgICB2YXIgZnVuY3Rpb25TdGF0ZSA9IGZuc1tmbnMubGVu
Z3RoIC0gMV07CisKKyAgICAgICAgaWYgKGZ1bmN0aW9uU3RhdGUgJiYgbm9kZS5hcmd1bWVudCAh
PT0gbnVsbCkgeworICAgICAgICAgICAgZnVuY3Rpb25TdGF0ZS5yZXR1cm5QcmVzZW50ID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoZSBKU0Rv
YyBub2RlIGFuZCBvdXRwdXQgd2FybmluZ3MgaWYgYW55dGhpbmcgaXMgd3JvbmcuCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
SlNEb2Mobm9kZSkgeworICAgICAgICB2YXIganNkb2NOb2RlID0gY29udGV4dC5nZXRKU0RvY0Nv
bW1lbnQobm9kZSksCisgICAgICAgICAgICBmdW5jdGlvbkRhdGEgPSBmbnMucG9wKCksCisgICAg
ICAgICAgICBoYXNSZXR1cm5zID0gZmFsc2UsCisgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9
IGZhbHNlLAorICAgICAgICAgICAgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKSwKKyAgICAg
ICAgICAgIGpzZG9jOworCisgICAgICAgIC8vIG1ha2Ugc3VyZSBvbmx5IHRvIHZhbGlkYXRlIEpT
RG9jIGNvbW1lbnRzCisgICAgICAgIGlmIChqc2RvY05vZGUpIHsKKworICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICBqc2RvYyA9IGRvY3RyaW5lLnBhcnNlKGpzZG9jTm9kZS52YWx1
ZSwgeworICAgICAgICAgICAgICAgICAgICBzdHJpY3Q6IHRydWUsCisgICAgICAgICAgICAgICAg
ICAgIHVud3JhcDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgc2xvcHB5OiB0cnVlCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGNhdGNoIChleCkgeworCisgICAgICAgICAg
ICAgICAgaWYgKC9icmFjZXMvaS50ZXN0KGV4Lm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIkpTRG9jIHR5cGUgbWlzc2luZyBicmFjZS4i
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChqc2RvY05vZGUsICJKU0RvYyBzeW50YXggZXJyb3IuIik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBqc2RvYy50YWdzLmZvckVhY2goZnVuY3Rpb24odGFnKSB7CisKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHRhZy50aXRsZSkgeworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgInBhcmFt
IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9j
IHBhcmFtZXRlciB0eXBlIGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGFnLmRlc2NyaXB0aW9uICYmIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0Rv
YyBwYXJhbWV0ZXIgZGVzY3JpcHRpb24gZm9yICd7e25hbWV9fScuIiwgeyBuYW1lOiB0YWcubmFt
ZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmFtc1t0YWcubmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJEdXBsaWNhdGUgSlNEb2MgcGFyYW1ldGVyICd7e25h
bWV9fScuIiwgeyBuYW1lOiB0YWcubmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGFnLm5hbWUuaW5kZXhPZigiLiIpID09PSAtIDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbdGFnLm5hbWVdID0gMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgInJldHVybiI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInJldHVybnMiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmV0dXJucyA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghcmVxdWlyZVJldHVybiAmJiAhZnVuY3Rpb25EYXRhLnJldHVyblBy
ZXNlbnQgJiYgdGFnLnR5cGUubmFtZSAhPT0gInZvaWQiICYmIHRhZy50eXBlLm5hbWUgIT09ICJ1
bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
anNkb2NOb2RlLCAiVW5leHBlY3RlZCBAIiArIHRhZy50aXRsZSArICIgdGFnOyBmdW5jdGlvbiBo
YXMgbm8gcmV0dXJuIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcudHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNz
aW5nIEpTRG9jIHJldHVybiB0eXBlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcudHlwZS5uYW1lICE9PSAidm9p
ZCIgJiYgIXRhZy5kZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHJldHVybiBkZXNjcmlw
dGlvbi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgImNvbnN0cnVjdG9yIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
c0NvbnN0cnVjdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBjaGVjayB0YWcgcHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICBp
ZiAocHJlZmVyLmhhc093blByb3BlcnR5KHRhZy50aXRsZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiVXNlIEB7e25hbWV9fSBpbnN0ZWFkLiIsIHsg
bmFtZTogcHJlZmVyW3RhZy50aXRsZV0gfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGZ1bmN0aW9ucyBtaXNzaW5nIEBy
ZXR1cm5zCisgICAgICAgICAgICBpZiAoIWhhc1JldHVybnMgJiYgIWhhc0NvbnN0cnVjdG9yKSB7
CisgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVSZXR1cm4gfHwgZnVuY3Rpb25EYXRhLnJldHVy
blByZXNlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2Rl
LCAiTWlzc2luZyBKU0RvYyBAcmV0dXJucyBmb3IgZnVuY3Rpb24uIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVjayB0aGUgcGFyYW1ldGVy
cworICAgICAgICAgICAgdmFyIGpzZG9jUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1zKTsKKwor
ICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSwgaSkgeworICAg
ICAgICAgICAgICAgIHZhciBuYW1lID0gcGFyYW0ubmFtZTsKKworICAgICAgICAgICAgICAgIGlm
IChqc2RvY1BhcmFtc1tpXSAmJiAobmFtZSAhPT0ganNkb2NQYXJhbXNbaV0pKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIkV4cGVjdGVkIEpTRG9jIGZv
ciAne3tuYW1lfX0nIGJ1dCBmb3VuZCAne3tqc2RvY05hbWV9fScuIiwgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzZG9jTmFt
ZToganNkb2NQYXJhbXNbaV0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghcGFyYW1zW25hbWVdKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgZm9yIHBhcmFtZXRlciAne3tuYW1l
fX0nLiIsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgfQorCisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGNo
ZWNrSlNEb2MsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBjaGVja0pTRG9j
LAorICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogYWRkUmV0dXJuCisgICAgfTsKKworfTsKKwor
fSx7ImRvY3RyaW5lIjo0fV0sMTQ1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBFbnN1cmVzIHRoYXQgdGhlIHJlc3VsdHMgb2YgdHlwZW9m
IGFyZSBjb21wYXJlZCBhZ2FpbnN0IGEgdmFsaWQgc3RyaW5nCisgKiBAYXV0aG9yIElhbiBDaHJp
c3RpYW4gTXllcnMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBWQUxJRF9UWVBFUyA9IFsi
c3ltYm9sIiwgInVuZGVmaW5lZCIsICJvYmplY3QiLCAiYm9vbGVhbiIsICJudW1iZXIiLCAic3Ry
aW5nIiwgImZ1bmN0aW9uIl0sCisgICAgICAgIE9QRVJBVE9SUyA9IFsiPT0iLCAiPT09IiwgIiE9
IiwgIiE9PSJdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlVuYXJ5RXhw
cmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICB2YXIgcGFyZW50LCBzaWJs
aW5nOworCisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gInR5cGVvZiIpIHsKKyAg
ICAgICAgICAgICAgICBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworCisg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAiQmluYXJ5RXhwcmVzc2lvbiIgJiYg
T1BFUkFUT1JTLmluZGV4T2YocGFyZW50Lm9wZXJhdG9yKSAhPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2libGluZyA9IHBhcmVudC5sZWZ0ID09PSBub2RlID8gcGFyZW50LnJpZ2h0IDog
cGFyZW50LmxlZnQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcudHlwZSA9PT0g
IkxpdGVyYWwiICYmIFZBTElEX1RZUEVTLmluZGV4T2Yoc2libGluZy52YWx1ZSkgPT09IC0xKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChzaWJsaW5nLCAiSW52YWxp
ZCB0eXBlb2YgY29tcGFyaXNvbiB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9Owor
Cit9LHt9XSwxNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSB2YXIgZGVjbGFyYXRpb25zIGFyZSBvbmx5IGF0
IHRoZSB0b3Agb2YgYSBmdW5jdGlvbi4KKyAqIEBhdXRob3IgRGFubnkgRnJpdHoKKyAqIEBhdXRo
b3IgR3lhbmRlZXAgU2luZ2gKKyAqIEBjb3B5cmlnaHQgMjAxNCBEYW5ueSBGcml0ei4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIEBjb3B5cmlnaHQgMjAxNCBHeWFuZGVlcCBTaW5naC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgdmFyIGVycm9yTWVzc2FnZSA9
ICJBbGwgXCJ2YXJcIiBkZWNsYXJhdGlvbnMgbXVzdCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmdW5j
dGlvbiBzY29wZS4iOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgLSBhbnkgbm9kZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRo
ZSBnaXZlbiBub2RlIHN0cnVjdHVyYWxseSByZXByZXNlbnRzIGEgZGlyZWN0aXZlCisgICAgICov
CisgICAgZnVuY3Rpb24gbG9va3NMaWtlRGlyZWN0aXZlKG5vZGUpIHsKKyAgICAgICByZXR1cm4g
bm9kZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgbm9kZS5l
eHByZXNzaW9uLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZh
bHVlID09PSAic3RyaW5nIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhl
ciB0aGlzIHZhcmlhYmxlIGlzIG9uIHRvcCBvZiB0aGUgYmxvY2sgYm9keQorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1RO
b2RlW119IHN0YXRlbWVudHMgLSBjb2xsZWN0aW9uIG9mIEFTVE5vZGVzIGZvciB0aGUgcGFyZW50
IG5vZGUgYmxvY2sKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB2YXIgaXMgb24g
dG9wIG90aGVyd2lzZSBmYWxzZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzVmFyT25Ub3AgKG5v
ZGUsIHN0YXRlbWVudHMpIHsKKyAgICAgICAgdmFyIGkgPSAwLCBsID0gc3RhdGVtZW50cy5sZW5n
dGg7CisKKyAgICAgICAgLy8gc2tpcCBvdmVyIGRpcmVjdGl2ZXMKKyAgICAgICAgZm9yICg7IGkg
PCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbG9va3NMaWtlRGlyZWN0aXZlKHN0YXRlbWVu
dHNbaV0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0YXRl
bWVudHNbaV0udHlwZSAhPT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRlbWVu
dHNbaV0gPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVy
IHZhcmlhYmxlIGlzIG9uIHRvcCBhdCB0aGUgZ2xvYmFsIGxldmVsCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IHBhcmVudCAtIFBhcmVudCBvZiB0aGUgbm9kZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGdsb2JhbFZhckNoZWNrIChub2RlLCBwYXJlbnQpIHsKKyAgICAg
ICAgaWYgKCFpc1Zhck9uVG9wKG5vZGUsIHBhcmVudC5ib2R5KSkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIHZhcmlhYmxlIGlzIG9uIHRvcCBhdCBmdW5jdGlv
bmFsIGJsb2NrIHNjb3BlIGxldmVsCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhl
IG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmVudCAtIFBhcmVudCBv
ZiB0aGUgbm9kZQorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZ3JhbmRQYXJlbnQgLSBQYXJlbnQg
b2YgdGhlIG5vZGUncyBwYXJlbnQKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBibG9ja1Njb3BlVmFyQ2hlY2sgKG5vZGUsIHBhcmVudCwgZ3JhbmRQYXJlbnQp
IHsKKyAgICAgICAgaWYgKCEoKGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0
aW9uIgorICAgICAgICAgICAgfHwgZ3JhbmRQYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVz
c2lvbiIpCisgICAgICAgICAgICAmJiBwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50Igor
ICAgICAgICAgICAgJiYgaXNWYXJPblRvcChub2RlLCBwYXJlbnQuYm9keSkpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJh
dGlvbiI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29u
dGV4dC5nZXRBbmNlc3RvcnMoKTsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBhbmNlc3RvcnMu
cG9wKCk7CisgICAgICAgICAgICB2YXIgZ3JhbmRQYXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7CisK
KyAgICAgICAgICAgIGlmIChub2RlLmtpbmQgPT09ICJ2YXIiKSB7Ly8gY2hlY2sgdmFyaWFibGUg
aXMgYHZhcmAgdHlwZSBhbmQgbm90IGBsZXRgIG9yIGBjb25zdGAKKyAgICAgICAgICAgICAgICBp
ZiAocGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIikgey8vIFRoYXQgbWVhbnMgaXRzIGEgZ2xvYmFs
IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhckNoZWNrKG5vZGUsIHBhcmVu
dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tT
Y29wZVZhckNoZWNrKG5vZGUsIHBhcmVudCwgZ3JhbmRQYXJlbnQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDE0Nzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHdoZW4gSUlGRSBpcyBub3Qgd3JhcHBlZCBpbiBwYXJlbnMKKyAqIEBhdXRo
b3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisgICAgdmFyIHN0eWxlID0g
Y29udGV4dC5vcHRpb25zWzBdIHx8ICJvdXRzaWRlIjsKKworICAgIGZ1bmN0aW9uIHdyYXBwZWQo
bm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZv
cmUobm9kZSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIo
bm9kZSk7CisgICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4udmFs
dWUgPT09ICIoIiAmJgorICAgICAgICAgICAgbmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSA9
PT0gIikiOworICAgIH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09
ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxFeHByZXNz
aW9uV3JhcHBlZCA9IHdyYXBwZWQobm9kZSksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
RXhwcmVzc2lvbldyYXBwZWQgPSB3cmFwcGVkKG5vZGUuY2FsbGVlKTsKKworICAgICAgICAgICAg
ICAgIGlmICghY2FsbEV4cHJlc3Npb25XcmFwcGVkICYmICFmdW5jdGlvbkV4cHJlc3Npb25XcmFw
cGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIGFu
IGltbWVkaWF0ZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGluIHBhcmVudGhlc2VzLiIpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJpbnNpZGUiICYmICFmdW5jdGlvbkV4cHJl
c3Npb25XcmFwcGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJXcmFwIG9ubHkgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gaW4gcGFyZW5zLiIpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJvdXRzaWRlIiAmJiAhY2FsbEV4cHJlc3Np
b25XcmFwcGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJN
b3ZlIHRoZSBpbnZvY2F0aW9uIGludG8gdGhlIHBhcmVucyB0aGF0IGNvbnRhaW4gdGhlIGZ1bmN0
aW9uLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDE0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmVnZXggbGl0ZXJhbHMg
YXJlIG5vdCB3cmFwcGVkIGluIHBhcmVucworICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDov
L3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2
YXIgdG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZSksCisgICAgICAgICAgICAgICAg
bm9kZVR5cGUgPSB0b2tlbi50eXBlLAorICAgICAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAg
ICAgICAgICBncmFuZHBhcmVudCwKKyAgICAgICAgICAgICAgICBhbmNlc3RvcnM7CisKKyAgICAg
ICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHByZXNzaW9uIikgeworICAgICAgICAg
ICAgICAgIHNvdXJjZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSk7CisgICAgICAgICAg
ICAgICAgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTsKKyAgICAgICAgICAgICAg
ICBncmFuZHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07CisKKyAgICAg
ICAgICAgICAgICBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYm
IGdyYW5kcGFyZW50Lm9iamVjdCA9PT0gbm9kZSAmJgorICAgICAgICAgICAgICAgICAgICAoIXNv
dXJjZSB8fCBzb3VyY2UudmFsdWUgIT09ICIoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIldyYXAgdGhlIHJlZ2V4cCBsaXRlcmFsIGluIHBhcmVucyB0byBk
aXNhbWJpZ3VhdGUgdGhlIHNsYXNoLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDE0OTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byByZXF1aXJl
IG9yIGRpc2FsbG93IHlvZGEgY29tcGFyaXNvbnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFr
YXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uIChjb250ZXh0KSB7CisKKyAgICAvLyBEZWZhdWx0IHRvICJuZXZlciIgKCFhbHdh
eXMpIGlmIG5vIG9wdGlvbgorCisgICAgdmFyIGFsd2F5cyA9IChjb250ZXh0Lm9wdGlvbnNbMF0g
PT09ICJhbHdheXMiKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJz
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3
aGV0aGVyIGFuIG9wZXJhdG9yIGlzIGEgY29tcGFyaXNvbiBvcGVyYXRvci4KKyAgICAgKiBAcGFy
YW0ge1N0cmluZ30gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGNoZWNrLgorICAgICAqIEByZXR1
cm5zIHtCb29sZWFufSBXaGV0aGVyIG9yIG5vdCBpdCBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3Iu
CisgICAgICovCisgICAgZnVuY3Rpb24gaXNDb21wYXJpc29uT3BlcmF0b3Iob3BlcmF0b3IpIHsK
KyAgICAgICAgcmV0dXJuICgvXig9PXw9PT18IT18IT09fDx8Pnw8PXw+PSkkLykudGVzdChvcGVy
YXRvcik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkJpbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworCisgICAgICAgICAgICBpZiAoYWx3YXlz
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wYXJpc29ucyBtdXN0IGFsd2F5cyBiZSB5b2Rh
LXN0eWxlOiBpZiAoImJsdWUiID09PSBjb2xvcikKKworICAgICAgICAgICAgICAgIGlmIChub2Rl
LnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBpc0NvbXBhcmlzb25PcGVyYXRvcihub2RlLm9w
ZXJhdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhw
ZWN0ZWQgbGl0ZXJhbCB0byBiZSBvbiB0aGUgbGVmdCBzaWRlIG9mICIgKyBub2RlLm9wZXJhdG9y
ICsgIi4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgICAgICAvLyBDb21wYXJpc29ucyBtdXN0IG5ldmVyIGJlIHlvZGEtc3R5bGUgKGRl
ZmF1bHQpCisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFs
IiAmJiBpc0NvbXBhcmlzb25PcGVyYXRvcihub2RlLm9wZXJhdG9yKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgbGl0ZXJhbCB0byBiZSBvbiB0
aGUgcmlnaHQgc2lkZSBvZiAiICsgbm9kZS5vcGVyYXRvciArICIuIik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sMTUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBDb21tb24gdXRpbGl0aWVzLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBQdWJsaWMgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLyoqCisgKiBNZXJnZXMgdHdvIG9iamVjdHMgdG9nZXRoZXIgYW5kIGFzc2lnbnMgdGhl
IHJlc3VsdCB0byB0aGUgaW5pdGlhbCBvYmplY3QuIENhbiBiZSB1c2VkIGZvciBzaGFsbG93IGNs
b25pbmcuCisgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IG9mIHRoZSBjbG9uaW5nIG9wZXJhdGlv
bgorICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBvYmplY3QKKyAqIEByZXR1cm5zIHt2b2lkfQor
ICovCitleHBvcnRzLm1peGluID0gZnVuY3Rpb24odGFyZ2V0LCBzb3VyY2UpIHsKKyAgICBPYmpl
Y3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIHRhcmdldFtr
ZXldID0gc291cmNlW2tleV07CisgICAgfSk7Cit9OworCisvKioKKyAqIE1lcmdlcyB0d28gY29u
ZmlnIG9iamVjdHMuIFRoaXMgd2lsbCBub3Qgb25seSBhZGQgbWlzc2luZyBrZXlzLCBidXQgd2ls
bCBhbHNvIG1vZGlmeSB2YWx1ZXMgdG8gbWF0Y2guCisgKiBAcGFyYW0ge09iamVjdH0gYmFzZSBj
b25maWcgb2JqZWN0CisgKiBAcGFyYW0ge09iamVjdH0gY3VzdG9tIGNvbmZpZyBvYmplY3QuIE92
ZXJyaWRlcyBpbiB0aGlzIGNvbmZpZyBvYmplY3Qgd2lsbCB0YWtlIHByaW9yaXR5IG92ZXIgYmFz
ZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IG1lcmdlZCBjb25maWcgb2JqZWN0LgorICovCitleHBv
cnRzLm1lcmdlQ29uZmlncyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhiYXNlLCBjdXN0b20pIHsK
KworICAgIE9iamVjdC5rZXlzKGN1c3RvbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CisgICAg
ICAgIHZhciBwcm9wZXJ0eSA9IGN1c3RvbVtrZXldOworCisgICAgICAgIGlmIChrZXkgPT09ICJw
bHVnaW5zIikgeworICAgICAgICAgICAgaWYgKCFiYXNlW2tleV0pIHsKKyAgICAgICAgICAgICAg
ICBiYXNlW2tleV0gPSBbXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvcGVydHku
Zm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBkdXBs
aWNhdGVzCisgICAgICAgICAgICAgICAgaWYgKGJhc2Vba2V5XS5pbmRleE9mKHBsdWdpbikgPT09
IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGJhc2Vba2V5XS5wdXNoKHBsdWdpbik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYXNlW2tleV0pICYmICFBcnJheS5p
c0FycmF5KHByb3BlcnR5KSAmJiB0eXBlb2YgcHJvcGVydHkgPT09ICJudW1iZXIiKSB7CisgICAg
ICAgICAgICAvLyBhc3N1bWUgdGhhdCB3ZSBhcmUganVzdCBvdmVycmlkaW5nIGZpcnN0IGF0dHJp
YnV0ZQorICAgICAgICAgICAgYmFzZVtrZXldWzBdID0gY3VzdG9tW2tleV07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAi
b2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgIC8vIGJh
c2Vba2V5XSBtaWdodCBub3QgZXhpc3QsIHNvIGJlIGNhcmVmdWwgd2l0aCByZWN1cnNpb24gaGVy
ZQorICAgICAgICAgICAgYmFzZVtrZXldID0gbWVyZ2VDb25maWdzKGJhc2Vba2V5XSB8fCB7fSwg
Y3VzdG9tW2tleV0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVtrZXldID0g
Y3VzdG9tW2tleV07CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHJldHVybiBiYXNlOworfTsK
KworfSx7fV19LHt9LFs5XSkoOSkKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="264580"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="264581"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240048</attachid>
            <date>2014-10-17 16:05:08 -0700</date>
            <delta_ts>2014-10-17 16:09:18 -0700</delta_ts>
            <desc>[PATCH] eslint addition FIX.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>624721</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRl
cmZhY2UtcmVzb3VyY2VzLnBsIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11
c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwKaW5kZXggNGZhZGZjNy4uZDYwYzRjNyAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1y
ZXNvdXJjZXMucGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGwKQEAgLTEwMCw5ICsxMDAsMTEgQEAgbXkgJHRhcmdldFJl
c291cmNlUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkRU5WeydUQVJHRVRfQlVJTERfRElSJ30s
ICRFTlZ7J1VOTE8KIG15ICRwcm90b2NvbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0
UmVzb3VyY2VQYXRoLCAnUHJvdG9jb2wnKTsKIG15ICRjb2RlTWlycm9yUGF0aCA9IEZpbGU6OlNw
ZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnQ29kZU1pcnJvcicpOwogbXkgJGVzcHJp
bWFQYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRlcm5hbCcsICdFc3ByaW1h
Jyk7CitteSAkZXNsaW50UGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJu
YWwnLCAnRVNMaW50Jyk7CiAKIG15ICRjb2RlTWlycm9yTGljZW5zZSA9IHJlYWRMaWNlbnNlRmls
ZShGaWxlOjpTcGVjLT5jYXRmaWxlKCRjb2RlTWlycm9yUGF0aCwgJ0xJQ0VOU0UnKSk7Ci1teSAk
ZXNwcmltYU1pcnJvckxpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0Zmls
ZSgkZXNwcmltYVBhdGgsICdMSUNFTlNFJykpOworbXkgJGVzcHJpbWFMaWNlbnNlID0gcmVhZExp
Y2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzcHJpbWFQYXRoLCAnTElDRU5TRScpKTsK
K215ICRlc2xpbnRMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUo
JGVzbGludFBhdGgsICdMSUNFTlNFJykpOwogCiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFy
Z2V0UmVzb3VyY2VQYXRoKTsKIApAQCAtMTIzLDYgKzEyNSw5IEBAIGlmIChkZWZpbmVkICRFTlZ7
J0NPTUJJTkVfSU5TUEVDVE9SX1JFU09VUkNFUyd9ICYmICgkRU5WeydDT01CSU5FX0lOU1BFQ1RP
Ul9SRVNPCiAgICAgIyBDb21iaW5lIHRoZSBFc3ByaW1hIEphdmFTY3JpcHQgZmlsZXMgaW4gUHJv
ZHVjdGlvbiBidWlsZHMgaW50byBhIHNpbmdsZSBmaWxlIChFc3ByaW1hLmpzKS4KICAgICBzeXN0
ZW0oJGNvbWJpbmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9Fc3ByaW1h
JywgJy0taW5wdXQtaHRtbCcsICRkZXJpdmVkU291cmNlc01haW5IVE1MLCAnLS1pbnB1dC1odG1s
LWRpcicsICR1aVJvb3QsICctLWRlcml2ZWQtc291cmNlcy1kaXInLCAkZGVyaXZlZFNvdXJjZXNE
aXIsICctLW91dHB1dC1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91dHB1dC1zY3JpcHQt
bmFtZScsICdFc3ByaW1hLmpzJyk7CiAKKyAgICAjIENvbWJpbmUgdGhlIEVTTGludCBKYXZhU2Ny
aXB0IGZpbGVzIGluIFByb2R1Y3Rpb24gYnVpbGRzIGludG8gYSBzaW5nbGUgZmlsZSAoRVNMaW50
LmpzKS4KKyAgICBzeXN0ZW0oJGNvbWJpbmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdF
eHRlcm5hbC9FU0xpbnQnLCAnLS1pbnB1dC1odG1sJywgJGRlcml2ZWRTb3VyY2VzTWFpbkhUTUws
ICctLWlucHV0LWh0bWwtZGlyJywgJHVpUm9vdCwgJy0tZGVyaXZlZC1zb3VyY2VzLWRpcicsICRk
ZXJpdmVkU291cmNlc0RpciwgJy0tb3V0cHV0LWRpcicsICRkZXJpdmVkU291cmNlc0RpciwgJy0t
b3V0cHV0LXNjcmlwdC1uYW1lJywgJ0VTTGludC5qcycpOworCiAgICAgIyBSZW1vdmUgY29uc29s
ZS5hc3NlcnQgY2FsbHMgZnJvbSB0aGUgTWFpbi5qcyBmaWxlLgogICAgIG15ICRkZXJpdmVkU291
cmNlc01haW5KUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnTWFp
bi5qcycpOwogICAgIHN5c3RlbShGaWxlOjpTcGVjLT5jYXRmaWxlKCRzY3JpcHRzUm9vdCwgJ3Jl
bW92ZS1jb25zb2xlLWFzc2VydHMucGwnKSwgJy0taW5wdXQtc2NyaXB0JywgJGRlcml2ZWRTb3Vy
Y2VzTWFpbkpTLCAnLS1vdXRwdXQtc2NyaXB0JywgJGRlcml2ZWRTb3VyY2VzTWFpbkpTKTsKQEAg
LTE1NSw3ICsxNjAsMTEgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVT
T1VSQ0VTJ30gJiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KIAogICAgICMgRXhwb3J0
IHRoZSBsaWNlbnNlIGludG8gRXNwcmltYS5qcy4KICAgICBteSAkdGFyZ2V0RXNwcmltYUpTID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnRXNwcmltYS5qcycpOwot
ICAgIHNlZWRGaWxlKCR0YXJnZXRFc3ByaW1hSlMsICRlc3ByaW1hTWlycm9yTGljZW5zZSk7Cisg
ICAgc2VlZEZpbGUoJHRhcmdldEVzcHJpbWFKUywgJGVzcHJpbWFMaWNlbnNlKTsKKworICAgICMg
RXhwb3J0IHRoZSBsaWNlbnNlIGludG8gRVNMaW50LmpzLgorICAgIG15ICR0YXJnZXRFU0xpbnRK
UyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRhcmdldFJlc291cmNlUGF0aCwgJ0VTTGludC5qcycp
OworICAgIHNlZWRGaWxlKCR0YXJnZXRFU0xpbnRKUywgJGVzbGludExpY2Vuc2UpOwogCiAgICAg
IyBNaW5pZnkgdGhlIE1haW4uanMgYW5kIE1haW4uY3NzIGZpbGVzLCB3aXRoIE1haW4uanMgYXBw
ZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgogICAgIG15ICRq
c01pblNjcmlwdCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHNjcmlwdHNSb290LCAnanNtaW4ucHkn
KTsKQEAgLTE3Myw2ICsxODIsMTAgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNU
T1JfUkVTT1VSQ0VTJ30gJiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KICAgICBteSAk
ZGVyaXZlZFNvdXJlc3NFc3ByaW1hSlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291
cmNlc0RpciwgJ0VzcHJpbWEuanMnKTsKICAgICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5T
Y3JpcHQiIDwgIiRkZXJpdmVkU291cmVzc0VzcHJpbWFKUyIgPj4gIiR0YXJnZXRFc3ByaW1hSlMi
KSkgYW5kIGRpZSAiRmFpbGVkIHRvIG1pbmlmeSAkZGVyaXZlZFNvdXJlc3NFc3ByaW1hSlM6ICQh
IjsKIAorICAgICMgTWluaWZ5IHRoZSBFU0xpbnQuanMgZmlsZSwgYXBwZW5kaW5nIHRvIHRoZSBs
aWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgorICAgIG15ICRkZXJpdmVkU291cmVzc0VT
TGludEpTID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGVyaXZlZFNvdXJjZXNEaXIsICdFU0xpbnQu
anMnKTsKKyAgICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5TY3JpcHQiIDwgIiRkZXJpdmVk
U291cmVzc0VTTGludEpTIiA+PiAiJHRhcmdldEVTTGludEpTIikpIGFuZCBkaWUgIkZhaWxlZCB0
byBtaW5pZnkgJGRlcml2ZWRTb3VyZXNzRVNMaW50SlM6ICQhIjsKKwogICAgICMgQ29weSBvdmVy
IE1haW4uaHRtbCBhbmQgdGhlIEltYWdlcyBkaXJlY3RvcnkuCiAgICAgY29weSgkZGVyaXZlZFNv
dXJjZXNNYWluSFRNTCwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAn
TWFpbi5odG1sJykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRSBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ1ZjA0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRQpAQCAtMCwwICsx
LDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMTQgVEogSG9sb3dheWNodWsgPHRqQHZpc2lvbi1tZWRp
YS5jYT4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvIGRlYWwKK2luIHRo
ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0
aW9uIHRoZSByaWdodHMgdG8gCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJl
LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVk
IHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U
IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM
SU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQu
anMKQEAgLTAsMCArMSwxODIyMyBAQAorIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2Yg
ZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vs
c2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7
ZWxzZXt2YXIgZjsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz9mPXdpbmRvdzoidW5kZWZpbmVk
IiE9dHlwZW9mIGdsb2JhbD9mPWdsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJihmPXNl
bGYpLGYuZXNsaW50PWUoKX19KGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0czty
ZXR1cm4gKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRb
b10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJl
dHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3Qg
ZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12
YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUp
e3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1y
ZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1
aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cz17CisgICAgImJ1
aWx0aW4iOiB7CisgICAgICAgICJOYU4iOiBmYWxzZSwKKyAgICAgICAgIkluZmluaXR5IjogZmFs
c2UsCisgICAgICAgICJ1bmRlZmluZWQiOiBmYWxzZSwKKyAgICAgICAgImV2YWwiOiBmYWxzZSwK
KworICAgICAgICAicGFyc2VGbG9hdCI6IGZhbHNlLAorICAgICAgICAicGFyc2VJbnQiOiBmYWxz
ZSwKKyAgICAgICAgImlzTmFOIjogZmFsc2UsCisgICAgICAgICJpc0Zpbml0ZSI6IGZhbHNlLAor
CisgICAgICAgICJkZWNvZGVVUkkiOiBmYWxzZSwKKyAgICAgICAgImRlY29kZVVSSUNvbXBvbmVu
dCI6IGZhbHNlLAorICAgICAgICAiZW5jb2RlVVJJIjogZmFsc2UsCisgICAgICAgICJlbmNvZGVV
UklDb21wb25lbnQiOiBmYWxzZSwKKworICAgICAgICAiT2JqZWN0IjogZmFsc2UsCisgICAgICAg
ICJGdW5jdGlvbiI6IGZhbHNlLAorICAgICAgICAiQXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlN0
cmluZyI6IGZhbHNlLAorICAgICAgICAiQm9vbGVhbiI6IGZhbHNlLAorICAgICAgICAiTWFwIjog
ZmFsc2UsCisgICAgICAgICJOdW1iZXIiOiBmYWxzZSwKKyAgICAgICAgIkRhdGUiOiBmYWxzZSwK
KyAgICAgICAgIlJlZ0V4cCI6IGZhbHNlLAorICAgICAgICAiRXJyb3IiOiBmYWxzZSwKKyAgICAg
ICAgIkV2YWxFcnJvciI6IGZhbHNlLAorICAgICAgICAiUmFuZ2VFcnJvciI6IGZhbHNlLAorICAg
ICAgICAiUmVmZXJlbmNlRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlNldCI6IGZhbHNlLAorICAg
ICAgICAiU3ludGF4RXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlR5cGVFcnJvciI6IGZhbHNlLAor
ICAgICAgICAiVVJJRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIldlYWtNYXAiOiBmYWxzZSwKKyAg
ICAgICAgIldlYWtTZXQiOiBmYWxzZSwKKworICAgICAgICAiQXJyYXlCdWZmZXIiOiBmYWxzZSwK
KyAgICAgICAgIkZsb2F0MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiRmxvYXQ2NEFycmF5Ijog
ZmFsc2UsCisgICAgICAgICJJbnQxNkFycmF5IjogZmFsc2UsCisgICAgICAgICJJbnQzMkFycmF5
IjogZmFsc2UsCisgICAgICAgICJJbnQ4QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlVpbnQxNkFy
cmF5IjogZmFsc2UsCisgICAgICAgICJVaW50MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWlu
dDhBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWludDhDbGFtcGVkQXJyYXkiOiBmYWxzZSwKKwor
ICAgICAgICAiTWF0aCI6IGZhbHNlLAorICAgICAgICAiSlNPTiI6IGZhbHNlLAorCisgICAgICAg
ICJ0b1N0cmluZyI6IGZhbHNlLAorICAgICAgICAiaGFzT3duUHJvcGVydHkiOiBmYWxzZSwKKyAg
ICAgICAgInZhbHVlT2YiOiBmYWxzZSwKKyAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIjog
ZmFsc2UsCisgICAgICAgICJjb25zdHJ1Y3RvciI6IGZhbHNlLAorICAgICAgICAiaXNQcm90b3R5
cGVPZiI6IGZhbHNlLAorICAgICAgICAidG9Mb2NhbGVTdHJpbmciOiBmYWxzZQorICAgIH0sCisK
KyAgICAiYnJvd3NlciI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAiYWRk
RXZlbnRMaXN0ZW5lciI6IGZhbHNlLAorICAgICAgICAgICAgImFwcGxpY2F0aW9uQ2FjaGUiOiBm
YWxzZSwKKyAgICAgICAgICAgICJhdG9iIjogZmFsc2UsCisgICAgICAgICAgICAiQXVkaW8iOiBm
YWxzZSwKKyAgICAgICAgICAgICJCbG9iIjogZmFsc2UsCisgICAgICAgICAgICAiYmx1ciI6IGZh
bHNlLAorICAgICAgICAgICAgImJ0b2EiOiBmYWxzZSwKKyAgICAgICAgICAgICJjYW5jZWxBbmlt
YXRpb25GcmFtZSI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBmYWxzZSwK
KyAgICAgICAgICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbG9zZSI6
IGZhbHNlLAorICAgICAgICAgICAgImNsb3NlZCI6IGZhbHNlLAorICAgICAgICAgICAgImNyeXB0
byI6IGZhbHNlLAorICAgICAgICAgICAgIkRhdGFWaWV3IjogZmFsc2UsCisgICAgICAgICAgICAi
ZGVmYXVsdFN0YXR1cyI6IGZhbHNlLAorICAgICAgICAgICAgImRldmljZVBpeGVsUmF0aW8iOiBm
YWxzZSwKKyAgICAgICAgICAgICJkaXNwYXRjaEV2ZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
ZG9jdW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJET01QYXJzZXIiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiRmlsZVJlYWRlciI6IGZhbHNl
LAorICAgICAgICAgICAgImZpbmQiOiBmYWxzZSwKKyAgICAgICAgICAgICJmb2N1cyI6IGZhbHNl
LAorICAgICAgICAgICAgIkZvcm1EYXRhIjogZmFsc2UsCisgICAgICAgICAgICAiZnJhbWVFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiZnJhbWVzIjogZmFsc2UsCisgICAgICAgICAgICAi
Z2V0Q29tcHV0ZWRTdHlsZSI6IGZhbHNlLAorICAgICAgICAgICAgImdldFNlbGVjdGlvbiI6IGZh
bHNlLAorICAgICAgICAgICAgImhpc3RvcnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQW5j
aG9yRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCYXNlRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxCb2R5RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhU
TUxCUkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIkhUTUxDYW52YXNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiSFRNTERpcmVjdG9yeUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRGl2RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxETGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNl
dEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRm9udEVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1M
RnJhbWVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZyYW1lU2V0RWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIZWFkRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIkhUTUxIZWFkaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIUkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MSHRtbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJIVE1MSUZyYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJbWFn
ZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTExhYmVsRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhU
TUxMZWdlbmRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTExJRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIkhUTUxMaW5rRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkhUTUxNYXBFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1lbnVFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiSFRNTE1vZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxPTGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJIVE1MT3B0R3JvdXBFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9w
dGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MUGFyYWdyYXBoRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJIVE1MUHJlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxRdW90ZUVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFN0
eWxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRN
TFRhYmxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MVGl0bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFVMaXN0RWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJJbWFnZSI6IGZhbHNlLAorICAgICAgICAgICAgImluZGV4ZWREQiI6IGZhbHNlLAorICAg
ICAgICAgICAgImlubmVySGVpZ2h0IjogZmFsc2UsCisgICAgICAgICAgICAiaW5uZXJXaWR0aCI6
IGZhbHNlLAorICAgICAgICAgICAgIkludGwiOiBmYWxzZSwKKyAgICAgICAgICAgICJsZW5ndGgi
OiBmYWxzZSwKKyAgICAgICAgICAgICJsb2NhbFN0b3JhZ2UiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJsb2NhdGlvbiI6IGZhbHNlLAorICAgICAgICAgICAgIm1hdGNoTWVkaWEiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJNZXNzYWdlQ2hhbm5lbCI6IGZhbHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VF
dmVudCI6IGZhbHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VQb3J0IjogZmFsc2UsCisgICAgICAg
ICAgICAibW92ZUJ5IjogZmFsc2UsCisgICAgICAgICAgICAibW92ZVRvIjogZmFsc2UsCisgICAg
ICAgICAgICAiTXV0YXRpb25PYnNlcnZlciI6IGZhbHNlLAorICAgICAgICAgICAgIm5hbWUiOiBm
YWxzZSwKKyAgICAgICAgICAgICJuYXZpZ2F0b3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJOb2Rl
IjogZmFsc2UsCisgICAgICAgICAgICAiTm9kZUZpbHRlciI6IGZhbHNlLAorICAgICAgICAgICAg
Im9uYmVmb3JldW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmJsdXIiOiB0cnVlLAorICAg
ICAgICAgICAgIm9uZXJyb3IiOiB0cnVlLAorICAgICAgICAgICAgIm9uZm9jdXMiOiB0cnVlLAor
ICAgICAgICAgICAgIm9ubG9hZCI6IHRydWUsCisgICAgICAgICAgICAib25yZXNpemUiOiB0cnVl
LAorICAgICAgICAgICAgIm9udW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvcGVuIjogZmFs
c2UsCisgICAgICAgICAgICAib3BlbkRhdGFiYXNlIjogZmFsc2UsCisgICAgICAgICAgICAib3Bl
bmVyIjogZmFsc2UsCisgICAgICAgICAgICAiT3B0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAi
b3V0ZXJIZWlnaHQiOiBmYWxzZSwKKyAgICAgICAgICAgICJvdXRlcldpZHRoIjogZmFsc2UsCisg
ICAgICAgICAgICAicGFnZVhPZmZzZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJwYWdlWU9mZnNl
dCI6IGZhbHNlLAorICAgICAgICAgICAgInBhcmVudCI6IGZhbHNlLAorICAgICAgICAgICAgInBv
c3RNZXNzYWdlIjogZmFsc2UsCisgICAgICAgICAgICAicHJpbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJyZW1vdmVFdmVudExpc3RlbmVyIjogZmFsc2UsCisgICAgICAgICAgICAicmVxdWVzdEFu
aW1hdGlvbkZyYW1lIjogZmFsc2UsCisgICAgICAgICAgICAicmVzaXplQnkiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJyZXNpemVUbyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcmVlbiI6IGZhbHNl
LAorICAgICAgICAgICAgInNjcmVlblgiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JlZW5ZIjog
ZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsIjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xs
YmFycyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcm9sbEJ5IjogZmFsc2UsCisgICAgICAgICAg
ICAic2Nyb2xsVG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxYIjogZmFsc2UsCisgICAg
ICAgICAgICAic2Nyb2xsWSI6IGZhbHNlLAorICAgICAgICAgICAgInNlbGYiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJzZXNzaW9uU3RvcmFnZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldEludGVy
dmFsIjogZmFsc2UsCisgICAgICAgICAgICAic2V0VGltZW91dCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNoYXJlZFdvcmtlciI6IGZhbHNlLAorICAgICAgICAgICAgInNob3dNb2RhbERpYWxvZyI6
IGZhbHNlLAorICAgICAgICAgICAgInN0b3AiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FsdEdseXBoRGVmRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0FsdEdseXBoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR0FsdEdseXBoSXRlbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmdsZSI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdBbmltYXRlZEFuZ2xlIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5p
bWF0ZWRCb29sZWFuIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
biI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkSW50ZWdlciI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0FuaW1hdGVkTGVuZ3RoIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5p
bWF0ZWRMZW5ndGhMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWROdW1iZXIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZE51bWJlckxpc3QiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8iOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdBbmltYXRlZFJlY3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRl
ZFN0cmluZyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGlv
bkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDaXJjbGVFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHQ2xpcFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHQ29sb3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0N1cnNvckVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdEZWZzRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R0Rlc2NFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRG9jdW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVu
dEluc3RhbmNlIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0VsbGlwc2VFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHRkVCbGVuZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNvbG9y
TWF0cml4RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVDb21wb3NpdGVFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZs
b29kRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY0FFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRkVGdW5jQkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGRUZ1bmNHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY1JFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRkVJbWFnZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGRU1lcmdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdGRU9mZnNldEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdGRVBvaW50TGlnaHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFU3BvdExp
Z2h0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFVGlsZUVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHRmlsdGVyRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9udEZhY2VFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRm9udEZhY2VOYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRG
YWNlU3JjRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlVXJpRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlw
aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlwaFJlZkVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdHcmFkaWVudEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdIS2VybkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdJbWFnZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMZW5ndGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdMZW5ndGhMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTGluZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdNYXJrZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTWFza0Vs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNYXRyaXgiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdNZXRhZGF0YUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNaXNzaW5n
R2x5cGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTVBhdGhFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHTnVtYmVyIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTnVt
YmVyTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhaW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0FyY0FicyI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1BhdGhTZWdBcmNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ2xv
c2VQYXRoIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0xpbmV0b0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRv
UmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsIjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQ
YXRoU2VnTW92ZXRvQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ01vdmV0b1Jl
bCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdHRlcm5FbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHUG9pbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQb2ludExpc3QiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdQb2x5Z29uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1BvbHlsaW5lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSZWN0IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUmVjdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSZW5kZXJpbmdJbnRlbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdTY3JpcHRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHU2V0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0b3BFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHU3RyaW5nTGlzdCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1N0eWxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1NWR0VsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdTd2l0Y2hFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHU3ltYm9sRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRDb250
ZW50RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHVGV4dFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RpdGxl
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RyYW5zZm9ybSI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR1RyYW5zZm9ybUxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUUmVm
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RTcGFuRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1VuaXRUeXBlcyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1VzZUVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdWaWV3RWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR1ZpZXdTcGVjIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVktlcm5FbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAidG9wIjogZmFsc2UsCisgICAgICAgICAgICAiV2Vi
U29ja2V0IjogZmFsc2UsCisgICAgICAgICAgICAid2luZG93IjogZmFsc2UsCisgICAgICAgICAg
ICAiV29ya2VyIjogZmFsc2UsCisgICAgICAgICAgICAiWE1MSHR0cFJlcXVlc3QiOiBmYWxzZSwK
KyAgICAgICAgICAgICJYTUxTZXJpYWxpemVyIjogZmFsc2UsCisgICAgICAgICAgICAiWFBhdGhF
dmFsdWF0b3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJYUGF0aEV4cHJlc3Npb24iOiBmYWxzZSwK
KyAgICAgICAgICAgICJYUGF0aFJlc3VsdCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgIm5vZGUiOiB7CisgICAgICAgICJnbG9iYWxzIjogeworICAgICAgICAgICAgIl9fZmlsZW5h
bWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJfX2Rpcm5hbWUiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJCdWZmZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJEYXRhVmlldyI6IGZhbHNlLAorICAgICAg
ICAgICAgImNvbnNvbGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJleHBvcnRzIjogdHJ1ZSwKKyAg
ICAgICAgICAgICJHTE9CQUwiOiBmYWxzZSwKKyAgICAgICAgICAgICJnbG9iYWwiOiBmYWxzZSwK
KyAgICAgICAgICAgICJtb2R1bGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJwcm9jZXNzIjogZmFs
c2UsCisgICAgICAgICAgICAicmVxdWlyZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldFRpbWVv
dXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzZXRJbnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBm
YWxzZSwKKyAgICAgICAgICAgICJzZXRJbW1lZGlhdGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJj
bGVhckltbWVkaWF0ZSI6IGZhbHNlCisgICAgICAgIH0sCisKKyAgICAgICAgInJ1bGVzIjogewor
ICAgICAgICAgICAgIm5vLWNhdGNoLXNoYWRvdyI6IDAsCisgICAgICAgICAgICAibm8tY29uc29s
ZSI6IDAsCisgICAgICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiAyLAorICAgICAgICAgICAg
Im5vLW5ldy1yZXF1aXJlIjogMiwKKyAgICAgICAgICAgICJuby1wYXRoLWNvbmNhdCI6IDIsCisg
ICAgICAgICAgICAibm8tcHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgICAgICJnbG9iYWwtc3Ry
aWN0IjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgICAgICJoYW5kbGUtY2FsbGJhY2stZXJyIjog
WzIsICJlcnIiXQorICAgICAgICB9CisgICAgfSwKKworICAgICJhbWQiOiB7CisgICAgICAgICJn
bG9iYWxzIjogeworICAgICAgICAgICAgInJlcXVpcmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJk
ZWZpbmUiOiBmYWxzZQorICAgICAgICB9CisgICAgfSwKKworICAgICJtb2NoYSI6IHsKKyAgICAg
ICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAiZGVzY3JpYmUiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJpdCI6IGZhbHNlLAorICAgICAgICAgICAgImJlZm9yZSI6IGZhbHNlLAorICAgICAgICAg
ICAgImFmdGVyIjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICAg
ICAgICAgICAgImFmdGVyRWFjaCI6IGZhbHNlLAorCisgICAgICAgICAgICAic3VpdGUiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJ0ZXN0IjogZmFsc2UsCisgICAgICAgICAgICAic2V0dXAiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJ0ZWFyZG93biI6IGZhbHNlLAorICAgICAgICAgICAgInN1aXRlU2V0
dXAiOiBmYWxzZSwKKyAgICAgICAgICAgICJzdWl0ZVRlYXJkb3duIjogZmFsc2UKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICAiamFzbWluZSI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAg
ICAgICAgICAiYWZ0ZXJFYWNoIjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZh
bHNlLAorICAgICAgICAgICAgImRlc2NyaWJlIjogZmFsc2UsCisgICAgICAgICAgICAiZXhwZWN0
IjogZmFsc2UsCisgICAgICAgICAgICAiaXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJqYXNtaW5l
IjogZmFsc2UsCisgICAgICAgICAgICAicGVuZGluZyI6IGZhbHNlLAorICAgICAgICAgICAgInNw
eU9uIjogZmFsc2UsCisgICAgICAgICAgICAid2FpdHMiOiBmYWxzZSwKKyAgICAgICAgICAgICJ3
YWl0c0ZvciI6IGZhbHNlLAorICAgICAgICAgICAgInhkZXNjcmliZSI6IGZhbHNlLAorICAgICAg
ICAgICAgInhpdCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CisKK30se31dLDI6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworbW9kdWxlLmV4cG9ydHM9eworICAgICJlbnYi
OiB7CisgICAgICAgICJicm93c2VyIjogZmFsc2UsCisgICAgICAgICJub2RlIjogZmFsc2UsCisg
ICAgICAgICJhbWQiOiBmYWxzZSwKKyAgICAgICAgIm1vY2hhIjogZmFsc2UsCisgICAgICAgICJq
YXNtaW5lIjogZmFsc2UKKyAgICB9LAorCisgICAgInJ1bGVzIjogeworICAgICAgICAibm8tYWxl
cnQiOiAyLAorICAgICAgICAibm8tYXJyYXktY29uc3RydWN0b3IiOiAyLAorICAgICAgICAibm8t
Yml0d2lzZSI6IDAsCisgICAgICAgICJuby1jYWxsZXIiOiAyLAorICAgICAgICAibm8tY2F0Y2gt
c2hhZG93IjogMiwKKyAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDIsCisgICAgICAgICJuby1j
b25kLWFzc2lnbiI6IDIsCisgICAgICAgICJuby1jb25zb2xlIjogMiwKKyAgICAgICAgIm5vLWNv
bnN0YW50LWNvbmRpdGlvbiI6IDIsCisgICAgICAgICJuby1jb250cm9sLXJlZ2V4IjogMiwKKyAg
ICAgICAgIm5vLWRlYnVnZ2VyIjogMiwKKyAgICAgICAgIm5vLWRlbGV0ZS12YXIiOiAyLAorICAg
ICAgICAibm8tZGl2LXJlZ2V4IjogMCwKKyAgICAgICAgIm5vLWR1cGUta2V5cyI6IDIsCisgICAg
ICAgICJuby1lbHNlLXJldHVybiI6IDAsCisgICAgICAgICJuby1lbXB0eSI6IDIsCisgICAgICAg
ICJuby1lbXB0eS1jbGFzcyI6IDIsCisgICAgICAgICJuby1lbXB0eS1sYWJlbCI6IDIsCisgICAg
ICAgICJuby1lcS1udWxsIjogMCwKKyAgICAgICAgIm5vLWV2YWwiOiAyLAorICAgICAgICAibm8t
ZXgtYXNzaWduIjogMiwKKyAgICAgICAgIm5vLWV4dGVuZC1uYXRpdmUiOiAyLAorICAgICAgICAi
bm8tZXh0cmEtYmluZCI6IDIsCisgICAgICAgICJuby1leHRyYS1ib29sZWFuLWNhc3QiOiAyLAor
ICAgICAgICAibm8tZXh0cmEtcGFyZW5zIjogMCwKKyAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAy
LAorICAgICAgICAibm8tZXh0cmEtc3RyaWN0IjogMiwKKyAgICAgICAgIm5vLWZhbGx0aHJvdWdo
IjogMiwKKyAgICAgICAgIm5vLWZsb2F0aW5nLWRlY2ltYWwiOiAwLAorICAgICAgICAibm8tZnVu
Yy1hc3NpZ24iOiAyLAorICAgICAgICAibm8taW1wbGllZC1ldmFsIjogMiwKKyAgICAgICAgIm5v
LWlubmVyLWRlY2xhcmF0aW9ucyI6IFsyLCAiZnVuY3Rpb25zIl0sCisgICAgICAgICJuby1pbnZh
bGlkLXJlZ2V4cCI6IDIsCisgICAgICAgICJuby1pdGVyYXRvciI6IDIsCisgICAgICAgICJuby1s
YWJlbC12YXIiOiAyLAorICAgICAgICAibm8tbGFiZWxzIjogMiwKKyAgICAgICAgIm5vLWxvbmUt
YmxvY2tzIjogMiwKKyAgICAgICAgIm5vLWxvbmVseS1pZiI6IDAsCisgICAgICAgICJuby1sb29w
LWZ1bmMiOiAyLAorICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiBbMCwgZmFsc2VdLAorICAg
ICAgICAibm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIjogWzIsIGZhbHNlXSwKKyAgICAgICAgIm5v
LW11bHRpLXNwYWNlcyI6IDIsCisgICAgICAgICJuby1tdWx0aS1zdHIiOiAyLAorICAgICAgICAi
bm8tbXVsdGlwbGUtZW1wdHktbGluZXMiOiBbMCwgeyJtYXgiOiAyfV0sCisgICAgICAgICJuby1u
YXRpdmUtcmVhc3NpZ24iOiAyLAorICAgICAgICAibm8tbmVnYXRlZC1pbi1saHMiOiAyLAorICAg
ICAgICAibm8tbmVzdGVkLXRlcm5hcnkiOiAwLAorICAgICAgICAibm8tbmV3IjogMiwKKyAgICAg
ICAgIm5vLW5ldy1mdW5jIjogMiwKKyAgICAgICAgIm5vLW5ldy1vYmplY3QiOiAyLAorICAgICAg
ICAibm8tbmV3LXJlcXVpcmUiOiAwLAorICAgICAgICAibm8tbmV3LXdyYXBwZXJzIjogMiwKKyAg
ICAgICAgIm5vLW9iai1jYWxscyI6IDIsCisgICAgICAgICJuby1vY3RhbCI6IDIsCisgICAgICAg
ICJuby1vY3RhbC1lc2NhcGUiOiAyLAorICAgICAgICAibm8tcGF0aC1jb25jYXQiOiAwLAorICAg
ICAgICAibm8tcGx1c3BsdXMiOiAwLAorICAgICAgICAibm8tcHJvY2Vzcy1lbnYiOiAwLAorICAg
ICAgICAibm8tcHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgIm5vLXByb3RvIjogMiwKKyAgICAg
ICAgIm5vLXJlZGVjbGFyZSI6IDIsCisgICAgICAgICJuby1yZWdleC1zcGFjZXMiOiAyLAorICAg
ICAgICAibm8tcmVzZXJ2ZWQta2V5cyI6IDAsCisgICAgICAgICJuby1yZXN0cmljdGVkLW1vZHVs
ZXMiOiAwLAorICAgICAgICAibm8tcmV0dXJuLWFzc2lnbiI6IDIsCisgICAgICAgICJuby1zY3Jp
cHQtdXJsIjogMiwKKyAgICAgICAgIm5vLXNlbGYtY29tcGFyZSI6IDAsCisgICAgICAgICJuby1z
ZXF1ZW5jZXMiOiAyLAorICAgICAgICAibm8tc2hhZG93IjogMiwKKyAgICAgICAgIm5vLXNoYWRv
dy1yZXN0cmljdGVkLW5hbWVzIjogMiwKKyAgICAgICAgIm5vLXNwYWNlLWJlZm9yZS1zZW1pIjog
MiwKKyAgICAgICAgIm5vLXNwYWNlZC1mdW5jIjogMiwKKyAgICAgICAgIm5vLXNwYXJzZS1hcnJh
eXMiOiAyLAorICAgICAgICAibm8tc3luYyI6IDAsCisgICAgICAgICJuby10ZXJuYXJ5IjogMCwK
KyAgICAgICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICJuby11bmRlZiI6IDIs
CisgICAgICAgICJuby11bmRlZi1pbml0IjogMiwKKyAgICAgICAgIm5vLXVuZGVmaW5lZCI6IDAs
CisgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDIsCisgICAgICAgICJuby11bnJlYWNo
YWJsZSI6IDIsCisgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAorICAgICAgICAi
bm8tdW51c2VkLXZhcnMiOiBbMiwgeyJ2YXJzIjogImFsbCIsICJhcmdzIjogImFmdGVyLXVzZWQi
fV0sCisgICAgICAgICJuby11c2UtYmVmb3JlLWRlZmluZSI6IDIsCisgICAgICAgICJuby12b2lk
IjogMCwKKyAgICAgICAgIm5vLXdhcm5pbmctY29tbWVudHMiOiBbMCwgeyAidGVybXMiOiBbInRv
ZG8iLCAiZml4bWUiLCAieHh4Il0sICJsb2NhdGlvbiI6ICJzdGFydCIgfV0sCisgICAgICAgICJu
by13aXRoIjogMiwKKyAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisKKyAgICAgICAgImJsb2Nr
LXNjb3BlZC12YXIiOiAwLAorICAgICAgICAiYnJhY2Utc3R5bGUiOiBbMCwgIjF0YnMiXSwKKyAg
ICAgICAgImNhbWVsY2FzZSI6IDIsCisgICAgICAgICJjb21tYS1zcGFjaW5nIjogMiwKKyAgICAg
ICAgImNvbW1hLXN0eWxlIjogMCwKKyAgICAgICAgImNvbXBsZXhpdHkiOiBbMCwgMTFdLAorICAg
ICAgICAiY29uc2lzdGVudC1yZXR1cm4iOiAyLAorICAgICAgICAiY29uc2lzdGVudC10aGlzIjog
WzAsICJ0aGF0Il0sCisgICAgICAgICJjdXJseSI6IFsyLCAiYWxsIl0sCisgICAgICAgICJkZWZh
dWx0LWNhc2UiOiAwLAorICAgICAgICAiZG90LW5vdGF0aW9uIjogMiwKKyAgICAgICAgImVvbC1s
YXN0IjogMiwKKyAgICAgICAgImVxZXFlcSI6IDIsCisgICAgICAgICJmdW5jLW5hbWVzIjogMCwK
KyAgICAgICAgImZ1bmMtc3R5bGUiOiBbMCwgImRlY2xhcmF0aW9uIl0sCisgICAgICAgICJnbG9i
YWwtc3RyaWN0IjogWzIsICJuZXZlciJdLAorICAgICAgICAiZ3VhcmQtZm9yLWluIjogMCwKKyAg
ICAgICAgImhhbmRsZS1jYWxsYmFjay1lcnIiOiAwLAorICAgICAgICAia2V5LXNwYWNpbmciOiBb
MiwgeyAiYmVmb3JlQ29sb24iOiBmYWxzZSwgImFmdGVyQ29sb24iOiB0cnVlIH1dLAorICAgICAg
ICAibWF4LWRlcHRoIjogWzAsIDRdLAorICAgICAgICAibWF4LWxlbiI6IFswLCA4MCwgNF0sCisg
ICAgICAgICJtYXgtbmVzdGVkLWNhbGxiYWNrcyI6IFswLCAyXSwKKyAgICAgICAgIm1heC1wYXJh
bXMiOiBbMCwgM10sCisgICAgICAgICJtYXgtc3RhdGVtZW50cyI6IFswLCAxMF0sCisgICAgICAg
ICJuZXctY2FwIjogMiwKKyAgICAgICAgIm5ldy1wYXJlbnMiOiAyLAorICAgICAgICAib25lLXZh
ciI6IDAsCisgICAgICAgICJwYWRkZWQtYmxvY2tzIjogMCwKKyAgICAgICAgInF1b3RlLXByb3Bz
IjogMCwKKyAgICAgICAgInF1b3RlcyI6IFsyLCAiZG91YmxlIl0sCisgICAgICAgICJyYWRpeCI6
IDAsCisgICAgICAgICJzZW1pIjogMiwKKyAgICAgICAgInNvcnQtdmFycyI6IDAsCisgICAgICAg
ICJzcGFjZS1hZnRlci1rZXl3b3JkcyI6IFswLCAiYWx3YXlzIl0sCisgICAgICAgICJzcGFjZS1i
ZWZvcmUtYmxvY2tzIjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgInNwYWNlLWluLWJyYWNrZXRz
IjogWzAsICJuZXZlciJdLAorICAgICAgICAic3BhY2UtaW4tcGFyZW5zIjogWzAsICJuZXZlciJd
LAorICAgICAgICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgInNwYWNlLXJldHVybi10
aHJvdy1jYXNlIjogMiwKKyAgICAgICAgInNwYWNlLXVuYXJ5LXdvcmQtb3BzIjogMCwKKyAgICAg
ICAgInNwYWNlZC1saW5lLWNvbW1lbnQiOiBbMCwgImFsd2F5cyJdLAorICAgICAgICAic3RyaWN0
IjogMiwKKyAgICAgICAgInVzZS1pc25hbiI6IDIsCisgICAgICAgICJ2YWxpZC1qc2RvYyI6IDAs
CisgICAgICAgICJ2YWxpZC10eXBlb2YiOiAyLAorICAgICAgICAidmFycy1vbi10b3AiOiAwLAor
ICAgICAgICAid3JhcC1paWZlIjogMCwKKyAgICAgICAgIndyYXAtcmVnZXgiOiAwLAorICAgICAg
ICAieW9kYSI6IFsyLCAibmV2ZXIiXQorICAgIH0KK30KKworfSx7fV0sMzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhl
ciBOb2RlIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk
LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorLy8gY29weSBvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorLy8g
IlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZworLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5k
L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdAorLy8gcGVyc29u
cyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g
dGhlCisvLyBmb2xsb3dpbmcgY29uZGl0aW9uczoKKy8vCisvLyBUaGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorLy8g
aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisv
LworLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsIEVYUFJFU1MKKy8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4KKy8vIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig
QU5ZIENMQUlNLAorLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g
QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisvLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwg
T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisvLyBVU0Ug
T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitmdW5jdGlvbiBFdmVudEVtaXR0
ZXIoKSB7CisgIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTsKKyAgdGhpcy5fbWF4
TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDsKK30KK21vZHVsZS5l
eHBvcnRzID0gRXZlbnRFbWl0dGVyOworCisvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAw
LjEwLngKK0V2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CisKK0V2ZW50
RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDsKK0V2ZW50RW1pdHRlci5wcm90
b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDsKKworLy8gQnkgZGVmYXVsdCBFdmVudEVt
aXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJl
CisvLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZp
bmRpbmcgbWVtb3J5IGxlYWtzLgorRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAx
MDsKKworLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8g
MTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzCisvLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRv
IHplcm8gZm9yIHVubGltaXRlZC4KK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVu
ZXJzID0gZnVuY3Rpb24obikgeworICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFO
KG4pKQorICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7
CisgIHRoaXMuX21heExpc3RlbmVycyA9IG47CisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRF
bWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIgZXIsIGhhbmRs
ZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAg
IHRoaXMuX2V2ZW50cyA9IHt9OworCisgIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQg
bGlzdGVuZXIgdGhlbiB0aHJvdy4KKyAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKKyAgICBpZiAo
IXRoaXMuX2V2ZW50cy5lcnJvciB8fAorICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVy
cm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHsKKyAgICAgIGVyID0gYXJndW1l
bnRzWzFdOworICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgdGhyb3cg
ZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50CisgICAgICB9CisgICAgICB0aHJvdyBUeXBl
RXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpOworICAgIH0KKyAg
fQorCisgIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgaWYgKGlzVW5kZWZpbmVk
KGhhbmRsZXIpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoaXNGdW5jdGlvbihoYW5kbGVy
KSkgeworICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgLy8gZmFzdCBjYXNl
cworICAgICAgY2FzZSAxOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSAyOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRz
WzFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGhhbmRsZXIuY2Fs
bCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgLy8gc2xvd2VyCisgICAgICBkZWZhdWx0OgorICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVu
Z3RoOworICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgICAgICBmb3IgKGkg
PSAxOyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07
CisgICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CisgICAgfQorICB9IGVsc2UgaWYg
KGlzT2JqZWN0KGhhbmRsZXIpKSB7CisgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICBh
cmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykK
KyAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworCisgICAgbGlzdGVuZXJzID0gaGFu
ZGxlci5zbGljZSgpOworICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CisgICAgZm9yIChpID0g
MDsgaSA8IGxlbjsgaSsrKQorICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpOwor
ICB9CisKKyAgcmV0dXJuIHRydWU7Cit9OworCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExp
c3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKKyAgdmFyIG07CisKKyAgaWYgKCFp
c0Z1bmN0aW9uKGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3Qg
YmUgYSBmdW5jdGlvbicpOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2ZW50
cyA9IHt9OworCisgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUg
PT09ICJuZXdMaXN0ZW5lciIhIEJlZm9yZQorICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVy
cywgZmlyc3QgZW1pdCAibmV3TGlzdGVuZXIiLgorICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3Rl
bmVyKQorICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLAorICAgICAgICAgICAgICBp
c0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/CisgICAgICAgICAgICAgIGxpc3RlbmVyLmxp
c3RlbmVyIDogbGlzdGVuZXIpOworCisgIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIC8v
IE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEg
YXJyYXkgb2JqZWN0LgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyOworICBlbHNl
IGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKQorICAgIC8vIElmIHdlJ3ZlIGFscmVh
ZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVz
aChsaXN0ZW5lcik7CisgIGVsc2UKKyAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBu
ZWVkIHRvIGNoYW5nZSB0byBhcnJheS4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5f
ZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07CisKKyAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWsK
KyAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBl
XS53YXJuZWQpIHsKKyAgICB2YXIgbTsKKyAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExp
c3RlbmVycykpIHsKKyAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CisgICAgfSBlbHNlIHsK
KyAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczsKKyAgICB9CisKKyAg
ICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkgeworICAg
ICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CisgICAgICBjb25zb2xlLmVycm9y
KCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICsKKyAgICAg
ICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArCisg
ICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNy
ZWFzZSBsaW1pdC4nLAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVu
Z3RoKTsKKyAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwCisgICAgICAgIGNvbnNvbGUudHJhY2Uo
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1p
dHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyOwor
CitFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikg
eworICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlz
dGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CisKKyAgdmFyIGZpcmVkID0gZmFsc2U7CisKKyAg
ZnVuY3Rpb24gZygpIHsKKyAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpOworCisgICAg
aWYgKCFmaXJlZCkgeworICAgICAgZmlyZWQgPSB0cnVlOworICAgICAgbGlzdGVuZXIuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisgIH0KKworICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7
CisgIHRoaXMub24odHlwZSwgZyk7CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvLyBlbWl0cyBh
ICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZAorRXZl
bnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3Rl
bmVyKSB7CisgIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpOworCisgIGlmICghaXNGdW5j
dGlvbihsaXN0ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEg
ZnVuY3Rpb24nKTsKKworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVd
KQorICAgIHJldHVybiB0aGlzOworCisgIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07CisgIGxl
bmd0aCA9IGxpc3QubGVuZ3RoOworICBwb3NpdGlvbiA9IC0xOworCisgIGlmIChsaXN0ID09PSBs
aXN0ZW5lciB8fAorICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0
ZW5lciA9PT0gbGlzdGVuZXIpKSB7CisgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAg
ICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQorICAgICAgdGhpcy5lbWl0KCdyZW1v
dmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTsKKworICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxp
c3QpKSB7CisgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykgeworICAgICAgaWYgKGxpc3Rb
aV0gPT09IGxpc3RlbmVyIHx8CisgICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtp
XS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7CisgICAgICAgIHBvc2l0aW9uID0gaTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAg
IHJldHVybiB0aGlzOworCisgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7CisgICAgICBsaXN0
Lmxlbmd0aCA9IDA7CisgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworICAgIH0gZWxz
ZSB7CisgICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7CisgICAgfQorCisgICAgaWYgKHRo
aXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikKKyAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVu
ZXInLCB0eXBlLCBsaXN0ZW5lcik7CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50
RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgewor
ICB2YXIga2V5LCBsaXN0ZW5lcnM7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgcmV0dXJu
IHRoaXM7CisKKyAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQg
dG8gZW1pdAorICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikgeworICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgdGhpcy5fZXZlbnRzID0ge307CisgICAgZWxz
ZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKQorICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBl
XTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9y
IGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50cworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MCkgeworICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykgeworICAgICAgaWYgKGtleSA9PT0g
J3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7CisgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVy
cyhrZXkpOworICAgIH0KKyAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVu
ZXInKTsKKyAgICB0aGlzLl9ldmVudHMgPSB7fTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisg
IGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICBpZiAoaXNGdW5jdGlvbihsaXN0
ZW5lcnMpKSB7CisgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpOworICB9
IGVsc2UgeworICAgIC8vIExJRk8gb3JkZXIKKyAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCkK
KyAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5n
dGggLSAxXSk7CisgIH0KKyAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICByZXR1cm4g
dGhpczsKK307CisKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24o
dHlwZSkgeworICB2YXIgcmV0OworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRz
W3R5cGVdKQorICAgIHJldCA9IFtdOworICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50
c1t0eXBlXSkpCisgICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07CisgIGVsc2UKKyAgICBy
ZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTsKKyAgcmV0dXJuIHJldDsKK307CisKK0V2
ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkgeworICB2
YXIgcmV0OworICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVd
KQorICAgIHJldCA9IDA7CisgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5
cGVdKSkKKyAgICByZXQgPSAxOworICBlbHNlCisgICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5
cGVdLmxlbmd0aDsKKyAgcmV0dXJuIHJldDsKK307CisKK2Z1bmN0aW9uIGlzRnVuY3Rpb24oYXJn
KSB7CisgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nOworfQorCitmdW5jdGlvbiBp
c051bWJlcihhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInOworfQorCitm
dW5jdGlvbiBpc09iamVjdChhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3Qn
ICYmIGFyZyAhPT0gbnVsbDsKK30KKworZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7CisgIHJl
dHVybiBhcmcgPT09IHZvaWQgMDsKK30KKworfSx7fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxNCBEYW4gVGFvIDxk
YW5pZWwudGFvQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBFaXNlbmJl
cmcgPGFuZHJld0BlaXNlbmJlcmcuYXM+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyovCisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlIGVxZXE6dHJ1ZSBub21l
bjp0cnVlKi8KKy8qZ2xvYmFsIGRvY3RyaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgcGFyc2VUeXBl
RXhwcmVzc2lvbjp0cnVlLCBwYXJzZVRvcDp0cnVlKi8KKworKGZ1bmN0aW9uIChleHBvcnRzKSB7
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFZFUlNJT04sCisgICAgICAgIFJlZ2V4LAor
ICAgICAgICBDYW5BY2Nlc3NTdHJpbmdCeUluZGV4LAorICAgICAgICB0eXBlZCwKKyAgICAgICAg
anNkb2MsCisgICAgICAgIGlzQXJyYXksCisgICAgICAgIGhhc093blByb3BlcnR5OworCisgICAg
Ly8gU3luYyB3aXRoIHBhY2thZ2UuanNvbi4KKyAgICBWRVJTSU9OID0gJzAuNS4yLWRldic7CisK
KyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJl
Z2V4ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4
YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJl
MC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3
ZFx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNm
Ny1cdTA0ODFcdTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1
ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUw
NmQzXHUwNmQ1XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVmXHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcx
MFx1MDcxMi1cdTA3MmZcdTA3NGQtXHUwN2E1XHUwN2IxXHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdm
NVx1MDdmYVx1MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOGEw
XHUwOGEyLVx1MDhhY1x1MDkwNC1cdTA5MzlcdTA5M2RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcx
LVx1MDk3N1x1MDk3OS1cdTA5N2ZcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlh
OFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJkXHUwOWNlXHUwOWRjXHUwOWRk
XHUwOWRmLVx1MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMt
XHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1
MGE1OS1cdTBhNWNcdTBhNWVcdTBhNzItXHUwYTc0XHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFc
dTBhOTMtXHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmRc
dTBhZDBcdTBhZTBcdTBhZTFcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1
MGIyYS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUw
YjVmLVx1MGI2MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1
MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBi
YWFcdTBiYWUtXHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBjMTBcdTBjMTItXHUw
YzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2RcdTBjNThcdTBjNTlcdTBjNjBcdTBj
NjFcdTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUw
Y2I1LVx1MGNiOVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNlMVx1MGNmMVx1MGNmMlx1MGQwNS1cdTBk
MGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0ZVx1MGQ2MFx1MGQ2MVx1MGQ3
YS1cdTBkN2ZcdTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBk
YzAtXHUwZGM2XHUwZTAxLVx1MGUzMFx1MGUzMlx1MGUzM1x1MGU0MC1cdTBlNDZcdTBlODFcdTBl
ODJcdTBlODRcdTBlODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5
Zlx1MGVhMS1cdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWIwXHUwZWIy
XHUwZWIzXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmNDAt
XHUwZjQ3XHUwZjQ5LVx1MGY2Y1x1MGY4OC1cdTBmOGNcdTEwMDAtXHUxMDJhXHUxMDNmXHUxMDUw
LVx1MTA1NVx1MTA1YS1cdTEwNWRcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNmUtXHUxMDcwXHUxMDc1
LVx1MTA4MVx1MTA4ZVx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZj
LVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2
MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUx
MmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1
MTMxNVx1MTMxOC1cdTEzNWFcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNc
dTE2NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAw
LVx1MTcwY1x1MTcwZS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3
NmNcdTE3NmUtXHUxNzcwXHUxNzgwLVx1MTdiM1x1MTdkN1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4
ODAtXHUxOGE4XHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5NTAtXHUxOTZkXHUx
OTcwLVx1MTk3NFx1MTk4MC1cdTE5YWJcdTE5YzEtXHUxOWM3XHUxYTAwLVx1MWExNlx1MWEyMC1c
dTFhNTRcdTFhYTdcdTFiMDUtXHUxYjMzXHUxYjQ1LVx1MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVc
dTFiYWZcdTFiYmEtXHUxYmU1XHUxYzAwLVx1MWMyM1x1MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdk
XHUxY2U5LVx1MWNlY1x1MWNlZS1cdTFjZjFcdTFjZjVcdTFjZjZcdTFkMDAtXHUxZGJmXHUxZTAw
LVx1MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFm
NTdcdTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFm
YmNcdTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUx
ZmRiXHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDcxXHUyMDdmXHUy
MDkwLVx1MjA5Y1x1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFkXHUy
MTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUy
MTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1
MmM2MC1cdTJjZTRcdTJjZWItXHUyY2VlXHUyY2YyXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1
MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkODAtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1c
dTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNl
XHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAy
OVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5ZC1cdTMwOWZcdTMw
YTEtXHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1
MzFiYVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNc
dWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAt
XHVhNjZlXHVhNjdmLVx1YTY5N1x1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4
OFx1YTc4Yi1cdWE3OGVcdWE3OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MDFcdWE4
MDMtXHVhODA1XHVhODA3LVx1YTgwYVx1YTgwYy1cdWE4MjJcdWE4NDAtXHVhODczXHVhODgyLVx1
YThiM1x1YThmMi1cdWE4ZjdcdWE4ZmJcdWE5MGEtXHVhOTI1XHVhOTMwLVx1YTk0Nlx1YTk2MC1c
dWE5N2NcdWE5ODQtXHVhOWIyXHVhOWNmXHVhYTAwLVx1YWEyOFx1YWE0MC1cdWFhNDJcdWFhNDQt
XHVhYTRiXHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE4MC1cdWFhYWZcdWFhYjFcdWFhYjVcdWFhYjZc
dWFhYjktXHVhYWJkXHVhYWMwXHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWFcdWFhZjIt
XHVhYWY0XHVhYjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIy
Nlx1YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmUyXHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3
Y2ItXHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1
ZmIxN1x1ZmIxZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1
ZmI0MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1
ZmQ4Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNc
dWZmMjEtXHVmZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNh
LVx1ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpLAorICAgICAgICBOb25Bc2NpaUlk
ZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2
XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJlZVx1MDMwMC1c
dTAzNzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1
MDM4ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OGEt
XHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNWJkXHUwNWJm
XHUwNWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJc
dTA2MTAtXHUwNjFhXHUwNjIwLVx1MDY2OVx1MDY2ZS1cdTA2ZDNcdTA2ZDUtXHUwNmRjXHUwNmRm
LVx1MDZlOFx1MDZlYS1cdTA2ZmNcdTA2ZmZcdTA3MTAtXHUwNzRhXHUwNzRkLVx1MDdiMVx1MDdj
MC1cdTA3ZjVcdTA3ZmFcdTA4MDAtXHUwODJkXHUwODQwLVx1MDg1Ylx1MDhhMFx1MDhhMi1cdTA4
YWNcdTA4ZTQtXHUwOGZlXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NmZcdTA5NzEtXHUwOTc3XHUw
OTc5LVx1MDk3Zlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1
MDlhOFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJjLVx1MDljNFx1MDljN1x1
MDljOFx1MDljYi1cdTA5Y2VcdTA5ZDdcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUzXHUwOWU2LVx1
MDlmMVx1MGEwMS1cdTBhMDNcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1
MGEyYS1cdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhM2NcdTBh
M2UtXHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE1OS1cdTBhNWNcdTBh
NWVcdTBhNjYtXHUwYTc1XHUwYTgxLVx1MGE4M1x1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUw
YTkzLVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJjLVx1
MGFjNVx1MGFjNy1cdTBhYzlcdTBhY2ItXHUwYWNkXHUwYWQwXHUwYWUwLVx1MGFlM1x1MGFlNi1c
dTBhZWZcdTBiMDEtXHUwYjAzXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhc
dTBiMmEtXHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzYy1cdTBiNDRcdTBiNDdc
dTBiNDhcdTBiNGItXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2M1x1
MGI2Ni1cdTBiNmZcdTBiNzFcdTBiODJcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1
MGI5Mi1cdTBiOTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBi
YTgtXHUwYmFhXHUwYmFlLVx1MGJiOVx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1
MGJjZFx1MGJkMFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDEtXHUwYzAzXHUwYzA1LVx1MGMwY1x1
MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2Qt
XHUwYzQ0XHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNThcdTBjNTlc
dTBjNjAtXHUwYzYzXHUwYzY2LVx1MGM2Zlx1MGM4Mlx1MGM4M1x1MGM4NS1cdTBjOGNcdTBjOGUt
XHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JjLVx1MGNj
NFx1MGNjNi1cdTBjYzhcdTBjY2EtXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2RlXHUwY2UwLVx1MGNl
M1x1MGNlNi1cdTBjZWZcdTBjZjFcdTBjZjJcdTBkMDJcdTBkMDNcdTBkMDUtXHUwZDBjXHUwZDBl
LVx1MGQxMFx1MGQxMi1cdTBkM2FcdTBkM2QtXHUwZDQ0XHUwZDQ2LVx1MGQ0OFx1MGQ0YS1cdTBk
NGVcdTBkNTdcdTBkNjAtXHUwZDYzXHUwZDY2LVx1MGQ2Zlx1MGQ3YS1cdTBkN2ZcdTBkODJcdTBk
ODNcdTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUw
ZGM2XHUwZGNhXHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRkOC1cdTBkZGZcdTBkZjJcdTBkZjNcdTBl
MDEtXHUwZTNhXHUwZTQwLVx1MGU0ZVx1MGU1MC1cdTBlNTlcdTBlODFcdTBlODJcdTBlODRcdTBl
ODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBl
YTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWI5XHUwZWJiLVx1MGViZFx1MGVj
MC1cdTBlYzRcdTBlYzZcdTBlYzgtXHUwZWNkXHUwZWQwLVx1MGVkOVx1MGVkYy1cdTBlZGZcdTBm
MDBcdTBmMThcdTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjNlLVx1MGY0
N1x1MGY0OS1cdTBmNmNcdTBmNzEtXHUwZjg0XHUwZjg2LVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBm
YzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5ZFx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEw
ZDAtXHUxMGZhXHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUx
MjVhLVx1MTI1ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1c
dTEyYjVcdTEyYjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgt
XHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFcdTEzNWQtXHUxMzVmXHUxMzgwLVx1MTM4
Zlx1MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2
YTAtXHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3MGNcdTE3MGUtXHUxNzE0XHUxNzIwLVx1
MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc3Mlx1MTc3M1x1
MTc4MC1cdTE3ZDNcdTE3ZDdcdTE3ZGNcdTE3ZGRcdTE3ZTAtXHUxN2U5XHUxODBiLVx1MTgwZFx1
MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAt
XHUxOTFjXHUxOTIwLVx1MTkyYlx1MTkzMC1cdTE5M2JcdTE5NDYtXHUxOTZkXHUxOTcwLVx1MTk3
NFx1MTk4MC1cdTE5YWJcdTE5YjAtXHUxOWM5XHUxOWQwLVx1MTlkOVx1MWEwMC1cdTFhMWJcdTFh
MjAtXHUxYTVlXHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFhODlcdTFhOTAtXHUxYTk5XHUxYWE3XHUx
YjAwLVx1MWI0Ylx1MWI1MC1cdTFiNTlcdTFiNmItXHUxYjczXHUxYjgwLVx1MWJmM1x1MWMwMC1c
dTFjMzdcdTFjNDAtXHUxYzQ5XHUxYzRkLVx1MWM3ZFx1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2Y2
XHUxZDAwLVx1MWRlNlx1MWRmYy1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0
OC1cdTFmNGRcdTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4
MC1cdTFmYjRcdTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFm
ZDAtXHUxZmQzXHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1
MWZmY1x1MjAwY1x1MjAwZFx1MjAzZlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Zlx1MjA5MC1cdTIw
OWNcdTIwZDAtXHUyMGRjXHUyMGUxXHUyMGU1LVx1MjBmMFx1MjEwMlx1MjEwN1x1MjEwYS1cdTIx
MTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEy
Zi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJj
MDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRcdTJjZWItXHUyY2YzXHUyZDAwLVx1
MmQyNVx1MmQyN1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkN2YtXHUyZDk2XHUyZGEwLVx1
MmRhNlx1MmRhOC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZc
dTJkYzgtXHUyZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJkZTAtXHUyZGZmXHUyZTJm
XHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMmZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0
MS1cdTMwOTZcdTMwOTlcdTMwOWFcdTMwOWQtXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMw
ZmZcdTMxMDUtXHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUz
NDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1c
dWE2MGNcdWE2MTAtXHVhNjJiXHVhNjQwLVx1YTY2Zlx1YTY3NC1cdWE2N2RcdWE2N2YtXHVhNjk3
XHVhNjlmLVx1YTZmMVx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5
MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgyN1x1YTg0MC1cdWE4NzNcdWE4ODAtXHVh
OGM0XHVhOGQwLVx1YThkOVx1YThlMC1cdWE4ZjdcdWE4ZmJcdWE5MDAtXHVhOTJkXHVhOTMwLVx1
YTk1M1x1YTk2MC1cdWE5N2NcdWE5ODAtXHVhOWMwXHVhOWNmLVx1YTlkOVx1YWEwMC1cdWFhMzZc
dWFhNDAtXHVhYTRkXHVhYTUwLVx1YWE1OVx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhN2JcdWFhODAt
XHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWZcdWFhZjItXHVhYWY2XHVhYjAxLVx1YWIw
Nlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFi
YzAtXHVhYmVhXHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVk
N2M2XHVkN2NiLVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1
ZmIxMy1cdWZiMTdcdWZiMWQtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2Vc
dWZiNDBcdWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1c
dWZkOGZcdWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2
XHVmZTMzXHVmZTM0XHVmZTRkLVx1ZmU0Zlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjEw
LVx1ZmYxOVx1ZmYyMS1cdWZmM2FcdWZmM2ZcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZj
Mi1cdWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJykKKyAgICB9
OworCisgICAgQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCA9IHR5cGVvZiAnZG9jdHJpbmUnWzBdICE9
PSB1bmRlZmluZWQ7CisKKyAgICBmdW5jdGlvbiBzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCBs
YXN0KSB7CisgICAgICAgIHZhciBvdXRwdXQ7CisgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5n
QnlJbmRleCkgeworICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKGluZGV4LCBsYXN0
KS5qb2luKCcnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHNvdXJj
ZS5zbGljZShpbmRleCwgbGFzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dHB1dDsK
KyAgICB9CisKKyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgICBpZiAoIWlzQXJyYXkp
IHsKKyAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJ5KSB7CisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyeSkgPT09ICdbb2JqZWN0
IEFycmF5XSc7CisgICAgICAgIH07CisgICAgfQorCisgICAgaGFzT3duUHJvcGVydHkgPSAoZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUp
IHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTsKKyAgICAgICAgfTsK
KyAgICB9KCkpOworCisgICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7CisgICAgICAgIHZh
ciByZXQgPSB7fSwga2V5OworICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgICAg
IGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldFtrZXld
ID0gb2JqW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAg
IHJldHVybiBjaCA9PT0gJ1xuJyB8fCBjaCA9PT0gJ1xyJyB8fCBjaCA9PT0gJ1x1MjAyOCcgfHwg
Y2ggPT09ICdcdTIwMjknOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkg
eworICAgICAgICByZXR1cm4gKGNoID09PSAnICcpIHx8IChjaCA9PT0gJ1x1MDAwOScpIHx8IChj
aCA9PT0gJ1x1MDAwQicpIHx8CisgICAgICAgICAgICAoY2ggPT09ICdcdTAwMEMnKSB8fCAoY2gg
PT09ICdcdTAwQTAnKSB8fAorICAgICAgICAgICAgKGNoLmNoYXJDb2RlQXQoMCkgPj0gMHgxNjgw
ICYmCisgICAgICAgICAgICAgJ1x1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1
MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAw
MFx1RkVGRicuaW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNp
bWFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5Jy5pbmRleE9mKGNoKSA+
PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0
dXJuICcwMTIzNDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3
Jy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51
bWVyaWMoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAo
Y2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJldHVy
biAoY2ggPT09ICckJykgfHwgKGNoID09PSAnXycpIHx8IChjaCA9PT0gJ1xcJykgfHwKKyAgICAg
ICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICda
JykgfHwKKyAgICAgICAgICAgICgoY2guY2hhckNvZGVBdCgwKSA+PSAweDgwKSAmJiBSZWdleC5O
b25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGNoKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
aXNJZGVudGlmaWVyUGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAnJCcpIHx8IChj
aCA9PT0gJ18nKSB8fCAoY2ggPT09ICdcXCcpIHx8CisgICAgICAgICAgICAoY2ggPj0gJ2EnICYm
IGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAo
KGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpIHx8CisgICAgICAgICAgICAoKGNoLmNoYXJDb2Rl
QXQoMCkgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGNoKSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkgeworICAgICAgICByZXR1cm4g
Jz48KCl7fVtdLDoqfD8hPScuaW5kZXhPZihjaCkgPT09IC0xICYmICFpc1doaXRlU3BhY2UoY2gp
ICYmICFpc0xpbmVUZXJtaW5hdG9yKGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1BhcmFt
VGl0bGUodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncGFyYW0nIHx8IHRpdGxl
ID09PSAnYXJndW1lbnQnIHx8IHRpdGxlID09PSAnYXJnJzsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBpc1Byb3BlcnR5KHRpdGxlKSB7CisgICAgICAgIHJldHVybiB0aXRsZSA9PT0gJ3Byb3BlcnR5
JyB8fCB0aXRsZSA9PT0gJ3Byb3AnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzTmFtZVBhcmFt
ZXRlclJlcXVpcmVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0bGUp
IHx8IGlzUHJvcGVydHkodGl0bGUpIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2FsaWFzJyB8
fCB0aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAnbWl4ZXMnIHx8IHRpdGxlID09PSAncmVx
dWlyZXMnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5hbWUodGl0bGUpIHsKKyAg
ICAgICAgcmV0dXJuIGlzTmFtZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB8fCB0aXRsZSA9PT0g
J2NvbnN0JyB8fCB0aXRsZSA9PT0gJ2NvbnN0YW50JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c0FsbG93ZWROZXN0ZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkodGl0bGUp
IHx8IGlzUGFyYW1UaXRsZSh0aXRsZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlUGFy
YW1ldGVyUmVxdWlyZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRs
ZSkgfHwgdGl0bGUgPT09ICdkZWZpbmUnIHx8IHRpdGxlID09PSAnZW51bScgfHwKKyAgICAgICAg
ICAgIHRpdGxlID09PSAnaW1wbGVtZW50cycgfHwgdGl0bGUgPT09ICdyZXR1cm4nIHx8CisgICAg
ICAgICAgICB0aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAndHlwZScgfHwgdGl0bGUgPT09
ICd0eXBlZGVmJyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdyZXR1cm5zJyB8fCBpc1Byb3Bl
cnR5KHRpdGxlKTsKKyAgICB9CisKKyAgICAvLyBDb25zaWRlciBkZXByZWNhdGlvbiBpbnN0ZWFk
IHVzaW5nICdpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCcgYW5kICdSdWxlcycgZGVjbGFyYXRpb24g
dG8gcGljayB3aGVuIGEgdHlwZSBpcyBvcHRpb25hbC9yZXF1aXJlZAorICAgIC8vIFRoaXMgd291
bGQgcmVxdWlyZSBjaGFuZ2VzIHRvICdwYXJzZVR5cGUnCisgICAgZnVuY3Rpb24gaXNBbGxvd2Vk
VHlwZSh0aXRsZSkgeworICAgICAgICByZXR1cm4gaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGl0
bGUpIHx8IHRpdGxlID09PSAndGhyb3dzJyB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8fCB0aXRsZSA9
PT0gJ2NvbnN0YW50JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICduYW1lc3BhY2UnIHx8IHRp
dGxlID09PSAnbWVtYmVyJyB8fCB0aXRsZSA9PT0gJ3ZhcicgfHwgdGl0bGUgPT09ICdtb2R1bGUn
IHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0aXRsZSA9PT0gJ2Ns
YXNzJyB8fCB0aXRsZSA9PT0gJ2V4dGVuZHMnIHx8IHRpdGxlID09PSAnYXVnbWVudHMnIHx8Cisg
ICAgICAgICAgICB0aXRsZSA9PT0gJ3B1YmxpYycgfHwgdGl0bGUgPT09ICdwcml2YXRlJyB8fCB0
aXRsZSA9PT0gJ3Byb3RlY3RlZCc7CisgICAgfQorCisgICAgZnVuY3Rpb24gRG9jdHJpbmVFcnJv
cihtZXNzYWdlKSB7CisgICAgICAgIHRoaXMubmFtZSA9ICdEb2N0cmluZUVycm9yJzsKKyAgICAg
ICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CisgICAgRG9jdHJpbmVFcnJvci5wcm90
b3R5cGUgPSBuZXcgRXJyb3IoKTsKKyAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9IERvY3RyaW5lRXJyb3I7CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2Up
IHsKKyAgICAgICAgdGhyb3cgbmV3IERvY3RyaW5lRXJyb3IobWVzc2FnZSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIHRleHQpIHsKKyAgICAgICAgaWYgKFZFUlNJT04uc2xp
Y2UoLTMpID09PSAnZGV2JykgeworICAgICAgICAgICAgaWYgKCFjb25kKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcih0ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIHRyaW0oc3RyKSB7CisgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgv
XlxzKy8sICcnKS5yZXBsYWNlKC9ccyskLywgJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVu
d3JhcENvbW1lbnQoZG9jKSB7CisgICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5n
IGZvcm0KKyAgICAgICAgLy8gICAvKioKKyAgICAgICAgLy8gICAgKiAuLi4uLi4uCisgICAgICAg
IC8vICAgICovCisgICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqCisgICAgICAgIHZhciBC
RUZPUkVfU1RBUiA9IDAsCisgICAgICAgICAgICBTVEFSID0gMSwKKyAgICAgICAgICAgIEFGVEVS
X1NUQVIgPSAyLAorICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICBsZW4sCisgICAgICAg
ICAgICBtb2RlLAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgY2g7CisKKyAgICAg
ICAgZG9jID0gZG9jLnJlcGxhY2UoL15cL1wqXCo/LywgJycpLnJlcGxhY2UoL1wqXC8kLywgJycp
OworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxlbiA9IGRvYy5sZW5ndGg7CisgICAgICAg
IG1vZGUgPSBCRUZPUkVfU1RBUjsKKyAgICAgICAgcmVzdWx0ID0gJyc7CisKKyAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuKSB7CisgICAgICAgICAgICBjaCA9IGRvY1tpbmRleF07CisgICAgICAg
ICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQkVGT1JFX1NUQVI6CisgICAg
ICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKicp
IHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFNUQVI7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gY2g7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTVEFS
OgorICAgICAgICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG1vZGUgPSBpc0xpbmVUZXJtaW5hdG9yKGNoKSA/IEJFRk9SRV9TVEFSIDogQUZURVJfU1RBUjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBRlRFUl9TVEFSOgor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5l
VGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFS
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIC8vIFR5cGUgRXhwcmVzc2lvbiBQYXJzZXIKKworICAgIChm
dW5jdGlvbiAoZXhwb3J0cykgeworICAgICAgICB2YXIgU3ludGF4LAorICAgICAgICAgICAgVG9r
ZW4sCisgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAg
ICBpbmRleCwKKyAgICAgICAgICAgIHByZXZpb3VzLAorICAgICAgICAgICAgdG9rZW4sCisgICAg
ICAgICAgICB2YWx1ZTsKKworICAgICAgICBTeW50YXggPSB7CisgICAgICAgICAgICBOdWxsYWJs
ZUxpdGVyYWw6ICdOdWxsYWJsZUxpdGVyYWwnLAorICAgICAgICAgICAgQWxsTGl0ZXJhbDogJ0Fs
bExpdGVyYWwnLAorICAgICAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsCisgICAg
ICAgICAgICBVbmRlZmluZWRMaXRlcmFsOiAnVW5kZWZpbmVkTGl0ZXJhbCcsCisgICAgICAgICAg
ICBWb2lkTGl0ZXJhbDogJ1ZvaWRMaXRlcmFsJywKKyAgICAgICAgICAgIFVuaW9uVHlwZTogJ1Vu
aW9uVHlwZScsCisgICAgICAgICAgICBBcnJheVR5cGU6ICdBcnJheVR5cGUnLAorICAgICAgICAg
ICAgUmVjb3JkVHlwZTogJ1JlY29yZFR5cGUnLAorICAgICAgICAgICAgRmllbGRUeXBlOiAnRmll
bGRUeXBlJywKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZTogJ0Z1bmN0aW9uVHlwZScsCisgICAg
ICAgICAgICBQYXJhbWV0ZXJUeXBlOiAnUGFyYW1ldGVyVHlwZScsCisgICAgICAgICAgICBSZXN0
VHlwZTogJ1Jlc3RUeXBlJywKKyAgICAgICAgICAgIE5vbk51bGxhYmxlVHlwZTogJ05vbk51bGxh
YmxlVHlwZScsCisgICAgICAgICAgICBPcHRpb25hbFR5cGU6ICdPcHRpb25hbFR5cGUnLAorICAg
ICAgICAgICAgTnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJywKKyAgICAgICAgICAgIE5hbWVF
eHByZXNzaW9uOiAnTmFtZUV4cHJlc3Npb24nLAorICAgICAgICAgICAgVHlwZUFwcGxpY2F0aW9u
OiAnVHlwZUFwcGxpY2F0aW9uJworICAgICAgICB9OworCisgICAgICAgIFRva2VuID0geworICAg
ICAgICAgICAgSUxMRUdBTDogMCwgICAgLy8gSUxMRUdBTAorICAgICAgICAgICAgRE9UOiAxLCAg
ICAgICAgLy8gLgorICAgICAgICAgICAgRE9UX0xUOiAyLCAgICAgLy8gLjwKKyAgICAgICAgICAg
IFJFU1Q6IDMsICAgICAgIC8vIC4uLgorICAgICAgICAgICAgTFQ6IDQsICAgICAgICAgLy8gPAor
ICAgICAgICAgICAgR1Q6IDUsICAgICAgICAgLy8gPgorICAgICAgICAgICAgTFBBUkVOOiA2LCAg
ICAgLy8gKAorICAgICAgICAgICAgUlBBUkVOOiA3LCAgICAgLy8gKQorICAgICAgICAgICAgTEJS
QUNFOiA4LCAgICAgLy8geworICAgICAgICAgICAgUkJSQUNFOiA5LCAgICAgLy8gfQorICAgICAg
ICAgICAgTEJSQUNLOiAxMCwgICAgLy8gWworICAgICAgICAgICAgUkJSQUNLOiAxMSwgICAgLy8g
XQorICAgICAgICAgICAgQ09NTUE6IDEyLCAgICAgLy8gLAorICAgICAgICAgICAgQ09MT046IDEz
LCAgICAgLy8gOgorICAgICAgICAgICAgU1RBUjogMTQsICAgICAgLy8gKgorICAgICAgICAgICAg
UElQRTogMTUsICAgICAgLy8gfAorICAgICAgICAgICAgUVVFU1RJT046IDE2LCAgLy8gPworICAg
ICAgICAgICAgQkFORzogMTcsICAgICAgLy8gIQorICAgICAgICAgICAgRVFVQUw6IDE4LCAgICAg
Ly8gPQorICAgICAgICAgICAgTkFNRTogMTksICAgICAgLy8gbmFtZSB0b2tlbgorICAgICAgICAg
ICAgU1RSSU5HOiAyMCwgICAgLy8gc3RyaW5nCisgICAgICAgICAgICBOVU1CRVI6IDIxLCAgICAv
LyBudW1iZXIKKyAgICAgICAgICAgIEVPRjogMjIKKyAgICAgICAgfTsKKworICAgICAgICBmdW5j
dGlvbiBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKSB7CisgICAgICAgICAg
ICB0aGlzLl9wcmV2aW91cyA9IHByZXZpb3VzOworICAgICAgICAgICAgdGhpcy5faW5kZXggPSBp
bmRleDsKKyAgICAgICAgICAgIHRoaXMuX3Rva2VuID0gdG9rZW47CisgICAgICAgICAgICB0aGlz
Ll92YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgQ29udGV4dC5wcm90b3R5cGUu
cmVzdG9yZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHByZXZpb3VzID0gdGhpcy5fcHJl
dmlvdXM7CisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4OworICAgICAgICAgICAgdG9r
ZW4gPSB0aGlzLl90b2tlbjsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWU7CisgICAg
ICAgIH07CisKKyAgICAgICAgQ29udGV4dC5zYXZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkgeworICAgICAgICAgICAgdmFy
IGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAg
ICByZXR1cm4gY2g7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBl
KHByZWZpeCkgeworICAgICAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAg
ICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5n
dGggJiYgaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICBj
aCA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcw
MTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFy
Q29kZShjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7
CisgICAgICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBjaCwgY29kZSwgdW5lc2NhcGVkLCBy
ZXN0b3JlOyAvL1RPRE8gcmV2aWV3IHJlbW92YWwgb2N0YWwgPSBmYWxzZQorICAgICAgICAgICAg
cXVvdGUgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgKytpbmRleDsKKworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNl
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHF1b3RlID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihj
aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXG4nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdccic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
J1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3Rv
cmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyICs9ICdcdic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9E
TyByZXZpZXcgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChj
b2RlICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIG9jdGFs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdp
dChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9UT0RPIFJldmlldyBSZW1vdmFsIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZh
bmNlKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0
cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNv
dXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5m
cm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9
PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0
ciArPSBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVj
dGVkIHF1b3RlJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlID0gc3RyOwor
ICAgICAgICAgICAgcmV0dXJuIFRva2VuLlNUUklORzsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHNjYW5OdW1iZXIoKSB7CisgICAgICAgICAgICB2YXIgbnVtYmVyLCBjaDsKKworICAg
ICAgICAgICAgbnVtYmVyID0gJyc7CisgICAgICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAg
ICAgICAgICAgICAgIG51bWJlciA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleF07CisKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzSGV4RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gb25seSAweAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCAxNik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxE
aWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcign
dW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFy
c2VJbnQobnVtYmVyLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5O
VU1CRVI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KCd1bmV4cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzRGVjaW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVj
aW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9
PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5j
ZSgpOworCisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAg
bnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tl
bicpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwor
ICAgICAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJl
cik7CisgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICB9CisKKworICAg
ICAgICBmdW5jdGlvbiBzY2FuVHlwZU5hbWUoKSB7CisgICAgICAgICAgICB2YXIgY2gsIGNoMjsK
KworICAgICAgICAgICAgdmFsdWUgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGggJiYgaXNUeXBlTmFtZShzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAg
ICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKGluZGV4ICsgMSkgPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoMiA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5BTUU7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAgICAgdmFyIGNoOworCisg
ICAgICAgICAgICBwcmV2aW91cyA9IGluZGV4OworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGggJiYgaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRU9GOworICAgICAgICAgICAg
ICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSAn
Iic6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAg
ICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT0xPTjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAg
ICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1B
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKCc6
CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uTFBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAg
Y2FzZSAnKSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gVG9rZW4uUlBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAg
ICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNLOworICAgICAgICAgICAgICAgIHJl
dHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNFOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnLic6Cisg
ICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVF9MVDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nICYmIGluZGV4ICsgMSA8
IGxlbmd0aCAmJiBzb3VyY2VbaW5kZXggKyAxXSA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxUOworICAgICAgICAgICAgICAgIHJl
dHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uR1Q7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAg
ICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSOworICAgICAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfCc6CisgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUElQRTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJz8nOgor
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2Vu
LlFVRVNUSU9OOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAg
Y2FzZSAnISc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gVG9rZW4uQkFORzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAg
ICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IFRva2VuLkVRVUFMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsK
KworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGln
aXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Nhbk51bWJlcigpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gdHlwZSBzdHJpbmcgcGVybWl0cyBmb2xsb3dpbmcgY2FzZSwKKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFz
cworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gdGhpcyByZWR1Y2VkIDEg
dG9rZW4gVEtfTkFNRQorICAgICAgICAgICAgICAgIGlmIChpc1R5cGVOYW1lKGNoKSkgeworICAg
ICAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5UeXBlTmFtZSgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
dG9rZW4gPSBUb2tlbi5JTExFR0FMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbnN1bWUodGFyZ2V0
LCB0ZXh0KSB7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IHRhcmdldCwgdGV4dCB8fCAn
Y29uc3VtZWQgdG9rZW4gbm90IG1hdGNoZWQnKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGV4cGVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIGlm
ICh0b2tlbiAhPT0gdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBl
Y3RlZCB0b2tlbicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dCgpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJworICAg
ICAgICAvLworICAgICAgICAvLyBUeXBlVW5pb25MaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVt
cHR5Pj4KKyAgICAgICAgLy8gICB8IE5vbmVtcHR5VHlwZVVuaW9uTGlzdAorICAgICAgICAvLwor
ICAgICAgICAvLyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj0KKyAgICAgICAgLy8gICAgIFR5cGVF
eHByZXNzaW9uCisgICAgICAgIC8vICAgfCBUeXBlRXhwcmVzc2lvbiAnfCcgTm9uZW1wdHlUeXBl
VW5pb25MaXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkgeworICAgICAgICAg
ICAgdmFyIGVsZW1lbnRzOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MUEFSRU4sICdVbmlv
blR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggKCcpOworICAgICAgICAgICAgZWxlbWVudHMgPSBbXTsK
KyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJz
ZVR5cGVFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLlJQQVJFTikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLlBJUEUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4u
UlBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBlbmQgd2l0aCApJyk7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsCisgICAgICAgICAg
ICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQXJyYXlUeXBlIDo9ICdbJyBFbGVtZW50VHlwZUxpc3QgJ10nCisgICAgICAgIC8v
CisgICAgICAgIC8vIEVsZW1lbnRUeXBlTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+
CisgICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICB8ICcuLi4nIFR5cGVF
eHByZXNzaW9uCisgICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uICcsJyBFbGVtZW50VHlwZUxp
c3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VBcnJheVR5cGUoKSB7CisgICAgICAgICAgICB2YXIg
ZWxlbWVudHM7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSywgJ0FycmF5VHlwZSBz
aG91bGQgc3RhcnQgd2l0aCBbJyk7CisgICAgICAgICAgICBlbGVtZW50cyA9IFtdOworICAgICAg
ICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICBp
ZiAodG9rZW4gPT09IFRva2VuLlJFU1QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShU
b2tlbi5SRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVz
c2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9
PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1B
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3Qo
VG9rZW4uUkJSQUNLKTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkFycmF5VHlwZSwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxk
TmFtZSgpIHsKKyAgICAgICAgICAgIHZhciB2ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodG9r
ZW4gPT09IFRva2VuLk5BTUUgfHwgdG9rZW4gPT09IFRva2VuLlNUUklORykgeworICAgICAgICAg
ICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdW1lKFRva2VuLk5VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh2KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3Rl
ZCB0b2tlbicpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmllbGRUeXBlIDo9CisgICAgICAg
IC8vICAgICBGaWVsZE5hbWUKKyAgICAgICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJl
c3Npb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRmllbGROYW1lIDo9CisgICAgICAgIC8vICAg
ICBOYW1lRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgU3RyaW5nTGl0ZXJhbAorICAgICAgICAv
LyAgIHwgTnVtYmVyTGl0ZXJhbAorICAgICAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyCisg
ICAgICAgIGZ1bmN0aW9uIHBhcnNlRmllbGRUeXBlKCkgeworICAgICAgICAgICAgdmFyIGtleTsK
KworICAgICAgICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNP
TE9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguRmllbGRUeXBlLAorICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsCisgICAgICAgICAgICAgICAga2V5OiBrZXksCisg
ICAgICAgICAgICAgICAgdmFsdWU6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9JworICAgICAgICAv
LworICAgICAgICAvLyBGaWVsZFR5cGVMaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4K
KyAgICAgICAgLy8gICB8IEZpZWxkVHlwZQorICAgICAgICAvLyAgIHwgRmllbGRUeXBlICcsJyBG
aWVsZFR5cGVMaXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHsKKyAgICAg
ICAgICAgIHZhciBmaWVsZHM7CisKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNFLCAn
UmVjb3JkVHlwZSBzaG91bGQgc3RhcnQgd2l0aCB7Jyk7CisgICAgICAgICAgICBmaWVsZHMgPSBb
XTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZmllbGRzLnB1c2gocGFyc2VGaWVsZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDRSk7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZWNvcmRU
eXBlLAorICAgICAgICAgICAgICAgIGZpZWxkczogZmllbGRzCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lID0gdmFsdWU7CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1l
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVHlwZUV4cHJlc3Npb25MaXN0IDo9CisgICAgICAgIC8v
ICAgICBUb3BMZXZlbFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCBUb3BMZXZlbFR5cGVF
eHByZXNzaW9uICcsJyBUeXBlRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VU
eXBlRXhwcmVzc2lvbkxpc3QoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKwor
ICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTsKKyAgICAgICAgICAgIHdoaWxl
ICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2Vu
LkNPTU1BKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVHlwZU5hbWUgOj0KKyAgICAgICAgLy8gICAgIE5hbWVFeHByZXNzaW9uCisgICAg
ICAgIC8vICAgfCBOYW1lRXhwcmVzc2lvbiBUeXBlQXBwbGljYXRpb24KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gVHlwZUFwcGxpY2F0aW9uIDo9CisgICAgICAgIC8vICAgICAnLjwnIFR5cGVFeHBy
ZXNzaW9uTGlzdCAnPicKKyAgICAgICAgLy8gICB8ICc8JyBUeXBlRXhwcmVzc2lvbkxpc3QgJz4n
ICAgLy8gdGhpcyBpcyBleHRlbnNpb24gb2YgZG9jdHJpbmUKKyAgICAgICAgZnVuY3Rpb24gcGFy
c2VUeXBlTmFtZSgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBhcHBsaWNhdGlvbnM7CisKKyAg
ICAgICAgICAgIGV4cHIgPSBwYXJzZU5hbWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4gPT09IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHsKKyAgICAgICAg
ICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zID0gcGFyc2VUeXBl
RXhwcmVzc2lvbkxpc3QoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5U
eXBlQXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisg
ICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uczogYXBwbGljYXRpb25zCisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUmVzdWx0VHlwZSA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+
CisgICAgICAgIC8vICAgfCAnOicgdm9pZAorICAgICAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNz
aW9uCisgICAgICAgIC8vCisgICAgICAgIC8vIEJORiBpcyBhYm92ZQorICAgICAgICAvLyBidXQs
IHdlIHJlbW92ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tl
bjo6Q09MT04KKyAgICAgICAgZnVuY3Rpb24gcGFyc2VSZXN1bHRUeXBlKCkgeworICAgICAgICAg
ICAgY29uc3VtZShUb2tlbi5DT0xPTiwgJ1Jlc3VsdFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggOicp
OworICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9p
ZCcpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJh
bAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VUeXBlRXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyYW1ldGVy
c1R5cGUgOj0KKyAgICAgICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAg
fCBOb25SZXN0UGFyYW1ldGVyc1R5cGUKKyAgICAgICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJz
VHlwZSAnLCcgUmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVzdFBh
cmFtZXRlclR5cGUgOj0KKyAgICAgICAgLy8gICAgICcuLi4nCisgICAgICAgIC8vICAgICAnLi4u
JyBJZGVudGlmaWVyCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vblJlc3RQYXJhbWV0ZXJzVHlw
ZSA6PQorICAgICAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNU
eXBlCisgICAgICAgIC8vICAgfCBQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBPcHRpb25h
bFBhcmFtZXRlcnNUeXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVy
c1R5cGUgOj0KKyAgICAgICAgLy8gICAgIE9wdGlvbmFsUGFyYW1ldGVyVHlwZQorICAgICAgICAv
LyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlCisgICAg
ICAgIC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyVHlwZSA6PSBQYXJhbWV0ZXJUeXBl
PQorICAgICAgICAvLworICAgICAgICAvLyBQYXJhbWV0ZXJUeXBlIDo9IFR5cGVFeHByZXNzaW9u
IHwgSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
SWRlbnRpZmllciBpcyAibmV3IiBvciAidGhpcyIKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VQYXJh
bWV0ZXJzVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwgbm9ybWFsID0gdHJ1
ZSwgZXhwciwgcmVzdCA9IGZhbHNlOworCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRv
a2VuLlJQQVJFTikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkg
eworICAgICAgICAgICAgICAgICAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpOworICAgICAgICAgICAgICAgICAgICByZXN0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleHByID0gcGFyc2VU
eXBlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRh
eC5OYW1lRXhwcmVzc2lvbiAmJiB0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUGFyYW1ldGVyVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09
IFRva2VuLkVRVUFMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwp
OworICAgICAgICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4Lk9wdGlvbmFsVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJl
c3Npb246IGV4cHIKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
bm9ybWFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
J3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmVzdCkgeworICAgICAgICAgICAgICAgICAgICBl
eHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChl
eHByKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5
cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb25TaWduYXR1cmVUeXBlIDo9CisgICAg
ICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGUKKyAgICAgICAgLy8g
ICB8IFR5cGVQYXJhbWV0ZXJzICcoJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAg
ICAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5hbWUgJyknIFJl
c3VsdFR5cGUKKyAgICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5
cGVOYW1lICcsJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICBmdW5jdGlv
biBwYXJzZUZ1bmN0aW9uVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBpc05ldywgdGhpc0JpbmRp
bmcsIHBhcmFtcywgcmVzdWx0LCBmblR5cGU7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09
IFRva2VuLk5BTUUgJiYgdmFsdWUgPT09ICdmdW5jdGlvbicsICdGdW5jdGlvblR5cGUgc2hvdWxk
IHN0YXJ0IHdpdGggXCdmdW5jdGlvblwnJyk7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5B
TUUpOworCisgICAgICAgICAgICAvLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBpcyBub3QgaW1w
bGVtZW50aW5nIFR5cGVQYXJhbWV0ZXJzLgorICAgICAgICAgICAgLy8gU28gd2UgZG8gbm90LiBp
ZiB3ZSBkb24ndCBnZXQgJygnLCB3ZSBzZWUgaXQgYXMgZXJyb3IuCisgICAgICAgICAgICBleHBl
Y3QoVG9rZW4uTFBBUkVOKTsKKworICAgICAgICAgICAgaXNOZXcgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsOworICAgICAg
ICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICAvLyBQ
YXJhbWV0ZXJzVHlwZSBvciAndGhpcycKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLk5BTUUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJ3RoaXMnIHx8
IHZhbHVlID09PSAnbmV3JykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoaXMnIG9yICdu
ZXcnCisgICAgICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0
ZW5zaW9uCisgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gdmFsdWUgPT09ICduZXcnOworICAg
ICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoVG9rZW4uQ09MT04pOworICAgICAgICAgICAgICAgICAgICB0aGlzQmluZGluZyA9
IHBhcnNlVHlwZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tl
bi5DT01NQSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUlBBUkVO
KTsKKworICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9
PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJlc3VsdFR5
cGUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm5UeXBlID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgcGFyYW1z
OiBwYXJhbXMsCisgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAodGhpc0JpbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAvLyBhdm9p
ZCBhZGRpbmcgbnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAg
ICBmblR5cGVbJ3RoaXMnXSA9IHRoaXNCaW5kaW5nOworICAgICAgICAgICAgICAgIGlmIChpc05l
dykgeworICAgICAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm5UeXBlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQmFzaWNUeXBlRXhwcmVzc2lvbiA6PQorICAgICAgICAvLyAg
ICAgJyonCisgICAgICAgIC8vICAgfCAnbnVsbCcKKyAgICAgICAgLy8gICB8ICd1bmRlZmluZWQn
CisgICAgICAgIC8vICAgfCBUeXBlTmFtZQorICAgICAgICAvLyAgIHwgRnVuY3Rpb25UeXBlCisg
ICAgICAgIC8vICAgfCBVbmlvblR5cGUKKyAgICAgICAgLy8gICB8IFJlY29yZFR5cGUKKyAgICAg
ICAgLy8gICB8IEFycmF5VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUJhc2ljVHlwZUV4cHJl
c3Npb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uU1RBUjoKKyAgICAgICAgICAgICAgICBj
b25zdW1lKFRva2VuLlNUQVIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5BbGxMaXRlcmFsCisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgY2FzZSBUb2tlbi5MUEFSRU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlVW5pb25UeXBlKCk7CisKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOgorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5VHlwZSgpOworCisgICAgICAgICAgICBjYXNlIFRv
a2VuLkxCUkFDRToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7CisK
KyAgICAgICAgICAgIGNhc2UgVG9rZW4uTkFNRToKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUg
PT09ICdudWxsJykgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4Lk51bGxMaXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuZGVm
aW5lZExpdGVyYWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjb250ZXh0ID0gQ29udGV4dC5zYXZlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblR5cGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlTmFtZSgpOworCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9r
ZW4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFR5cGVFeHByZXNz
aW9uIDo9CisgICAgICAgIC8vICAgICBCYXNpY1R5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAg
fCAnPycgQmFzaWNUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgJyEnIEJhc2ljVHlwZUV4
cHJlc3Npb24KKyAgICAgICAgLy8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJz8nCisgICAgICAg
IC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICchJworICAgICAgICAvLyAgIHwgJz8nCisgICAg
ICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICdbXScKKyAgICAgICAgZnVuY3Rpb24gcGFy
c2VUeXBlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZhciBleHByOworCisgICAgICAgICAg
ICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5D
T01NQSB8fCB0b2tlbiA9PT0gVG9rZW4uRVFVQUwgfHwgdG9rZW4gPT09IFRva2VuLlJCUkFDRSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJQQVJFTiB8fCB0b2tl
biA9PT0gVG9rZW4uUElQRSB8fCB0b2tlbiA9PT0gVG9rZW4uRU9GIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVM
aXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxs
YWJsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBl
RXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLkJBTkcpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25O
dWxsYWJsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNU
eXBlRXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0gcGFyc2VC
YXNpY1R5cGVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJB
TkcpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJs
ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAg
ICAgICAgICAgIHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAg
ICAgICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAgICAgICAgICAgICAgICAgcHJl
Zml4OiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTEJSQUNLKSB7CisgICAgICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5MQlJBQ0spOworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkJSQUNLLCAn
ZXhwZWN0ZWQgYW4gYXJyYXktc3R5bGUgdHlwZSBkZWNsYXJhdGlvbiAoJyArIHZhbHVlICsgJ1td
KScpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5UeXBlQXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBcnJheScKKyAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl0KKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFRvcExldmVsVHlwZUV4cHJlc3Npb24gOj0KKyAgICAgICAg
Ly8gICAgICBUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgICB8IFR5cGVVbmlvbkxpc3QKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVy
IGV4dGVuc2lvbiwgbm90IEVTNAorICAgICAgICAvLyBsaWtlLAorICAgICAgICAvLyAgIHsgbnVt
YmVyIHwgc3RyaW5nIH0KKyAgICAgICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdy
aXRlIGl0IGFzCisgICAgICAgIC8vICAgeyAobnVtYmVyfHN0cmluZykgfQorICAgICAgICBmdW5j
dGlvbiBwYXJzZVRvcCgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBlbGVtZW50czsKKworICAg
ICAgICAgICAgZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbiAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtZW50cyA9IFsgZXhwciBdOworICAgICAgICAg
ICAgY29uc3VtZShUb2tlbi5QSVBFKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpOworICAgICAg
ICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tl
bi5QSVBFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLAorICAgICAgICAgICAgICAgIGVsZW1lbnRz
OiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHBhcnNlVG9wUGFyYW1UeXBlKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAg
ICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUo
VG9rZW4uUkVTVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9u
OiBwYXJzZVRvcCgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZXhwciA9IHBhcnNlVG9wKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2Vu
LkVRVUFMKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9wdGlv
bmFsVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlKHNyYywgb3B0KSB7CisgICAgICAg
ICAgICB2YXIgZXhwcjsKKworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAg
bGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAg
ICAgIHByZXZpb3VzID0gMDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNl
VG9wKCk7CisKKyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIs
CisgICAgICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHBhcnNlUGFyYW1UeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIgZXhw
cjsKKworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0gc291
cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZpb3Vz
ID0gMDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wUGFyYW1UeXBl
KCk7CisKKyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHN0cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHsKKyAgICAgICAg
ICAgIHZhciByZXN1bHQsIGksIGl6OworCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkg
eworICAgICAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9ICc/JzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Y2FzZSBTeW50YXguQWxsTGl0ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnKic7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRl
cmFsOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdudWxsJzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDoKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gJ3ZvaWQnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj
YXNlIFN5bnRheC5VbmlvblR5cGU6CisgICAgICAgICAgICAgICAgaWYgKCF0b3BMZXZlbCkgewor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnKCc7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsg
aSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUlt
cGwobm9kZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgo
aSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JzsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICghdG9wTGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgU3ludGF4LkFycmF5VHlwZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnWyc7Cisg
ICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwo
bm9kZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3Qg
PyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgU3ludGF4LlJlY29yZFR5cGU6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gJ3snOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5maWVsZHMu
bGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3Ry
aW5naWZ5SW1wbChub2RlLmZpZWxkc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfSc7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZToKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2Rl
LmtleSArIChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUudmFsdWUs
IGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25UeXBlOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbXBhY3QgPyAnZnVuY3Rpb24oJyA6ICdmdW5jdGlvbiAoJzsKKwor
ICAgICAgICAgICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGVbJ25ldyddKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNv
bXBhY3QgPyAnbmV3OicgOiAnbmV3OiAnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICd0aGlzOicgOiAn
dGhpczogJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICcpJzsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwo
bm9kZS5yZXN1bHQsIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguUGFyYW1ldGVyVHlwZToKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBub2RlLm5hbWUgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsg
c3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXN0VHlwZToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSAnLi4uJzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9u
KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhw
cmVzc2lvbiwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5Ob25OdWxsYWJsZVR5cGU6CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
ICchJyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJ
bXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnISc7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5PcHRpb25h
bFR5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJl
c3Npb24sIGNvbXBhY3QpICsgJz0nOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIFN5bnRheC5OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
cHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICc/JyArIHN0cmluZ2lmeUlt
cGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lv
biwgY29tcGFjdCkgKyAnPyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBub2RlLm5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjoKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnLjwnOwor
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5hcHBsaWNhdGlvbnMubGVuZ3Ro
OyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5
SW1wbChub2RlLmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPic7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cignVW5rbm93biB0eXBlICcgKyBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5n
aWZ5KG5vZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICBvcHRpb25zID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gc3RyaW5naWZ5SW1wbChub2RlLCBvcHRpb25zLmNvbXBhY3QsIG9wdGlvbnMudG9w
TGV2ZWwpOworICAgICAgICB9CisKKyAgICAgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSBwYXJzZVR5
cGU7CisgICAgICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSBwYXJzZVBhcmFtVHlwZTsKKyAg
ICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7CisgICAgICAgIGV4cG9ydHMuU3lu
dGF4ID0gU3ludGF4OworICAgIH0odHlwZWQgPSB7fSkpOworCisgICAgLy8gSlNEb2MgVGFnIFBh
cnNlcgorCisgICAgKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgICAgIHZhciBSdWxlcywKKyAg
ICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgIGxl
bmd0aCwKKyAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIHJlY292ZXJhYmxlLAorICAg
ICAgICAgICAgc2xvcHB5LAorICAgICAgICAgICAgc3RyaWN0OworCisgICAgICAgIGZ1bmN0aW9u
IGFkdmFuY2UoKSB7CisgICAgICAgICAgICB2YXIgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAg
ICAgICAgaW5kZXggKz0gMTsKKyAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkg
eworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5UaXRs
ZSgpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSA9ICcnOworICAgICAgICAgICAgLy8gd2FzdGUg
J0AnCisgICAgICAgICAgICBhZHZhbmNlKCk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCAmJiBpc0FTQ0lJQWxwaGFudW1lcmljKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAg
ICAgICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gdGl0bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVu
dCgpIHsKKyAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4OworCisgICAg
ICAgICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2xhc3RdOworICAgICAgICAgICAgICAg
IGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyICs9IDE7CisgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAod2FpdGluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT09ICdAJykgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCArPSAxOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIH0KKworICAgICAg
ICAvLyB0eXBlIGV4cHJlc3Npb24gbWF5IGhhdmUgbmVzdCBicmFjZSwgc3VjaCBhcywKKyAgICAg
ICAgLy8geyB7IG9rOiBzdHJpbmcgfSB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHRoZXJlZm9y
ZSwgc2Nhbm5pbmcgdHlwZSBleHByZXNzaW9uIHdpdGggYmFsYW5jaW5nIGJyYWNlcy4KKyAgICAg
ICAgZnVuY3Rpb24gcGFyc2VUeXBlKHRpdGxlLCBsYXN0KSB7CisgICAgICAgICAgICB2YXIgY2gs
IGJyYWNlLCB0eXBlLCBkaXJlY3QgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gc2VhcmNoICd7
JworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkgeworICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkg
eworICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVybgorICAgICAgICAgICAgICAgICAg
ICBkaXJlY3QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGlyZWN0KSB7CisgICAg
ICAgICAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIHsgaXMgZm91bmQKKyAgICAgICAgICAgICAg
ICBicmFjZSA9IDE7CisgICAgICAgICAgICAgICAgdHlwZSA9ICcnOworICAgICAgICAgICAgICAg
IHdoaWxlIChpbmRleCA8IGxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2UgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYnJhY2UgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAr
PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYnJhY2VzIGlzIG5vdCBiYWxhbmNlZAorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNQ
YXJhbVRpdGxlKHRpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVk
LnBhcnNlUGFyYW1UeXBlKHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0eXBlZC5wYXJzZVR5cGUodHlwZSk7CisgICAgICAgICAgICAgICAg
fSBjYXRjaCAoZTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZmFpbGVkCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcihsYXN0KSB7Cisg
ICAgICAgICAgICB2YXIgaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVy
U3RhcnQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBhZHZhbmNlKCk7CisgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsYXN0ICYmIGlzSWRlbnRpZmllclBhcnQoc291cmNlW2luZGV4
XSkpIHsKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gc2tpcFdoaXRlU3BhY2UobGFzdCkgeworICAgICAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGFzdCAmJiAoaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pIHx8IGlzTGluZVRlcm1p
bmF0b3Ioc291cmNlW2luZGV4XSkpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lKGxhc3Qs
IGFsbG93QnJhY2tldHMsIGFsbG93TmVzdGVkUGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgbmFt
ZSA9ICcnLCB1c2VCcmFja2V0czsKKworICAgICAgICAgICAgc2tpcFdoaXRlU3BhY2UobGFzdCk7
CisKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhbGxvd0JyYWNrZXRz
ICYmIHNvdXJjZVtpbmRleF0gPT09ICdbJykgeworICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7CisKKyAgICAgICAgICAgIGlmIChhbGxv
d05lc3RlZFBhcmFtcykgeworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VbaW5kZXhdID09
PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnLic7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50
aWZpZXIobGFzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodXNlQnJhY2tldHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGEg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcz8KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4
XSA9PT0gJz0nKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBz
eW1ib2wKKyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXScpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxh
c3QgIHx8IHNvdXJjZVtpbmRleF0gIT09ICddJykgeworICAgICAgICAgICAgICAgICAgICAvLyB3
ZSBuZXZlciBmb3VuZCBhIGNsb3NpbmcgJ10nCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhl
IGxhc3QgJ10nCisgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gc2tpcFRvVGFnKCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYm
IHNvdXJjZVtpbmRleF0gIT09ICdAJykgeworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQo
c291cmNlW2luZGV4XSA9PT0gJ0AnKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gVGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKSB7CisgICAg
ICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgICAgIHRoaXMuX3RpdGxl
ID0gdGl0bGU7CisgICAgICAgICAgICB0aGlzLl90YWcgPSB7CisgICAgICAgICAgICAgICAgdGl0
bGU6IHRpdGxlLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubGluZU51bWJlcnMpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl90YWcubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLl9sYXN0ID0gMDsKKyAgICAgICAgICAgIC8vIHNwYWNlIHRv
IHNhdmUgc3BlY2lhbCBpbmZvcm1hdGlvbiBmb3IgdGl0bGUgcGFyc2Vycy4KKyAgICAgICAgICAg
IHRoaXMuX2V4dHJhID0geyB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkRXJyb3IoZXJy
LCAuLi4pCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuYWRkRXJyb3IgPSBmdW5jdGlvbiBh
ZGRFcnJvcihlcnJvclRleHQpIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwKKyAgICAgICAgICAgICAgICBtc2cgPSBlcnJv
clRleHQucmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBi
ZSBpbiByYW5nZScpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhd
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAg
ICAgaWYgKCF0aGlzLl90YWcuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGFnLmVy
cm9ycyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IobXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuX3RhZy5lcnJvcnMucHVzaChtc2cpOworICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJh
YmxlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBl
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXMKKyAg
ICAgICAgICAgIGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9
IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghdGhpcy5fdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQ
YXJhbVRpdGxlKHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7CisgICAg
ICAgICAgICAgICAgLy8gb3B0aW9uYWwgdHlwZXMKKyAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwg
dGhpcy5fbGFzdCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgICAgICAvL0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Ig
d2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAg
IFRhZ1BhcnNlci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwp
IHsKKyAgICAgICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0
aGlzLl9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZh
bGlkIHRhZyBuYW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1l
UGF0aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQ
YXRoKGZhbHNlKTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBh
cnNlTmFtZVBhdGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9wYXJzZU5hbWVQYXRoKHRydWUpOworICAgICAgICB9OworCisKKyAgICAgICAgVGFnUGFy
c2VyLnByb3RvdHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIg
YXNzaWduLCBuYW1lOworCisgICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMg
bmFtZQorICAgICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5
ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRs
ZSkpOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxy
ZWFkeSBiZWVuIHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9u
LCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQg
YXQgdGhlIGVuZAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3Rp
dGxlKSAmJiB0aGlzLl90YWcudHlwZS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9leHRyYS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl90YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcg
b3IgaW52YWxpZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHRoaXMuX3RhZy5uYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkg
PT09ICdbJyAmJiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUg
aXMgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmlu
Z30gW3NvbWVib2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgYXNzaWduID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5h
bWUgPSBhc3NpZ25bMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8g
YW4gb3B0aW9uYWwgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50
eXBlLnR5cGUgIT09ICdPcHRpb25hbFR5cGUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLnR5cGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6ICdPcHRpb25hbFR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
ZXNzaW9uOiB0aGlzLl90YWcudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9
IGZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRp
b24gPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAg
ICAgICAgIGlmIChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgIGlmICgoL14tXHMrLyku
dGVzdChkZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbi5zdWJzdHJpbmcoMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRoaXMuX3RhZy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUtpbmQgPSBmdW5jdGlvbiBwYXJzZUtpbmQoKSB7CisgICAgICAgICAg
ICB2YXIga2luZCwga2luZHM7CisgICAgICAgICAgICBraW5kcyA9IHsKKyAgICAgICAgICAgICAg
ICAnY2xhc3MnOiB0cnVlLAorICAgICAgICAgICAgICAgICdjb25zdGFudCc6IHRydWUsCisgICAg
ICAgICAgICAgICAgJ2V2ZW50JzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZXh0ZXJuYWwnOiB0
cnVlLAorICAgICAgICAgICAgICAgICdmaWxlJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZnVu
Y3Rpb24nOiB0cnVlLAorICAgICAgICAgICAgICAgICdtZW1iZXInOiB0cnVlLAorICAgICAgICAg
ICAgICAgICdtaXhpbic6IHRydWUsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6IHRydWUsCisg
ICAgICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHRydWUsCisgICAgICAgICAgICAgICAgJ3R5cGVk
ZWYnOiB0cnVlCisgICAgICAgICAgICB9OworICAgICAgICAgICAga2luZCA9IHRyaW0oc2xpY2VT
b3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdGhpcy5fdGFn
LmtpbmQgPSBraW5kOworICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShraW5kcywga2lu
ZCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQga2luZCBu
YW1lIFwnJTBcJycsIGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNz
ID0gZnVuY3Rpb24gcGFyc2VBY2Nlc3MoKSB7CisgICAgICAgICAgICB2YXIgYWNjZXNzOworICAg
ICAgICAgICAgYWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9s
YXN0KSk7CisgICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzOworICAgICAgICAg
ICAgaWYgKGFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYg
YWNjZXNzICE9PSAncHVibGljJykgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJv
cignSW52YWxpZCBhY2Nlc3MgbmFtZSBcJyUwXCcnLCBhY2Nlc3MpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIu
cHJvdG90eXBlLnBhcnNlVmFyaWF0aW9uID0gZnVuY3Rpb24gcGFyc2VWYXJpYXRpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgdmFyaWF0aW9uLCB0ZXh0OworICAgICAgICAgICAgdGV4dCA9IHRyaW0o
c2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdmFy
aWF0aW9uID0gcGFyc2VGbG9hdCh0ZXh0LCAxMCk7CisgICAgICAgICAgICB0aGlzLl90YWcudmFy
aWF0aW9uID0gdmFyaWF0aW9uOworICAgICAgICAgICAgaWYgKGlzTmFOKHZhcmlhdGlvbikpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgdmFyaWF0aW9uIFwn
JTBcJycsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVuc3VyZUVuZCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBzaG91bGRCZUVtcHR5ID0gdHJpbShzbGljZVNvdXJj
ZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQmVF
bXB0eSkgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignVW5rbm93biBjb250
ZW50IFwnJTBcJycsIHNob3VsZEJlRW1wdHkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVw
aWxvZ3VlID0gZnVuY3Rpb24gZXBpbG9ndWUoKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRp
b247CisKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uOwor
ICAgICAgICAgICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvbgorICAg
ICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBl
ICYmIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lOworICAgICAgICAg
ICAgICAgIHRoaXMuX3RhZy5uYW1lID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgaWYg
KCFzbG9wcHkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNz
aW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAg
ICAgICBSdWxlcyA9IHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1h
Y2Nlc3MuaHRtbAorICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSwKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sCisgICAgICAgICAg
ICAnYWxpYXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAv
LyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbAorICAgICAgICAgICAgJ2F1
Z21lbnRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVu
ZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9y
Lmh0bWwKKyAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFt
ZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAnY2xh
c3MnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10s
CisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5k
cy5odG1sCisgICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBh
dGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2Rv
Yy5vcmcvdGFncy1kZXByZWNhdGVkLmh0bWwKKyAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydw
YXJzZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3Rh
Z3MtZ2xvYmFsLmh0bWwKKyAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLAorICAg
ICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWwKKyAgICAgICAg
ICAgICdpbm5lcic6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtaW5zdGFuY2UuaHRtbAorICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1
cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0
bWwKKyAgICAgICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1taXhlcy5odG1sCisgICAgICAgICAgICAnbWl4ZXMnOiBb
J3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtbWl4aW4uaHRtbAorICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5h
bWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNl
VHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdt
ZXRob2QnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAg
ICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbAorICAgICAgICAgICAg
J21vZHVsZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVF
bmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1t
ZXRob2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcs
ICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy1tZXRob2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQ
YXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICd2YXInOiBbJ3Bh
cnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAg
ICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sCisgICAgICAgICAgICAn
bmFtZSc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbAorICAgICAgICAgICAgJ25hbWVz
cGFjZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQn
XSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWwK
KyAgICAgICAgICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbidd
LAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1s
CisgICAgICAgICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlv
biddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1s
CisgICAgICAgICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbidd
LAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWwK
KyAgICAgICAgICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbAorICAgICAgICAgICAgJ3JlcXVp
cmVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0
cDovL3VzZWpzZG9jLm9yZy90YWdzLXNpbmNlLmh0bWwKKyAgICAgICAgICAgICdzaW5jZSc6IFsn
cGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90
YWdzLXN0YXRpYy5odG1sCisgICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSwKKyAg
ICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWwKKyAgICAg
ICAgICAgICdzdW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sCisgICAgICAgICAgICAndGhpcyc6IFsn
cGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy10b2RvLmh0bWwKKyAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2Ny
aXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmFyaWF0
aW9uLmh0bWwKKyAgICAgICAgICAgICd2YXJpYXRpb24nOiBbJ3BhcnNlVmFyaWF0aW9uJ10sCisg
ICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmVyc2lvbi5odG1sCisgICAg
ICAgICAgICAndmVyc2lvbic6IFsncGFyc2VEZXNjcmlwdGlvbiddCisgICAgICAgIH07CisKKyAg
ICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkgeworICAg
ICAgICAgICAgdmFyIGksIGl6LCBzZXF1ZW5jZXMsIG1ldGhvZDsKKworICAgICAgICAgICAgLy8g
ZW1wdHkgdGl0bGUKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGl0bGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0aXRsZScpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2VlayB0byBjb250ZW50IGxhc3QgaW5kZXguCisg
ICAgICAgICAgICB0aGlzLl9sYXN0ID0gc2Vla0NvbnRlbnQodGhpcy5fdGl0bGUpOworCisgICAg
ICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoUnVsZXMsIHRoaXMuX3RpdGxlKSkgeworICAgICAg
ICAgICAgICAgIHNlcXVlbmNlcyA9IFJ1bGVzW3RoaXMuX3RpdGxlXTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBzZXF1ZW5jZXMKKyAgICAgICAgICAg
ICAgICBzZXF1ZW5jZXMgPSBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWUnLCAncGFyc2VEZXNjcmlw
dGlvbicsICdlcGlsb2d1ZSddOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkg
PSAwLCBpeiA9IHNlcXVlbmNlcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAg
ICAgbWV0aG9kID0gc2VxdWVuY2VzW2ldOworICAgICAgICAgICAgICAgIGlmICghdGhpc1ttZXRo
b2RdKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIGdsb2JhbCBpbmRleCB0
byBlbmQgb2YgdGhpcyB0YWcuCisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2xhc3Q7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fdGFnOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9u
IHBhcnNlVGFnKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSwgcGFyc2VyOworCisg
ICAgICAgICAgICAvLyBza2lwIHRvIHRhZworICAgICAgICAgICAgaWYgKCFza2lwVG9UYWcoKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBzY2FuIHRpdGxlCisgICAgICAgICAgICB0aXRsZSA9IHNjYW5UaXRsZSgpOworCisg
ICAgICAgICAgICAvLyBjb25zdHJ1Y3QgdGFnIHBhcnNlcgorICAgICAgICAgICAgcGFyc2VyID0g
bmV3IFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2Vy
LnBhcnNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBQYXJzZSBKU0Rv
YworICAgICAgICAvLworCisgICAgICAgIGZ1bmN0aW9uIHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCkg
eworICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJycsIGNoLCBhdEFsbG93ZWQ7CisKKyAg
ICAgICAgICAgIGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAg
ICAgICAgICBpZiAoYXRBbGxvd2VkICYmIGNoID09PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzTGlu
ZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0QWxsb3dlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdEFsbG93ZWQgJiYgIWlzV2hpdGVTcGFjZShj
aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYWR2YW5jZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRyaW0oZGVzY3JpcHRpb24pOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykgeworICAgICAg
ICAgICAgdmFyIHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBp
LCBpejsKKworICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgICAgIG9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KHR5cGVvZiBvcHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7
CisgICAgICAgICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFncworICAgICAg
ICAgICAgaWYgKG9wdGlvbnMudGFncykgeworICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9w
dGlvbnMudGFncykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5n
dGg7IGkgPCBpejsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9w
dGlvbnMudGFnc1tpXSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmVzdGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoJ0ludmFsaWQgInRhZ3MiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkICJ0YWdz
IiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4
ID0gMDsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgcmVjb3ZlcmFi
bGUgPSBvcHRpb25zLnJlY292ZXJhYmxlOworICAgICAgICAgICAgc2xvcHB5ID0gb3B0aW9ucy5z
bG9wcHk7CisgICAgICAgICAgICBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsKKworICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSBzY2FuSlNEb2NEZXNjcmlwdGlvbigpOworCisgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHRhZyA9IHBhcnNlVGFnKG9wdGlvbnMpOwor
ICAgICAgICAgICAgICAgIGlmICghdGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWludGVyZXN0aW5nVGFncyB8
fCBpbnRlcmVzdGluZ1RhZ3MuaGFzT3duUHJvcGVydHkodGFnLnRpdGxlKSkgeworICAgICAgICAg
ICAgICAgICAgICB0YWdzLnB1c2godGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246
IGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgIHRhZ3M6IHRhZ3MKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0KKyAgICAgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworICAgIH0oanNkb2Mg
PSB7fSkpOworCisgICAgZXhwb3J0cy52ZXJzaW9uID0gVkVSU0lPTjsKKyAgICBleHBvcnRzLnBh
cnNlID0ganNkb2MucGFyc2U7CisgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5
cGU7CisgICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlOwor
ICAgIGV4cG9ydHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7CisgICAgZXhwb3J0cy5T
eW50YXggPSBzaGFsbG93Q29weSh0eXBlZC5TeW50YXgpOworICAgIGV4cG9ydHMuRXJyb3IgPSBE
b2N0cmluZUVycm9yOworICAgIGV4cG9ydHMudHlwZSA9IHsKKyAgICAgICAgU3ludGF4OiBleHBv
cnRzLlN5bnRheCwKKyAgICAgICAgcGFyc2VUeXBlOiB0eXBlZC5wYXJzZVR5cGUsCisgICAgICAg
IHBhcnNlUGFyYW1UeXBlOiB0eXBlZC5wYXJzZVBhcmFtVHlwZSwKKyAgICAgICAgc3RyaW5naWZ5
OiB0eXBlZC5zdHJpbmdpZnkKKyAgICB9OworfSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5l
ZCcgPyAoZG9jdHJpbmUgPSB7fSkgOiBleHBvcnRzKSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQg
ZXQgdHc9ODAgOiAqLworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggU2V2aWxsZSA8aGlAYWxl
eGFuZGVyc2V2aWxsZS5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogor
CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
Ky8qKgorICogRXNjb3BlICg8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9u
L2VzY29wZSI+ZXNjb3BlPC9hPikgaXMgYW4gPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtMjYyLmh0bSI+RUNN
QVNjcmlwdDwvYT4KKyAqIHNjb3BlIGFuYWx5emVyIGV4dHJhY3RlZCBmcm9tIHRoZSA8YQorICog
aHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9lc21hbmdsZSI+ZXNtYW5nbGUg
cHJvamVjdDwvYS8+LgorICogPHA+CisgKiA8ZW0+ZXNjb3BlPC9lbT4gZmluZHMgbGV4aWNhbCBz
Y29wZXMgaW4gYSBzb3VyY2UgcHJvZ3JhbSwgaS5lLiBhcmVhcyBvZiB0aGF0CisgKiBwcm9ncmFt
IHdoZXJlIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBpZGVudGlmaWVyIHJlZmVy
IHRvIHRoZSBzYW1lCisgKiB2YXJpYWJsZS4gV2l0aCBlYWNoIHNjb3BlIHRoZSBjb250YWluZWQg
dmFyaWFibGVzIGFyZSBjb2xsZWN0ZWQsIGFuZCBlYWNoCisgKiBpZGVudGlmaWVyIHJlZmVyZW5j
ZSBpbiBjb2RlIGlzIGxpbmtlZCB0byBpdHMgY29ycmVzcG9uZGluZyB2YXJpYWJsZSAoaWYKKyAq
IHBvc3NpYmxlKS4KKyAqIDxwPgorICogPGVtPmVzY29wZTwvZW0+IHdvcmtzIG9uIGEgc3ludGF4
IHRyZWUgb2YgdGhlIHBhcnNlZCBzb3VyY2UgY29kZSB3aGljaCBoYXMKKyAqIHRvIGFkaGVyZSB0
byB0aGUgPGEKKyAqIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2Rv
Y3MvU3BpZGVyTW9ua2V5L1BhcnNlcl9BUEkiPgorICogTW96aWxsYSBQYXJzZXIgQVBJPC9hPi4g
RS5nLiA8YSBocmVmPSJodHRwOi8vZXNwcmltYS5vcmciPmVzcHJpbWE8L2E+IGlzIGEgcGFyc2Vy
CisgKiB0aGF0IHByb2R1Y2VzIHN1Y2ggc3ludGF4IHRyZWVzLgorICogPHA+CisgKiBUaGUgbWFp
biBpbnRlcmZhY2UgaXMgdGhlIHtAbGluayBhbmFseXplfSBmdW5jdGlvbi4KKyAqIEBtb2R1bGUK
KyAqLworCisvKmpzbGludCBiaXR3aXNlOnRydWUgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwg
ZGVmaW5lOnRydWUsIHJlcXVpcmU6dHJ1ZSovCisoZnVuY3Rpb24gKGZhY3RvcnksIGdsb2JhbCkg
eworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGZ1bmN0aW9uIG5hbWVzcGFjZShzdHIsIG9iaikg
eworICAgICAgICB2YXIgaSwgaXosIG5hbWVzLCBuYW1lOworICAgICAgICBuYW1lcyA9IHN0ci5z
cGxpdCgnLicpOworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5hbWVzLmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lc1tpXTsKKyAgICAgICAgICAgIGlmIChv
YmouaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvYmogPSBvYmpbbmFt
ZV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iaiA9IChvYmpbbmFt
ZV0gPSB7fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iajsK
KyAgICB9CisKKyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3Vw
cG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gYW5kIHBsYWluIGJyb3dzZXIgbG9h
ZGluZywKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1k
KSB7CisgICAgICAgIGRlZmluZSgnZXNjb3BlJywgWydleHBvcnRzJywgJ2VzdHJhdmVyc2UnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIGVzdHJhdmVyc2UpIHsKKyAgICAgICAgICAgIGZhY3RvcnkoZXhw
b3J0cywgZ2xvYmFsLCBlc3RyYXZlcnNlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIGlmICh0
eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRz
LCBnbG9iYWwsIHJlcXVpcmUoJ2VzdHJhdmVyc2UnKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZmFjdG9yeShuYW1lc3BhY2UoJ2VzY29wZScsIGdsb2JhbCksIGdsb2JhbCwgZ2xvYmFsLmVzdHJh
dmVyc2UpOworICAgIH0KK30oZnVuY3Rpb24gKGV4cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSkg
eworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBTeW50YXgsCisgICAgICAgIE1hcCwKKyAg
ICAgICAgY3VycmVudFNjb3BlLAorICAgICAgICBnbG9iYWxTY29wZSwKKyAgICAgICAgc2NvcGVz
LAorICAgICAgICBvcHRpb25zOworCisgICAgU3ludGF4ID0gZXN0cmF2ZXJzZS5TeW50YXg7CisK
KyAgICBpZiAodHlwZW9mIGdsb2JhbC5NYXAgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8v
IEVTNiBNYXAKKyAgICAgICAgTWFwID0gZ2xvYmFsLk1hcDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBNYXAgPSBmdW5jdGlvbiBNYXAoKSB7CisgICAgICAgICAgICB0aGlzLl9fZGF0YSA9IHt9Owor
ICAgICAgICB9OworCisgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTWFwR2V0
KGtleSkgeworICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgaWYgKHRo
aXMuX19kYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fX2RhdGFba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlv
biBNYXBIYXMoa2V5KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fX2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIE1hcFNldChrZXksIHZhbCkgewor
ICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgdGhpcy5fX2RhdGFba2V5
XSA9IHZhbDsKKyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlWydkZWxldGUnXSA9
IGZ1bmN0aW9uIE1hcERlbGV0ZShrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsK
KyAgICAgICAgICAgIHJldHVybiBkZWxldGUgdGhpcy5fX2RhdGFba2V5XTsKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZCwgdGV4dCkgeworICAgICAgICBpZiAo
IWNvbmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKCkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgb3B0aW1pc3RpYzogZmFsc2UsCisgICAgICAgICAgICBkaXJlY3RpdmU6
IGZhbHNlCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlRGVlcGx5KHRh
cmdldCwgb3ZlcnJpZGUpIHsKKyAgICAgICAgdmFyIGtleSwgdmFsOworCisgICAgICAgIGZ1bmN0
aW9uIGlzSGFzaE9iamVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGFy
Z2V0ID09PSAnb2JqZWN0JyAmJiB0YXJnZXQgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh0YXJnZXQg
aW5zdGFuY2VvZiBSZWdFeHApOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChrZXkgaW4gb3Zl
cnJpZGUpIHsKKyAgICAgICAgICAgIGlmIChvdmVycmlkZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
CisgICAgICAgICAgICAgICAgdmFsID0gb3ZlcnJpZGVba2V5XTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNIYXNoT2JqZWN0KHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9i
amVjdCh0YXJnZXRba2V5XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURlZXBs
eSh0YXJnZXRba2V5XSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdXBkYXRlRGVlcGx5KHt9LCB2YWwpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQSBSZWZlcmVuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9m
IGFuIGlkZW50aWZpZXIgaW4gY29kZS4KKyAgICAgKiBAY2xhc3MgUmVmZXJlbmNlCisgICAgICov
CisgICAgZnVuY3Rpb24gUmVmZXJlbmNlKGlkZW50LCBzY29wZSwgZmxhZywgd3JpdGVFeHByLCBt
YXliZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogSWRlbnRpZmll
ciBzeW50YXggbm9kZS4KKyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNJZGVudGlmaWVyfSBS
ZWZlcmVuY2UjaWRlbnRpZmllciAKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaWRlbnRpZmll
ciA9IGlkZW50OworICAgICAgICAvKiogCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5j
bG9zaW5nIFNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gUmVmZXJlbmNlI2Zyb20g
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmZyb20gPSBzY29wZTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb21lcyBmcm9tIGEgZHluYW1pYyBzY29w
ZSAoc3VjaCBhcyAnZXZhbCcsCisgICAgICAgICAqICd3aXRoJywgZXRjLiksIGFuZCBtYXkgYmUg
dHJhcHBlZCBieSBkeW5hbWljIHNjb3Blcy4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0g
UmVmZXJlbmNlI3RhaW50ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZh
bHNlOworICAgICAgICAvKiogCisgICAgICAgICAqIFRoZSB2YXJpYWJsZSB0aGlzIHJlZmVyZW5j
ZSBpcyByZXNvbHZlZCB3aXRoLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZX0gUmVmZXJl
bmNlI3Jlc29sdmVkIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZXNvbHZlZCA9IG51bGw7
CisgICAgICAgIC8qKiAKKyAgICAgICAgICogVGhlIHJlYWQtd3JpdGUgbW9kZSBvZiB0aGUgcmVm
ZXJlbmNlLiAoVmFsdWUgaXMgb25lIG9mIHtAbGluaworICAgICAgICAgKiBSZWZlcmVuY2UuUkVB
RH0sIHtAbGluayBSZWZlcmVuY2UuUld9LCB7QGxpbmsgUmVmZXJlbmNlLldSSVRFfSkuCisgICAg
ICAgICAqIEBtZW1iZXIge251bWJlcn0gUmVmZXJlbmNlI2ZsYWcgCisgICAgICAgICAqIEBwcml2
YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICBpZiAo
dGhpcy5pc1dyaXRlKCkpIHsKKyAgICAgICAgICAgIC8qKiAKKyAgICAgICAgICAgICAqIElmIHJl
ZmVyZW5jZSBpcyB3cml0ZWFibGUsIHRoaXMgaXMgdGhlIHRyZWUgYmVpbmcgd3JpdHRlbiB0byBp
dC4KKyAgICAgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEjTm9kZX0gUmVmZXJlbmNlI3dyaXRl
RXhwciAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy53cml0ZUV4cHIgPSB3cml0
ZUV4cHI7CisgICAgICAgIH0KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBXaGV0aGVyIHRoZSBS
ZWZlcmVuY2UgbWlnaHQgcmVmZXIgdG8gYSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAqIEBt
ZW1iZXIge2Jvb2xlYW59IFJlZmVyZW5jZSNfX21heWJlSW1wbGljaXRHbG9iYWwgCisgICAgICAg
ICAqIEBwcml2YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9fbWF5YmVJbXBsaWNpdEds
b2JhbCA9IG1heWJlSW1wbGljaXRHbG9iYWw7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIEBj
b25zdGFudCBSZWZlcmVuY2UuUkVBRCAKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIFJl
ZmVyZW5jZS5SRUFEID0gMHgxOworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNl
LldSSVRFIAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLldSSVRFID0g
MHgyOworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLlJXIAorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLlJXID0gMHgzOworCisgICAgLyoqCisgICAg
ICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHN0YXRpYy4KKyAgICAgKiBAbWV0aG9kIFJlZmVy
ZW5jZSNpc1N0YXRpYworICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVm
ZXJlbmNlLnByb3RvdHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlzU3RhdGljKCkgeworICAgICAg
ICByZXR1cm4gIXRoaXMudGFpbnRlZCAmJiB0aGlzLnJlc29sdmVkICYmIHRoaXMucmVzb2x2ZWQu
c2NvcGUuaXNTdGF0aWMoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUg
cmVmZXJlbmNlIGlzIHdyaXRlYWJsZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1dyaXRl
CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90
eXBlLmlzV3JpdGUgPSBmdW5jdGlvbiBpc1dyaXRlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5m
bGFnICYgUmVmZXJlbmNlLldSSVRFOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVy
IHRoZSByZWZlcmVuY2UgaXMgcmVhZGFibGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNS
ZWFkCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJv
dG90eXBlLmlzUmVhZCA9IGZ1bmN0aW9uIGlzUmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZmxhZyAmIFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVy
IHRoZSByZWZlcmVuY2UgaXMgcmVhZC1vbmx5LgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lz
UmVhZE9ubHkKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5j
ZS5wcm90b3R5cGUuaXNSZWFkT25seSA9IGZ1bmN0aW9uIGlzUmVhZE9ubHkoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioK
KyAgICAgKiBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgd3JpdGUtb25seS4KKyAgICAgKiBAbWV0
aG9kIFJlZmVyZW5jZSNpc1dyaXRlT25seQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAg
ICovCisgICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1dyaXRlT25seSA9IGZ1bmN0aW9uIGlzV3Jp
dGVPbmx5KCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuV1JJVEU7
CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyByZWFk
LXdyaXRlLgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZFdyaXRlCisgICAgICogQHJl
dHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzUmVhZFdy
aXRlID0gZnVuY3Rpb24gaXNSZWFkV3JpdGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcg
PT09IFJlZmVyZW5jZS5SVzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQSBWYXJpYWJsZSBy
ZXByZXNlbnRzIGEgbG9jYWxseSBzY29wZWQgaWRlbnRpZmllci4gVGhlc2UgaW5jbHVkZSBhcmd1
bWVudHMgdG8KKyAgICAgKiBmdW5jdGlvbnMuCisgICAgICogQGNsYXNzIFZhcmlhYmxlCisgICAg
ICovCisgICAgZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgLyoqICAK
KyAgICAgICAgICogVGhlIHZhcmlhYmxlIG5hbWUsIGFzIGdpdmVuIGluIHRoZSBzb3VyY2UgY29k
ZS4KKyAgICAgICAgICogQG1lbWJlciB7U3RyaW5nfSBWYXJpYWJsZSNuYW1lIAorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExp
c3Qgb2YgZGVmaW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJsZSAobGlrZSBpbiAndmFy
IC4uLicKKyAgICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0ZXIpLCBhcyBBU1Qgbm9k
ZXMuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuSWRlbnRpZmllcltdfSBWYXJpYWJsZSNp
ZGVudGlmaWVycworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pZGVudGlmaWVycyA9IFtdOwor
ICAgICAgICAvKioKKyAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5j
ZXN9IG9mIHRoaXMgdmFyaWFibGUgKGV4Y2x1ZGluZyBwYXJhbWV0ZXIgZW50cmllcykKKyAgICAg
ICAgICogaW4gaXRzIGRlZmluaW5nIHNjb3BlIGFuZCBhbGwgbmVzdGVkIHNjb3Blcy4gRm9yIGRl
ZmluaW5nCisgICAgICAgICAqIG9jY3VycmVuY2VzIG9ubHkgc2VlIHtAbGluayBWYXJpYWJsZSNk
ZWZzfS4KKyAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFZhcmlhYmxlI3JlZmVyZW5j
ZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOworCisgICAgICAg
IC8qKgorICAgICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFy
aWFibGUgKGxpa2UgaW4gJ3ZhciAuLi4nCisgICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFy
YW1ldGVyKSwgYXMgY3VzdG9tIG9iamVjdHMuCisgICAgICAgICAqIEB0eXBlZGVmIHtPYmplY3R9
IERlZkVudHJ5CisgICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBEZWZFbnRyeS50eXBlIC0g
dGhlIHR5cGUgb2YgdGhlIG9jY3VycmVuY2UgKGUuZy4KKyAgICAgICAgICogICAgICAiUGFyYW1l
dGVyIiwgIlZhcmlhYmxlIiwgLi4uKQorICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuSWRl
bnRpZmllcn0gRGVmRW50cnkubmFtZSAtIHRoZSBpZGVudGlmaWVyIEFTVCBub2RlIG9mIHRoZSBv
Y2N1cnJlbmNlCisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5Ob2RlfSBEZWZFbnRyeS5u
b2RlIC0gdGhlIGVuY2xvc2luZyBub2RlIG9mIHRoZQorICAgICAgICAgKiAgICAgIGlkZW50aWZp
ZXIKKyAgICAgICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IFtEZWZFbnRyeS5wYXJlbnRd
IC0gdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQKKyAgICAgICAgICogICAgICBub2RlIG9mIHRoZSBp
ZGVudGlmaWVyCisgICAgICAgICAqIEBtZW1iZXIge0RlZkVudHJ5W119IFZhcmlhYmxlI2RlZnMK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuZGVmcyA9IFtdOworCisgICAgICAgIHRoaXMudGFp
bnRlZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEg
c3RhY2sgdmFyaWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFZhcmlhYmxlI3N0
YWNrCisgICAgICAgICAqLworICAgICAgICB0aGlzLnN0YWNrID0gdHJ1ZTsKKyAgICAgICAgLyoq
IAorICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS4KKyAgICAgICAg
ICogQG1lbWJlciB7U2NvcGV9IFZhcmlhYmxlI3Njb3BlIAorICAgICAgICAgKi8KKyAgICAgICAg
dGhpcy5zY29wZSA9IHNjb3BlOworICAgIH0KKworICAgIFZhcmlhYmxlLkNhdGNoQ2xhdXNlID0g
J0NhdGNoQ2xhdXNlJzsKKyAgICBWYXJpYWJsZS5QYXJhbWV0ZXIgPSAnUGFyYW1ldGVyJzsKKyAg
ICBWYXJpYWJsZS5GdW5jdGlvbk5hbWUgPSAnRnVuY3Rpb25OYW1lJzsKKyAgICBWYXJpYWJsZS5W
YXJpYWJsZSA9ICdWYXJpYWJsZSc7CisgICAgVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJs
ZSA9ICdJbXBsaWNpdEdsb2JhbFZhcmlhYmxlJzsKKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0U2Nv
cGUoc2NvcGUsIGJsb2NrKSB7CisgICAgICAgIHZhciBib2R5LCBpLCBpeiwgc3RtdCwgZXhwcjsK
KworICAgICAgICAvLyBXaGVuIHVwcGVyIHNjb3BlIGlzIGV4aXN0cyBhbmQgc3RyaWN0LCBpbm5l
ciBzY29wZSBpcyBhbHNvIHN0cmljdC4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmIHNjb3Bl
LnVwcGVyLmlzU3RyaWN0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzY29wZS50eXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBi
b2R5ID0gYmxvY2suYm9keTsKKyAgICAgICAgfSBlbHNlIGlmIChzY29wZS50eXBlID09PSAnZ2xv
YmFsJykgeworICAgICAgICAgICAgYm9keSA9IGJsb2NrOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbnMu
ZGlyZWN0aXZlKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5n
dGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsK
KyAgICAgICAgICAgICAgICBpZiAoc3RtdC50eXBlICE9PSAnRGlyZWN0aXZlU3RhdGVtZW50Jykg
eworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHN0bXQucmF3ID09PSAnInVzZSBzdHJpY3QiJyB8fCBzdG10LnJhdyA9PT0g
J1wndXNlIHN0cmljdFwnJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAgICAgICAgICBpZiAo
c3RtdC50eXBlICE9PSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCkgeworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhwciA9
IHN0bXQuZXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBTeW50
YXguTGl0ZXJhbCB8fCB0eXBlb2YgZXhwci52YWx1ZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChleHByLnJhdyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnJhdyA9
PT0gJyJ1c2Ugc3RyaWN0IicgfHwgZXhwci5yYXcgPT09ICdcJ3VzZSBzdHJpY3RcJycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIu
dmFsdWUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8q
KgorICAgICAqIEBjbGFzcyBTY29wZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNjb3BlKGJsb2Nr
LCBvcHQpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlLCBib2R5OworCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBPbmUgb2YgJ2NhdGNoJywgJ3dpdGgnLCAnZnVuY3Rpb24nIG9yICdnbG9iYWwnLgor
ICAgICAgICAgKiBAbWVtYmVyIHtTdHJpbmd9IFNjb3BlI3R5cGUKKyAgICAgICAgICovCisgICAg
ICAgIHRoaXMudHlwZSA9CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkNhdGNo
Q2xhdXNlKSA/ICdjYXRjaCcgOgorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5X
aXRoU3RhdGVtZW50KSA/ICd3aXRoJyA6CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3lu
dGF4LlByb2dyYW0pID8gJ2dsb2JhbCcgOiAnZnVuY3Rpb24nOworICAgICAgICAgLyoqCisgICAg
ICAgICAqIFRoZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZSwgYXMgPGNv
ZGU+eyBWYXJpYWJsZS5uYW1lCisgICAgICAgICAqIDogVmFyaWFibGUgfTwvY29kZT4uCisgICAg
ICAgICAqIEBtZW1iZXIge01hcH0gU2NvcGUjc2V0CisgICAgICAgICAqLworICAgICAgICB0aGlz
LnNldCA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB0YWludGVkIHZh
cmlhYmxlcyBvZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5hbWUgOgorICAgICAg
ICAgKiBib29sZWFuIH08L2NvZGU+LgorICAgICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3Rh
aW50cyAqLworICAgICAgICB0aGlzLnRhaW50cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIEdlbmVyYWxseSwgdGhyb3VnaCB0aGUgbGV4aWNhbCBzY29waW5nIG9mIEpTIHlv
dSBjYW4gYWx3YXlzIGtub3cKKyAgICAgICAgICogd2hpY2ggdmFyaWFibGUgYW4gaWRlbnRpZmll
ciBpbiB0aGUgc291cmNlIGNvZGUgcmVmZXJzIHRvLiBUaGVyZSBhcmUKKyAgICAgICAgICogYSBm
ZXcgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUuIFdpdGggJ2dsb2JhbCcgYW5kICd3aXRoJyBzY29w
ZXMgeW91CisgICAgICAgICAqIGNhbiBvbmx5IGRlY2lkZSBhdCBydW50aW1lIHdoaWNoIHZhcmlh
YmxlIGEgcmVmZXJlbmNlIHJlZmVycyB0by4KKyAgICAgICAgICogTW9yZW92ZXIsIGlmICdldmFs
KCknIGlzIHVzZWQgaW4gYSBzY29wZSwgaXQgbWlnaHQgaW50cm9kdWNlIG5ldworICAgICAgICAg
KiBiaW5kaW5ncyBpbiB0aGlzIG9yIGl0cyBwcmFyZW50IHNjb3Blcy4KKyAgICAgICAgICogQWxs
IHRob3NlIHNjb3BlcyBhcmUgY29uc2lkZXJlZCAnZHluYW1pYycuCisgICAgICAgICAqIEBtZW1i
ZXIge2Jvb2xlYW59IFNjb3BlI2R5bmFtaWMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZHlu
YW1pYyA9IHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnd2l0aCc7Cisg
ICAgICAgIC8qKgorICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc2NvcGUtZGVmaW5pbmcg
c3ludGF4IG5vZGUuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZX0gU2NvcGUjYmxv
Y2sKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKKyAgICAgICAgIC8q
KgorICAgICAgICAgKiBUaGUge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSB0aGF0IGFyZSBu
b3QgcmVzb2x2ZWQgd2l0aCB0aGlzIHNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVu
Y2VbXX0gU2NvcGUjdGhyb3VnaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50aHJvdWdoID0g
W107CisgICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9
cyBvZiB0aGlzIHNjb3BlLiBJbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAqICdmdW5jdGlvbicg
c2NvcGUgdGhpcyBpbmNsdWRlcyB0aGUgYXV0b21hdGljIGFyZ3VtZW50IDxlbT5hcmd1bWVudHM8
L2VtPiBhcworICAgICAgICAgKiBpdHMgZmlyc3QgZWxlbWVudCwgYXMgd2VsbCBhcyBhbGwgZnVy
dGhlciBmb3JtYWwgYXJndW1lbnRzLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZVtdfSBT
Y29wZSN2YXJpYWJsZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFyaWFibGVzID0gW107
CisgICAgICAgICAvKioKKyAgICAgICAgICogQW55IHZhcmlhYmxlIHtAbGluayBSZWZlcmVuY2V8
cmVmZXJlbmNlfSBmb3VuZCBpbiB0aGlzIHNjb3BlLiBUaGlzCisgICAgICAgICAqIGluY2x1ZGVz
IG9jY3VycmVuY2VzIG9mIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsIGFzIHZhcmlhYmxlcyBmcm9t
CisgICAgICAgICAqIHBhcmVudCBzY29wZXMgKGluY2x1ZGluZyB0aGUgZ2xvYmFsIHNjb3BlKS4g
Rm9yIGxvY2FsIHZhcmlhYmxlcworICAgICAgICAgKiB0aGlzIGFsc28gaW5jbHVkZXMgZGVmaW5p
bmcgb2NjdXJyZW5jZXMgKGxpa2UgaW4gYSAndmFyJyBzdGF0ZW1lbnQpLgorICAgICAgICAgKiBJ
biBhICdmdW5jdGlvbicgc2NvcGUgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvY2N1cnJlbmNl
cyBvZiB0aGUKKyAgICAgICAgICogZm9ybWFsIHBhcmFtZXRlciBpbiB0aGUgcGFyYW1ldGVyIGxp
c3QuCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29wZSNyZWZlcmVuY2VzCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V9cyB0aGF0IGFyZSBsZWZ0IHRvIGJl
IHJlc29sdmVkIChpLmUuIHdoaWNoCisgICAgICAgICAqIG5lZWQgdG8gYmUgbGlua2VkIHRvIHRo
ZSB2YXJpYWJsZSB0aGV5IHJlZmVyIHRvKS4gVXNlZCBpbnRlcm5hbGx5IHRvCisgICAgICAgICAq
IHJlc29sdmUgYmluZGluZ3MgZHVyaW5nIHNjb3BlIGFuYWx5c2lzLiBPbiBhIGZpbmFsaXplZCBz
Y29wZQorICAgICAgICAgKiBhbmFseXNpcywgYWxsIHNvcGVzIGhhdmUgPGVtPmxlZnQ8L2VtPiB2
YWx1ZSA8c3Ryb25nPm51bGw8L3N0cm9uZz4uCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5j
ZVtdfSBTY29wZSNsZWZ0CisgICAgICAgICAqLworICAgICAgICB0aGlzLmxlZnQgPSBbXTsKKyAg
ICAgICAgIC8qKgorICAgICAgICAgKiBGb3IgJ2dsb2JhbCcgYW5kICdmdW5jdGlvbicgc2NvcGVz
LCB0aGlzIGlzIGEgc2VsZi1yZWZlcmVuY2UuIEZvcgorICAgICAgICAgKiBvdGhlciBzY29wZSB0
eXBlcyB0aGlzIGlzIHRoZSA8ZW0+dmFyaWFibGVTY29wZTwvZW0+IHZhbHVlIG9mIHRoZQorICAg
ICAgICAgKiBwYXJlbnQgc2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN2
YXJpYWJsZVNjb3BlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcmlhYmxlU2NvcGUgPQor
ICAgICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnZnVu
Y3Rpb24nKSA/IHRoaXMgOiBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZTsKKyAgICAgICAgIC8q
KgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2NvcGUgaXMgY3JlYXRlZCBieSBhIEZ1bmN0aW9u
RXhwcmVzc2lvbi4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZnVuY3Rpb25F
eHByZXNzaW9uU2NvcGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNz
aW9uU2NvcGUgPSBmYWxzZTsKKyAgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMg
aXMgYSBzY29wZSB0aGF0IGNvbnRhaW5zIGFuICdldmFsKCknIGludm9jYXRpb24uCisgICAgICAg
ICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2RpcmVjdENhbGxUb0V2YWxTY29wZQorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSBmYWxzZTsKKyAgICAg
ICAgIC8qKgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSN0aGlzRm91bmQKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudGhpc0ZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvZHkg
PSB0aGlzLnR5cGUgPT09ICdmdW5jdGlvbicgPyBibG9jay5ib2R5IDogYmxvY2s7CisgICAgICAg
IGlmIChvcHQubmFtaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9fZGVmaW5lKGJsb2NrLmlkLCB7
CisgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAg
ICAgICAgIG5hbWU6IGJsb2NrLmlkLAorICAgICAgICAgICAgICAgIG5vZGU6IGJsb2NrCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUgPSB0
cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Z1
bmN0aW9uJykgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKCdhcmd1
bWVudHMnLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhaW50cy5zZXQoJ2FyZ3VtZW50
cycsIHRydWUpOworICAgICAgICAgICAgICAgIHRoaXMuc2V0LnNldCgnYXJndW1lbnRzJywgdmFy
aWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkZ1
bmN0aW9uRXhwcmVzc2lvbiAmJiBibG9jay5pZCkgeworICAgICAgICAgICAgICAgIG5ldyBTY29w
ZShibG9jaywgeyBuYW1pbmc6IHRydWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAgLyoqCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHtAbGluayBT
Y29wZXxzY29wZX0uCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN1cHBlcgorICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy51cHBlciA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgIC8q
KgorICAgICAgICAgKiBXaGV0aGVyICd1c2Ugc3RyaWN0JyBpcyBpbiBlZmZlY3QgaW4gdGhpcyBz
Y29wZS4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjaXNTdHJpY3QKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuaXNTdHJpY3QgPSBpc1N0cmljdFNjb3BlKHRoaXMsIGJsb2Nr
KTsKKworICAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbmVzdGVkIHtAbGluayBTY29w
ZX1zLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZVtdfSBTY29wZSNjaGlsZFNjb3BlcworICAg
ICAgICAgKi8KKyAgICAgICAgdGhpcy5jaGlsZFNjb3BlcyA9IFtdOworICAgICAgICBpZiAoY3Vy
cmVudFNjb3BlKSB7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUuY2hpbGRTY29wZXMucHVzaCh0
aGlzKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gUkFJSQorICAgICAgICBjdXJyZW50U2Nv
cGUgPSB0aGlzOworICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZ2xvYmFsJykgeworICAgICAg
ICAgICAgZ2xvYmFsU2NvcGUgPSB0aGlzOworICAgICAgICAgICAgZ2xvYmFsU2NvcGUuaW1wbGlj
aXQgPSB7CisgICAgICAgICAgICAgICAgc2V0OiBuZXcgTWFwKCksCisgICAgICAgICAgICAgICAg
dmFyaWFibGVzOiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBzY29wZXMu
cHVzaCh0aGlzKTsKKyAgICB9CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19jbG9zZSA9IGZ1bmN0
aW9uIF9fY2xvc2UoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVmLCBjdXJyZW50LCBub2RlLCBp
bXBsaWNpdDsKKworICAgICAgICAvLyBCZWNhdXNlIGlmIHRoaXMgaXMgZ2xvYmFsIGVudmlyb25t
ZW50LCB1cHBlciBpcyBudWxsCisgICAgICAgIGlmICghdGhpcy5keW5hbWljIHx8IG9wdGlvbnMu
b3B0aW1pc3RpYykgeworICAgICAgICAgICAgLy8gc3RhdGljIHJlc29sdmUKKyAgICAgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAgICAgICAgICAgaWYgKCF0aGlz
Ll9fcmVzb2x2ZShyZWYpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0ZVRv
VXBwZXJTY29wZShyZWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgImdsb2JhbCIgLyAid2l0aCIgLyAi
ZnVuY3Rpb24gd2l0aCBldmFsIiBlbnZpcm9ubWVudAorICAgICAgICAgICAgaWYgKHRoaXMudHlw
ZSA9PT0gJ3dpdGgnKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxl
ZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlz
LmxlZnRbaV07CisgICAgICAgICAgICAgICAgICAgIHJlZi50YWludGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG5vdGlmeSBhbGwgbmFtZXMgYXJlIHRocm91Z2ggdG8gZ2xvYmFsCisgICAgICAg
ICAgICAgICAgICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudCA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnQudGhyb3VnaC5wdXNoKHJlZik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC51cHBlcjsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAo
Y3VycmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcpIHsKKyAgICAgICAgICAgIGltcGxp
Y2l0ID0gW107CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7
IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAg
ICAgICAgICAgICAgIGlmIChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsICYmICF0aGlzLnNldC5o
YXMocmVmLmlkZW50aWZpZXIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQu
cHVzaChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBnbG9iYWwgdmFy
aWFibGUgZnJvbSBhc3NpZ25tZW50IGV4cHJlc3Npb24KKyAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gaW1wbGljaXQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIG5v
ZGUgPSBpbXBsaWNpdFtpXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9fZGVmaW5lSW1wbGljaXQo
bm9kZS5sZWZ0LCB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkltcGxpY2l0
R2xvYmFsVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubGVmdCwKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDsKKyAgICAgICAg
Y3VycmVudFNjb3BlID0gdGhpcy51cHBlcjsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBl
Ll9fcmVzb2x2ZSA9IGZ1bmN0aW9uIF9fcmVzb2x2ZShyZWYpIHsKKyAgICAgICAgdmFyIHZhcmlh
YmxlLCBuYW1lOworICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAg
aWYgKHRoaXMuc2V0LmhhcyhuYW1lKSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNl
dC5nZXQobmFtZSk7CisgICAgICAgICAgICB2YXJpYWJsZS5yZWZlcmVuY2VzLnB1c2gocmVmKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlLnN0YWNrID0gdmFyaWFibGUuc3RhY2sgJiYgcmVmLmZyb20u
dmFyaWFibGVTY29wZSA9PT0gdGhpcy52YXJpYWJsZVNjb3BlOworICAgICAgICAgICAgaWYgKHJl
Zi50YWludGVkKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUudGFpbnRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgdGhpcy50YWludHMuc2V0KHZhcmlhYmxlLm5hbWUsIHRydWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmVmLnJlc29sdmVkID0gdmFyaWFibGU7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RlbGVnYXRlVG9VcHBlclNjb3BlID0gZnVuY3Rp
b24gX19kZWxlZ2F0ZVRvVXBwZXJTY29wZShyZWYpIHsKKyAgICAgICAgaWYgKHRoaXMudXBwZXIp
IHsKKyAgICAgICAgICAgIHRoaXMudXBwZXIubGVmdC5wdXNoKHJlZik7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy50aHJvdWdoLnB1c2gocmVmKTsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90
eXBlLl9fZGVmaW5lSW1wbGljaXQgPSBmdW5jdGlvbiBfX2RlZmluZUltcGxpY2l0KG5vZGUsIGlu
Zm8pIHsKKyAgICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOworICAgICAgICBpZiAobm9kZSAmJiBu
b2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBuYW1lID0gbm9k
ZS5uYW1lOworICAgICAgICAgICAgaWYgKCF0aGlzLmltcGxpY2l0LnNldC5oYXMobmFtZSkpIHsK
KyAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgICAgICB0aGlzLmlt
cGxpY2l0LnNldC5zZXQobmFtZSwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMuaW1w
bGljaXQudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMuaW1wbGljaXQuc2V0LmdldChuYW1lKTsKKyAg
ICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZWZpbmUgPSBmdW5jdGlvbiBfX2Rl
ZmluZShub2RlLCBpbmZvKSB7CisgICAgICAgIHZhciBuYW1lLCB2YXJpYWJsZTsKKyAgICAgICAg
aWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgbmFtZSA9IG5vZGUubmFtZTsKKyAgICAgICAgICAgIGlmICghdGhpcy5zZXQuaGFzKG5hbWUp
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7
CisgICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAg
ICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICAgICAgdGhp
cy5zZXQuc2V0KG5hbWUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxl
cy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dmFyaWFibGUgPSB0aGlzLnNldC5nZXQobmFtZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUu
aWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1
c2goaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUu
cHJvdG90eXBlLl9fcmVmZXJlbmNpbmcgPSBmdW5jdGlvbiBfX3JlZmVyZW5jaW5nKG5vZGUsIGFz
c2lnbiwgd3JpdGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIHZhciByZWY7
CisgICAgICAgIC8vIGJlY2F1c2UgQXJyYXkgZWxlbWVudCBtYXkgYmUgbnVsbAorICAgICAgICBp
ZiAobm9kZSAmJiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAg
ICByZWYgPSBuZXcgUmVmZXJlbmNlKG5vZGUsIHRoaXMsIGFzc2lnbiB8fCBSZWZlcmVuY2UuUkVB
RCwgd3JpdGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgIHRoaXMucmVm
ZXJlbmNlcy5wdXNoKHJlZik7CisgICAgICAgICAgICB0aGlzLmxlZnQucHVzaChyZWYpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdEV2YWwgPSBmdW5j
dGlvbiBfX2RldGVjdEV2YWwoKSB7CisgICAgICAgIHZhciBjdXJyZW50OworICAgICAgICBjdXJy
ZW50ID0gdGhpczsKKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSB0cnVlOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBjdXJyZW50LmR5bmFtaWMgPSB0cnVlOworICAgICAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQudXBwZXI7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQp
OworICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZXRlY3RUaGlzID0gZnVuY3Rpb24g
X19kZXRlY3RUaGlzKCkgeworICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IHRydWU7CisgICAgfTsK
KworICAgIFNjb3BlLnByb3RvdHlwZS5fX2lzQ2xvc2VkID0gZnVuY3Rpb24gaXNDbG9zZWQoKSB7
CisgICAgICAgIHJldHVybiB0aGlzLmxlZnQgPT09IG51bGw7CisgICAgfTsKKworICAgIC8vIEFQ
SSBTY29wZSNyZXNvbHZlKG5hbWUpCisgICAgLy8gcmV0dXJucyByZXNvbHZlZCByZWZlcmVuY2UK
KyAgICBTY29wZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoaWRlbnQpIHsK
KyAgICAgICAgdmFyIHJlZiwgaSwgaXo7CisgICAgICAgIGFzc2VydCh0aGlzLl9faXNDbG9zZWQo
KSwgJ3Njb3BlIHNob3VsZCBiZSBjbG9zZWQnKTsKKyAgICAgICAgYXNzZXJ0KGlkZW50LnR5cGUg
PT09IFN5bnRheC5JZGVudGlmaWVyLCAndGFyZ2V0IHNob3VsZCBiZSBpZGVudGlmaWVyJyk7Cisg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgIHJlZiA9IHRoaXMucmVmZXJlbmNlc1tpXTsKKyAgICAgICAgICAg
IGlmIChyZWYuaWRlbnRpZmllciA9PT0gaWRlbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAg
IH07CisKKyAgICAvLyBBUEkgU2NvcGUjaXNTdGF0aWMKKyAgICAvLyByZXR1cm5zIHRoaXMgc2Nv
cGUgaXMgc3RhdGljCisgICAgU2NvcGUucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNT
dGF0aWMoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5keW5hbWljOworICAgIH07CisKKyAgICAv
LyBBUEkgU2NvcGUjaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBz
Y29wZSBoYXMgbWF0ZXJpYWxpemVkIGFyZ3VtZW50cworICAgIFNjb3BlLnByb3RvdHlwZS5pc0Fy
Z3VtZW50c01hdGVyaWFsaXplZCA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzTWF0ZXJpYWxpemVkKCkg
eworICAgICAgICAvLyBUT0RPKENvbnN0ZWxsYXRpb24pCisgICAgICAgIC8vIFdlIGNhbiBtb3Jl
IGFnZ3Jlc3NpdmUgb24gdGhpcyBjb25kaXRpb24gbGlrZSB0aGlzLgorICAgICAgICAvLworICAg
ICAgICAvLyBmdW5jdGlvbiB0KCkgeworICAgICAgICAvLyAgICAgLy8gYXJndW1lbnRzIG9mIHQg
aXMgYWx3YXlzIGhpZGRlbi4KKyAgICAgICAgLy8gICAgIGZ1bmN0aW9uIGFyZ3VtZW50cygpIHsK
KyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfQorICAgICAgICB2YXIgdmFyaWFibGU7CisK
KyAgICAgICAgLy8gVGhpcyBpcyBub3QgZnVuY3Rpb24gc2NvcGUKKyAgICAgICAgaWYgKHRoaXMu
dHlwZSAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXRoaXMuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0LmdldCgnYXJn
dW1lbnRzJyk7CisgICAgICAgIGFzc2VydCh2YXJpYWJsZSwgJ2Fsd2F5cyBoYXZlIGFyZ3VtZW50
cyB2YXJpYWJsZScpOworICAgICAgICByZXR1cm4gdmFyaWFibGUudGFpbnRlZCB8fCB2YXJpYWJs
ZS5yZWZlcmVuY2VzLmxlbmd0aCAgIT09IDA7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNp
c1RoaXNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMgbWF0ZXJpYWxp
emVkIGB0aGlzYCByZWZlcmVuY2UKKyAgICBTY29wZS5wcm90b3R5cGUuaXNUaGlzTWF0ZXJpYWxp
emVkID0gZnVuY3Rpb24gaXNUaGlzTWF0ZXJpYWxpemVkKCkgeworICAgICAgICAvLyBUaGlzIGlz
IG5vdCBmdW5jdGlvbiBzY29wZQorICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZnVuY3Rpb24n
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRo
aXMuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMudGhpc0ZvdW5kOworICAgIH07CisKKyAgICBTY29wZS5tYW5nbGVk
TmFtZSA9ICdfXyRlc2NvcGUkX18nOworCisgICAgU2NvcGUucHJvdG90eXBlLmF0dGFjaCA9IGZ1
bmN0aW9uIGF0dGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNj
b3BlKSB7CisgICAgICAgICAgICB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXSA9IHRoaXM7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0
aW9uIGRldGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3Bl
KSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5ibG9ja1tTY29wZS5tYW5nbGVkTmFtZV07Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmlzVXNlZE5hbWUgPSBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICBpZiAodGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaXog
PSB0aGlzLnRocm91Z2gubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgaWYgKHRo
aXMudGhyb3VnaFtpXS5pZGVudGlmaWVyLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBjbGFzcyBTY29wZU1hbmFnZXIKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBTY29wZU1hbmFnZXIoc2NvcGVzKSB7CisgICAgICAgIHRoaXMu
c2NvcGVzID0gc2NvcGVzOworICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgICAgfQor
CisgICAgLy8gUmV0dXJucyBhcHByb3BsaWF0ZSBzY29wZSBmb3IgdGhpcyBub2RlCisgICAgU2Nv
cGVNYW5hZ2VyLnByb3RvdHlwZS5fX2dldCA9IGZ1bmN0aW9uIF9fZ2V0KG5vZGUpIHsKKyAgICAg
ICAgdmFyIGksIGl6LCBzY29wZTsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlW1Njb3BlLm1hbmdsZWROYW1lXSB8fCBudWxsOworICAgICAgICB9
CisgICAgICAgIGlmIChTY29wZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKKyAgICAgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgICAgIHNjb3BlID0gdGhpcy5zY29wZXNbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoc2NvcGUuYmxvY2sgPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzY29wZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAg
U2NvcGVNYW5hZ2VyLnByb3RvdHlwZS5hY3F1aXJlID0gZnVuY3Rpb24gYWNxdWlyZShub2RlKSB7
CisgICAgICAgIHJldHVybiB0aGlzLl9fZ2V0KG5vZGUpOworICAgIH07CisKKyAgICBTY29wZU1h
bmFnZXIucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbiByZWxlYXNlKG5vZGUpIHsKKyAgICAg
ICAgdmFyIHNjb3BlID0gdGhpcy5fX2dldChub2RlKTsKKyAgICAgICAgaWYgKHNjb3BlKSB7Cisg
ICAgICAgICAgICBzY29wZSA9IHNjb3BlLnVwcGVyOworICAgICAgICAgICAgd2hpbGUgKHNjb3Bl
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5w
cm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7
CisgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsr
aSkgeworICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uYXR0YWNoKCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5w
cm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24gZGV0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7
CisgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsr
aSkgeworICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uZGV0YWNoKCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5hdHRhY2hlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBTY29wZS5pc1Njb3Bl
UmVxdWlyZWQgPSBmdW5jdGlvbiBpc1Njb3BlUmVxdWlyZWQobm9kZSkgeworICAgICAgICByZXR1
cm4gU2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkgfHwgbm9kZS50eXBlID09PSBT
eW50YXguV2l0aFN0YXRlbWVudCB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5DYXRjaENsYXVzZTsK
KyAgICB9OworCisgICAgU2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQgPSBmdW5jdGlvbiBp
c1ZhcmlhYmxlU2NvcGVSZXF1aXJlZChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnR5cGUg
PT09IFN5bnRheC5Qcm9ncmFtIHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhwcmVz
c2lvbiB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBNYWluIGludGVyZmFjZSBmdW5jdGlvbi4gVGFrZXMgYW4gRXNw
cmltYSBzeW50YXggdHJlZSBhbmQgcmV0dXJucyB0aGUKKyAgICAgKiBhbmFseXplZCBzY29wZXMu
CisgICAgICogQGZ1bmN0aW9uIGFuYWx5emUKKyAgICAgKiBAcGFyYW0ge2VzcHJpbWEuVHJlZX0g
dHJlZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlZE9wdGlvbnMgLSBPcHRpb25zIHRo
YXQgdGFpbG9yIHRoZSBzY29wZSBhbmFseXNpcworICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3By
b3ZpZGVkT3B0aW9ucy5vcHRpbWlzdGljPWZhbHNlXSAtIHRoZSBvcHRpbWlzdGljIGZsYWcKKyAg
ICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMuZGlyZWN0aXZlPWZhbHNlXS0g
dGhlIGRpcmVjdGl2ZSBmbGFnCisgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRp
b25zLmlnbm9yZUV2YWw9ZmFsc2VdLSB3aGV0aGVyIHRvIGNoZWNrICdldmFsKCknIGNhbGxzCisg
ICAgICogQHJldHVybiB7U2NvcGVNYW5hZ2VyfQorICAgICAqLworICAgIGZ1bmN0aW9uIGFuYWx5
emUodHJlZSwgcHJvdmlkZWRPcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHRTY29wZXM7CisK
KyAgICAgICAgb3B0aW9ucyA9IHVwZGF0ZURlZXBseShkZWZhdWx0T3B0aW9ucygpLCBwcm92aWRl
ZE9wdGlvbnMpOworICAgICAgICByZXN1bHRTY29wZXMgPSBzY29wZXMgPSBbXTsKKyAgICAgICAg
Y3VycmVudFNjb3BlID0gbnVsbDsKKyAgICAgICAgZ2xvYmFsU2NvcGUgPSBudWxsOworCisgICAg
ICAgIC8vIGF0dGFjaCBzY29wZSBhbmQgY29sbGVjdCAvIHJlc29sdmUgbmFtZXMKKyAgICAgICAg
ZXN0cmF2ZXJzZS50cmF2ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24g
ZW50ZXIobm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBpLCBpeiwgZGVjbDsKKyAgICAgICAg
ICAgICAgICBpZiAoU2NvcGUuaXNTY29wZVJlcXVpcmVkKG5vZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG5ldyBTY29wZShub2RlLCB7fSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRh
eC5Bc3NpZ25tZW50RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3Bl
cmF0b3IgPT09ICc9JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9f
cmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsICghY3Vy
cmVudFNjb3BlLmlzU3RyaWN0ICYmIG5vZGUubGVmdC5uYW1lICE9IG51bGwpICYmIG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuUlcsIG5vZGUucmln
aHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGUuZWxlbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQmxvY2tT
dGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQnJlYWtTdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXgu
Q2FsbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGUuY2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXog
PSBub2RlWydhcmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtp
XSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayB0aGlzIGlzIGRpcmVjdCBjYWxsIHRvIGV2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFv
cHRpb25zLmlnbm9yZUV2YWwgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ2V2YWwnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RldGVjdEV2YWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIGNhc2UgU3ludGF4LkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19kZWZpbmUobm9kZS5wYXJhbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogVmFyaWFibGUuQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBu
b2RlLnBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuY29uc2VxdWVudCk7CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYWx0ZXJuYXRl
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5Db250aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5EaXJlY3RpdmVTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRG9XaGlsZVN0
YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmco
bm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FbXB0eVN0YXRlbWVudDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FeHBy
ZXNzaW9uU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5pbml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS51cGRhdGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZv
ckluU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09
IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdLmlkLCBS
ZWZlcmVuY2UuV1JJVEUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGUubGVmdCwgUmVmZXJlbmNlLldSSVRFLCBudWxsLCAoIWN1cnJlbnRTY29wZS5pc1N0cmljdCAm
JiBub2RlLmxlZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBGdW5j
dGlvbkRlY2xhcmF0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQorICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUudXBwZXIuX19kZWZpbmUobm9kZS5pZCwgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZTogbm9kZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGU6IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBp
ZCBpcyBkZWZpbmVkIGluIHVwcGVyIHNjb3BlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBT
eW50YXguSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBjYXNlIFN5bnRheC5JZlN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5MaXRlcmFsOgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxhYmVsZWRT
dGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
Y2FzZSBTeW50YXguTG9naWNhbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUub2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucHJvcGVydHkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgY2FzZSBTeW50YXguTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jYWxsZWUpOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGVbJ2FyZ3VtZW50cyddLmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGVbJ2FyZ3VtZW50cyddW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9i
amVjdEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguUHJvZ3JhbToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Qcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguUmV0dXJuU3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmV4
cHJlc3Npb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlN3aXRjaFN0YXRlbWVudDoK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5kaXNj
cmltaW5hbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LlN3aXRjaENhc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVGhpc0V4cHJlc3Npb246CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0VGhpcygpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlRo
cm93U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVu
Y2luZyhub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICBjYXNlIFN5bnRheC5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVW5hcnlFeHByZXNzaW9uOgor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50LCBSZWZlcmVuY2UuUlcsIG51bGwpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlZh
cmlhYmxlRGVjbGFyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0g
bm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZWZpbmUoZGVjbC5pZCwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlZhcmlhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGRlY2wuaWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZTogZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDog
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG5vZGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGZvdW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcoZGVj
bC5pZCwgUmVmZXJlbmNlLldSSVRFLCBkZWNsLmluaXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmluaXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFibGVE
ZWNsYXJhdG9yOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LldpdGhTdGF0ZW1lbnQ6CisgICAgICAg
ICAgICAgICAgICAgIC8vIFdpdGhTdGF0ZW1lbnQgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYXQgdXBw
ZXIgc2NvcGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVyLl9fcmVmZXJl
bmNpbmcobm9kZS5vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24g
bGVhdmUobm9kZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50U2NvcGUgJiYgbm9k
ZSA9PT0gY3VycmVudFNjb3BlLmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZS5fX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKworICAgICAgICBhc3NlcnQoY3VycmVudFNjb3BlID09PSBudWxsKTsKKyAgICAgICAg
Z2xvYmFsU2NvcGUgPSBudWxsOworICAgICAgICBzY29wZXMgPSBudWxsOworICAgICAgICBvcHRp
b25zID0gbnVsbDsKKworICAgICAgICByZXR1cm4gbmV3IFNjb3BlTWFuYWdlcihyZXN1bHRTY29w
ZXMpOworICAgIH0KKworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLnZlcnNpb24gKi8KKyAg
ICBleHBvcnRzLnZlcnNpb24gPSAnMS4wLjEnOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3Bl
LlJlZmVyZW5jZSAqLworICAgIGV4cG9ydHMuUmVmZXJlbmNlID0gUmVmZXJlbmNlOworICAgIC8q
KiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlZhcmlhYmxlICovCisgICAgZXhwb3J0cy5WYXJpYWJsZSA9
IFZhcmlhYmxlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlICovCisgICAgZXhw
b3J0cy5TY29wZSA9IFNjb3BlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlTWFu
YWdlciAqLworICAgIGV4cG9ydHMuU2NvcGVNYW5hZ2VyID0gU2NvcGVNYW5hZ2VyOworICAgIC8q
KiBAbmFtZSBtb2R1bGU6ZXNjb3BlLmFuYWx5emUgKi8KKyAgICBleHBvcnRzLmFuYWx5emUgPSBh
bmFseXplOworfSwgdGhpcykpOworLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8K
KworfSx7ImVzdHJhdmVyc2UiOjd9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0
QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5
bEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlh
c0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlk
YXlhdEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0
aGlhc0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpu
IDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtv
d2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFk
IEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIw
MTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAg
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBM
SUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0
cnVlICovCisvKmdsb2JhbCBlc3ByaW1hOnRydWUsIGRlZmluZTp0cnVlLCBleHBvcnRzOnRydWUs
IHdpbmRvdzogdHJ1ZSwKK3Rocm93RXJyb3JUb2xlcmFudDogdHJ1ZSwKK3Rocm93RXJyb3I6IHRy
dWUsIGdlbmVyYXRlU3RhdGVtZW50OiB0cnVlLCBwZWVrOiB0cnVlLAorcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbjogdHJ1ZSwgcGFyc2VCbG9jazogdHJ1ZSwgcGFyc2VFeHByZXNzaW9uOiB0cnVl
LAorcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uOiB0cnVlLCBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lv
bjogdHJ1ZSwKK3BhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czogdHJ1ZSwgcGFyc2VWYXJpYWJs
ZUlkZW50aWZpZXI6IHRydWUsCitwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb246IHRydWUsCitw
YXJzZVVuYXJ5RXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlU3RhdGVtZW50OiB0cnVlLCBwYXJzZVNv
dXJjZUVsZW1lbnQ6IHRydWUgKi8KKworKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAg
J3VzZSBzdHJpY3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQp
IHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAorICAgIC8vIFJoaW5vLCBhbmQgcGxh
aW4gYnJvd3NlciBsb2FkaW5nLgorCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAg
ICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAg
ICAgIGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2Yg
ZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBmYWN0b3J5KChyb290LmVzcHJpbWEgPSB7fSkpOworICAgIH0K
K30odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2
YXIgVG9rZW4sCisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5FeHByVG9rZW5zLAorICAg
ICAgICBTeW50YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAgICAgTWVzc2FnZXMsCisg
ICAgICAgIFJlZ2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCisgICAgICAgIHNvdXJj
ZSwKKyAgICAgICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwK
KyAgICAgICAgbGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAor
ICAgICAgICBsb29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAg
IFRva2VuID0geworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAor
ICAgICAgICBJZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxs
TGl0ZXJhbDogNSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0
b3I6IDcsCisgICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNz
aW9uOiA5CisgICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tl
bi5Cb29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0g
PSAnPGVuZD4nOworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVy
JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5O
YW1lW1Rva2VuLk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVt
ZXJpY0xpdGVyYWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9y
XSA9ICdQdW5jdHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAn
U3RyaW5nJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3Vs
YXJFeHByZXNzaW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9z
ZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAneycs
ICdbJywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCisgICAgICAgICAgICAg
ICAgICAgICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAg
ICAgICc9JywgJys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+
PScsCisgICAgICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAg
ICAnKycsICctJywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+Pics
ICcmJywKKyAgICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwn
LCAnPycsICc6JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAgICAgICAgICAgICc8PScs
ICc8JywgJz4nLCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFzc2ln
bm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBBcnJheUV4
cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Js
b2NrU3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Np
b24nLAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAg
Q2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAn
Q2F0Y2hDbGF1c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25h
bEV4cHJlc3Npb24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVt
ZW50JywKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAg
ICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAgRW1w
dHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1l
bnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3Rh
dGVtZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAg
ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAgICAg
RnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRlbnRp
ZmllcjogJ0lkZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywK
KyAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAn
TGFiZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4
cHJlc3Npb24nLAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbics
CisgICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0
RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3Jh
bScsCisgICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1l
bnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1
ZW5jZUV4cHJlc3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1l
bnQnLAorICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHBy
ZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93
U3RhdGVtZW50JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAg
ICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhw
cmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9u
OiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1Zh
cmlhYmxlRGVjbGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1l
bnQnLAorICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKKyAgICB9OworCisg
ICAgUHJvcGVydHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAgICAgICBHZXQ6IDIsCisg
ICAgICAgIFNldDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUg
aWRlbnRpY2FsIHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVjdGVkVG9r
ZW46ICAnVW5leHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICAn
VW5leHBlY3RlZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1VuZXhwZWN0
ZWQgc3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBlY3RlZCBp
ZGVudGlmaWVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0ZWQgcmVz
ZXJ2ZWQgd29yZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2Yg
aW5wdXQnLAorICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0
ZXIgdGhyb3cnLAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb24nLAorICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4
cHJlc3Npb246IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAn
SW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExI
U0luRm9ySW46ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBN
dWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGlu
IHN3aXRjaCBzdGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAgJ01pc3Npbmcg
Y2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRl
ZmluZWQgbGFiZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBo
YXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxs
ZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2Fs
IGJyZWFrIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVy
biBzdGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2Rl
IG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hW
YXJpYWJsZTogICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGlu
IHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1h
eSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJp
Y3RQYXJhbU5hbWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFs
bG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3Qg
bW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisg
ICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZh
bCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RPY3RhbExpdGVy
YWw6ICAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCisg
ICAgICAgIFN0cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmll
ciBpbiBzdHJpY3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogICdE
dXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBz
dHJpY3QgbW9kZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiAgJ09iamVjdCBsaXRl
cmFsIG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1l
IG5hbWUnLAorICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90
IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lJywKKyAg
ICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1l
bnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUG9z
dGZpeDogICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3Ig
YXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQcmVm
aXg6ICAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJn
dW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RSZXNlcnZlZFdv
cmQ6ICAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJworICAgIH07
CisKKyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAg
IFJlZ2V4ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgn
W1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1
MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1
MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1
MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdc
dTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEt
XHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1
MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1
MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUw
OEEwXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUw
OTcxLVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1
MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUw
OUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBB
MTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEz
OVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBB
OTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBB
QkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIy
OFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVE
XHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjky
LVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1c
dTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTIt
XHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBc
dTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0Iz
XHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1c
dTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1
MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRc
dTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFc
dTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1
MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUw
RUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBG
NDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUx
MDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUx
MDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUx
MEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1
MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgt
XHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEy
LVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2
NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUx
NzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1c
dTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4Nzdc
dTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5NTAtXHUxOTZE
XHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEy
MC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFC
QUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUx
QzdEXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUx
RTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1c
dTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1c
dTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYt
XHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdG
XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFE
XHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNG
XHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1
RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQy
N1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRB
OC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUy
RENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1
MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZc
dTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEw
LVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0
OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2
NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1
QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFc
dUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgy
LVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2
MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFB
NDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVcdUFB
QjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFB
RjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1
QUIyNlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZc
dUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEz
LVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIz
RVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUw
LVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZF
RkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVG
RkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAorICAgICAgICBOb25Bc2Np
aUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1c
eEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMw
MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4
Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0
OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUw
NUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1
RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUw
NkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1
MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMFx1MDhBMi1c
dTA4QUNcdTA4RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTc3
XHUwOTc5LVx1MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkz
LVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlD
N1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2
LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEy
OFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0Nc
dTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNc
dTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkx
XHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJD
LVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFF
Ni1cdTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBC
NDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2
M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5
MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRc
dTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNB
LVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMw
Q1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBD
M0QtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBD
NTlcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1MEM4NS1cdTBDOENcdTBD
OEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1
MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1
MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNcdTBEMDUtXHUwRDBDXHUw
RDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1c
dTBENEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJc
dTBEODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAt
XHUwREM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERjJcdTBERjNc
dTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRc
dTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1c
dTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1
MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZc
dTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1
MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNc
dTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0Rc
dTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4
XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJC
Mi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEy
RDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzgwLVx1
MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFc
dTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIw
LVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3
M1x1MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgw
RFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5
MDAtXHUxOTFDXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1
MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEOVx1MUEwMC1cdTFBMUJc
dTFBMjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3
XHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMw
MC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUx
Q0Y2XHUxRDAwLVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1
MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1
MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0Nc
dTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2
LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1c
dTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1c
dTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1
MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhc
dTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAw
LVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEw
LVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJE
QzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUy
RTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1
MzA0MS1cdTMwOTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1c
dTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZG
XHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUw
MC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVB
Njk3XHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1
QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAt
XHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMw
LVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QUEwMC1cdUFB
MzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0JcdUFB
ODAtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1
QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVc
dUFCQzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAt
XHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIw
Nlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZC
M0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1
MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVG
RTI2XHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVG
RjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1
RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJykKKyAg
ICB9OworCisgICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRo
cm93IGFuIGVycm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRy
YWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAgIC8vIHRvIGNhdGNoIGEg
bG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBj
YXNlLgorICAgIC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRp
b24gb24gYW55IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBt
ZXNzYWdlKSB7CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBpZiAo
IWNvbmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBt
ZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0
KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAn
MDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5k
ZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0ZSBTcGFjZQorCisgICAg
ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjAp
IHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChj
aCA9PT0gMHhBMCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgx
ODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIw
MDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAw
MCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICAvLyA3LjMgTGluZSBU
ZXJtaW5hdG9ycworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4
KSB8fCAoY2ggPT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50aWZpZXIgTmFt
ZXMgYW5kIElkZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkg
eworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAk
IChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYg
Y2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAm
JiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1
QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAg
KChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmlu
Zy5mcm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
UGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYp
IHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49
IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2gg
Pj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChj
aCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4uOQorICAgICAgICAgICAg
KGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisg
ICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQu
dGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIg
RnV0dXJlIFJlc2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29y
ZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAg
ICAgICAgY2FzZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2Ug
J2V4dGVuZHMnOgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0
TW9kZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNh
c2UgJ2ltcGxlbWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNl
ICdwYWNrYWdlJzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3Rl
Y3RlZCc6CisgICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6Cisg
ICAgICAgIGNhc2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgewor
ICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAg
fQorCisgICAgLy8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlk
KSB7CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29u
c3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcg
YW5kICdsZXQnIGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5u
ZXh0LgorICAgICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29y
ZHMuCisKKyAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09
ICdkbycpOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFy
JykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAg
ICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlk
ID09PSAnY2FzZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9
PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAg
ICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09
PSAnY2F0Y2gnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09
PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09
PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBjYXNlIDY6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlk
ID09PSAnZGVsZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAo
aWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3Ogor
ICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5
JykgfHwgKGlkID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBy
ZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9
PT0gJ2RlYnVnZ2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlk
ID09PSAnaW5zdGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBm
dW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKKyAgICAg
ICAgdmFyIGNvbW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQg
PT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKworICAg
ICAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRl
biB0aGUgY29tbWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVy
aW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNr
aXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAgICAg
IC8vIGhhbmRsZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0
YXJ0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUubGFz
dENvbW1lbnRTdGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQgPSB7CisgICAgICAgICAg
ICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAg
ICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFy
dCwgZW5kXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAg
ICBjb21tZW50LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBleHRyYS5jb21tZW50cy5w
dXNoKGNvbW1lbnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAg
ICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICBl
eHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAgIHZh
ciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zm
c2V0OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAg
ICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydCAtIG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVB
dChpbmRleCk7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQs
IGluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRl
eCAtIDEsIGxvYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAgICAgICAgICAg
ICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4
dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgb2Zmc2V0LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAg
ICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBj
b21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNo
LCBjb21tZW50OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAg
c3RhcnQgPSBpbmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAg
c3RhcnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAg
ICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlm
IChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7
CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAvLyBCbG9jayBj
b21tZW50IGVuZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChl
eHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJj
ZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBs
b2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENv
bW1lbnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRo
cm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNoLCBzdGFydDsK
KworICAgICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisK
KyAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAm
JiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVt
YmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAg
IHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8g
VSswMDJGIGlzICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXggKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAgICAgICAgICAgICAgICAg
ICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkg
eyAgLy8gVSswMDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5l
Q29tbWVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQg
JiYgY2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAgICAgICAgICAgIC8vIFUr
MDAzRSBpcyAnPicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNF
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICAgICAg
c2tpcFNpbmdsZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8JworICAgICAgICAgICAgICAg
IGlmIChzb3VyY2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSAnIS0tJykgeworICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsgLy8gYCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNp
bmdsZUxpbmVDb21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICB2YXIgaSwg
bGVuLCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQg
OiAyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAg
ICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29k
ZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAg
ICAgIHZhciBjaCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsr
KTsKKyAgICAgICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAn
XHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAg
ICAgaWYgKGNoID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpICE9PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAg
ICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hh
ckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZCA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlm
ICghaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZCArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUp
IGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY2ggPT09IDB4
NUMpIHsKKyAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKKyAg
ICAgICAgdmFyIHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGluZGV4Kys7CisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNl
LgorICAgICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdldEVzY2FwZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0
LCBpZCwgdHlwZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgIC8vIEJhY2tz
bGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0g
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmll
cigpIDogZ2V0SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQg
b3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gVGh1cywgaXQg
bXVzdCBiZSBhbiBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7Cisg
ICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfSBlbHNlIGlmIChp
c0tleXdvcmQoaWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAg
ICAgfSBlbHNlIGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4u
TnVsbExpdGVyYWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0g
J2ZhbHNlJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAg
ICAgICAgIHZhbHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKworICAgIC8v
IDcuNyBQdW5jdHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7CisgICAg
ICAgIHZhciBzdGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAgICAgY2gxID0gc291cmNl
W2luZGV4XSwKKyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNoMywKKyAgICAgICAgICAg
IGNoNDsKKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAgICAvLyBDaGVjayBmb3Ig
bW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgY2FzZSAw
eDJFOiAgLy8gLiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBvcGVuIGJyYWNrZXQKKyAg
ICAgICAgY2FzZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAgICAgIGNhc2UgMHgzQjog
IC8vIDsgc2VtaWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwgY29tbWEKKyAgICAgICAg
Y2FzZSAweDdCOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg3RDogIC8v
IH0gY2xvc2UgY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAgLy8gWworICAgICAgICBj
YXNlIDB4NUQ6ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoKKyAgICAgICAgY2FzZSAw
eDNGOiAgLy8gPworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNvZGUgPT09IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9r
ZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29k
ZSA9PT0gMHg3QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9
IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVh
dG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLAor
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
bGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAg
ICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKwor
ICAgICAgICAgICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFy
aXNvbiBvcGVyYXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gMHgzRCkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMHgyQjogIC8v
ICsKKyAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAgICAgICAgICAgICAgY2Fz
ZSAweDJGOiAgLy8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzogIC8vIDwKKyAgICAgICAg
ICAgICAgICBjYXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSAweDVFOiAgLy8g
XgorICAgICAgICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAgICAgICAgICAgICBjYXNl
IDB4MjU6ICAvLyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAgLy8gJgorICAgICAgICAg
ICAgICAgIGNhc2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3Ry
aW5nLmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2FzZSAweDIxOiAvLyAhCisg
ICAgICAgICAgICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ICs9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9r
ZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xp
Y2Uoc3RhcnQsIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LWNoYXJhY3RlciBw
dW5jdHVhdG9yOiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7
CisKKyAgICAgICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSA0
OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5j
dHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBp
bmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMtY2hhcmFjdGVy
IHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAgICAgY2gzID0gY2g0LnN1
YnN0cigwLCAzKTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0n
IHx8IGNoMyA9PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAg
ICAgICAgICAgICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1
YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNoMy5zdWJzdHIoMCwgMik7
CisKKyAgICAgICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEp
ID49IDApKSB8fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3Is
CisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1
YXRvcnM6IDwgPiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlmICgnPD49ISstKiUmfF4v
Jy5pbmRleE9mKGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAg
ICAgICAgICAgICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8gNy44LjMgTnVtZXJpYyBM
aXRlcmFscworCisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAg
dmFyIG51bWJlciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAg
ICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpIHsKKyAg
ICAgICAgdmFyIG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1h
bERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJh
bCwKKyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLAorICAgICAgICAgICAg
b2N0YWw6IHRydWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisg
ICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24g
c2Nhbk51bWVyaWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7CisK
KyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGln
aXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051bWVy
aWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBw
b2ludCcpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcnOwor
ICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAv
LyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBudW1i
ZXIgc3RhcnRzIHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExp
dGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNP
Y3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0
ZXJhbChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZGVj
aW1hbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLgorICAg
ICAgICAgICAgICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
KSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRl
eCsrXTsKKyAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAg
IG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAg
ICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4Kytd
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0
KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAg
ICAgICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAgICAgICAgICBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAg
ICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07
CisgICAgfQorCisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBz
Y2FuU3RyaW5nTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQs
IGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2UsIHN0YXJ0TGluZU51
bWJlciwgc3RhcnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1i
ZXI7CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIHF1b3Rl
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90
ZSA9PT0gJyInKSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRo
IGEgcXVvdGUnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4Owor
CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAg
ICAgICAgICBxdW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4KytdOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Zic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxE
aWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
Y3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2Rl
ICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBz
dHJpbmcgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwg
MSwgMiwgMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4
T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleCA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtp
bmRleCsrXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
KytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNv
dXJjZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVU
ZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5T
dHJpbmdMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFs
OiBvY3RhbCwKKyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAor
ICAgICAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAorICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0
LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3Mp
IHsKKyAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFsdWUg
PSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdF
eHBCb2R5KCkgeworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQs
IGJvZHk7CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2gg
PT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNs
YXNoJyk7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICBjbGFzc01h
cmtlciA9IGZhbHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107Cisg
ICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAg
ICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAvLyBF
Q01BLTI2MiA3LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihj
aC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFy
a2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAg
IGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAg
ICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAg
ICB2YXIgY2gsIHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAgc3RyID0gJyc7CisgICAg
ICAgIGZsYWdzID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQ
YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdc
XCcgJiYgaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAgICAgICAgICAgICAgICAg
ICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAg
ICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsr
cmVzdG9yZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVz
dG9yZV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xcdSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdcXCc7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAg
ICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0
cgorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CisgICAg
ICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVlOworCisgICAgICAgIGxv
b2thaGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0g
aW5kZXg7CisKKyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CisgICAgICAgIGZsYWdz
ID0gc2NhblJlZ0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZh
bHVlLCBmbGFncy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBs
aW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6
IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsCisgICAgICAg
ICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFJl
Z2V4KCkgeworICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjsKKworICAgICAgICBz
a2lwQ29tbWVudCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsb2MgPSB7Cisg
ICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpOworICAgICAgICBsb2Mu
ZW5kID0geworICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVt
bjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgbmV4dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAg
ICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScK
KyAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAg
ICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAn
UHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAn
LycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLnRva2Vucy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAg
ICAgICAgICAgICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAg
dmFsdWU6IHJlZ2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4
XSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlm
aWVyTmFtZSh0b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRl
bnRpZmllciB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAor
ICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAg
ICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAg
ICAgIGNoZWNrVG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGht
OgorICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rl
c2lnbgorICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0
aCAtIDFdOworICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGlu
ZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1
cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBl
ID09PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09
ICddJykgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJyknKSB7CisgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tl
biAtIDFdOworICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAgICAgICAgICAgICAvLyBE
aXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKyAgICAg
ICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAg
ICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNd
LnR5cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMg
ZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNb
ZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVj
a1Rva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0
cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09ICdL
ZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlU
b2tlbiAtIDVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMKKyAgICAg
ICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAg
ICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNv
bGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0g
J0tleXdvcmQnKSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYWR2YW5jZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIHNraXBDb21tZW50KCk7
CisKKyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRl
eAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSAweDI4IHx8
IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1
bmN0dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0
cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisg
ICAgICAgIGlmIChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgeworICAgICAgICAgICAgcmV0
dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIERvdCAo
LikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0
aGUgbmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAg
IGlmIChjaCA9PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5O
dW1lcmljTGl0ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gp
KSB7CisgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguCisg
ICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikgeworICAgICAgICAgICAg
cmV0dXJuIGFkdmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkgeworICAg
ICAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAgICAgIHNraXBDb21tZW50
KCk7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAg
ICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGlu
ZVN0YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZh
bmNlKCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVy
LAorICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisg
ICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVl
ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZXh0
cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50
eXBlXSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFu
Z2U6IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAg
fQorCisgICAgZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAg
dG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBs
aW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4u
bGluZVN0YXJ0OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9
PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKKworICAgICAgICBp
bmRleCA9IHRva2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7
CisgICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICByZXR1cm4g
dG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAgICAgICAgdmFyIHBvcywg
bGluZSwgc3RhcnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5l
TnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbG9va2FoZWFkID0g
KHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDog
YWR2YW5jZSgpOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxp
bmU7CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKworICAgIGZ1bmN0aW9uIFBv
c2l0aW9uKGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgICAg
ICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2Nh
dGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhp
cy5zdGFydCA9IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAg
dGhpcy5lbmQgPSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAgICB9CisKKyAgICBTeW50
YXhUcmVlRGVsZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAorCisgICAg
ICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGxh
c3RDaGlsZCwgdHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9
PT0gU3ludGF4LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRz
WzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJh
aWxpbmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAg
ICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2su
bGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFd
LnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAg
ICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tl
eHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRv
bVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisg
ICAgICAgICAgICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4
dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5y
YW5nZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0g
ZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGxhc3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGlu
Z0NvbW1lbnRzICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdD
b21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21t
ZW50czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVu
dHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFk
aW5nQ29tbWVudHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29tbWVudHNbZXh0cmEubGVh
ZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAg
ICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50
czsKKyAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgIH0KKworCisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAg
ICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgfSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAobm9kZSwgc3RhcnRUb2tl
bikgeworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS5yYW5nZSA9IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBuZXcg
U291cmNlTG9jYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnRMaW5l
TnVtYmVyID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVtYmVyIDogc3RhcnRUb2tl
bi5zdGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnQg
LSAoc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4u
bGluZVN0YXJ0IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisgICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzKG5vZGUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkg
eworICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBwb3N0
UHJvY2VzczogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2Up
IHsKKyAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9u
LAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24g
KG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAg
ICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwg
cmlnaHQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9w
ZXJhdG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAg
ICAgICAgICAgICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRv
cjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAg
ICByaWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAg
ICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisg
ICAgICAgICAgICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxF
eHByZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25h
bEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAg
ICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0
ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRp
bnVlU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVu
dDogZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
Ym9keTogYm9keSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0
eVN0YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVF
eHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGlu
aXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6
IGluaXQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRh
dGU6IHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVm
dCwgcmlnaHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQs
CisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJv
ZHksCisgICAgICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBw
YXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAg
IGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAg
ICAgICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2Us
CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQs
IHBhcmFtcywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBpZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAg
ICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAg
ICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNl
LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZGVudGlm
aWVyLAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1
ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisg
ICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBh
bHRlcm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0
ZXJhbDogZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tl
bi52YWx1ZSwKKyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwg
dG9rZW4uZW5kKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVN
ZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1lbWJl
ckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSAnWycs
CisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgcHJvcGVy
dHk6IHByb3BlcnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZU5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6
IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlT2JqZWN0
RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9y
LCBhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3Bl
cmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAg
ICAgIHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlUHJvZ3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9w
ZXJ0eTogZnVuY3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAgICAg
IGtleToga2V5LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICBraW5kOiBraW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Np
b25zKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJl
c3Npb25zCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRj
aENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNlLAorICAgICAgICAgICAg
ICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1l
bnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAgICAgICAgICAgICAgY2Fz
ZXM6IGNhc2VzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRo
aXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3Vt
ZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5UaHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBm
dW5jdGlvbiAoYmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMsIGZpbmFsaXplcikgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHJ5U3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAgICAgICAgICAgICAgICBn
dWFyZGVkSGFuZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAgICAgICAgICBoYW5kbGVy
czogaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBmaW5hbGl6ZXIKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBm
dW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAob3BlcmF0b3Ig
PT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1
bWVudCwKKyAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRl
Y2xhcmF0aW9ucywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNs
YXJhdGlvbnM6IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRv
cjogZnVuY3Rpb24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAg
aWQ6IGlkLAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBi
b2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAg
ICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2l0aFN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBib2R5OiBi
b2R5CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4K
KworICAgIGZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAgICAgICAgdmFyIHBvcywg
bGluZSwgc3RhcnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5l
ID0gbGluZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIHNraXBD
b21tZW50KCk7CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKKyAgICAgICAg
aW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3Rh
cnQgPSBzdGFydDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8gVGhy
b3cgYW4gZXhjZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdl
Rm9ybWF0KSB7CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgbXNnID0gbWVz
c2FnZUZvcm1hdC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJh
bmdlJyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0eXBlb2YgdG9rZW4ubGlu
ZU51bWJlciA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdM
aW5lICcgKyB0b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJv
ci5pbmRleCA9IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRv
a2VuLmxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5zdGFydCAt
IGxpbmVTdGFydCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IG5l
dyBFcnJvcignTGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAg
ZXJyb3IuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAx
OworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7CisgICAgICAg
IHRocm93IGVycm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgp
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJn
dW1lbnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLmVy
cm9ycykgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0
aGUgdG9rZW4uCisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlm
aWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3
b3JkKSB7CisgICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUp
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFJlc2VydmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tl
biwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisg
ICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4u
dmFsdWUpOworICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0
aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2ls
bCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFy
IHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVh
dG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0
b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBl
eGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtl
eXdvcmQpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50
eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1
bmN0dWF0b3IuCisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4g
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09
PSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBt
YXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3Jk
KGtleXdvcmQpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3
b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAg
ICBmdW5jdGlvbiBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAg
ICAgICByZXR1cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAg
ICAgICAgICAgb3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAg
ICAgICAgICBvcCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAg
ICAgICAgICAgb3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsK
KworICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRl
bHkgYSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCkgPT09IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsK
KyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVy
biB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgor
CisgICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1i
ZXJFeHByZXNzaW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJheSBJbml0aWFsaXNlcgor
CisgICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgZWxl
bWVudHMgPSBbXSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50cyksIHN0YXJ0VG9rZW4p
OworICAgIH0KKworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAgIGZ1bmN0
aW9uIHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsKKyAgICAgICAgdmFyIHBy
ZXZpb3VzU3RyaWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0
ID0gc3RyaWN0OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBib2R5
ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChmaXJzdCAmJiBz
dHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAg
ICAgICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwg
cGFyYW0sIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7
CisKKyAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBh
cnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9y
IHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJp
Y0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9j
dGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3RhcnRUb2tlbik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJ
ZGVudGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBrZXksIGlkLCB2
YWx1ZSwgcGFyYW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRl
ciBhbmQgU2V0dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYm
ICFtYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0
eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIGV4
cGVjdCgnKScpOworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9u
KFtdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVQcm9wZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhbWF0Y2goJzon
KSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmll
cikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRv
a2VuLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVu
Y3Rpb24oW10pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVy
dHlGdW5jdGlvbihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnc2V0
Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVByb3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tl
bi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgp
OworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4p
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNl
cigpIHsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVydHksIG5hbWUsIGtleSwg
a2luZCwgbWFwID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2Jq
ZWN0UHJvcGVydHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBT
eW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXku
bmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHRvU3Ry
aW5nKHByb3BlcnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBraW5k
ID0gKHByb3BlcnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9w
ZXJ0eS5raW5kID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNl
dDsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmlj
dER1cGxpY2F0ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5k
ICE9PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVy
dHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtrZXldICYga2luZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5B
Y2Nlc3NvckdldFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAgICAgICAgICBpZiAoIW1h
dGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0
b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIg
ZXhwcjsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7
CisgICAgfQorCisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0
aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwg
ZXhwciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNl
cigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICB0
eXBlID0gbG9va2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisK
KyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGV4
cHIgPSAgZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5O
dW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0
YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNz
YWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5
cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1
bmN0aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMn
KSkgeworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAg
ICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUg
PT09ICd0cnVlJyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0
b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51
bGw7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgeworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVjdFJlZ2V4KCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
TGl0ZXJhbChzY2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVlaygp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0
VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMK
KworICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAgICB2YXIgYXJncyA9IFtd
OworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgewor
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJn
cy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgaWYg
KG1hdGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2
YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUo
dG9rZW4pKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRp
Zmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgnLicpOworCisgICAgICAg
IHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZUNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBl
eHBlY3QoJ1snKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBz
dGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4
cHJlc3Npb24oKTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygp
IDogW107CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
TmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAg
IHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxv
d0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAg
ICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBw
YXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91
c0FsbG93SW47CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcu
JykpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lv
bignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygn
KSkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHBy
b3BlcnR5ID0gcGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxl
ZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4
cHIsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAg
ZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxs
b3dJbjsKKworICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpKSB7CisgICAg
ICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFy
c2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIo
KTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lv
bignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVn
YXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnMKKworICAg
IGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCB0
b2tlbiwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAoKG1hdGNoKCcrKycp
IHx8IG1hdGNoKCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxMS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdl
cy5TdHJpY3RMSFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhw
cmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuNCBV
bmFyeSBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkgewor
ICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5LZXl3b3JkKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigp
OworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAg
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgo
KTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgLy8gMTEuNC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExI
U1ByZWZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNp
ZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3Nh
Z2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHBy
KTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4p
OworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgn
ficpIHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5h
cnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlF
eHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5
d29yZCgnZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0
eXBlb2YnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24o
dG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQo
ZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0
b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0
cmljdERlbGV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tl
biwgYWxsb3dJbikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2Vu
LnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29y
ZCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHRva2VuLnZhbHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAx
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAg
cHJlYyA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAg
ICAgICAgIHByZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6
CisgICAgICAgICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgJyYnOgorICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoK
KyAgICAgICAgY2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBj
YXNlICc8PSc6CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6
CisgICAgICAgICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgJ2luJzoKKyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAg
ICAgY2FzZSAnPj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJl
YyA9IDk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAg
Y2FzZSAnLyc6CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBN
dWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycwor
ICAgIC8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9u
YWwgT3BlcmF0b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4x
MCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBP
cGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgdmFyIG1hcmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwg
b3BlcmF0b3IsIGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9va2FoZWFkOworICAgICAg
ICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93
SW4pOworICAgICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7
CisgICAgICAgIH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOwor
CisgICAgICAgIG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOworICAgICAgICByaWdodCA9
IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4s
IHJpZ2h0XTsKKworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2th
aGVhZCwgc3RhdGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAgICAvLyBSZWR1Y2U6IG1h
a2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisg
ICAgICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0
YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5w
b3AoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlOworICAg
ICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbWFya2VyID0g
bWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1h
cmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0
YWNrLnB1c2godG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2thaGVhZCk7Cisg
ICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0
YWNrLnB1c2goZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8g
Y2xlYW4tdXAgdGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTsKKyAgICAg
ICAgZXhwciA9IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICB3aGls
ZSAoaSA+IDEpIHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHBy
ZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTsKKyAgICAgICAg
ICAgIGkgLT0gMjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAg
ICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJh
dG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhw
ciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnPycpKSB7
CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRl
LmFsbG93SW47CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgICAg
IGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBz
dGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7
CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24o
ZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9ycworCisgICAgZnVuY3Rp
b24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBsZWZ0
LCByaWdodCwgbm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
KyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBub2RlID0gbGVmdCA9
IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoQXNzaWdu
KCkpIHsKKyAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAg
IGlmICghaXNMZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYm
IGxlZnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChsZWZ0
Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNz
YWdlcy5TdHJpY3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3Jl
YXRlQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSwgc3RhcnRU
b2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAv
LyAxMS4xNCBDb21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkg
eworICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBl
eHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgn
LCcpKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNz
aW9uKFsgZXhwciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
ICAgICAgICBleHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBz
dGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKwor
ICAgIC8vIDEyLjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsK
KyAgICAgICAgdmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRlbWVudDsKKworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0
ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3Rh
dGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkg
eworICAgICAgICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJz
ZVN0YXRlbWVudExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jayks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50CisK
KyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHRv
a2VuLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVu
dGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGluaXQgPSBudWxs
LCBpZCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gMTIuMi4x
CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAg
ICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4
KCk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
VmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZh
ciBsaXN0ID0gW107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJu
IGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsK
KyAgICAgICAgdmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXIn
KTsKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0
KCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAg
IH0KKworICAgIC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFy
ZSBleHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8g
c2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QK
KyAgICAvLyBhbmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9u
eTpsZXQKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAg
ICAgICB2YXIgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5kKTsKKworICAgICAgICBk
ZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpOworCisgICAg
ICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAg
ICBmdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQor
CisgICAgLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VF
eHByZXNzaW9uU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lv
bigpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUg
SWYgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2lmJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNl
RXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVl
bnQgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2Un
KSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0
YXRlbWVudCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVs
bDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVu
dCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRl
cmF0aW9uIFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgp
IHsKKyAgICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0
ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJv
ZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xk
SW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAg
ICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAg
ICAgIGxleCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURv
V2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VX
aGlsZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9u
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCco
Jyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVj
dCgnKScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Cisg
ICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VT
dGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9u
OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBi
b2R5KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24o
KSB7CisgICAgICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAg
ICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xh
cmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGluaXQsIHRl
c3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAgICAg
IGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdm
b3InKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2hLZXl3b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJz
ZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGgg
PT09IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgp
OworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAg
cmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51
bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNMZWZ0SGFuZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsK
KworICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9
IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7
Jyk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVw
ZGF0ZSA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0
ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJv
ZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xk
SW5JdGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5l
ZCcpID8KKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwg
dGVzdCwgdXBkYXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9y
SW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjcgVGhl
IGNvbnRpbnVlIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVu
dCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtl
eXdvcmQoJ2NvbnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9u
IGZvcm06ICdjb250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
ID09PSAweDNCKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCFzdGF0
ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LklsbGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCFzdGF0ZS5p
bkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkls
bGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAg
bGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAn
JCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAg
ICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwp
OworICAgIH0KKworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorCisgICAgZnVuY3Rp
b24gcGFyc2VCcmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAgICAgICAgLy8gQ2F0Y2gg
dGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAw
M0IpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24g
fHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIShzdGF0ZS5p
bkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAg
ICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5u
YW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29s
b24oKTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlv
biB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjkgVGhlIHJl
dHVybiBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgewor
ICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3Jl
dHVybicpOworCisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisgICAg
ICAgIH0KKworICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBp
ZGVudGlmaWVyIGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpID09PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9
IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFy
Z3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGlu
ZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVy
blN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsnKSkg
eworICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5FT0YpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQp
OworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rp
b24gcGFyc2VXaXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OworCisg
ICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBT
aG91bGQgd2UgdXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/CisgICAgICAgICAgICBza2lw
Q29tbWVudCgpOworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3RNb2RlV2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRo
Jyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNl
U3RhdGVtZW50KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1l
bnQob2JqZWN0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0
LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jykp
IHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51bGw7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7CisgICAgICAgICAg
ICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KCc6
Jyk7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nh
c2UnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQu
cHVzaChzdGF0ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSwgc3RhcnRU
b2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7Cisg
ICAgICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZh
dWx0Rm91bmQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAg
ZXhwZWN0KCcoJyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgY2FzZXMgPSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAg
bGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50
KGRpc2NyaW1pbmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2xkSW5Td2l0Y2gg
PSBzdGF0ZS5pblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOworICAgICAg
ICBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsK
KyAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IGlmIChkZWZhdWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLmlu
U3dpdGNoID0gb2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2Vz
KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50CisKKyAgICBmdW5j
dGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQ7CisKKyAg
ICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAocGVla0xpbmVUZXJt
aW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVB
ZnRlclRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8g
MTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2Uo
KSB7CisgICAgICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCisg
ICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJh
bSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAg
ICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUp
OworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJvZHkgPSBwYXJz
ZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZUNhdGNoQ2xhdXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMg
PSBbXSwgZmluYWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsK
KworICAgICAgICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdjYXRjaCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1
c2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5Jykp
IHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9j
aygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAh
ZmluYWxpemVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNo
T3JGaW5hbGx5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVU
cnlTdGF0ZW1lbnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAg
ICAvLyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURl
YnVnZ2VyU3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOwor
CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRz
CisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBs
b29rYWhlYWQudHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9k
eSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9rZW47CisKKyAgICAgICAg
aWYgKHR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxv
b2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1
YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVtcHR5U3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3Jk
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAg
Y2FzZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBh
cnNlQnJlYWtTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdjb250
aW51ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VDb250
aW51ZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2Vy
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURlYnVnZ2Vy
U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9XaGlsZVN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCksIHN0YXJ0VG9rZW4pOwor
ICAgICAgICAgICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKHBhcnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNl
ICdyZXR1cm4nOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNl
UmV0dXJuU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnc3dpdGNo
JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVN3aXRjaFN0
YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRocm93U3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsK
KyAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQocGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChwYXJzZVdoaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAn
d2l0aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaXRo
U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIg
PSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1l
bnRzCisgICAgICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0
Y2goJzonKSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyAr
IGV4cHIubmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRl
bGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSks
IHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Np
b25TdGF0ZW1lbnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0
aW9uIERlZmluaXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpIHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRv
a2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG9sZExhYmVsU2V0
LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgn
eycpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAg
ICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5z
bGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRp
cmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmlj
dE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgewor
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJlbFNldCA9
IHN0YXRlLmxhYmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0
aW9uOworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBvbGRJ
bkZ1bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHN0YXRlLmxh
YmVsU2V0ID0ge307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAg
IHN0YXRlLmluU3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0g
dHJ1ZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50
cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7
CisKKyAgICAgICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsKKyAgICAgICAgc3RhdGUu
aW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBv
bGRJblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9u
Qm9keTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVC
bG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgcGFy
YW0sIHBhcmFtcyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0LCBrZXksIG1lc3NhZ2U7
CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAg
ICAgICAgICAgcGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAg
IHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBrZXkg
PSAnJCcgKyB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHkuY2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNz
YWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2Fn
ZXMuU3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbVNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkg
eworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcGFyYW1zOiBw
YXJhbXMsCisgICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3Nh
Z2UKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKSB7CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJvZHksIHRva2VuLCBzdHJp
Y3RlZCwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkg
eworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5j
dGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmly
c3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RS
ZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBw
YXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1z
OworICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7Cisg
ICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBw
cmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
aWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBbXSwgYm9keSks
IHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNz
aW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVz
dHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3Qs
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsK
KyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9u
TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1z
KGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAg
IHN0cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAu
Zmlyc3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3Ry
aWN0ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRz
KCk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAg
ICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2
aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2Vu
KTsKKyAgICB9CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJj
ZUVsZW1lbnQoKSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29y
ZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAg
IGNhc2UgJ2NvbnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAg
ICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0
aW9uRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0
dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZVNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNl
RWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkOworCisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhl
YWQ7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
b3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VF
bGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1l
bnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0
ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNl
IHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAg
ICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJj
ZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBib2R5LCBzdGFydFRva2Vu
OworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisKKyAgICAgICAg
Ym9keSA9IHBhcnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAgICAgICAgdmFyIGksIGVu
dHJ5LCB0b2tlbiwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJh
LnRva2Vucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNb
aV07CisgICAgICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50
eXBlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIHRva2VuLnJh
bmdlID0gZW50cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEu
bG9jKSB7CisgICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAg
ICAgZXh0cmEudG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRva2VuaXpl
KGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAorICAgICAgICAgICAgdG9r
ZW4sCisgICAgICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7Cisg
ICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2Yg
U3RyaW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9
CisKKyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJj
ZSA9IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3Vy
Y2UubGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAg
bGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAg
ICAgc3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFi
ZWxTZXQ6IHt9LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAg
ICAgaW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAg
ICAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRy
YSA9IHt9OworCisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2Vu
cyBoZXJlLgorICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRv
a2VucyA9IFtdOworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRo
ZSBmb2xsb3dpbmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4
IHRva2Vucy4KKyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0
cmEub3BlbkN1cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Yg
b3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBl
eHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMu
bG9jOworCisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicg
JiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xl
YW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtd
OworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWsoKTsKKyAgICAg
ICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9r
ZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4u
RU9GKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4g
PSBsZXgoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgeworICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4
dHJhLmVycm9ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2go
bGV4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBv
biB0aGUgZmlyc3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGlu
ZmluaXRlIGxvb3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJv
cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgdG9r
ZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50
cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBl
eHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0
cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJv
cnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBl
eHRyYSA9IHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgcHJvZ3JhbSwg
dG9TdHJpbmc7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBl
b2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAg
ICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVs
ZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkg
PyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNl
Lmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7Cisg
ICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAg
ICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246
IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENv
bW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9OworICAgICAg
ICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBleHRy
YS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25z
LnJhbmdlOworICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0g
J2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1l
bnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRp
b25zLmF0dGFjaENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9u
cy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgICAgICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9r
ZW5zID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMu
Y29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAg
ICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50
KSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4
dHJhLnJhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwor
ICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKKyAgICAgICAgICAg
ICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEu
bGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpOworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAg
cHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5
IHsKKyAgICAgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
cHJvZ3JhbTsKKyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KKyAg
ICBleHBvcnRzLnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRv
a2VuaXplOworCisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBjb3B5
LgorICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBvcnRzLlN5bnRheCA9IChm
dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9OworCisgICAgICAgIGlm
ICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgdHlw
ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuYW1l
IGluIFN5bnRheCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNPd25Qcm9wZXJ0eShuYW1l
KSkgeworICAgICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4W25hbWVdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOworCit9KSk7CisvKiB2aW06
IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLworCit9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlh
IEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZP
UiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi8KKy8qanNo
aW50IGluZGVudDo0Ki8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRydWUqLworKGZ1
bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gVW5p
dmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9O
b2RlLmpzLAorICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsCisgICAgaWYgKHR5cGVv
ZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICBkZWZpbmUo
WydleHBvcnRzJ10sIGZhY3RvcnkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZmFjdG9yeSgocm9vdC5lc3RyYXZlcnNlID0ge30pKTsKKyAgICB9Cit9KHRoaXMs
IGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFN5bnRh
eCwKKyAgICAgICAgaXNBcnJheSwKKyAgICAgICAgVmlzaXRvck9wdGlvbiwKKyAgICAgICAgVmlz
aXRvcktleXMsCisgICAgICAgIEJSRUFLLAorICAgICAgICBTS0lQOworCisgICAgU3ludGF4ID0g
eworICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywK
KyAgICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQXJy
YXlQYXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJywKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAn
QmxvY2tTdGF0ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVz
c2lvbicsCisgICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAg
ICBDYWxsRXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6
ICdDYXRjaENsYXVzZScsCisgICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsCisgICAgICAg
IENsYXNzRGVjbGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJywKKyAgICAgICAgQ2xhc3NFeHBy
ZXNzaW9uOiAnQ2xhc3NFeHByZXNzaW9uJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9u
OiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdD
b250aW51ZVN0YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJT
dGF0ZW1lbnQnLAorICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1l
bnQnLAorICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAg
ICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNzaW9u
U3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVudDog
J0ZvclN0YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQn
LAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsCisg
ICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAg
IElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRl
bWVudCcsCisgICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0YXRl
bWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xv
Z2ljYWxFeHByZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJl
c3Npb24nLAorICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsCisg
ICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhw
cmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2Jq
ZWN0UGF0dGVybicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAgUHJvcGVy
dHk6ICdQcm9wZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVu
dCcsCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCisg
ICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAgIFN3aXRj
aENhc2U6ICdTd2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVz
c2lvbicsCisgICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAg
ICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246
ICdVbmFyeUV4cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhw
cmVzc2lvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0
aW9uJywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywK
KyAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhT
dGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JywKKyAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWll
bGRFeHByZXNzaW9uJworICAgIH07CisKKyAgICBmdW5jdGlvbiBpZ25vcmVKU0hpbnRFcnJvcigp
IHsgfQorCisgICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgaWYgKCFpc0FycmF5KSB7
CisgICAgICAgIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7CisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmpl
Y3QgQXJyYXldJzsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWVwQ29weShv
YmopIHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXksIHZhbDsKKyAgICAgICAgZm9yIChrZXkg
aW4gb2JqKSB7CisgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg
ICAgICAgICAgICAgICB2YWwgPSBvYmpba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9m
IHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldFtrZXldID0gZGVlcENvcHkodmFsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZXRba2V5XSA9IHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzaGFsbG93Q29weShvYmopIHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7Cisg
ICAgICAgIGZvciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9w
ZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZ25v
cmVKU0hpbnRFcnJvcihzaGFsbG93Q29weSk7CisKKyAgICAvLyBiYXNlZCBvbiBMTFZNIGxpYmMr
KyB1cHBlcl9ib3VuZCAvIGxvd2VyX2JvdW5kCisgICAgLy8gTUlUIExpY2Vuc2UKKworICAgIGZ1
bmN0aW9uIHVwcGVyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAgICAgdmFyIGRpZmYsIGxlbiwg
aSwgY3VycmVudDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGkgPSAw
OworCisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7
CisgICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAgICAgICAgICBpZiAoZnVuYyhh
cnJheVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAg
ICAgICAgbGVuIC09IGRpZmYgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIGZ1bmMp
IHsKKyAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDsKKworICAgICAgICBsZW4gPSBh
cnJheS5sZW5ndGg7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAg
ICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAgICAgICBjdXJyZW50ID0gaSArIGRp
ZmY7CisgICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAg
ICAgICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICBpZ25vcmVK
U0hpbnRFcnJvcihsb3dlckJvdW5kKTsKKworICAgIFZpc2l0b3JLZXlzID0geworICAgICAgICBB
c3NpZ25tZW50RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIEFycmF5RXhw
cmVzc2lvbjogWydlbGVtZW50cyddLAorICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMn
XSwKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2RlZmF1bHRz
JywgJ3Jlc3QnLCAnYm9keSddLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sCisg
ICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBCcmVh
a1N0YXRlbWVudDogWydsYWJlbCddLAorICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUn
LCAnYXJndW1lbnRzJ10sCisgICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSwK
KyAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSwKKyAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjog
WydpZCcsICdib2R5JywgJ3N1cGVyQ2xhc3MnXSwKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBb
J2lkJywgJ2JvZHknLCAnc3VwZXJDbGFzcyddLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Np
b246IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLAorICAgICAgICBDb250aW51
ZVN0YXRlbWVudDogWydsYWJlbCddLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogW10sCisg
ICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogW10sCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6
IFsnYm9keScsICd0ZXN0J10sCisgICAgICAgIEVtcHR5U3RhdGVtZW50OiBbXSwKKyAgICAgICAg
RXhwcmVzc2lvblN0YXRlbWVudDogWydleHByZXNzaW9uJ10sCisgICAgICAgIEZvclN0YXRlbWVu
dDogWydpbml0JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSwKKyAgICAgICAgRm9ySW5TdGF0
ZW1lbnQ6IFsnbGVmdCcsICdyaWdodCcsICdib2R5J10sCisgICAgICAgIEZvck9mU3RhdGVtZW50
OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9u
OiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwKKyAgICAgICAg
RnVuY3Rpb25FeHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0Jywg
J2JvZHknXSwKKyAgICAgICAgSWRlbnRpZmllcjogW10sCisgICAgICAgIElmU3RhdGVtZW50OiBb
J3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSwKKyAgICAgICAgTGl0ZXJhbDogW10s
CisgICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLAorICAgICAgICBM
b2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIE1lbWJlckV4cHJl
c3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sCisgICAgICAgIE1ldGhvZERlZmluaXRpb246
IFsna2V5JywgJ3ZhbHVlJ10sCisgICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2Fy
Z3VtZW50cyddLAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSwKKyAg
ICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgIFByb2dyYW06IFsn
Ym9keSddLAorICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSwKKyAgICAgICAgUmV0
dXJuU3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjog
WydleHByZXNzaW9ucyddLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFsnZGlzY3JpbWluYW50
JywgJ2Nhc2VzJ10sCisgICAgICAgIFN3aXRjaENhc2U6IFsndGVzdCcsICdjb25zZXF1ZW50J10s
CisgICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSwKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsn
YXJndW1lbnQnXSwKKyAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXJzJywg
J2hhbmRsZXInLCAnZ3VhcmRlZEhhbmRsZXJzJywgJ2ZpbmFsaXplciddLAorICAgICAgICBVbmFy
eUV4cHJlc3Npb246IFsnYXJndW1lbnQnXSwKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydh
cmd1bWVudCddLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucydd
LAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLAorICAgICAgICBX
aGlsZVN0YXRlbWVudDogWyd0ZXN0JywgJ2JvZHknXSwKKyAgICAgICAgV2l0aFN0YXRlbWVudDog
WydvYmplY3QnLCAnYm9keSddLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQn
XQorICAgIH07CisKKyAgICAvLyB1bmlxdWUgaWQKKyAgICBCUkVBSyA9IHt9OworICAgIFNLSVAg
PSB7fTsKKworICAgIFZpc2l0b3JPcHRpb24gPSB7CisgICAgICAgIEJyZWFrOiBCUkVBSywKKyAg
ICAgICAgU2tpcDogU0tJUAorICAgIH07CisKKyAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50
LCBrZXkpIHsKKyAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHRoaXMua2V5
ID0ga2V5OworICAgIH0KKworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0
aW9uIHJlcGxhY2Uobm9kZSkgeworICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2Rl
OworICAgIH07CisKKyAgICBmdW5jdGlvbiBFbGVtZW50KG5vZGUsIHBhdGgsIHdyYXAsIHJlZikg
eworICAgICAgICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICB0aGlzLnBhdGggPSBwYXRoOwor
ICAgICAgICB0aGlzLndyYXAgPSB3cmFwOworICAgICAgICB0aGlzLnJlZiA9IHJlZjsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBDb250cm9sbGVyKCkgeyB9CisKKyAgICAvLyBBUEk6CisgICAgLy8g
cmV0dXJuIHByb3BlcnR5IHBhdGggYXJyYXkgZnJvbSByb290IHRvIGN1cnJlbnQgbm9kZQorICAg
IENvbnRyb2xsZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkgeworICAgICAgICB2
YXIgaSwgaXosIGosIGp6LCByZXN1bHQsIGVsZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gYWRk
VG9QYXRoKHJlc3VsdCwgcGF0aCkgeworICAgICAgICAgICAgaWYgKGlzQXJyYXkocGF0aCkpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqeiA9IHBhdGgubGVuZ3RoOyBqIDwgano7ICsr
aikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoW2pdKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5w
dXNoKHBhdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcm9vdCBu
b2RlCisgICAgICAgIGlmICghdGhpcy5fX2N1cnJlbnQucGF0aCkgeworICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVs
LCBzZWNvbmQgbm9kZSBpcyByb290IGVsZW1lbnQKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAg
ICAgIGZvciAoaSA9IDIsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytp
KSB7CisgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5fX2xlYXZlbGlzdFtpXTsKKyAgICAgICAg
ICAgIGFkZFRvUGF0aChyZXN1bHQsIGVsZW1lbnQucGF0aCk7CisgICAgICAgIH0KKyAgICAgICAg
YWRkVG9QYXRoKHJlc3VsdCwgdGhpcy5fX2N1cnJlbnQucGF0aCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyByZXR1cm4gYXJyYXkgb2YgcGFy
ZW50IGVsZW1lbnRzCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUucGFyZW50cyA9IGZ1bmN0aW9u
IHBhcmVudHMoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVzdWx0OworCisgICAgICAgIC8vIGZp
cnN0IG5vZGUgaXMgc2VudGluZWwKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
aSA9IDEsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICByZXN1bHQucHVzaCh0aGlzLl9fbGVhdmVsaXN0W2ldLm5vZGUpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8v
IHJldHVybiBjdXJyZW50IG5vZGUKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jdXJyZW50ID0g
ZnVuY3Rpb24gY3VycmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19jdXJyZW50Lm5vZGU7
CisgICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9fZXhlY3V0ZSA9IGZ1bmN0aW9u
IF9fZXhlY3V0ZShjYWxsYmFjaywgZWxlbWVudCkgeworICAgICAgICB2YXIgcHJldmlvdXMsIHJl
c3VsdDsKKworICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgcHJldmlvdXMg
ID0gdGhpcy5fX2N1cnJlbnQ7CisgICAgICAgIHRoaXMuX19jdXJyZW50ID0gZWxlbWVudDsKKyAg
ICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBjYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQubm9kZSwgdGhpcy5f
X2xlYXZlbGlzdFt0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aCAtIDFdLm5vZGUpOworICAgICAgICB9
CisgICAgICAgIHRoaXMuX19jdXJyZW50ID0gcHJldmlvdXM7CisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIG5vdGlmeSBjb250cm9sIHNraXAg
LyBicmVhaworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlm
eShmbGFnKSB7CisgICAgICAgIHRoaXMuX19zdGF0ZSA9IGZsYWc7CisgICAgfTsKKworICAgIC8v
IEFQSToKKyAgICAvLyBza2lwIGNoaWxkIG5vZGVzIG9mIGN1cnJlbnQgbm9kZQorICAgIENvbnRy
b2xsZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubm90aWZ5
KFNLSVApOworICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gYnJlYWsgdHJhdmVyc2Fscwor
ICAgIENvbnRyb2xsZXIucHJvdG90eXBlWydicmVhayddID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLm5vdGlmeShCUkVBSyk7CisgICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBl
Ll9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdGhpcy52
aXNpdG9yID0gdmlzaXRvcjsKKyAgICAgICAgdGhpcy5yb290ID0gcm9vdDsKKyAgICAgICAgdGhp
cy5fX3dvcmtsaXN0ID0gW107CisgICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTsKKyAgICAg
ICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsOwor
ICAgIH07CisKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRy
YXZlcnNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAg
ICAgbGVhdmVsaXN0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIG5vZGUsCisg
ICAgICAgICAgICBub2RlVHlwZSwKKyAgICAgICAgICAgIHJldCwKKyAgICAgICAgICAgIGtleSwK
KyAgICAgICAgICAgIGN1cnJlbnQsCisgICAgICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAg
IGNhbmRpZGF0ZXMsCisgICAgICAgICAgICBjYW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5l
bDsKKworICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTsKKworICAgICAg
ICBzZW50aW5lbCA9IHt9OworCisgICAgICAgIC8vIHJlZmVyZW5jZQorICAgICAgICB3b3JrbGlz
dCA9IHRoaXMuX193b3JrbGlzdDsKKyAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlz
dDsKKworICAgICAgICAvLyBpbml0aWFsaXplCisgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVs
ZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpOworICAgICAgICBsZWF2ZWxpc3QucHVzaChu
ZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7CisKKyAgICAgICAgd2hpbGUgKHdv
cmtsaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOwor
CisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpOworCisgICAgICAgICAgICAgICAgcmV0ID0gdGhp
cy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHsK
KworICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVs
ZW1lbnQpOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwg
cmV0ID09PSBCUkVBSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAg
ICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBu
b2RlID0gZWxlbWVudC5ub2RlOworICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53
cmFwIHx8IG5vZGUudHlwZTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktl
eXNbbm9kZVR5cGVdOworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVu
Z3RoOworICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07CisgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFj
YW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQo
Y2FuZGlkYXRlLCBrZXksIG51bGwsIG51bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1
cnJlbnQyIC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlk
YXRlW2N1cnJlbnQyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChu
b2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRh
eC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGNhbmRpZGF0ZXNbY3VycmVudF0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2Fu
ZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJl
bnQyXSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJv
b3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVs
aXN0LAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIG5vZGVUeXBlLAorICAgICAgICAg
ICAgdGFyZ2V0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIGN1cnJlbnQsCisg
ICAgICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMsCisgICAgICAgICAg
ICBjYW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5lbCwKKyAgICAgICAgICAgIG91dGVyLAor
ICAgICAgICAgICAga2V5OworCisgICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0
b3IpOworCisgICAgICAgIHNlbnRpbmVsID0ge307CisKKyAgICAgICAgLy8gcmVmZXJlbmNlCisg
ICAgICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0OworICAgICAgICBsZWF2ZWxpc3QgPSB0
aGlzLl9fbGVhdmVsaXN0OworCisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgb3V0ZXIg
PSB7CisgICAgICAgICAgICByb290OiByb290CisgICAgICAgIH07CisgICAgICAgIGVsZW1lbnQg
PSBuZXcgRWxlbWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9v
dCcpKTsKKyAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgbGVhdmVsaXN0
LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkgeworICAg
ICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAgICAgICBpZiAoZWxl
bWVudCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0
LnBvcCgpOworCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRv
ci5sZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBs
YWNlZCB3aXRoIG51bGwsCisgICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2Vl
biB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZQorICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJ
UCkgeworICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlCisgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFL
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7CisK
KyAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCwKKyAgICAgICAg
ICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMg
cGxhY2UKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09
IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCkgeworICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UK
KyAgICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5ub2RlID0gdGFyZ2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIG5vZGUgbWF5IGJlIG51bGwKKyAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7
CisgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAg
ICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKHRoaXMu
X19zdGF0ZSA9PT0gU0tJUCB8fCB0YXJnZXQgPT09IFNLSVApIHsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50
LndyYXAgfHwgbm9kZS50eXBlOworICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JLZXlz
W25vZGVUeXBlXTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOwor
ICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAg
ICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9
IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzQXJyYXkoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBuZXcgUmVmZXJlbmNlKG5v
ZGUsIGtleSkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAg
ICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gJiYgJ3Byb3BlcnRpZXMn
ID09PSBjYW5kaWRhdGVzW2N1cnJlbnRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAn
UHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBu
ZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5l
dyBSZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dGVy
LnJvb3Q7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHsK
KyAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpOworICAgICAgICByZXR1
cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBu
ZXcgQ29udHJvbGxlcigpOworICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3Qs
IHZpc2l0b3IpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21t
ZW50LCB0b2tlbnMpIHsKKyAgICAgICAgdmFyIHRhcmdldDsKKworICAgICAgICB0YXJnZXQgPSB1
cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdOworICAgICAgICB9KTsKKwor
ICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVu
dC5yYW5nZVsxXV07CisKKyAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkgewor
ICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFu
Z2VbMF07CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXQgLT0gMTsKKyAgICAgICAgaWYgKHRh
cmdldCA+PSAwKSB7CisgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tl
bnNbdGFyZ2V0XS5yYW5nZVsxXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21tZW50
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29t
bWVudHMsIHRva2VucykgeworICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0
ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy4KKyAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNv
bW1lbnQsIGxlbiwgaSwgY3Vyc29yOworCisgICAgICAgIGlmICghdHJlZS5yYW5nZSkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZv
cm1hdGlvbicpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5
LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJworICAgICAg
ICBpZiAoIXRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRz
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29t
bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29t
bWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAg
ICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07CisgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJlZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
aSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsK
KyAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHBy
b3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
aXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGN1
cnNvciA9IDA7CisgICAgICAgIHRyYXZlcnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGVudGVyOiBm
dW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworCisgICAgICAg
ICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVsw
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0
IG9mIG93bmVkIG5vZGUKKyAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNv
cl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGN1cnNvciA9IDA7CisgICAgICAgIHRyYXZl
cnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICAgICAgICAgIHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8
IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVu
dHNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21t
ZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFu
Z2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNo
KGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNv
ciwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGUKKyAgICAg
ICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+
IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRp
b24uU2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
CisgICAgICAgIHJldHVybiB0cmVlOworICAgIH0KKworICAgIGV4cG9ydHMudmVyc2lvbiA9ICcx
LjUuMS1kZXYnOworICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4OworICAgIGV4cG9ydHMudHJh
dmVyc2UgPSB0cmF2ZXJzZTsKKyAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlOworICAgIGV4
cG9ydHMuYXR0YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50czsKKyAgICBleHBvcnRzLlZpc2l0
b3JLZXlzID0gVmlzaXRvcktleXM7CisgICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRv
ck9wdGlvbjsKKyAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyOworfSkpOworLyog
dmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7fV0sODpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIFRvT2JqZWN0
KHZhbCkgeworCWlmICh2YWwgPT0gbnVsbCkgeworCQl0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmpl
Y3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpOworCX0K
KworCXJldHVybiBPYmplY3QodmFsKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNz
aWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworCXZhciBwZW5kaW5nRXhjZXB0aW9u
OworCXZhciBmcm9tOworCXZhciBrZXlzOworCXZhciB0byA9IFRvT2JqZWN0KHRhcmdldCk7CisK
Kwlmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworCQlmcm9tID0g
YXJndW1lbnRzW3NdOworCQlrZXlzID0gT2JqZWN0LmtleXMoT2JqZWN0KGZyb20pKTsKKworCQlm
b3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJdG9b
a2V5c1tpXV0gPSBmcm9tW2tleXNbaV1dOworCQkJfSBjYXRjaCAoZXJyKSB7CisJCQkJaWYgKHBl
bmRpbmdFeGNlcHRpb24gPT09IHVuZGVmaW5lZCkgeworCQkJCQlwZW5kaW5nRXhjZXB0aW9uID0g
ZXJyOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwZW5kaW5nRXhjZXB0aW9uKSB7CisJ
CXRocm93IHBlbmRpbmdFeGNlcHRpb247CisJfQorCisJcmV0dXJuIHRvOworfTsKKworfSx7fV0s
OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgTWFpbiBFU0xpbnQgb2JqZWN0LgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVu
dHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNw
cmltYSIpLAorICAgIGVzdHJhdmVyc2UgPSByZXF1aXJlKCJlc3RyYXZlcnNlIiksCisgICAgZXNj
b3BlID0gcmVxdWlyZSgiZXNjb3BlIiksCisgICAgZW52aXJvbm1lbnRzID0gcmVxdWlyZSgiLi4v
Y29uZi9lbnZpcm9ubWVudHMuanNvbiIpLAorICAgIGFzc2lnbiA9IHJlcXVpcmUoIm9iamVjdC1h
c3NpZ24iKSwKKyAgICBydWxlcyA9IHJlcXVpcmUoIi4vcnVsZXMiKSwKKyAgICB1dGlsID0gcmVx
dWlyZSgiLi91dGlsIiksCisgICAgUnVsZUNvbnRleHQgPSByZXF1aXJlKCIuL3J1bGUtY29udGV4
dCIpLAorICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhlbHBlcnMKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2Z1bmN0aW9uIGVzY2FwZVJlZ0V4cChyeCkgeworICAgIHJldHVybiByeC5yZXBs
YWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7Cit9CisK
Ky8qKgorICogUGFyc2VzIGEgbGlzdCBvZiAibmFtZTpib29sZWFuX3ZhbHVlIiBvci9hbmQgIm5h
bWUiIG9wdGlvbnMgZGl2aWRlZCBieSBjb21tYSBvcgorICogd2hpdGVzcGFjZS4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmpl
Y3R9IFJlc3VsdCBtYXAgb2JqZWN0IG9mIG5hbWVzIGFuZCBib29sZWFuIHZhbHVlcworICovCitm
dW5jdGlvbiBwYXJzZUJvb2xlYW5Db25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307
CisgICAgLy8gQ29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgOiB0byBtYWtlIHBhcnNpbmcgZWFz
aWVyCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKjpccyovZywgIjoiKTsKKyAgICAv
LyBDb2xsYXBzZSB3aGl0ZXNwYWNlIGFyb3VuZCAsCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxh
Y2UoL1xzKixccyovZywgIiwiKTsKKyAgICBzdHJpbmcuc3BsaXQoL1xzfCwrLykuZm9yRWFjaChm
dW5jdGlvbihuYW1lKSB7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHZhciBwb3MgPSBuYW1lLmluZGV4T2YoIjoiKSwKKyAgICAg
ICAgICAgIHZhbHVlOworICAgICAgICBpZiAocG9zICE9PSAtMSkgeworICAgICAgICAgICAgdmFs
dWUgPSBuYW1lLnN1YnN0cmluZyhwb3MgKyAxLCBuYW1lLmxlbmd0aCk7CisgICAgICAgICAgICBu
YW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1z
W25hbWVdID0gKHZhbHVlID09PSAidHJ1ZSIpOworCisgICAgfSk7CisgICAgcmV0dXJuIGl0ZW1z
OworfQorCisvKioKKyAqIFBhcnNlcyBhIEpTT04tbGlrZSBjb25maWcuCisgKiBAcGFyYW0ge3N0
cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBS
ZXN1bHQgbWFwIG9iamVjdAorICovCitmdW5jdGlvbiBwYXJzZUpzb25Db25maWcoc3RyaW5nKSB7
CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyhbYS16
MC05XC1cL10rKTovZywgIlwiJDFcIjoiKS5yZXBsYWNlKC8oXF18WzAtOV0pXHMrKD89IikvLCAi
JDEsIik7CisgICAgdHJ5IHsKKyAgICAgICAgaXRlbXMgPSBKU09OLnBhcnNlKCJ7IiArIHN0cmlu
ZyArICJ9Iik7CisgICAgfSBjYXRjaChlKSB7IH0KKworICAgIHJldHVybiBpdGVtczsKK30KKwor
LyoqCisgKiBQYXJzZXMgYSBjb25maWcgb2YgdmFsdWVzIHNlcGFyYXRlZCBieSBjb21tYS4KKyAq
IEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5z
IHtPYmplY3R9IFJlc3VsdCBtYXAgb2YgdmFsdWVzIGFuZCB0cnVlIHZhbHVlcworICovCitmdW5j
dGlvbiBwYXJzZUxpc3RDb25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAg
Ly8gQ29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgLAorICAgIHN0cmluZyA9IHN0cmluZy5yZXBs
YWNlKC9ccyosXHMqL2csICIsIik7CisgICAgc3RyaW5nLnNwbGl0KC8sKy8pLmZvckVhY2goZnVu
Y3Rpb24obmFtZSkgeworICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7CisgICAgICAgIGlmICgh
bmFtZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGl0ZW1zW25h
bWVdID0gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKKy8qKgorICogQHBh
cmFtIHtTY29wZX0gc2NvcGUgVGhlIHNjb3BlIG9iamVjdCB0byBjaGVjay4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBsb29rIHVwLgorICogQHJl
dHVybnMge1ZhcmlhYmxlfSBUaGUgdmFyaWFibGUgb2JqZWN0IGlmIGZvdW5kIG9yIG51bGwgaWYg
bm90LgorICovCitmdW5jdGlvbiBnZXRWYXJpYWJsZShzY29wZSwgbmFtZSkgeworICAgIHZhciB2
YXJpYWJsZSA9IG51bGw7CisgICAgc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odikgewor
ICAgICAgICBpZiAodi5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHY7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfSk7CisgICAgcmV0dXJuIHZhcmlhYmxl
OworfQorCisvKioKKyAqIEVuc3VyZXMgdGhhdCB2YXJpYWJsZXMgcmVwcmVzZW50aW5nIGJ1aWx0
LWluIHByb3BlcnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QsCisgKiBhbmQgYW55IGdsb2JhbHMg
ZGVjbGFyZWQgYnkgc3BlY2lhbCBibG9jayBjb21tZW50cywgYXJlIHByZXNlbnQgaW4gdGhlIGds
b2JhbAorICogc2NvcGUuCisgKiBAcGFyYW0ge0FTVE5vZGV9IHByb2dyYW0gVGhlIHRvcCBub2Rl
IG9mIHRoZSBBU1QuCisgKiBAcGFyYW0ge1Njb3BlfSBnbG9iYWxTY29wZSBUaGUgZ2xvYmFsIHNj
b3BlLgorICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgZXhpc3RpbmcgY29uZmlndXJhdGlv
biBkYXRhLgorICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGFkZERlY2xhcmVkR2xv
YmFscyhwcm9ncmFtLCBnbG9iYWxTY29wZSwgY29uZmlnKSB7CisgICAgdmFyIGRlY2xhcmVkR2xv
YmFscyA9IHt9LAorICAgICAgICBleHBsaWNpdEdsb2JhbHMgPSB7fSwKKyAgICAgICAgYnVpbHRp
biA9IGVudmlyb25tZW50cy5idWlsdGluOworCisgICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywg
YnVpbHRpbik7CisKKyAgICBPYmplY3Qua2V5cyhjb25maWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9u
IChuYW1lKSB7CisgICAgICAgIGlmIChjb25maWcuZW52W25hbWVdKSB7CisgICAgICAgICAgICB2
YXIgZW52aXJvbm1lbnRHbG9iYWxzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50
c1tuYW1lXS5nbG9iYWxzOworICAgICAgICAgICAgaWYgKGVudmlyb25tZW50R2xvYmFscykgewor
ICAgICAgICAgICAgICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMsIGVudmlyb25tZW50R2xvYmFs
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2lnbihkZWNs
YXJlZEdsb2JhbHMsIGNvbmZpZy5nbG9iYWxzKTsKKyAgICBhc3NpZ24oZXhwbGljaXRHbG9iYWxz
LCBjb25maWcuYXN0R2xvYmFscyk7CisKKyAgICBPYmplY3Qua2V5cyhkZWNsYXJlZEdsb2JhbHMp
LmZvckVhY2goZnVuY3Rpb24obmFtZSkgeworICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXRWYXJp
YWJsZShnbG9iYWxTY29wZSwgbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUpIHsKKyAgICAg
ICAgICAgIHZhcmlhYmxlID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBnbG9iYWxTY29wZSk7
CisgICAgICAgICAgICB2YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9IGZhbHNlOworICAg
ICAgICAgICAgZ2xvYmFsU2NvcGUudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICB9
CisgICAgICAgIHZhcmlhYmxlLndyaXRlYWJsZSA9IGRlY2xhcmVkR2xvYmFsc1tuYW1lXTsKKyAg
ICB9KTsKKworICAgIE9iamVjdC5rZXlzKGV4cGxpY2l0R2xvYmFscykuZm9yRWFjaChmdW5jdGlv
bihuYW1lKSB7CisgICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxlKGdsb2JhbFNjb3Bl
LCBuYW1lKTsKKyAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgdmFyaWFibGUg
PSBuZXcgZXNjb3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZh
cmlhYmxlLmVzbGludEV4cGxpY2l0R2xvYmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsb2JhbFNj
b3BlLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICB2YXJpYWJs
ZS53cml0ZWFibGUgPSBleHBsaWNpdEdsb2JhbHNbbmFtZV07CisgICAgfSk7Cit9CisKKy8qKgor
ICogQWRkIGRhdGEgdG8gcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSByZXBvcnRp
bmcgZm9yIGxpc3Qgb2YgcnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAq
IEBwYXJhbSAge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29u
ZmlndXJhdGlvbgorICogQHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAor
ICogQHBhcmFtICB7c3RyaW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2
b2lkfQorICovCitmdW5jdGlvbiBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgc3Rh
cnQsIHJ1bGVzKSB7CisKKyAgICBpZiAocnVsZXMubGVuZ3RoKSB7CisgICAgICAgIHJ1bGVzLmZv
ckVhY2goZnVuY3Rpb24ocnVsZSkgeworICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2go
eworICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IG51
bGwsCisgICAgICAgICAgICAgICAgcnVsZTogcnVsZQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcG9ydGluZ0NvbmZpZy5wdXNoKHsKKyAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogbnVsbCwKKyAgICAgICAgICAg
IHJ1bGU6IG51bGwKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvKioKKyAqIEFkZCBkYXRhIHRv
IHJlcG9ydGluZyBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSByZXBvcnRpbmcgZm9yIGxpc3Qgb2Yg
cnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAge09iamVj
dFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlvbgorICog
QHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFtICB7c3Ry
aW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5j
dGlvbiBlbmFibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwgcnVsZXMpIHsKKyAg
ICB2YXIgaTsKKworICAgIGlmIChydWxlcy5sZW5ndGgpIHsKKyAgICAgICAgcnVsZXMuZm9yRWFj
aChmdW5jdGlvbihydWxlKSB7CisgICAgICAgICAgICBmb3IgKGkgPSByZXBvcnRpbmdDb25maWcu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcG9ydGlu
Z0NvbmZpZ1tpXS5lbmQgJiYgcmVwb3J0aW5nQ29uZmlnW2ldLnJ1bGUgPT09IHJ1bGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBmaW5kIGFsbCBwcmV2aW91cyBk
aXNhYmxlZCBsb2NhdGlvbnMgaWYgdGhleSB3YXMgc3RhcnRlZCBhcyBsaXN0IG9mIHJ1bGVzCisg
ICAgICAgIHZhciBwcmV2U3RhcnQ7CisgICAgICAgIGZvciAoaSA9IHJlcG9ydGluZ0NvbmZpZy5s
ZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHByZXZTdGFydCAmJiBw
cmV2U3RhcnQgIT09IHJlcG9ydGluZ0NvbmZpZ1tpXS5zdGFydCkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZp
Z1tpXS5lbmQpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRpbmdDb25maWdbaV0uZW5kID0gc3Rh
cnQ7CisgICAgICAgICAgICAgICAgcHJldlN0YXJ0ID0gcmVwb3J0aW5nQ29uZmlnW2ldLnN0YXJ0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKKy8qKgorICogUGFyc2Vz
IGNvbW1lbnRzIGluIGZpbGUgdG8gZXh0cmFjdCBmaWxlLXNwZWNpZmljIGNvbmZpZyBvZiBydWxl
cywgZ2xvYmFscworICogYW5kIGVudmlyb25tZW50cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBnbG9i
YWwgY29uZmlnOyBhbHNvIGNvZGUgYmxvY2tzCisgKiB3aGVyZSByZXBvcnRpbmcgaXMgZGlzYWJs
ZWQgb3IgZW5hYmxlZCBhbmQgbWVyZ2VzIHRoZW0gd2l0aCByZXBvcnRpbmcgY29uZmlnLgorICog
QHBhcmFtIHtBU1ROb2RlfSBhc3QgVGhlIHRvcCBub2RlIG9mIHRoZSBBU1QuCisgKiBAcGFyYW0g
e09iamVjdH0gY29uZmlnIFRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIGRhdGEuCisgKiBAcGFy
YW0ge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgVGhlIGV4aXN0aW5nIHJlcG9ydGluZyBjb25m
aWd1cmF0aW9uIGRhdGEuCisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gbW9kaWZ5
Q29uZmlnc0Zyb21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29uZmlnKSB7CisKKyAg
ICB2YXIgY29tbWVudENvbmZpZyA9IHsKKyAgICAgICAgYXN0R2xvYmFsczoge30sCisgICAgICAg
IHJ1bGVzOiB7fSwKKyAgICAgICAgZW52OiB7fQorICAgIH07CisgICAgdmFyIGNvbW1lbnRSdWxl
cyA9IHt9OworCisgICAgYXN0LmNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkgewor
ICAgICAgICBpZiAoY29tbWVudC50eXBlID09PSAiQmxvY2siKSB7CisKKyAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IGNvbW1lbnQudmFsdWUudHJpbSgpOworICAgICAgICAgICAgdmFyIG1hdGNoID0g
L14oZXNsaW50LVx3K3xlc2xpbnR8Z2xvYmFscz8pKFxzfCQpLy5leGVjKHZhbHVlKTsKKworICAg
ICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJz
dHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgpOworCisgICAgICAgICAgICAgICAg
c3dpdGNoIChtYXRjaFsxXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJnbG9iYWxzIjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ2xvYmFsIjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHV0aWwubWl4aW4oY29tbWVudENvbmZpZy5hc3RHbG9iYWxzLCBwYXJzZUJvb2xlYW5Db25m
aWcodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgImVzbGludC1lbnYiOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRp
bC5taXhpbihjb21tZW50Q29uZmlnLmVudiwgcGFyc2VMaXN0Q29uZmlnKHZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJl
c2xpbnQtZGlzYWJsZSI6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmVwb3J0aW5n
KHJlcG9ydGluZ0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQsIE9iamVjdC5rZXlzKHBhcnNlTGlz
dENvbmZpZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgImVzbGludC1lbmFibGUiOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5hYmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQs
IE9iamVjdC5rZXlzKHBhcnNlTGlzdENvbmZpZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGludCI6CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBwYXJzZUpzb25Db25maWcodmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbXMpLmZvckVhY2goZnVuY3Rp
b24obmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlVmFsdWUgPSBp
dGVtc1tuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVW
YWx1ZSA9PT0gIm51bWJlciIgfHwgKEFycmF5LmlzQXJyYXkocnVsZVZhbHVlKSAmJiB0eXBlb2Yg
cnVsZVZhbHVlWzBdID09PSAibnVtYmVyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWVudFJ1bGVzW25hbWVdID0gcnVsZVZhbHVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAg
Ly8gYXBwbHkgZW52aXJvbm1lbnQgcnVsZXMgYmVmb3JlIHVzZXIgcnVsZXMKKyAgICBPYmplY3Qu
a2V5cyhjb21tZW50Q29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeworICAgICAg
ICB2YXIgZW52aXJvbm1lbnRSdWxlcyA9IGVudmlyb25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVu
dHNbbmFtZV0ucnVsZXM7CisgICAgICAgIGlmIChjb21tZW50Q29uZmlnLmVudltuYW1lXSAmJiBl
bnZpcm9ubWVudFJ1bGVzKSB7CisgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRDb25maWcu
cnVsZXMsIGVudmlyb25tZW50UnVsZXMpOworICAgICAgICB9CisgICAgfSk7CisgICAgdXRpbC5t
aXhpbihjb21tZW50Q29uZmlnLnJ1bGVzLCBjb21tZW50UnVsZXMpOworCisgICAgdXRpbC5tZXJn
ZUNvbmZpZ3MoY29uZmlnLCBjb21tZW50Q29uZmlnKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBt
ZXNzYWdlIG9mIHJ1bGUgd2l0aCBydWxlSWQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gbG9jYXRpb24K
KyAqIEBwYXJhbSAge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgIENvbGxlY3Rpb24gb2YgaWdu
b3JlIHJlY29yZHMKKyAqIEBwYXJhbSAge3N0cmluZ30gcnVsZUlkICAgSWQgb2YgcnVsZQorICog
QHBhcmFtICB7T2JqZWN0fSBsb2NhdGlvbiBMb2NhdGlvbiBvZiBtZXNzYWdlCisgKiBAcmV0dXJu
cyB7Ym9vbGVhbn0gICAgICAgICAgVHJ1ZSBpZiBtZXNzYWdlIHNob3VsZCBiZSBpZ25vcmVkLCBm
YWxzZSBvdGhlcndpc2UKKyAqLworZnVuY3Rpb24gaXNEaXNhYmxlZEJ5UmVwb3J0aW5nQ29uZmln
KHJlcG9ydGluZ0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikgeworCisgICAgZm9yICh2YXIgaSA9
IDAsIGMgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoOyBpIDwgYzsgaSsrKSB7CisKKyAgICAgICAg
dmFyIGlnbm9yZSA9IHJlcG9ydGluZ0NvbmZpZ1tpXTsKKyAgICAgICAgaWYgKCghaWdub3JlLnJ1
bGUgfHwgaWdub3JlLnJ1bGUgPT09IHJ1bGVJZCkgJiYKKyAgICAgICAgICAgIChsb2NhdGlvbi5s
aW5lID4gaWdub3JlLnN0YXJ0LmxpbmUgfHwgKGxvY2F0aW9uLmxpbmUgPT09IGlnbm9yZS5zdGFy
dC5saW5lICYmIGxvY2F0aW9uLmNvbHVtbiA+PSBpZ25vcmUuc3RhcnQuY29sdW1uKSkgJiYKKyAg
ICAgICAgICAgICghaWdub3JlLmVuZCB8fCAobG9jYXRpb24ubGluZSA8IGlnbm9yZS5lbmQubGlu
ZSB8fCAobG9jYXRpb24ubGluZSA9PT0gaWdub3JlLmVuZC5saW5lICYmIGxvY2F0aW9uLmNvbHVt
biA8PSBpZ25vcmUuZW5kLmNvbHVtbikpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFBy
b2Nlc3MgaW5pdGlhbCBjb25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZCBieSBmaWxlIGNv
bW1lbnQgY29uZmlnCisgKiBAcGFyYW0gIHtPYmplY3R9IGNvbmZpZyBJbml0aWFsIGNvbmZpZwor
ICogQHJldHVybnMge09iamVjdH0gICAgICAgIFByb2Nlc3NlZCBjb25maWcKKyAqLworZnVuY3Rp
b24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHsKKworICAgIGNvbmZpZy5nbG9iYWxzID0gY29uZmln
Lmdsb2JhbHMgfHwgY29uZmlnLmdsb2JhbCB8fCB7fTsKKyAgICBkZWxldGUgY29uZmlnLmdsb2Jh
bDsKKworICAgIHZhciBjb3BpZWRSdWxlcyA9IHt9OworICAgIGlmICh0eXBlb2YgY29uZmlnLnJ1
bGVzID09PSAib2JqZWN0IikgeworICAgICAgICBPYmplY3Qua2V5cyhjb25maWcucnVsZXMpLmZv
ckVhY2goZnVuY3Rpb24oaykgeworICAgICAgICAgICAgdmFyIHJ1bGUgPSBjb25maWcucnVsZXNb
a107CisgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlKSkgeworICAgICAgICAgICAg
ICAgIGNvcGllZFJ1bGVzW2tdID0gcnVsZS5zbGljZSgpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBjb3BpZWRSdWxlc1trXSA9IHJ1bGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIHJ1bGVzOiBjb3BpZWRS
dWxlcywKKyAgICAgICAgZ2xvYmFsczogdXRpbC5tZXJnZUNvbmZpZ3Moe30sIGNvbmZpZy5nbG9i
YWxzKSwKKyAgICAgICAgZW52OiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmVudiB8fCB7
fSksCisgICAgICAgIHNldHRpbmdzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLnNldHRp
bmdzIHx8IHt9KQorICAgIH07Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQdWJs
aWMgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIE9iamVjdCB0
aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgSmF2YVNjcmlwdCB0ZXh0CisgKiBAbmFt
ZSBlc2xpbnQKKyAqLworbW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIg
YXBpID0gT2JqZWN0LmNyZWF0ZShuZXcgRXZlbnRFbWl0dGVyKCkpLAorICAgICAgICBtZXNzYWdl
cyA9IFtdLAorICAgICAgICBjdXJyZW50VGV4dCA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUZXh0
TGluZXMgPSBbXSwKKyAgICAgICAgY3VycmVudENvbmZpZyA9IG51bGwsCisgICAgICAgIGN1cnJl
bnRUb2tlbnMgPSBudWxsLAorICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbCwKKyAgICAgICAg
c2NvcGVNYXAgPSBudWxsLAorICAgICAgICBjdXJyZW50RmlsZW5hbWUgPSBudWxsLAorICAgICAg
ICBjb250cm9sbGVyID0gbnVsbCwKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW10sCisgICAg
ICAgIGNvbW1lbnRMb2NzRW50ZXIgPSBbXSwKKyAgICAgICAgY29tbWVudExvY3NFeGl0ID0gW107
CisKKyAgICAvKioKKyAgICAgKiBQYXJzZXMgdGV4dCBpbnRvIGFuIEFTVC4gTW92ZWQgb3V0IGhl
cmUgYmVjYXVzZSB0aGUgdHJ5LWNhdGNoIHByZXZlbnRzCisgICAgICogb3B0aW1pemF0aW9uIG9m
IGZ1bmN0aW9ucywgc28gaXQncyBiZXN0IHRvIGtlZXAgdGhlIHRyeS1jYXRjaCBhcyBpc29sYXRl
ZAorICAgICAqIGFzIHBvc3NpYmxlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRl
eHQgdG8gcGFyc2UuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBBU1QgaWYgc3VjY2Vz
c2Z1bCBvciBudWxsIGlmIG5vdC4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIHBhcnNlKHRleHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIHBhcnNp
bmcgZXJyb3JzIGZpcnN0LiBJZiB0aGVyZSdzIGEgcGFyc2luZyBlcnJvciwgbm90aGluZworICAg
ICAgICAgKiBlbHNlIGNhbiBoYXBwZW4uIEhvd2V2ZXIsIGEgcGFyc2luZyBlcnJvciBkb2VzIG5v
dCB0aHJvdyBhbiBlcnJvcgorICAgICAgICAgKiBmcm9tIHRoaXMgbWV0aG9kIC0gaXQncyBqdXN0
IGNvbnNpZGVyZWQgYSBmYXRhbCBlcnJvciBtZXNzYWdlLCBhCisgICAgICAgICAqIHByb2JsZW0g
dGhhdCBFU0xpbnQgaWRlbnRpZmllZCBqdXN0IGxpa2UgYW55IG90aGVyLgorICAgICAgICAgKi8K
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBlc3ByaW1hLnBhcnNlKHRleHQsIHsK
KyAgICAgICAgICAgICAgICBsb2M6IHRydWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IHRydWUs
CisgICAgICAgICAgICAgICAgcmF3OiB0cnVlLAorICAgICAgICAgICAgICAgIHRva2VuczogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBjb21tZW50OiB0cnVlLAorICAgICAgICAgICAgICAgIGF0dGFj
aENvbW1lbnQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChleCkgewor
CisgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmYXRhbDogdHJ1
ZSwKKyAgICAgICAgICAgICAgICBzZXZlcml0eTogMiwKKworICAgICAgICAgICAgICAgIC8vIG1l
c3NhZ2VzIGNvbWUgYXMgIkxpbmUgWDogVW5leHBlY3RlZCB0b2tlbiBmb28iLCBzbyBzdHJpcCBv
ZmYgbGVhZGluZyBwYXJ0CisgICAgICAgICAgICAgICAgbWVzc2FnZTogZXgubWVzc2FnZS5zdWJz
dHJpbmcoZXgubWVzc2FnZS5pbmRleE9mKCI6IikgKyAxKS50cmltKCksCisKKyAgICAgICAgICAg
ICAgICBsaW5lOiBleC5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogZXguY29s
dW1uCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBjb2xsZWN0aW9uIG9mIGNvbW1lbnRz
IHRvIHByZXZlbnQgZG91YmxlIGV2ZW50IGZvciBjb21tZW50IGFzCisgICAgICogbGVhZGluZyBh
bmQgdHJhaWxpbmcsIHRoZW4gZW1pdCBldmVudCBpZiBwYXNzaW5nCisgICAgICogQHBhcmFtIHtB
U1ROb2RlW119IGNvbW1lbnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEBw
YXJhbSB7T2JqZWN0W119IGxvY3MgTGlzdCBvZiBsb2NhdGlvbnMgb2YgcHJldmlvdXMgY29tbWVu
dCBub2RlcworICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgRXZlbnQgbmFtZSBwb3N0
Zml4CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZW1pdENv
bW1lbnRzKGNvbW1lbnRzLCBsb2NzLCBldmVudE5hbWUpIHsKKworICAgICAgICBpZiAoY29tbWVu
dHMubGVuZ3RoKSB7CisgICAgICAgICAgICBjb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgICAgICBpZiAobG9jcy5pbmRleE9mKG5vZGUubG9jKSA+PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxvY3Muc3BsaWNlKGxvY3MuaW5kZXhPZihub2RlLmxvYyksIDEp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvY3MucHVz
aChub2RlLmxvYyk7CisgICAgICAgICAgICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSArIGV2
ZW50TmFtZSwgbm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1p
dCBlbnRlciBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1l
bnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEByZXR1cm5zIHt2b2lkfQor
ICAgICAqLworICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzKSB7CisgICAg
ICAgIGVtaXRDb21tZW50cyhjb21tZW50cywgY29tbWVudExvY3NFbnRlciwgIkNvbW1lbnQiKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBleGl0
IG9mIGNvbW1lbnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29s
bGVjdGlvbiBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICov
CisgICAgZnVuY3Rpb24gZW1pdENvbW1lbnRzRXhpdChjb21tZW50cykgeworICAgICAgICBlbWl0
Q29tbWVudHMoY29tbWVudHMsIGNvbW1lbnRMb2NzRXhpdCwgIkNvbW1lbnQ6ZXhpdCIpOworICAg
IH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgYSBydWxlICgw
IC0gbm9uZSwgMSAtIHdhcm5pbmcsIDIgLSBlcnJvcikKKyAgICAgKiBSZXR1cm5zIDAgaWYgdGhl
IHJ1bGUgY29uZmlnIGlzIG5vdCB2YWxpZCAoYW4gQXJyYXkgb3IgYSBudW1iZXIpCisgICAgICog
QHBhcmFtIHtBcnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1cmF0aW9uCisgICAg
ICogQHJldHVybnMge251bWJlcn0gMCwgMSwgb3IgMiwgaW5kaWNhdGluZyBydWxlIHNldmVyaXR5
CisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0UnVsZVNldmVyaXR5KHJ1bGVDb25maWcpIHsKKyAg
ICAgICAgaWYgKHR5cGVvZiBydWxlQ29uZmlnID09PSAibnVtYmVyIikgeworICAgICAgICAgICAg
cmV0dXJuIHJ1bGVDb25maWc7CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShydWxl
Q29uZmlnKSkgeworICAgICAgICAgICAgcmV0dXJuIHJ1bGVDb25maWdbMF07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q
KgorICAgICAqIEdldCB0aGUgb3B0aW9ucyBmb3IgYSBydWxlIChub3QgaW5jbHVkaW5nIHNldmVy
aXR5KSwgaWYgYW55CisgICAgICogQHBhcmFtIHtBcnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVs
ZSBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVybnMge0FycmF5fSBvZiBydWxlIG9wdGlvbnMs
IGVtcHR5IEFycmF5IGlmIG5vbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSdWxlT3B0aW9u
cyhydWxlQ29uZmlnKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7
CisgICAgICAgICAgICByZXR1cm4gcnVsZUNvbmZpZy5zbGljZSgxKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNl
dCB1bmxpbWl0ZWQgbGlzdGVuZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xp
bnQvaXNzdWVzLzUyNCkKKyAgICBhcGkuc2V0TWF4TGlzdGVuZXJzKDApOworCisgICAgLyoqCisg
ICAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgorICAgICAqIEBy
ZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpOworICAgICAgICBtZXNzYWdlcyA9IFtdOwor
ICAgICAgICBjdXJyZW50Q29uZmlnID0gbnVsbDsKKyAgICAgICAgY3VycmVudFRleHQgPSBudWxs
OworICAgICAgICBjdXJyZW50VGV4dExpbmVzID0gW107CisgICAgICAgIGN1cnJlbnRUb2tlbnMg
PSBudWxsOworICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbDsKKyAgICAgICAgc2NvcGVNYXAg
PSBudWxsOworICAgICAgICBjb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgcmVwb3J0aW5nQ29u
ZmlnID0gW107CisgICAgICAgIGNvbW1lbnRMb2NzRW50ZXIgPSBbXTsKKyAgICAgICAgY29tbWVu
dExvY3NFeGl0ID0gW107CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFZlcmlmaWVzIHRoZSB0
ZXh0IGFnYWluc3QgdGhlIHJ1bGVzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50Lgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBKYXZhU2NyaXB0IHRleHQgdG8gdmVyaWZ5
LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgQW4gb2JqZWN0IHdob3NlIGtleXMgc3Bl
Y2lmeSB0aGUgcnVsZXMgdG8gdXNlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gZmlsZW5hbWUg
VGhlIG9wdGlvbmFsIGZpbGVuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQuCisgICAgICog
ICAgICBJZiB0aGlzIGlzIG5vdCBzZXQsIHRoZSBmaWxlbmFtZSB3aWxsIGRlZmF1bHQgdG8gJzxp
bnB1dD4nIGluIHRoZSBydWxlIGNvbnRleHQuCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2F2
ZVN0YXRlIEluZGljYXRlcyBpZiB0aGUgc3RhdGUgZnJvbSB0aGUgbGFzdCBydW4gc2hvdWxkIGJl
IHNhdmVkLgorICAgICAqICAgICAgTW9zdGx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4K
KyAgICAgKiBAcmV0dXJucyB7T2JqZWN0W119IFRoZSByZXN1bHRzIGFzIGFuIGFycmF5IG9mIG1l
c3NhZ2VzIG9yIG51bGwgaWYgbm8gbWVzc2FnZXMuCisgICAgICovCisgICAgYXBpLnZlcmlmeSA9
IGZ1bmN0aW9uKHRleHQsIGNvbmZpZywgZmlsZW5hbWUsIHNhdmVTdGF0ZSkgeworCisgICAgICAg
IHZhciBhc3Q7CisKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IHBhcnNlZCBmaWxlbmFtZQor
ICAgICAgICBjdXJyZW50RmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgICAgICBpZiAoIXNhdmVT
dGF0ZSkgeworICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAg
YXN0ID0gcGFyc2UodGV4dC5yZXBsYWNlKC9eIyEoW15cclxuXStbXHJcbl0rKS8sICIvLyQxIikp
OworCisgICAgICAgIC8vIGlmIEVzcHJpbWEgZmFpbGVkIHRvIHBhcnNlIHRoZSBmaWxlLCB0aGVy
ZSdzIG5vIHNlbnNlIGluIHNldHRpbmcgdXAgcnVsZXMKKyAgICAgICAgaWYgKGFzdCkgeworICAg
ICAgICAgICAgLy8gcHJvY2VzcyBpbml0aWFsIGNvbmZpZyB0byBtYWtlIGl0IHNhZmUgdG8gZXh0
ZW5kCisgICAgICAgICAgICBjb25maWcgPSBwcmVwYXJlQ29uZmlnKGNvbmZpZyk7CisKKyAgICAg
ICAgICAgIC8vIHBhcnNlIGdsb2JhbCBjb21tZW50cyBhbmQgbW9kaWZ5IGNvbmZpZworICAgICAg
ICAgICAgbW9kaWZ5Q29uZmlnc0Zyb21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29u
ZmlnKTsKKworICAgICAgICAgICAgLy8gZW5hYmxlIGFwcHJvcHJpYXRlIHJ1bGVzCisgICAgICAg
ICAgICBPYmplY3Qua2V5cyhjb25maWcucnVsZXMpLmZpbHRlcihmdW5jdGlvbihrZXkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSA+
IDA7CisgICAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworCisgICAgICAgICAg
ICAgICAgdmFyIHJ1bGVDcmVhdG9yID0gcnVsZXMuZ2V0KGtleSksCisgICAgICAgICAgICAgICAg
ICAgIHNldmVyaXR5ID0gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSwKKyAgICAg
ICAgICAgICAgICAgICAgb3B0aW9ucyA9IGdldFJ1bGVPcHRpb25zKGNvbmZpZy5ydWxlc1trZXld
KSwKKyAgICAgICAgICAgICAgICAgICAgcnVsZTsKKworICAgICAgICAgICAgICAgIGlmIChydWxl
Q3JlYXRvcikgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcnVsZSA9IHJ1bGVDcmVhdG9yKG5ldyBSdWxlQ29udGV4dChrZXksIGFwaSwgc2V2ZXJp
dHksIG9wdGlvbnMsIGNvbmZpZy5zZXR0aW5ncykpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhZGQgYWxsIHRoZSBub2RlIHR5cGVzIGFzIGxpc3RlbmVycworICAgICAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0LmtleXMocnVsZSkuZm9yRWFjaChmdW5jdGlvbihub2RlVHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5vbihub2RlVHlwZSwgcnVsZVtub2RlVHlw
ZV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Lm1lc3NhZ2UgPSAiRXJyb3Ig
d2hpbGUgbG9hZGluZyBydWxlICciICsga2V5ICsgIic6ICIgKyBleC5tZXNzYWdlOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiRGVmaW5pdGlvbiBmb3IgcnVsZSAnIiArIGtleSArICInIHdhcyBub3QgZm91bmQuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHNhdmUg
Y29uZmlnIHNvIHJ1bGVzIGNhbiBhY2Nlc3MgYXMgbmVjZXNzYXJ5CisgICAgICAgICAgICBjdXJy
ZW50Q29uZmlnID0gY29uZmlnOworICAgICAgICAgICAgY3VycmVudFRleHQgPSB0ZXh0OworICAg
ICAgICAgICAgY29udHJvbGxlciA9IG5ldyBlc3RyYXZlcnNlLkNvbnRyb2xsZXIoKTsKKworICAg
ICAgICAgICAgLy8gZ2F0aGVyIGRhdGEgdGhhdCBtYXkgYmUgbmVlZGVkIGJ5IHRoZSBydWxlcwor
ICAgICAgICAgICAgY3VycmVudFNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCwgeyBpZ25vcmVF
dmFsOiB0cnVlIH0pLnNjb3BlczsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElu
ZGV4IHRoZSBzY29wZXMgYnkgdGhlIHN0YXJ0IHJhbmdlIG9mIHRoZWlyIGJsb2NrIGZvciBlZmZp
Y2llbnQKKyAgICAgICAgICAgICAqIGxvb2t1cCBpbiBnZXRTY29wZS4KKyAgICAgICAgICAgICAq
LworICAgICAgICAgICAgc2NvcGVNYXAgPSBbXTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZXMu
Zm9yRWFjaChmdW5jdGlvbiAoc2NvcGUsIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHJh
bmdlID0gc2NvcGUuYmxvY2sucmFuZ2VbMF07CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGlt
ZXMgdHdvIHNjb3BlcyBhcmUgcmV0dXJuZWQgZm9yIGEgZ2l2ZW4gbm9kZS4gVGhpcyBpcworICAg
ICAgICAgICAgICAgIC8vIGhhbmRsZWQgbGF0ZXIgaW4gYSBrbm93biB3YXksIHNvIGp1c3QgZG9u
J3Qgb3ZlcndyaXRlIGhlcmUuCisgICAgICAgICAgICAgICAgaWYgKCFzY29wZU1hcFtyYW5nZV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVNYXBbcmFuZ2VdID0gaW5kZXg7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg
ICAgKiBTcGxpdCB0ZXh0IGhlcmUgaW50byBhcnJheSBvZiBsaW5lcyBzbworICAgICAgICAgICAg
ICogaXQncyBub3QgYmVpbmcgZG9uZSByZXBlYXRlZGx5CisgICAgICAgICAgICAgKiBieSBpbmRp
dmlkdWFsIHJ1bGVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjdXJyZW50VGV4dExp
bmVzID0gY3VycmVudFRleHQuc3BsaXQoL1xyP1xuL2cpOworCisgICAgICAgICAgICAvLyBGcmVl
emluZyBzbyBhcnJheSBpc24ndCBhY2NpZGVudGFsbHkgY2hhbmdlZCBieSBhIHJ1bGUuCisgICAg
ICAgICAgICBPYmplY3QuZnJlZXplKGN1cnJlbnRUZXh0TGluZXMpOworCisgICAgICAgICAgICAv
KiBnZXQgYWxsIHRva2VucyBmcm9tIHRoZSBhc3QgYW5kIHN0b3JlIHRoZW0gYXMgYSBoYXNodGFi
bGUgdG8KKyAgICAgICAgICAgICAqIGltcHJvdmUgdHJhdmVyc2FsIHNwZWVkIHdoZW4gd2FudGlu
ZyB0byBmaW5kIHRva2VucyBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICogbm9kZQorICAgICAg
ICAgICAgICovCisgICAgICAgICAgICBjdXJyZW50VG9rZW5zID0gW107CisgICAgICAgICAgICBh
c3QudG9rZW5zLmZvckVhY2goZnVuY3Rpb24odG9rZW4pIHsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50VG9rZW5zW3Rva2VuLnJhbmdlWzBdXSA9IHRva2VuOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIC8vIGF1Z21lbnQgZ2xvYmFsIHNjb3BlIHdpdGggZGVjbGFyZWQgZ2xvYmFsIHZh
cmlhYmxlcworICAgICAgICAgICAgYWRkRGVjbGFyZWRHbG9iYWxzKGFzdCwgY3VycmVudFNjb3Bl
c1swXSwgY3VycmVudENvbmZpZyk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBF
YWNoIG5vZGUgaGFzIGEgdHlwZSBwcm9wZXJ0eS4gV2hlbmV2ZXIgYSBwYXJ0aWN1bGFyIHR5cGUg
b2Ygbm9kZSBpcyBmb3VuZCwKKyAgICAgICAgICAgICAqIGFuIGV2ZW50IGlzIGZpcmVkLiBUaGlz
IGFsbG93cyBhbnkgbGlzdGVuZXJzIHRvIGF1dG9tYXRpY2FsbHkgYmUgaW5mb3JtZWQKKyAgICAg
ICAgICAgICAqIHRoYXQgdGhpcyB0eXBlIG9mIG5vZGUgaGFzIGJlZW4gZm91bmQgYW5kIHJlYWN0
IGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjb250cm9sbGVyLnRy
YXZlcnNlKGFzdCwgeworICAgICAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJl
bnQpIHsKKworICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudHMgPSBhcGkuZ2V0Q29tbWVu
dHMobm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRW50ZXIoY29tbWVu
dHMubGVhZGluZyk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50Owor
ICAgICAgICAgICAgICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUsIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy50cmFpbGluZyk7CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24obm9kZSkgeworCisg
ICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhub2RlKTsK
KworICAgICAgICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzLnRyYWlsaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgIjpleGl0Iiwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMubGVhZGlu
Zyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBtZXNzYWdlczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVwb3J0
cyBhIG1lc3NhZ2UgZnJvbSBvbmUgb2YgdGhlIHJ1bGVzLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBydWxlSWQgVGhlIElEIG9mIHRoZSBydWxlIGNhdXNpbmcgdGhlIG1lc3NhZ2UuCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IHNldmVyaXR5IFRoZSBzZXZlcml0eSBsZXZlbCBvZiB0aGUgcnVsZSBh
cyBjb25maWd1cmVkLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUg
dGhhdCB0aGUgbWVzc2FnZSByZWxhdGVzIHRvLgorICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9j
YXRpb24gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9yIGxpbmUgYW5kIGNvbHVtbgorICAg
ICAqICAgICAgbnVtYmVycy4gSWYgbG9jYXRpb24gaXMgbm90IHByb3ZpZGVkIHRoZSBub2RlJ3Mg
c3RhcnQgbG9jYXRpb24gd2lsbAorICAgICAqICAgICAgYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gbWVzc2FnZSBUaGUgYWN0dWFsIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtPYmpl
Y3R9IG9wdHMgT3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGljaCBwcm9kdWNlcyBhIGZvcm1hdHRl
ZCBtZXNzYWdlCisgICAgICogICAgIHdpdGggc3ltYm9scyBiZWluZyByZXBsYWNlZCBieSB0aGlz
IG9iamVjdCdzIHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBh
cGkucmVwb3J0ID0gZnVuY3Rpb24ocnVsZUlkLCBzZXZlcml0eSwgbm9kZSwgbG9jYXRpb24sIG1l
c3NhZ2UsIG9wdHMpIHsKKworICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAic3RyaW5n
IikgeworICAgICAgICAgICAgb3B0cyA9IG1lc3NhZ2U7CisgICAgICAgICAgICBtZXNzYWdlID0g
bG9jYXRpb247CisgICAgICAgICAgICBsb2NhdGlvbiA9IG5vZGUubG9jLnN0YXJ0OworICAgICAg
ICB9CisKKyAgICAgICAgT2JqZWN0LmtleXMob3B0cyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAo
a2V5KSB7CisgICAgICAgICAgICB2YXIgcnggPSBuZXcgUmVnRXhwKCJ7eyIgKyBlc2NhcGVSZWdF
eHAoa2V5KSArICJ9fSIsICJnIik7CisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBs
YWNlKHJ4LCBvcHRzW2tleV0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoaXNEaXNhYmxl
ZEJ5UmVwb3J0aW5nQ29uZmlnKHJlcG9ydGluZ0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2VzLnB1c2go
eworICAgICAgICAgICAgcnVsZUlkOiBydWxlSWQsCisgICAgICAgICAgICBzZXZlcml0eTogc2V2
ZXJpdHksCisgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgbWVzc2FnZTogbWVz
c2FnZSwKKyAgICAgICAgICAgIGxpbmU6IGxvY2F0aW9uLmxpbmUsCisgICAgICAgICAgICBjb2x1
bW46IGxvY2F0aW9uLmNvbHVtbiwKKyAgICAgICAgICAgIHNvdXJjZTogYXBpLmdldFNvdXJjZShu
b2RlKQorICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc291
cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZT19IG5v
ZGUgVGhlIEFTVCBub2RlIHRvIGdldCB0aGUgdGV4dCBmb3IuCisgICAgICogQHBhcmFtIHtpbnQ9
fSBiZWZvcmVDb3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBub2RlIHRv
IHJldHJpZXZlLgorICAgICAqIEBwYXJhbSB7aW50PX0gYWZ0ZXJDb3VudCBUaGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMg
e3N0cmluZ30gVGhlIHRleHQgcmVwcmVzZW50aW5nIHRoZSBBU1Qgbm9kZS4KKyAgICAgKi8KKyAg
ICBhcGkuZ2V0U291cmNlID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291bnQp
IHsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiAoY3VycmVudFRleHQg
IT09IG51bGwpID8gY3VycmVudFRleHQuc2xpY2Uobm9kZS5yYW5nZVswXSAtIChiZWZvcmVDb3Vu
dCB8fCAwKSwKKyAgICAgICAgICAgICAgICBub2RlLnJhbmdlWzFdICsgKGFmdGVyQ291bnQgfHwg
MCkpIDogbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50
VGV4dDsKKyAgICAgICAgfQorCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVu
dGlyZSBzb3VyY2UgdGV4dCBzcGxpdCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzLgorICAgICAqIEBy
ZXR1cm5zIHtBcnJheX0gVGhlIHNvdXJjZSB0ZXh0IGFzIGFuIGFycmF5IG9mIGxpbmVzLgorICAg
ICAqLworICAgIGFwaS5nZXRTb3VyY2VMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gY3VycmVudFRleHRMaW5lczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhbGwg
Y29tbWVudHMgZm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgdG8gZ2V0IHRoZSBjb21tZW50cyBmb3IuCisgICAgICogQHJldHVybnMg
e09iamVjdH0gVGhlIGxpc3Qgb2YgY29tbWVudHMgaW5kZXhlZCBieSB0aGVpciBwb3NpdGlvbi4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgdmFyIGxlYWRpbmdDb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzIHx8IFtdLAorICAg
ICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXTsK
KworICAgICAgICAvKgorICAgICAgICAgKiBFc3ByaW1hIGFkZHMgYSAiY29tbWVudHMiIGFycmF5
IG9uIFByb2dyYW0gbm9kZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICogbGVhZGluZ0NvbW1lbnRz
L3RyYWlsaW5nQ29tbWVudHMuIENvbW1lbnRzIGFyZSBvbmx5IGxlZnQgaW4gdGhlCisgICAgICAg
ICAqIFByb2dyYW0gbm9kZSBjb21tZW50cyBhcnJheSBpZiB0aGVyZSBpcyBubyBleGVjdXRhYmxl
IGNvZGUuCisgICAgICAgICAqLworICAgICAgICBpZiAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAg
ICAgICAgbGVhZGluZ0NvbW1lbnRzID0gbm9kZS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBsZWFkaW5nOiBsZWFkaW5n
Q29tbWVudHMsCisgICAgICAgICAgICB0cmFpbGluZzogdHJhaWxpbmdDb21tZW50cworICAgICAg
ICB9OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIEpTRG9jIGNvbW1l
bnQgZm9yIGEgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFT
VCBub2RlIHRvIGdldCB0aGUgY29tbWVudCBmb3IuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9
IFRoZSBCbG9ja0NvbW1lbnQgbm9kZSBjb250YWluaW5nIHRoZSBKU0RvYyBmb3IgdGhlCisgICAg
ICogICAgICBnaXZlbiBub2RlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqLworICAgIGFw
aS5nZXRKU0RvY0NvbW1lbnQgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIHBhcmVu
dCA9IG5vZGUucGFyZW50LAorICAgICAgICAgICAgbGluZSA9IG5vZGUubG9jLnN0YXJ0LmxpbmU7
CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEZpbmRzIGEgSlNEb2MgY29tbWVudCBub2RlIGlu
IGFuIGFycmF5IG9mIGNvbW1lbnQgbm9kZXMuCisgICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZVtd
fSBjb21tZW50cyBUaGUgYXJyYXkgb2YgY29tbWVudCBub2RlcyB0byBzZWFyY2guCisgICAgICAg
ICAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSBpZiBmb3VuZCwgbnVsbCBpZiBub3QuCisg
ICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBmaW5kSlNE
b2NDb21tZW50KGNvbW1lbnRzKSB7CisKKyAgICAgICAgICAgIGlmIChjb21tZW50cykgeworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSBjb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbaV0udHlwZSA9PT0gIkJsb2Nr
IiAmJiBjb21tZW50c1tpXS52YWx1ZS5jaGFyQXQoMCkgPT09ICIqIikgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGluZSAtIGNvbW1lbnRzW2ldLmxvYy5lbmQubGluZSA8PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzW2ldOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAg
ICAgY2FzZSAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZp
bmRKU0RvY0NvbW1lbnQobm9kZS5sZWFkaW5nQ29tbWVudHMpOworCisgICAgICAgICAgICBjYXNl
ICJGdW5jdGlvbkV4cHJlc3Npb24iOgorCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC50eXBl
ICE9PSAiQ2FsbEV4cHJlc3Npb24iIHx8IHBhcmVudC5jYWxsZWUgIT09IG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LmxlYWRpbmdDb21tZW50cyAm
JiBwYXJlbnQudHlwZSAhPT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYgcGFyZW50LnR5cGUgIT09
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
ID0gcGFyZW50LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnQgJiYgKHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNsYXJh
dGlvbiIpID8gZmluZEpTRG9jQ29tbWVudChwYXJlbnQubGVhZGluZ0NvbW1lbnRzKSA6IG51bGw7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAor
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYSBudW1iZXIgb2YgdG9rZW5z
IHRoYXQgcHJlY2VkZSBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJh
bSB7aW50fSBbYmVmb3JlQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBu
b2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmpl
Y3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRva2Vuc0JlZm9y
ZSA9IGZ1bmN0aW9uKG5vZGUsIGJlZm9yZUNvdW50KSB7CisgICAgICAgIHZhciBiZWZvcmVUb2tl
bnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVswXSAtIDE7CisgICAgICAgIHdoaWxlIChiZWZv
cmVDb3VudCA+IDAgJiYgY3Vyc29yID49IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9r
ZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICBiZWZvcmVUb2tlbnMudW5zaGlmdChjdXJy
ZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tYmVmb3JlQ291bnQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAtLWN1cnNvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYmVmb3JlVG9rZW5zOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b2tl
biB0aGF0IHByZWNlZGVzIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFt
LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBh
cmFtIHtpbnR9IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGJlZm9yZSB0aGUg
Z2l2ZW4gbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFuIG9iamVjdCByZXByZXNlbnRp
bmcgdGhlIHRva2VuLgorICAgICAqLworICAgIGFwaS5nZXRUb2tlbkJlZm9yZSA9IGZ1bmN0aW9u
KG5vZGUsIHNraXApIHsKKyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXSAt
IDE7IGN1cnNvciA+PSAwOyAtLWN1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tl
bnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0
cyBhIG51bWJlciBvZiB0b2tlbnMgdGhhdCBwcmVjZWRlIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBp
biB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFthZnRlckNvdW50PTBdIFRoZSBudW1iZXIgb2Yg
dG9rZW5zIGFmdGVyIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9r
ZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAg
YXBpLmdldFRva2Vuc0FmdGVyID0gZnVuY3Rpb24obm9kZSwgYWZ0ZXJDb3VudCkgeworICAgICAg
ICB2YXIgYWZ0ZXJUb2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsKKyAgICAgICAg
d2hpbGUgKGFmdGVyQ291bnQgPiAwICYmIGN1cnNvciA8IGN1cnJlbnRUb2tlbnMubGVuZ3RoKSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAg
ICAgYWZ0ZXJUb2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAg
ICAgIC0tYWZ0ZXJDb3VudDsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5z
W2N1cnNvcl0ucmFuZ2VbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICsrY3Vyc29yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhZnRl
clRva2VuczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9rZW4gdGhhdCBm
b2xsb3dzIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9
IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGFmdGVyIHRoZSBnaXZlbiBub2Rl
LgorICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9r
ZW4uCisgICAgICovCisgICAgYXBpLmdldFRva2VuQWZ0ZXIgPSBmdW5jdGlvbihub2RlLCBza2lw
KSB7CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMV07IGN1cnNvciA8IGN1
cnJlbnRUb2tlbnMubGVuZ3RoOyArK2N1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRU
b2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAg
ICAgICAgICAgICAgICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICog
R2V0cyBhbGwgdG9rZW5zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhlIGdpdmVuIG5vZGUuCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2lu
dH0gW2JlZm9yZUNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGJlZm9yZSB0aGUgbm9kZSB0
byByZXRyaWV2ZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJl
ciBvZiB0b2tlbnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMg
e1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8K
KyAgICBhcGkuZ2V0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291
bnQpIHsKKyAgICAgICAgdmFyIGJlZm9yZVRva2VucyA9IGFwaS5nZXRUb2tlbnNCZWZvcmUobm9k
ZSwgYmVmb3JlQ291bnQpLAorICAgICAgICAgICAgYWZ0ZXJUb2tlbnMgPSBhcGkuZ2V0VG9rZW5z
QWZ0ZXIobm9kZSwgYWZ0ZXJDb3VudCksCisgICAgICAgICAgICB0b2tlbnMgPSBbXSwKKyAgICAg
ICAgICAgIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07CisgICAgICAgIHdoaWxlIChjdXJzb3IgPCBu
b2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7
CisgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAg
ICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0ucmFuZ2VbMV07Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29yOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBiZWZvcmVUb2tlbnMuY29uY2F0KHRva2Vu
cywgYWZ0ZXJUb2tlbnMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBmaXJz
dCBgY291bnRgIHRva2VucyBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50
fSBbY291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUu
CisgICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5n
IHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGkuZ2V0Rmlyc3RUb2tlbnMgPSBmdW5jdGlvbihub2Rl
LCBjb3VudCkgeworICAgICAgICB2YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2Vb
MF07CisgICAgICAgIHdoaWxlIChjb3VudCA+IDAgJiYgY3Vyc29yIDwgbm9kZS5yYW5nZVsxXSkg
eworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAg
ICAgIHRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAg
LS1jb3VudDsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0u
cmFuZ2VbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAg
fTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBnaXZlbiBu
b2RlJ3MgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0
byBza2lwLgorICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0
aGUgdG9rZW4uCisgICAgICovCisgICAgYXBpLmdldEZpcnN0VG9rZW4gPSBmdW5jdGlvbihub2Rl
LCBza2lwKSB7CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07IGN1cnNv
ciA8IG5vZGUucmFuZ2VbMV07ICsrY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRv
a2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBH
ZXRzIHRoZSBsYXN0IGBjb3VudGAgdG9rZW5zIG9mIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtj
b3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAg
ICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9r
ZW5zLgorICAgICAqLworICAgIGFwaS5nZXRMYXN0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgY291
bnQpIHsKKyAgICAgICAgdmFyIHRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdIC0g
MTsKKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXSkg
eworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAg
ICAgIHRva2Vucy51bnNoaWZ0KGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAg
ICAgLS1jb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tY3Vyc29yOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdl
dHMgdGhlIGxhc3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tlbiBzdHJlYW0uCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2lu
dH0gW3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAuCisgICAgICogQHJldHVybnMg
e1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KKyAgICAgKi8KKyAgICBh
cGkuZ2V0TGFzdFRva2VuID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgeworICAgICAgICBmb3IgKHZh
ciBjdXJzb3IgPSBub2RlLnJhbmdlWzFdIC0gMTsgY3Vyc29yID49IG5vZGUucmFuZ2VbMF07IC0t
Y3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC0tc2tpcDsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIG5vZGVzIHRoYXQgYXJlIGFu
Y2VzdG9ycyBvZiBjdXJyZW50IG5vZGUuCisgICAgICogQHJldHVybnMge0FTVE5vZGVbXX0gQXJy
YXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgYW5jZXN0b3JzLgorICAgICAqLworICAgIGFwaS5n
ZXRBbmNlc3RvcnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucGFy
ZW50cygpOworICAgIH07CisKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNjb3BlIGZvciB0
aGUgY3VycmVudCBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCByZXBy
ZXNlbnRpbmcgdGhlIGN1cnJlbnQgbm9kZSdzIHNjb3BlLgorICAgICAqLworICAgIGFwaS5nZXRT
Y29wZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcGFyZW50cyA9IGNvbnRyb2xsZXIucGFy
ZW50cygpLAorICAgICAgICAgICAgaW5uZXJCbG9jayA9IG51bGwsCisgICAgICAgICAgICBzZWxl
Y3RlZFNjb3BlSW5kZXg7CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcyBmb3IgUHJvZ3JhbSBu
b2RlcyAtIHRoZXkgaGF2ZSBubyBwYXJlbnRzCisgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCkg
eworCisgICAgICAgICAgICAvLyBpZiBjdXJyZW50IG5vZGUgaXMgZnVuY3Rpb24gZGVjbGFyYXRp
b24sIGFkZCBpdCB0byB0aGUgbGlzdAorICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjb250cm9s
bGVyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlv
bkRlY2xhcmF0aW9uIiB8fCBjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7
CisgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGN1cnJlbnQpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBBc2NlbmQgdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVudHMKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3Qgbm9kZSB0aGF0IHJlcXVpcmVzIGEgc2NvcGUg
aXMgdGhlIG5vZGUgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gb3VyIGN1cnJlbnQg
bm9kZSdzIGlubmVybW9zdCBzY29wZS4KKyAgICAgICAgICAgICAgICBpZiAoZXNjb3BlLlNjb3Bl
LmlzU2NvcGVSZXF1aXJlZChwYXJlbnRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBpbm5l
ckJsb2NrID0gcGFyZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGaW5kIGFuZCByZXR1
cm4gdGhlIGlubmVybW9zdCBzY29wZQorICAgICAgICAgICAgc2VsZWN0ZWRTY29wZUluZGV4ID0g
c2NvcGVNYXBbaW5uZXJCbG9jay5yYW5nZVswXV07CisKKyAgICAgICAgICAgIC8vIE5hbWVkIGZ1
bmN0aW9uIGV4cHJlc3Npb25zIGNyZWF0ZSB0d28gbmVzdGVkIHNjb3BlIG9iamVjdHMuIFRoZQor
ICAgICAgICAgICAgLy8gb3V0ZXIgc2NvcGUgY29udGFpbnMgb25seSB0aGUgZnVuY3Rpb24gZXhw
cmVzc2lvbiBuYW1lLiBXZSByZXR1cm4KKyAgICAgICAgICAgIC8vIHRoZSBpbm5lciBzY29wZS4K
KyAgICAgICAgICAgIGlmIChpbm5lckJsb2NrLnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24i
ICYmIGlubmVyQmxvY2suaWQgJiYgaW5uZXJCbG9jay5pZC5uYW1lKSB7CisgICAgICAgICAgICAg
ICAgKytzZWxlY3RlZFNjb3BlSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBjdXJyZW50U2NvcGVzW3NlbGVjdGVkU2NvcGVJbmRleF07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZXR1cm4gY3VycmVudFNjb3Blc1swXTsgICAgLy8gZ2xvYmFsIHNjb3Bl
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlsZW5hbWUg
Zm9yIHRoZSBjdXJyZW50bHkgcGFyc2VkIHNvdXJjZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5n
fSBUaGUgZmlsZW5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2UgYmVpbmcgcGFyc2VkLgor
ICAgICAqICAgICBEZWZhdWx0cyB0byAiPGlucHV0PiIgaWYgbm8gZmlsZW5hbWUgaW5mbyBpcyBw
cmVzZW50LgorICAgICAqLworICAgIGFwaS5nZXRGaWxlbmFtZSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAodHlwZW9mIGN1cnJlbnRGaWxlbmFtZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50RmlsZW5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gIjxpbnB1dD4iOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAq
IERlZmluZXMgYSBuZXcgbGludGluZyBydWxlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBydWxl
SWQgQSB1bmlxdWUgcnVsZSBpZGVudGlmaWVyCisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcnVs
ZU1vZHVsZSBGdW5jdGlvbiBmcm9tIGNvbnRleHQgdG8gb2JqZWN0IG1hcHBpbmcgQVNUIG5vZGUg
dHlwZXMgdG8gZXZlbnQgaGFuZGxlcnMKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8K
KyAgICB2YXIgZGVmaW5lUnVsZSA9IGFwaS5kZWZpbmVSdWxlID0gZnVuY3Rpb24ocnVsZUlkLCBy
dWxlTW9kdWxlKSB7CisgICAgICAgIHJ1bGVzLmRlZmluZShydWxlSWQsIHJ1bGVNb2R1bGUpOwor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIG1hbnkgbmV3IGxpbnRpbmcgcnVsZXMu
CisgICAgICogQHBhcmFtIHtvYmplY3R9IHJ1bGVzIG1hcCBmcm9tIHVuaXF1ZSBydWxlIGlkZW50
aWZpZXIgdG8gcnVsZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5k
ZWZpbmVSdWxlcyA9IGZ1bmN0aW9uKHJ1bGVzKSB7CisgICAgICAgIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGVJZCkgeworICAgICAgICAgICAg
ZGVmaW5lUnVsZShydWxlSWQsIHJ1bGVzW3J1bGVJZF0pOworICAgICAgICB9KTsKKyAgICB9Owor
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZGVmYXVsdCBlc2xpbnQgY29uZmlndXJhdGlvbi4K
KyAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3QgbWFwcGluZyBydWxlIElEcyB0byB0aGVp
ciBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zCisgICAgICovCisgICAgYXBpLmRlZmF1bHRzID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiByZXF1aXJlKCIuLi9jb25mL2VzbGludC5qc29uIik7
CisgICAgfTsKKworICAgIHJldHVybiBhcGk7CisKK30oKSk7CisKK30seyIuLi9jb25mL2Vudmly
b25tZW50cy5qc29uIjoxLCIuLi9jb25mL2VzbGludC5qc29uIjoyLCIuL3J1bGUtY29udGV4dCI6
MTEsIi4vcnVsZXMiOjEyLCIuL3V0aWwiOjE1MCwiZXNjb3BlIjo1LCJlc3ByaW1hIjo2LCJlc3Ry
YXZlcnNlIjo3LCJldmVudHMiOjMsIm9iamVjdC1hc3NpZ24iOjh9XSwxMDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciBydWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgcnVsZXNbImJsb2NrLXNjb3Bl
ZC12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciIpOworICAgIHJ1bGVz
WyJicmFjZS1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9icmFjZS1zdHlsZSIpOworICAgIHJ1
bGVzWyJjYW1lbGNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY2FtZWxjYXNlIik7CisgICAgcnVs
ZXNbImNvbW1hLXNwYWNpbmciXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tbWEtc3BhY2luZyIpOwor
ICAgIHJ1bGVzWyJjb21tYS1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zdHlsZSIp
OworICAgIHJ1bGVzWyJjb21wbGV4aXR5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbXBsZXhpdHki
KTsKKyAgICBydWxlc1siY29uc2lzdGVudC1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29u
c2lzdGVudC1yZXR1cm4iKTsKKyAgICBydWxlc1siY29uc2lzdGVudC10aGlzIl0gPSByZXF1aXJl
KCIuL3J1bGVzL2NvbnNpc3RlbnQtdGhpcyIpOworICAgIHJ1bGVzWyJjdXJseSJdID0gcmVxdWly
ZSgiLi9ydWxlcy9jdXJseSIpOworICAgIHJ1bGVzWyJkZWZhdWx0LWNhc2UiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvZGVmYXVsdC1jYXNlIik7CisgICAgcnVsZXNbImRvdC1ub3RhdGlvbiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9kb3Qtbm90YXRpb24iKTsKKyAgICBydWxlc1siZW9sLWxhc3QiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvZW9sLWxhc3QiKTsKKyAgICBydWxlc1siZXFlcWVxIl0gPSByZXF1aXJl
KCIuL3J1bGVzL2VxZXFlcSIpOworICAgIHJ1bGVzWyJmdW5jLW5hbWVzIl0gPSByZXF1aXJlKCIu
L3J1bGVzL2Z1bmMtbmFtZXMiKTsKKyAgICBydWxlc1siZnVuYy1zdHlsZSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9mdW5jLXN0eWxlIik7CisgICAgcnVsZXNbImdsb2JhbC1zdHJpY3QiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvZ2xvYmFsLXN0cmljdCIpOworICAgIHJ1bGVzWyJndWFyZC1mb3ItaW4iXSA9
IHJlcXVpcmUoIi4vcnVsZXMvZ3VhcmQtZm9yLWluIik7CisgICAgcnVsZXNbImhhbmRsZS1jYWxs
YmFjay1lcnIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciIpOworICAg
IHJ1bGVzWyJrZXktc3BhY2luZyJdID0gcmVxdWlyZSgiLi9ydWxlcy9rZXktc3BhY2luZyIpOwor
ICAgIHJ1bGVzWyJtYXgtZGVwdGgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWRlcHRoIik7Cisg
ICAgcnVsZXNbIm1heC1sZW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWxlbiIpOworICAgIHJ1
bGVzWyJtYXgtbmVzdGVkLWNhbGxiYWNrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbmVzdGVk
LWNhbGxiYWNrcyIpOworICAgIHJ1bGVzWyJtYXgtcGFyYW1zIl0gPSByZXF1aXJlKCIuL3J1bGVz
L21heC1wYXJhbXMiKTsKKyAgICBydWxlc1sibWF4LXN0YXRlbWVudHMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbWF4LXN0YXRlbWVudHMiKTsKKyAgICBydWxlc1sibmV3LWNhcCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uZXctY2FwIik7CisgICAgcnVsZXNbIm5ldy1wYXJlbnMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbmV3LXBhcmVucyIpOworICAgIHJ1bGVzWyJuby1hbGVydCJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1hbGVydCIpOworICAgIHJ1bGVzWyJuby1hcnJheS1jb25zdHJ1Y3RvciJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1hcnJheS1jb25zdHJ1Y3RvciIpOworICAgIHJ1bGVzWyJuby1iaXR3
aXNlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWJpdHdpc2UiKTsKKyAgICBydWxlc1sibm8tY2Fs
bGVyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNhbGxlciIpOworICAgIHJ1bGVzWyJuby1jYXRj
aC1zaGFkb3ciXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Iik7CisgICAgcnVs
ZXNbIm5vLWNvbW1hLWRhbmdsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUi
KTsKKyAgICBydWxlc1sibm8tY29uZC1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29u
ZC1hc3NpZ24iKTsKKyAgICBydWxlc1sibm8tY29uc29sZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1jb25zb2xlIik7CisgICAgcnVsZXNbIm5vLWNvbnN0YW50LWNvbmRpdGlvbiJdID0gcmVxdWly
ZSgiLi9ydWxlcy9uby1jb25zdGFudC1jb25kaXRpb24iKTsKKyAgICBydWxlc1sibm8tY29udHJv
bC1yZWdleCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb250cm9sLXJlZ2V4Iik7CisgICAgcnVs
ZXNbIm5vLWRlYnVnZ2VyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWRlYnVnZ2VyIik7CisgICAg
cnVsZXNbIm5vLWRlbGV0ZS12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVsZXRlLXZhciIp
OworICAgIHJ1bGVzWyJuby1kaXYtcmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGl2LXJl
Z2V4Iik7CisgICAgcnVsZXNbIm5vLWR1cGUta2V5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1k
dXBlLWtleXMiKTsKKyAgICBydWxlc1sibm8tZWxzZS1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tZWxzZS1yZXR1cm4iKTsKKyAgICBydWxlc1sibm8tZW1wdHktY2xhc3MiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZW1wdHktY2xhc3MiKTsKKyAgICBydWxlc1sibm8tZW1wdHktbGFiZWwi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiKTsKKyAgICBydWxlc1sibm8tZW1w
dHkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZW1wdHkiKTsKKyAgICBydWxlc1sibm8tZXEtbnVs
bCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1lcS1udWxsIik7CisgICAgcnVsZXNbIm5vLWV2YWwi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXZhbCIpOworICAgIHJ1bGVzWyJuby1leC1hc3NpZ24i
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXgtYXNzaWduIik7CisgICAgcnVsZXNbIm5vLWV4dGVu
ZC1uYXRpdmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSIpOworICAgIHJ1
bGVzWyJuby1leHRyYS1iaW5kIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiKTsK
KyAgICBydWxlc1sibm8tZXh0cmEtYm9vbGVhbi1jYXN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LWV4dHJhLWJvb2xlYW4tY2FzdCIpOworICAgIHJ1bGVzWyJuby1leHRyYS1wYXJlbnMiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtcGFyZW5zIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXNl
bWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc2VtaSIpOworICAgIHJ1bGVzWyJuby1l
eHRyYS1zdHJpY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc3RyaWN0Iik7CisgICAg
cnVsZXNbIm5vLWZhbGx0aHJvdWdoIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZhbGx0aHJvdWdo
Iik7CisgICAgcnVsZXNbIm5vLWZsb2F0aW5nLWRlY2ltYWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tZmxvYXRpbmctZGVjaW1hbCIpOworICAgIHJ1bGVzWyJuby1mdW5jLWFzc2lnbiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1mdW5jLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1pbXBsaWVkLWV2
YWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8taW1wbGllZC1ldmFsIik7CisgICAgcnVsZXNbIm5v
LWlubmVyLWRlY2xhcmF0aW9ucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbm5lci1kZWNsYXJh
dGlvbnMiKTsKKyAgICBydWxlc1sibm8taW52YWxpZC1yZWdleHAiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8taW52YWxpZC1yZWdleHAiKTsKKyAgICBydWxlc1sibm8taXRlcmF0b3IiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8taXRlcmF0b3IiKTsKKyAgICBydWxlc1sibm8tbGFiZWwtdmFyIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWxhYmVsLXZhciIpOworICAgIHJ1bGVzWyJuby1sYWJlbHMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbGFiZWxzIik7CisgICAgcnVsZXNbIm5vLWxvbmUtYmxvY2tz
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxvbmUtYmxvY2tzIik7CisgICAgcnVsZXNbIm5vLWxv
bmVseS1pZiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sb25lbHktaWYiKTsKKyAgICBydWxlc1si
bm8tbG9vcC1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxvb3AtZnVuYyIpOworICAgIHJ1
bGVzWyJuby1taXhlZC1yZXF1aXJlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhlZC1yZXF1
aXJlcyIpOworICAgIHJ1bGVzWyJuby1taXhlZC1zcGFjZXMtYW5kLXRhYnMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIik7CisgICAgcnVsZXNbIm5vLW11bHRp
LXNwYWNlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiKTsKKyAgICBydWxl
c1sibm8tbXVsdGktc3RyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRpLXN0ciIpOworICAg
IHJ1bGVzWyJuby1tdWx0aXBsZS1lbXB0eS1saW5lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1t
dWx0aXBsZS1lbXB0eS1saW5lcyIpOworICAgIHJ1bGVzWyJuby1uYXRpdmUtcmVhc3NpZ24iXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmF0aXZlLXJlYXNzaWduIik7CisgICAgcnVsZXNbIm5vLW5l
Z2F0ZWQtaW4tbGhzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lZ2F0ZWQtaW4tbGhzIik7Cisg
ICAgcnVsZXNbIm5vLW5lc3RlZC10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lc3Rl
ZC10ZXJuYXJ5Iik7CisgICAgcnVsZXNbIm5vLW5ldy1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLW5ldy1mdW5jIik7CisgICAgcnVsZXNbIm5vLW5ldy1vYmplY3QiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tbmV3LW9iamVjdCIpOworICAgIHJ1bGVzWyJuby1uZXctcmVxdWlyZSJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1uZXctcmVxdWlyZSIpOworICAgIHJ1bGVzWyJuby1uZXctd3JhcHBl
cnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIik7CisgICAgcnVsZXNbIm5v
LW5ldyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXciKTsKKyAgICBydWxlc1sibm8tb2JqLWNh
bGxzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9iai1jYWxscyIpOworICAgIHJ1bGVzWyJuby1v
Y3RhbC1lc2NhcGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIik7CisgICAg
cnVsZXNbIm5vLW9jdGFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9jdGFsIik7CisgICAgcnVs
ZXNbIm5vLXBhdGgtY29uY2F0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Iik7
CisgICAgcnVsZXNbIm5vLXBsdXNwbHVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBsdXNwbHVz
Iik7CisgICAgcnVsZXNbIm5vLXByb2Nlc3MtZW52Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBy
b2Nlc3MtZW52Iik7CisgICAgcnVsZXNbIm5vLXByb2Nlc3MtZXhpdCJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1wcm9jZXNzLWV4aXQiKTsKKyAgICBydWxlc1sibm8tcHJvdG8iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tcHJvdG8iKTsKKyAgICBydWxlc1sibm8tcmVkZWNsYXJlIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXJlZGVjbGFyZSIpOworICAgIHJ1bGVzWyJuby1yZWdleC1zcGFjZXMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIik7CisgICAgcnVsZXNbIm5vLXJlc2Vy
dmVkLWtleXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyIpOworICAgIHJ1
bGVzWyJuby1yZXN0cmljdGVkLW1vZHVsZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzdHJp
Y3RlZC1tb2R1bGVzIik7CisgICAgcnVsZXNbIm5vLXJldHVybi1hc3NpZ24iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tcmV0dXJuLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1zY3JpcHQtdXJsIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLXNjcmlwdC11cmwiKTsKKyAgICBydWxlc1sibm8tc2VsZi1j
b21wYXJlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNlbGYtY29tcGFyZSIpOworICAgIHJ1bGVz
WyJuby1zZXF1ZW5jZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2VxdWVuY2VzIik7CisgICAg
cnVsZXNbIm5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIik7CisgICAgcnVsZXNbIm5vLXNoYWRvdyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1zaGFkb3ciKTsKKyAgICBydWxlc1sibm8tc3BhY2UtYmVmb3JlLXNl
bWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2UtYmVmb3JlLXNlbWkiKTsKKyAgICBydWxl
c1sibm8tc3BhY2VkLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiKTsK
KyAgICBydWxlc1sibm8tc3BhcnNlLWFycmF5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFy
c2UtYXJyYXlzIik7CisgICAgcnVsZXNbIm5vLXN5bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
c3luYyIpOworICAgIHJ1bGVzWyJuby10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRl
cm5hcnkiKTsKKyAgICBydWxlc1sibm8tdHJhaWxpbmctc3BhY2VzIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLXRyYWlsaW5nLXNwYWNlcyIpOworICAgIHJ1bGVzWyJuby11bmRlZi1pbml0Il0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVmLWluaXQiKTsKKyAgICBydWxlc1sibm8tdW5kZWYiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tdW5kZWYiKTsKKyAgICBydWxlc1sibm8tdW5kZWZpbmVkIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVmaW5lZCIpOworICAgIHJ1bGVzWyJuby11bmRlcnNj
b3JlLWRhbmdsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSIpOwor
ICAgIHJ1bGVzWyJuby11bnJlYWNoYWJsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnJlYWNo
YWJsZSIpOworICAgIHJ1bGVzWyJuby11bnVzZWQtZXhwcmVzc2lvbnMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tdW51c2VkLWV4cHJlc3Npb25zIik7CisgICAgcnVsZXNbIm5vLXVudXNlZC12YXJz
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVudXNlZC12YXJzIik7CisgICAgcnVsZXNbIm5vLXVz
ZS1iZWZvcmUtZGVmaW5lIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVzZS1iZWZvcmUtZGVmaW5l
Iik7CisgICAgcnVsZXNbIm5vLXZvaWQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdm9pZCIpOwor
ICAgIHJ1bGVzWyJuby13YXJuaW5nLWNvbW1lbnRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdh
cm5pbmctY29tbWVudHMiKTsKKyAgICBydWxlc1sibm8td2l0aCJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby13aXRoIik7CisgICAgcnVsZXNbIm5vLXdyYXAtZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby13cmFwLWZ1bmMiKTsKKyAgICBydWxlc1sib25lLXZhciJdID0gcmVxdWlyZSgiLi9ydWxl
cy9vbmUtdmFyIik7CisgICAgcnVsZXNbInBhZGRlZC1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvcGFkZGVkLWJsb2NrcyIpOworICAgIHJ1bGVzWyJxdW90ZS1wcm9wcyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9xdW90ZS1wcm9wcyIpOworICAgIHJ1bGVzWyJxdW90ZXMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvcXVvdGVzIik7CisgICAgcnVsZXNbInJhZGl4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3Jh
ZGl4Iik7CisgICAgcnVsZXNbInNlbWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc2VtaSIpOworICAg
IHJ1bGVzWyJzb3J0LXZhcnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc29ydC12YXJzIik7CisgICAg
cnVsZXNbInNwYWNlLWFmdGVyLWtleXdvcmRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWFm
dGVyLWtleXdvcmRzIik7CisgICAgcnVsZXNbInNwYWNlLWJlZm9yZS1ibG9ja3MiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvc3BhY2UtYmVmb3JlLWJsb2NrcyIpOworICAgIHJ1bGVzWyJzcGFjZS1pbi1i
cmFja2V0cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1icmFja2V0cyIpOworICAgIHJ1
bGVzWyJzcGFjZS1pbi1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5z
Iik7CisgICAgcnVsZXNbInNwYWNlLWluZml4LW9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFj
ZS1pbmZpeC1vcHMiKTsKKyAgICBydWxlc1sic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvc3BhY2UtcmV0dXJuLXRocm93LWNhc2UiKTsKKyAgICBydWxlc1sic3Bh
Y2UtdW5hcnktd29yZC1vcHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1v
cHMiKTsKKyAgICBydWxlc1sic3BhY2VkLWxpbmUtY29tbWVudCJdID0gcmVxdWlyZSgiLi9ydWxl
cy9zcGFjZWQtbGluZS1jb21tZW50Iik7CisgICAgcnVsZXNbInN0cmljdCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9zdHJpY3QiKTsKKyAgICBydWxlc1sidXNlLWlzbmFuIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3VzZS1pc25hbiIpOworICAgIHJ1bGVzWyJ2YWxpZC1qc2RvYyJdID0gcmVxdWlyZSgiLi9y
dWxlcy92YWxpZC1qc2RvYyIpOworICAgIHJ1bGVzWyJ2YWxpZC10eXBlb2YiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvdmFsaWQtdHlwZW9mIik7CisgICAgcnVsZXNbInZhcnMtb24tdG9wIl0gPSByZXF1
aXJlKCIuL3J1bGVzL3ZhcnMtb24tdG9wIik7CisgICAgcnVsZXNbIndyYXAtaWlmZSJdID0gcmVx
dWlyZSgiLi9ydWxlcy93cmFwLWlpZmUiKTsKKyAgICBydWxlc1sid3JhcC1yZWdleCJdID0gcmVx
dWlyZSgiLi9ydWxlcy93cmFwLXJlZ2V4Iik7CisgICAgcnVsZXNbInlvZGEiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMveW9kYSIpOworCisgICAgcmV0dXJuIHJ1bGVzOworfTsKK30seyIuL3J1bGVzL2Js
b2NrLXNjb3BlZC12YXIiOjEzLCIuL3J1bGVzL2JyYWNlLXN0eWxlIjoxNCwiLi9ydWxlcy9jYW1l
bGNhc2UiOjE1LCIuL3J1bGVzL2NvbW1hLXNwYWNpbmciOjE2LCIuL3J1bGVzL2NvbW1hLXN0eWxl
IjoxNywiLi9ydWxlcy9jb21wbGV4aXR5IjoxOCwiLi9ydWxlcy9jb25zaXN0ZW50LXJldHVybiI6
MTksIi4vcnVsZXMvY29uc2lzdGVudC10aGlzIjoyMCwiLi9ydWxlcy9jdXJseSI6MjEsIi4vcnVs
ZXMvZGVmYXVsdC1jYXNlIjoyMiwiLi9ydWxlcy9kb3Qtbm90YXRpb24iOjIzLCIuL3J1bGVzL2Vv
bC1sYXN0IjoyNCwiLi9ydWxlcy9lcWVxZXEiOjI1LCIuL3J1bGVzL2Z1bmMtbmFtZXMiOjI2LCIu
L3J1bGVzL2Z1bmMtc3R5bGUiOjI3LCIuL3J1bGVzL2dsb2JhbC1zdHJpY3QiOjI4LCIuL3J1bGVz
L2d1YXJkLWZvci1pbiI6MjksIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciI6MzAsIi4vcnVs
ZXMva2V5LXNwYWNpbmciOjMxLCIuL3J1bGVzL21heC1kZXB0aCI6MzIsIi4vcnVsZXMvbWF4LWxl
biI6MzMsIi4vcnVsZXMvbWF4LW5lc3RlZC1jYWxsYmFja3MiOjM0LCIuL3J1bGVzL21heC1wYXJh
bXMiOjM1LCIuL3J1bGVzL21heC1zdGF0ZW1lbnRzIjozNiwiLi9ydWxlcy9uZXctY2FwIjozNywi
Li9ydWxlcy9uZXctcGFyZW5zIjozOCwiLi9ydWxlcy9uby1hbGVydCI6MzksIi4vcnVsZXMvbm8t
YXJyYXktY29uc3RydWN0b3IiOjQwLCIuL3J1bGVzL25vLWJpdHdpc2UiOjQxLCIuL3J1bGVzL25v
LWNhbGxlciI6NDIsIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Ijo0MywiLi9ydWxlcy9uby1jb21t
YS1kYW5nbGUiOjQ0LCIuL3J1bGVzL25vLWNvbmQtYXNzaWduIjo0NSwiLi9ydWxlcy9uby1jb25z
b2xlIjo0NiwiLi9ydWxlcy9uby1jb25zdGFudC1jb25kaXRpb24iOjQ3LCIuL3J1bGVzL25vLWNv
bnRyb2wtcmVnZXgiOjQ4LCIuL3J1bGVzL25vLWRlYnVnZ2VyIjo0OSwiLi9ydWxlcy9uby1kZWxl
dGUtdmFyIjo1MCwiLi9ydWxlcy9uby1kaXYtcmVnZXgiOjUxLCIuL3J1bGVzL25vLWR1cGUta2V5
cyI6NTIsIi4vcnVsZXMvbm8tZWxzZS1yZXR1cm4iOjUzLCIuL3J1bGVzL25vLWVtcHR5Ijo1Niwi
Li9ydWxlcy9uby1lbXB0eS1jbGFzcyI6NTQsIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiOjU1LCIu
L3J1bGVzL25vLWVxLW51bGwiOjU3LCIuL3J1bGVzL25vLWV2YWwiOjU4LCIuL3J1bGVzL25vLWV4
LWFzc2lnbiI6NTksIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSI6NjAsIi4vcnVsZXMvbm8tZXh0
cmEtYmluZCI6NjEsIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1jYXN0Ijo2MiwiLi9ydWxlcy9u
by1leHRyYS1wYXJlbnMiOjYzLCIuL3J1bGVzL25vLWV4dHJhLXNlbWkiOjY0LCIuL3J1bGVzL25v
LWV4dHJhLXN0cmljdCI6NjUsIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giOjY2LCIuL3J1bGVzL25v
LWZsb2F0aW5nLWRlY2ltYWwiOjY3LCIuL3J1bGVzL25vLWZ1bmMtYXNzaWduIjo2OCwiLi9ydWxl
cy9uby1pbXBsaWVkLWV2YWwiOjY5LCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9ucyI6NzAs
Ii4vcnVsZXMvbm8taW52YWxpZC1yZWdleHAiOjcxLCIuL3J1bGVzL25vLWl0ZXJhdG9yIjo3Miwi
Li9ydWxlcy9uby1sYWJlbC12YXIiOjczLCIuL3J1bGVzL25vLWxhYmVscyI6NzQsIi4vcnVsZXMv
bm8tbG9uZS1ibG9ja3MiOjc1LCIuL3J1bGVzL25vLWxvbmVseS1pZiI6NzYsIi4vcnVsZXMvbm8t
bG9vcC1mdW5jIjo3NywiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyI6NzgsIi4vcnVsZXMvbm8t
bWl4ZWQtc3BhY2VzLWFuZC10YWJzIjo3OSwiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiOjgwLCIu
L3J1bGVzL25vLW11bHRpLXN0ciI6ODEsIi4vcnVsZXMvbm8tbXVsdGlwbGUtZW1wdHktbGluZXMi
OjgyLCIuL3J1bGVzL25vLW5hdGl2ZS1yZWFzc2lnbiI6ODMsIi4vcnVsZXMvbm8tbmVnYXRlZC1p
bi1saHMiOjg0LCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5Ijo4NSwiLi9ydWxlcy9uby1uZXci
OjkwLCIuL3J1bGVzL25vLW5ldy1mdW5jIjo4NiwiLi9ydWxlcy9uby1uZXctb2JqZWN0Ijo4Nywi
Li9ydWxlcy9uby1uZXctcmVxdWlyZSI6ODgsIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIjo4OSwi
Li9ydWxlcy9uby1vYmotY2FsbHMiOjkxLCIuL3J1bGVzL25vLW9jdGFsIjo5MywiLi9ydWxlcy9u
by1vY3RhbC1lc2NhcGUiOjkyLCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Ijo5NCwiLi9ydWxlcy9u
by1wbHVzcGx1cyI6OTUsIi4vcnVsZXMvbm8tcHJvY2Vzcy1lbnYiOjk2LCIuL3J1bGVzL25vLXBy
b2Nlc3MtZXhpdCI6OTcsIi4vcnVsZXMvbm8tcHJvdG8iOjk4LCIuL3J1bGVzL25vLXJlZGVjbGFy
ZSI6OTksIi4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIjoxMDAsIi4vcnVsZXMvbm8tcmVzZXJ2ZWQt
a2V5cyI6MTAxLCIuL3J1bGVzL25vLXJlc3RyaWN0ZWQtbW9kdWxlcyI6MTAyLCIuL3J1bGVzL25v
LXJldHVybi1hc3NpZ24iOjEwMywiLi9ydWxlcy9uby1zY3JpcHQtdXJsIjoxMDQsIi4vcnVsZXMv
bm8tc2VsZi1jb21wYXJlIjoxMDUsIi4vcnVsZXMvbm8tc2VxdWVuY2VzIjoxMDYsIi4vcnVsZXMv
bm8tc2hhZG93IjoxMDgsIi4vcnVsZXMvbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXMiOjEwNywi
Li9ydWxlcy9uby1zcGFjZS1iZWZvcmUtc2VtaSI6MTA5LCIuL3J1bGVzL25vLXNwYWNlZC1mdW5j
IjoxMTAsIi4vcnVsZXMvbm8tc3BhcnNlLWFycmF5cyI6MTExLCIuL3J1bGVzL25vLXN5bmMiOjEx
MiwiLi9ydWxlcy9uby10ZXJuYXJ5IjoxMTMsIi4vcnVsZXMvbm8tdHJhaWxpbmctc3BhY2VzIjox
MTQsIi4vcnVsZXMvbm8tdW5kZWYiOjExNiwiLi9ydWxlcy9uby11bmRlZi1pbml0IjoxMTUsIi4v
cnVsZXMvbm8tdW5kZWZpbmVkIjoxMTcsIi4vcnVsZXMvbm8tdW5kZXJzY29yZS1kYW5nbGUiOjEx
OCwiLi9ydWxlcy9uby11bnJlYWNoYWJsZSI6MTE5LCIuL3J1bGVzL25vLXVudXNlZC1leHByZXNz
aW9ucyI6MTIwLCIuL3J1bGVzL25vLXVudXNlZC12YXJzIjoxMjEsIi4vcnVsZXMvbm8tdXNlLWJl
Zm9yZS1kZWZpbmUiOjEyMiwiLi9ydWxlcy9uby12b2lkIjoxMjMsIi4vcnVsZXMvbm8td2Fybmlu
Zy1jb21tZW50cyI6MTI0LCIuL3J1bGVzL25vLXdpdGgiOjEyNSwiLi9ydWxlcy9uby13cmFwLWZ1
bmMiOjEyNiwiLi9ydWxlcy9vbmUtdmFyIjoxMjcsIi4vcnVsZXMvcGFkZGVkLWJsb2NrcyI6MTI4
LCIuL3J1bGVzL3F1b3RlLXByb3BzIjoxMjksIi4vcnVsZXMvcXVvdGVzIjoxMzAsIi4vcnVsZXMv
cmFkaXgiOjEzMSwiLi9ydWxlcy9zZW1pIjoxMzIsIi4vcnVsZXMvc29ydC12YXJzIjoxMzMsIi4v
cnVsZXMvc3BhY2UtYWZ0ZXIta2V5d29yZHMiOjEzNCwiLi9ydWxlcy9zcGFjZS1iZWZvcmUtYmxv
Y2tzIjoxMzUsIi4vcnVsZXMvc3BhY2UtaW4tYnJhY2tldHMiOjEzNiwiLi9ydWxlcy9zcGFjZS1p
bi1wYXJlbnMiOjEzNywiLi9ydWxlcy9zcGFjZS1pbmZpeC1vcHMiOjEzOCwiLi9ydWxlcy9zcGFj
ZS1yZXR1cm4tdGhyb3ctY2FzZSI6MTM5LCIuL3J1bGVzL3NwYWNlLXVuYXJ5LXdvcmQtb3BzIjox
NDAsIi4vcnVsZXMvc3BhY2VkLWxpbmUtY29tbWVudCI6MTQxLCIuL3J1bGVzL3N0cmljdCI6MTQy
LCIuL3J1bGVzL3VzZS1pc25hbiI6MTQzLCIuL3J1bGVzL3ZhbGlkLWpzZG9jIjoxNDQsIi4vcnVs
ZXMvdmFsaWQtdHlwZW9mIjoxNDUsIi4vcnVsZXMvdmFycy1vbi10b3AiOjE0NiwiLi9ydWxlcy93
cmFwLWlpZmUiOjE0NywiLi9ydWxlcy93cmFwLXJlZ2V4IjoxNDgsIi4vcnVsZXMveW9kYSI6MTQ5
fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGVDb250ZXh0IHV0aWxpdHkgZm9yIHJ1bGVzCisgKiBAYXV0aG9yIE5pY2hvbGFz
IEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFBBU1NUSFJPVUdI
UyA9IFsKKyAgICAgICAgImdldFNvdXJjZSIsCisgICAgICAgICJnZXRTb3VyY2VMaW5lcyIsCisg
ICAgICAgICJnZXRUb2tlbnMiLAorICAgICAgICAiZ2V0VG9rZW5zQmVmb3JlIiwKKyAgICAgICAg
ImdldFRva2VuQmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vuc0FmdGVyIiwKKyAgICAgICAgImdl
dFRva2VuQWZ0ZXIiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbnMiLAorICAgICAgICAiZ2V0Rmly
c3RUb2tlbiIsCisgICAgICAgICJnZXRMYXN0VG9rZW5zIiwKKyAgICAgICAgImdldExhc3RUb2tl
biIsCisgICAgICAgICJnZXRDb21tZW50cyIsCisgICAgICAgICJnZXRBbmNlc3RvcnMiLAorICAg
ICAgICAiZ2V0U2NvcGUiLAorICAgICAgICAiZ2V0SlNEb2NDb21tZW50IiwKKyAgICAgICAgImdl
dEZpbGVuYW1lIgorICAgIF07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQWN0cyBhcyBhbiBh
YnN0cmFjdGlvbiBsYXllciBiZXR3ZWVuIHJ1bGVzIGFuZCB0aGUgbWFpbiBlc2xpbnQgb2JqZWN0
LgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJRCBvZiB0
aGUgcnVsZSB1c2luZyB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSB7ZXNsaW50fSBlc2xpbnQgVGhl
IGVzbGludCBvYmplY3QuCisgKiBAcGFyYW0ge251bWJlcn0gc2V2ZXJpdHkgVGhlIGNvbmZpZ3Vy
ZWQgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIHJ1bGUuCisgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25z
IFRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBydWxlLgor
ICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHBh
c3NlZCBmcm9tIHRoZSBjb25maWcgZmlsZS4KKyAqLworZnVuY3Rpb24gUnVsZUNvbnRleHQocnVs
ZUlkLCBlc2xpbnQsIHNldmVyaXR5LCBvcHRpb25zLCBzZXR0aW5ncykgeworCisgICAgLyoqCisg
ICAgICogVGhlIHJlYWQtb25seSBJRCBvZiB0aGUgcnVsZS4KKyAgICAgKi8KKyAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkodGhpcywgImlkIiwgeworICAgICAgICB2YWx1ZTogcnVsZUlkCisgICAg
fSk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IG9wdGlvbnMgb2YgdGhlIHJ1bGUK
KyAgICAgKi8KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm9wdGlvbnMiLCB7Cisg
ICAgICAgIHZhbHVlOiBvcHRpb25zCisgICAgfSk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVh
ZC1vbmx5IHNldHRpbmdzIHNoYXJlZCBiZXR3ZWVuIGFsbCBydWxlcworICAgICAqLworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2V0dGluZ3MiLCB7CisgICAgICAgIHZhbHVlOiBz
ZXR0aW5ncworICAgIH0pOworCisgICAgLy8gY29weSBvdmVyIHBhc3N0aHJvdWdoIG1ldGhvZHMK
KyAgICBQQVNTVEhST1VHSFMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHRoaXNb
bmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBlc2xpbnRbbmFtZV0uYXBw
bHkoZXNsaW50LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0sIHRoaXMpOworCisgICAg
LyoqCisgICAgICogUGFzc3Rocm91Z2ggdG8gZXNsaW50LnJlcG9ydCgpIHRoYXQgYXV0b21hdGlj
YWxseSBhc3NpZ25zIHRoZSBydWxlIElEIGFuZCBzZXZlcml0eS4KKyAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICog
QHBhcmFtIHtPYmplY3Q9fSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgorICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhl
IHVzZXIuCisgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgdGVtcGxhdGUgZGF0
YSB3aGljaCBwcm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdlCisgICAgICogICAgIHdpdGggc3lt
Ym9scyBiZWluZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdzIHZhbHVlcy4KKyAgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICB0aGlzLnJlcG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGxv
Y2F0aW9uLCBtZXNzYWdlLCBvcHRzKSB7CisgICAgICAgIGVzbGludC5yZXBvcnQocnVsZUlkLCBz
ZXZlcml0eSwgbm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9wdHMpOworICAgIH07CisKK30KKwor
UnVsZUNvbnRleHQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBSdWxlQ29udGV4dAor
fTsKKworbW9kdWxlLmV4cG9ydHMgPSBSdWxlQ29udGV4dDsKKworfSx7fV0sMTI6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMg
YSBzdG9yYWdlIGZvciBydWxlcy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLwor
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVu
dHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBsb2FkUnVsZXMgPSByZXF1aXJlKCIu
L2xvYWQtcnVsZXMiKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByaXZhdGVzCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgcnVsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwp
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBSZWdpc3RlcnMgYSBydWxlIG1vZHVsZSBmb3Ig
cnVsZSBpZCBpbiBzdG9yYWdlLgorICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVJZCBSdWxlIGlkIChm
aWxlIG5hbWUpLgorICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBSdWxlIGhhbmRsZXIu
CisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gZGVmaW5lKHJ1bGVJZCwgcnVsZU1v
ZHVsZSkgeworICAgIHJ1bGVzW3J1bGVJZF0gPSBydWxlTW9kdWxlOworfQorCitleHBvcnRzLmRl
ZmluZSA9IGRlZmluZTsKKworLyoqCisgKiBMb2FkcyBhbmQgcmVnaXN0ZXJzIGFsbCBydWxlcyBm
cm9tIHBhc3NlZCBydWxlcyBkaXJlY3RvcnkuCisgKiBAcGFyYW0ge1N0cmluZ30gW3J1bGVzRGly
XSBQYXRoIHRvIHJ1bGVzIGRpcmVjdG9yeSwgbWF5IGJlIHJlbGF0aXZlLiBEZWZhdWx0cyB0byBg
bGliL3J1bGVzYC4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBsb2FkKHJ1bGVz
RGlyKSB7CisgICAgdmFyIG5ld1J1bGVzID0gbG9hZFJ1bGVzKHJ1bGVzRGlyKTsKKyAgICBPYmpl
Y3Qua2V5cyhuZXdSdWxlcykuZm9yRWFjaChmdW5jdGlvbihydWxlSWQpIHsKKyAgICAgICAgZGVm
aW5lKHJ1bGVJZCwgbmV3UnVsZXNbcnVsZUlkXSk7CisgICAgfSk7Cit9CisKK2V4cG9ydHMubG9h
ZCA9IGxvYWQ7CisKKy8qKgorICogUmVnaXN0ZXJzIGFsbCBnaXZlbiBydWxlcyBvZiBhIHBsdWdp
bi4KKyAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5SdWxlcyBBIGtleS92YWx1ZSBtYXAgb2YgcnVs
ZSBkZWZpbml0aW9ucy4KKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFRoZSBuYW1lIG9m
IHRoZSBwbHVnaW4gd2l0aG91dCBwcmVmaXggKGBlc2xpbnQtcGx1Z2luLWApLgorICogQHJldHVy
bnMge3ZvaWR9CisgKi8KK2V4cG9ydHMuaW1wb3J0ID0gZnVuY3Rpb24gKHBsdWdpblJ1bGVzLCBw
bHVnaW5OYW1lKSB7CisgICAgT2JqZWN0LmtleXMocGx1Z2luUnVsZXMpLmZvckVhY2goZnVuY3Rp
b24gKHJ1bGVJZCkgeworICAgICAgICB2YXIgcXVhbGlmaWVkUnVsZUlkID0gcGx1Z2luTmFtZSAr
ICIvIiArIHJ1bGVJZCwKKyAgICAgICAgICAgIHJ1bGUgPSBwbHVnaW5SdWxlc1tydWxlSWRdOwor
CisgICAgICAgIGRlZmluZShxdWFsaWZpZWRSdWxlSWQsIHJ1bGUpOworICAgIH0pOworfTsKKwor
LyoqCisgKiBBY2Nlc3MgcnVsZSBoYW5kbGVyIGJ5IGlkIChmaWxlIG5hbWUpLgorICogQHBhcmFt
IHtTdHJpbmd9IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUpLgorICogQHJldHVybnMge0Z1bmN0
aW9ufSBSdWxlIGhhbmRsZXIuCisgKi8KK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24ocnVsZUlkKSB7
CisgICAgcmV0dXJuIHJ1bGVzW3J1bGVJZF07Cit9OworCisvKioKKyAqIFJlc2V0IHJ1bGVzIHN0
b3JhZ2UuCisgKiBTaG91bGQgYmUgdXNlZCBvbmx5IGluIHRlc3RzLgorICogQHJldHVybnMge3Zv
aWR9CisgKi8KK2V4cG9ydHMudGVzdENsZWFyID0gZnVuY3Rpb24oKSB7CisgICAgcnVsZXMgPSBP
YmplY3QuY3JlYXRlKG51bGwpOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElu
aXRpYWxpemF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBsb2FkcyBidWlsdC1p
biBydWxlcworbG9hZCgpOworCit9LHsiLi9sb2FkLXJ1bGVzIjoxMH1dLDEzOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNo
ZWNrIGZvciAiYmxvY2sgc2NvcGVkIiB2YXJpYWJsZXMgYnkgYmluZGluZyBjb250ZXh0CisgKiBA
YXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIHNjb3BlU3RhY2sgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoq
CisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRp
b24gcG9zaXRpb24gb3IgaXMgYSBub24tZGVjbGFyYXRpb24gcmVmZXJlbmNlLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBwYXJlbnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVy
bnMge0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBw
b3NpdGlvbi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uKGlkLCBwYXJlbnQp
IHsKKyAgICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiRnVu
Y3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24i
OgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQucGFyYW1zLmluZGV4T2YoaWQpID4gLTEg
fHwgaWQgPT09IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJh
dG9yIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5pZDsKKworICAgICAg
ICAgICAgY2FzZSAiQ2F0Y2hDbGF1c2UiOgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0g
cGFyZW50LnBhcmFtOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWlu
ZXMgd2hldGhlciBhbiBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0aW9uLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBwYXJlbnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJl
dHVybnMge0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBwcm9wZXJ0eSBw
b3NpdGlvbi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KGlkLCBwYXJlbnQpIHsK
KyAgICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiTWVtYmVy
RXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQucHJvcGVy
dHkgJiYgIXBhcmVudC5jb21wdXRlZDsKKworICAgICAgICAgICAgY2FzZSAiUHJvcGVydHkiOgor
ICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmtleTsKKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBQdXNoZXMgYSBuZXcgc2NvcGUgb2JqZWN0IG9uIHRoZSBzY29w
ZSBzdGFjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBw
dXNoU2NvcGUoKSB7CisgICAgICAgIHNjb3BlU3RhY2sucHVzaChbXSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICogUmVtb3ZlcyB0aGUgdG9wbW9zdCBzY29wZSBvYmplY3QgZnJvbSB0aGUgc2Nv
cGUgc3RhY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24g
cG9wU2NvcGUoKSB7CisgICAgICAgIHNjb3BlU3RhY2sucG9wKCk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogRGVjbGFyZXMgdGhlIGdpdmVuIG5hbWVzIGluIHRoZSB0b3Btb3N0IHNjb3BlIG9i
amVjdC4KKyAgICAgKiBAcGFyYW0ge1tTdHJpbmddfSBuYW1lcyBBIGxpc3Qgb2YgbmFtZXMgdG8g
ZGVjbGFyZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBk
ZWNsYXJlKG5hbWVzKSB7CisgICAgICAgIFtdLnB1c2guYXBwbHkoc2NvcGVTdGFja1tzY29wZVN0
YWNrLmxlbmd0aCAtIDFdLCBuYW1lcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5j
dGlvbiBmdW5jdGlvbkhhbmRsZXIobm9kZSkgeworICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAg
ICAgZGVjbGFyZShub2RlLnBhcmFtcy5tYXAoZnVuY3Rpb24oaWQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBpZC5uYW1lOworICAgICAgICB9KSk7CisgICAgICAgIGRlY2xhcmUobm9kZS5pZCA/IFtu
b2RlLmlkLm5hbWVdIDogW10pOworICAgICAgICBkZWNsYXJlKFsiYXJndW1lbnRzIl0pOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5vZGUpIHsKKyAg
ICAgICAgZGVjbGFyZShub2RlLmRlY2xhcmF0aW9ucy5tYXAoZnVuY3Rpb24oZGVjbCkgeworICAg
ICAgICAgICAgcmV0dXJuIGRlY2wuaWQubmFtZTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBz
Y29wZVN0YWNrID0gW2NvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXMubWFwKGZ1bmN0aW9uKHYp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdi5uYW1lOworICAgICAgICAgICAgfSldOworICAg
ICAgICB9LAorCisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5OworICAgICAgICAgICAgcHVzaFNj
b3BlKCk7CisgICAgICAgICAgICBzdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oc3RtdCkgewor
ICAgICAgICAgICAgICAgIGlmIChzdG10LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikg
eworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihzdG10KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0bXQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFy
YXRpb24iKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUoW3N0bXQuaWQubmFtZV0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAg
ICJCbG9ja1N0YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkNhdGNoQ2xhdXNl
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAgICAg
ICBkZWNsYXJlKFtub2RlLnBhcmFtLm5hbWVdKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkNhdGNo
Q2xhdXNlOmV4aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6
IGZ1bmN0aW9uSGFuZGxlciwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IHBv
cFNjb3BlLAorCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbkhhbmRsZXIs
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAg
ICJGb3JTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUo
KTsKKyAgICAgICAgICAgIGlmIChub2RlLmluaXQgJiYgbm9kZS5pbml0LnR5cGUgPT09ICJWYXJp
YWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25I
YW5kbGVyKG5vZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJG
b3JTdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICAgICAg
aWYgKG5vZGUubGVmdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlLmxlZnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3Bl
LAorCisgICAgICAgICJJZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
dmFyIGFuY2VzdG9yID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgICAg
IGlmIChpc0RlY2xhcmF0aW9uKG5vZGUsIGFuY2VzdG9yKSB8fCBpc1Byb3BlcnR5KG5vZGUsIGFu
Y2VzdG9yKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2NvcGVTdGFjay5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGVTdGFja1tpXS5pbmRleE9mKG5vZGUubmFtZSkg
PiAtMSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiXCIiICsg
bm9kZS5uYW1lICsgIlwiIHVzZWQgb3V0c2lkZSBvZiBiaW5kaW5nIGNvbnRleHQuIik7CisgICAg
ICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrIHN0YXRl
bWVudHMgdGhhdCBkbyBub3QgdXNlIHRoZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZQorICogQGF1dGhv
ciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICB2YXIgc3R5bGUg
PSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgIjF0YnMiOworICAgIHZhciBwYXJhbXMgPSBjb250ZXh0
Lm9wdGlvbnNbMV0gfHwge307CisKKyAgICB2YXIgT1BFTl9NRVNTQUdFID0gIk9wZW5pbmcgY3Vy
bHkgYnJhY2UgZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgY29udHJvbGxpbmcg
c3RhdGVtZW50LiIsCisgICAgICAgIEJPRFlfTUVTU0FHRSA9ICJTdGF0ZW1lbnQgaW5zaWRlIG9m
IGN1cmx5IGJyYWNlcyBzaG91bGQgYmUgb24gbmV4dCBsaW5lLiIsCisgICAgICAgIENMT1NFX01F
U1NBR0UgPSAiQ2xvc2luZyBjdXJseSBicmFjZSBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIHNhbWUg
bGluZSBhcyB0aGUgc3Vic2VxdWVudCBibG9jay4iLAorICAgICAgICBDTE9TRV9NRVNTQUdFX1NJ
TkdMRSA9ICJDbG9zaW5nIGN1cmx5IGJyYWNlIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFz
IG9wZW5pbmcgY3VybHkgYnJhY2Ugb3Igb24gdGhlIGxpbmUgYWZ0ZXIgdGhlIHByZXZpb3VzIGJs
b2NrLiIsCisgICAgICAgIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCA9ICJDbG9zaW5nIGN1cmx5
IGJyYWNlIGFwcGVhcnMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgc3Vic2VxdWVudCBibG9jay4i
OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIGxpc3Qgb2YgcHJvcGVydGll
cyB0byBhIGZ1bmN0aW9uIHRoYXQgdmVyaWZpZXMgdGhhdCB0aGUgb3BlbmluZworICAgICAqIGN1
cmx5IGJyYWNlIGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIGNvbnRyb2xsaW5nIHN0YXRlbWVu
dCBvZiBhIGdpdmVuCisgICAgICogbm9kZS4KKyAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gVGhl
IHByb3BlcnRpZXMgdG8gY2hlY2sgb24gdGhlIG5vZGUuCisgICAgICogQHJldHVybnMge0Z1bmN0
aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBwZXJmb3JtIHRoZSBjaGVjayBvbiBhIG5vZGUKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0Jsb2NrKCkgeworICAgICAgICB2YXIgYmxvY2tQcm9w
ZXJ0aWVzID0gYXJndW1lbnRzOworICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGJsb2NrUHJvcGVydGllcywgZnVuY3Rpb24oYmxvY2tQ
cm9wKSB7CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbm9kZVtibG9ja1Byb3BdLCBwcmV2
aW91c1Rva2VuLCBjdXJseVRva2VuLCBjdXJseVRva2VuRW5kLCBjdXJseVRva2Vuc09uU2FtZUxp
bmU7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF07CisgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrICYmIGJsb2NrLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUo
YmxvY2spOworICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuID0gY29udGV4dC5nZXRGaXJz
dFRva2VuKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbkVuZCA9IGNvbnRl
eHQuZ2V0TGFzdFRva2VuKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbnNP
blNhbWVMaW5lID0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gY3VybHlUb2tlbkVuZC5s
b2Muc3RhcnQubGluZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5s
b2Muc3RhcnQubGluZSAhPT0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChibG9jay5ib2R5Lmxlbmd0aCAmJiBwYXJhbXMuYWxs
b3dTaW5nbGVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VybHlUb2tlbi5s
b2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9keVswXS5sb2Muc3RhcnQubGluZSAmJiAhY3VybHlU
b2tlbnNPblNhbWVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoYmxvY2suYm9keVswXSwgQk9EWV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9k
eVtibG9jay5ib2R5Lmxlbmd0aCAtIDFdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vuc09u
U2FtZUxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChi
bG9jay5ib2R5W2Jsb2NrLmJvZHkubGVuZ3RoIC0gMV0sIENMT1NFX01FU1NBR0VfU0lOR0xFKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChibG9jay5ib2R5Lmxlbmd0aCAmJiBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09PSBibG9j
ay5ib2R5WzBdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChibG9jay5ib2R5WzBdLCBCT0RZX01FU1NBR0UpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5
bGUgb24gSWZTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEFuIElmU3Rh
dGVtZW50IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rp
b24gY2hlY2tJZlN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0b2tlbnM7CisKKyAgICAg
ICAgY2hlY2tCbG9jaygiY29uc2VxdWVudCIsICJhbHRlcm5hdGUiKShub2RlKTsKKworICAgICAg
ICBpZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSA9PT0gIkJsb2NrU3Rh
dGVtZW50IikgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUo
bm9kZS5hbHRlcm5hdGUsIDIpOworICAgICAgICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNb
MV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZS5hbHRlcm5hdGUsIENMT1NFX01FU1NBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgeworICAgICAgICAgICAg
ICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vuc1sxXS5sb2Muc3RhcnQu
bGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmFsdGVybmF0
ZSwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmZvcmNlcyB0aGUg
Y29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBUcnlTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIEEgVHJ5U3RhdGVtZW50IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9
CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tUcnlTdGF0ZW1lbnQobm9kZSkgeworICAgICAg
ICB2YXIgdG9rZW5zOworCisgICAgICAgIGNoZWNrQmxvY2soImJsb2NrIiwgImZpbmFsaXplciIp
KG5vZGUpOworCisgICAgICAgIGlmIChub2RlLmZpbmFsaXplciAmJiBub2RlLmZpbmFsaXplci50
eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0
LmdldFRva2Vuc0JlZm9yZShub2RlLmZpbmFsaXplciwgMik7CisgICAgICAgICAgICBpZiAoc3R5
bGUgPT09ICIxdGJzIikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0
LmxpbmUgIT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVTU0FHRSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3RydXAi
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSA9PT0gdG9r
ZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUuZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAg
ICAqIEVuZm9yY2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIENhdGNoQ2xhdXNlcwor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBIENhdGNoQ2xhdXNlIG5vZGUuCisgICAgICog
QHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tDYXRjaENsYXVzZShu
b2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9y
ZShub2RlKSwKKyAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4o
bm9kZSk7CisKKyAgICAgICAgY2hlY2tCbG9jaygiYm9keSIpKG5vZGUpOworCisgICAgICAgIGlm
IChub2RlLmJvZHkgJiYgbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAg
ICAgICAgICAgIGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzVG9rZW4ubG9jLnN0YXJ0LmxpbmUgIT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FH
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0g
InN0cm91c3RydXAiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9jLnN0
YXJ0LmxpbmUgPT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBTd2l0Y2hT
dGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgU3dpdGNoU3RhdGVtZW50
IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hl
Y2tTd2l0Y2hTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICBp
ZiAobm9kZS5jYXNlcyAmJiBub2RlLmNhc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW5z
ID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5jYXNlc1swXSwgMik7CisgICAgICAgICAg
ICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0Lmxp
bmUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0Up
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW5zID0g
Y29udGV4dC5nZXRMYXN0VG9rZW5zKG5vZGUsIDMpOworICAgICAgICAgICAgaWYgKHRva2Vuc1sw
XS5sb2Muc3RhcnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJG
dW5jdGlvbkV4cHJlc3Npb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJJZlN0YXRl
bWVudCI6IGNoZWNrSWZTdGF0ZW1lbnQsCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBjaGVja1Ry
eVN0YXRlbWVudCwKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogY2hlY2tDYXRjaENsYXVzZSwKKyAg
ICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJX
aGlsZVN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIldpdGhTdGF0ZW1l
bnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0Js
b2NrKCJib2R5IiksCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHki
KSwKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGNoZWNrU3dpdGNoU3RhdGVtZW50CisgICAg
fTsKKworfTsKKworfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tY2FtZWxjYXNlZCBpZGVudGlm
aWVycworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgY29udGFp
bnMgYW4gdW5kZXJzY29yZSBhbmQgaXNuJ3QgYWxsIHVwcGVyLWNhc2UKKyAgICAgKiBAcGFyYW0g
e1N0cmluZ30gbmFtZSBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBpZiB0aGUgc3RyaW5nIGlzIHVuZGVyc2NvcmVkCisgICAgICogQHByaXZhdGUKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBpc1VuZGVyc2NvcmVkKG5hbWUpIHsKKworICAgICAgICAvLyBpZiB0
aGVyZSdzIGFuIHVuZGVyc2NvcmUsIGl0IG1pZ2h0IGJlIEFfQ09OU1RBTlQsIHdoaWNoIGlzIG9r
YXkKKyAgICAgICAgcmV0dXJuIG5hbWUuaW5kZXhPZigiXyIpID4gLTEgJiYgbmFtZSAhPT0gbmFt
ZS50b1VwcGVyQ2FzZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydHMgYW4gQVNU
IG5vZGUgYXMgYSBydWxlIHZpb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
VGhlIG5vZGUgdG8gcmVwb3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIklkZW50aWZpZXIgJ3t7bmFtZX19JyBpcyBub3QgaW4gY2FtZWwgY2Fz
ZS4iLCB7IG5hbWU6IG5vZGUubmFtZSB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAg
ICAgICJJZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBMZWFk
aW5nIGFuZCB0cmFpbGluZyB1bmRlcnNjb3JlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBmbGFnIHBy
aXZhdGUvcHJvdGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpcCB0aGVtCisgICAgICAgICAgICB2YXIg
bmFtZSA9IG5vZGUubmFtZS5yZXBsYWNlKC9eXyt8XyskL2csICIiKSwKKyAgICAgICAgICAgICAg
ICBlZmZlY3RpdmVQYXJlbnQgPSAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Np
b24iKSA/IG5vZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50OworCisgICAgICAgICAgICAv
LyBNZW1iZXJFeHByZXNzaW9ucyBnZXQgc3BlY2lhbCBydWxlcworICAgICAgICAgICAgaWYgKG5v
ZGUucGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworCisgICAgICAgICAgICAg
ICAgLy8gQWx3YXlzIHJlcG9ydCB1bmRlcnNjb3JlZCBvYmplY3QgbmFtZXMKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5wYXJlbnQub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQub2JqZWN0Lm5hbWUgPT09IG5vZGUubmFt
ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmRlcnNjb3JlZChuYW1lKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZXBv
cnQgQXNzaWdubWVudEV4cHJlc3Npb25zIG9ubHkgaWYgdGhleSBhcmUgdGhlIGxlZnQgc2lkZSBv
ZiB0aGUgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWZmZWN0aXZlUGFy
ZW50LnR5cGUgPT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzVW5kZXJzY29yZWQobmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChl
ZmZlY3RpdmVQYXJlbnQucmlnaHQudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVmdC50eXBlID09PSAiTWVtYmVy
RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5s
ZWZ0LnByb3BlcnR5Lm5hbWUgPT09IG5vZGUubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVwb3J0KG5vZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVwb3J0
IGFueXRoaW5nIHRoYXQgaXMgdW5kZXJzY29yZWQgdGhhdCBpc24ndCBhIENhbGxFeHByZXNzaW9u
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVW5kZXJzY29yZWQobmFtZSkgJiYgZWZmZWN0aXZl
UGFyZW50LnR5cGUgIT09ICJDYWxsRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZXBv
cnQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgQ29tbWEgc3BhY2luZyAtIHZhbGlkYXRlcyBzcGFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIg
Y29tbWEKKyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNv
cHlyaWdodCAyMDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGJlZm9yZTogY29udGV4dC5v
cHRpb25zWzBdID8gISFjb250ZXh0Lm9wdGlvbnNbMF0uYmVmb3JlIDogZmFsc2UsCisgICAgICAg
IGFmdGVyOiBjb250ZXh0Lm9wdGlvbnNbMF0gPyAhIWNvbnRleHQub3B0aW9uc1swXS5hZnRlciA6
IHRydWUKKyAgICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdo
ZXRoZXIgdHdvIGFkamFjZW50IHRva2VucyBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgor
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdl
ZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdo
dCkgeworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAg
IH0KKworICAgIC8qKgorICAgICAqIFJ1biByZXBvcnQuCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBtc2cgVGhlIGVycm9yIG1zZyB0byBzaG93LgorICAgICAqIEBwcml2YXRlCisg
ICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUs
IG1zZykgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBtc2cpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFNob3cgc3BhY2UgcmVxdWlyZWQgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gZGlyIFRoZSBsb2NhdGlvbiBvZiBzcGFjaW5nLgorICAgICAqIEBwcml2YXRlCisg
ICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHNwYWNpbmcgZXJyb3IgbXNnLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGdldFNwYWNlUmVxTXNnKGRpcikgeworICAgICAgICByZXR1cm4gIkEgc3Bh
Y2UgaXMgcmVxdWlyZWQgIiArIGRpciArICIgJywnLiI7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogU2hvdyBubyBzcGFjZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgVGhl
IGxvY2F0aW9uIG9mIHNwYWNpbmcKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHtz
dHJpbmd9IFRoZSBzcGFjaW5nIGVycm9yIG1zZy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRO
b1NwYWNlTXNnKGRpcikgeworICAgICAgICByZXR1cm4gIlRoZXJlIHNob3VsZCBiZSBubyBzcGFj
ZSAiICsgZGlyICsgIiAnLCcuIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZXMg
dGhlIHNwYWNpbmcgYmVmb3JlIGFuZCBhZnRlciBjb21tYXMuCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2YgdGhlIG5vZGUuCisgICAgICog
QHByaXZhdGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2
YWxpZGF0ZUNvbW1hU3BhY2luZyhub2RlLCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMg
PSBub2RlW3Byb3BlcnR5XTsKKworICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4g
MSkgeworICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgewor
ICAgICAgICAgICAgICAgIHZhciB0b2tlbkJlZm9yZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUo
aXRlbSksCisgICAgICAgICAgICAgICAgICAgIGl0ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFd
LAorICAgICAgICAgICAgICAgICAgICB0b2tlbkVuZExpbmU7CisKKyAgICAgICAgICAgICAgICBp
ZiAodG9rZW5CZWZvcmUgJiYgdG9rZW5CZWZvcmUudmFsdWUgPT09ICIsIikgeworICAgICAgICAg
ICAgICAgICAgICB0b2tlbkVuZExpbmUgPSB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmU7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRva2VuRW5kTGluZSA9PT0gaXRlbUJlZm9yZS5sb2MuZW5kLmxpbmUgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuRW5kTGluZSA9PT0gaXRlbS5sb2Muc3RhcnQubGluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICYmIG9wdGlvbnMuYWZ0ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKGl0ZW1CZWZvcmUs
IHRva2VuQmVmb3JlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQo
aXRlbSwgZ2V0U3BhY2VSZXFNc2coImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkJl
Zm9yZSwgaXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0
ZW0sIGdldFNwYWNlUmVxTXNnKCJhZnRlciIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYmVmb3JlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZChpdGVtQmVmb3JlLCB0
b2tlbkJlZm9yZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0
ZW0sIGdldFNwYWNlUmVxTXNnKCJiZWZvcmUiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkJlZm9y
ZSwgaXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0s
IGdldE5vU3BhY2VNc2coImFmdGVyIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hZnRlcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0p
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFj
ZVJlcU1zZygiYWZ0ZXIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9y
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5v
U3BhY2VNc2coImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3BhY2VNc2coImJlZm9yZSIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzU3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYWZ0ZXIiKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGlj
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNv
bW1hU3BhY2luZyhub2RlLCAiZGVjbGFyYXRpb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJP
YmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVD
b21tYVNwYWNpbmcobm9kZSwgInByb3BlcnRpZXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkFy
cmF5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlQ29t
bWFTcGFjaW5nKG5vZGUsICJlbGVtZW50cyIpOworICAgICAgICB9LAorICAgICAgICAiU2VxdWVu
Y2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21t
YVNwYWNpbmcobm9kZSwgImV4cHJlc3Npb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNv
bW1hU3BhY2luZyhub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21t
YVNwYWNpbmcobm9kZSwgInBhcmFtcyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sMTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IENvbW1hIHN0eWxlIC0gZW5mb3JjZXMgY29tbWEgc3R5bGVzIG9mIHR3byB0eXBlczog
bGFzdCBhbmQgZmlyc3QKKyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFu
CisgKiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCAibGFzdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVy
cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUg
Y29tbWEgcGxhY2VtZW50IHdpdGggcmVnYXJkcyB0byBhIGRlY2xhcmF0aW9uL3Byb3BlcnR5L2Vs
ZW1lbnQKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9u
IG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQor
ICAgICAqLworICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbWEobm9kZSkgeworICAgICAgICB2YXIg
aXRlbXMgPSBub2RlLmRlY2xhcmF0aW9ucyB8fCBub2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVt
ZW50czsKKworICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaXRl
bXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB0
b2tlbkJlZm9yZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisgICAgICAgICAgICAg
ICAgICAgIGl0ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdOworCisgICAgICAgICAgICAgICAg
aWYgKHRva2VuQmVmb3JlLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
aWYgc2luZ2xlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuQmVmb3JlLmxvYy5l
bmQubGluZSA9PT0gaXRlbS5sb2Muc3RhcnQubGluZSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW5CZWZvcmUubG9jLmVuZC5saW5lID09PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIGxvbmUgY29tbWEKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVtLmxvYy5zdGFydC5saW5l
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgIT09
IGl0ZW1CZWZvcmUubG9jLmVuZC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChpdGVtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdG9r
ZW5CZWZvcmUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bjogdG9rZW5CZWZvcmUubG9jLnN0YXJ0LmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAg
fSwgIkJhZCBsaW5lIGJyZWFraW5nIGJlZm9yZSBhbmQgYWZ0ZXIgJywnLiIpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAiZmly
c3QiICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2Muc3RhcnQubGlu
ZSAhPT0gaXRlbS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoaXRlbSwgIicsJyBzaG91bGQgYmUgcGxhY2VkIGZpcnN0LiIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAi
bGFzdCIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGlu
ZSA9PT0gaXRlbS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoaXRlbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGl0
ZW1CZWZvcmUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bjogaXRlbUJlZm9yZS5sb2MuZW5kLmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwg
IicsJyBzaG91bGQgYmUgcGxhY2VkIGxhc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IHZhbGlk
YXRlQ29tbWEsCisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogdmFsaWRhdGVDb21tYSwKKyAg
ICAgICAgIkFycmF5RXhwcmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEKKyAgICB9OworCit9OworCit9
LHt9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgQ291bnRzIHRoZSBjeWNsb21hdGljIGNvbXBsZXhpdHkgb2YgZWFjaCBmdW5jdGlv
biBvZiB0aGUgc2NyaXB0LiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWNsb21h
dGljX2NvbXBsZXhpdHkuCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBpZiwgY29uZGl0aW9uYWws
IGZvciwgd2hpbHRlLCB0cnksIHN3aXRjaC9jYXNlLAorICogQGF1dGhvciBQYXRyaWNrIEJyb3Nz
ZXQKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0
Lm9wdGlvbnNbMF07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFVzaW5nIGEgc3RhY2sgdG8gc3RvcmUg
Y29tcGxleGl0eSAoaGFuZGxpbmcgbmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107
CisKKyAgICAvLyBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBm
dW5jdGlvbiBzdGFjaworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZu
cy5wdXNoKDEpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgdmFyIGNvbXBsZXhpdHkgPSBmbnMucG9wKCksIG5hbWUgPSAiYW5vbnltb3VzIjsKKwor
ICAgICAgICBpZiAobm9kZS5pZCkgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUuaWQubmFtZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoY29tcGxleGl0eSA+IFRIUkVTSE9MRCkgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkZ1bmN0aW9uICd7e25hbWV9fScgaGFzIGEgY29t
cGxleGl0eSBvZiB7e2NvbXBsZXhpdHl9fS4iLCB7IG5hbWU6IG5hbWUsIGNvbXBsZXhpdHk6IGNv
bXBsZXhpdHkgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFzZUNv
bXBsZXhpdHkoKSB7CisgICAgICAgIGlmIChmbnMubGVuZ3RoKSB7CisgICAgICAgICAgICBmbnNb
Zm5zLmxlbmd0aCAtIDFdICsrOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5j
cmVhc2VTd2l0Y2hDb21wbGV4aXR5KG5vZGUpIHsKKyAgICAgICAgLy8gQXZvaWRpbmcgYGRlZmF1
bHRgCisgICAgICAgIGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgIGluY3JlYXNlQ29tcGxl
eGl0eShub2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNlTG9n
aWNhbENvbXBsZXhpdHkobm9kZSkgeworICAgICAgICAvLyBBdm9pZGluZyAmJgorICAgICAgICBp
ZiAobm9kZS5vcGVyYXRvciA9PT0gInx8IikgeworICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4
aXR5KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4g
eworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAg
ICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Np
b246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorCisgICAgICAgICJDYXRjaENsYXVzZSI6IGluY3JlYXNl
Q29tcGxleGl0eSwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGluY3JlYXNlQ29t
cGxleGl0eSwKKyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogaW5jcmVhc2VMb2dpY2FsQ29t
cGxleGl0eSwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAg
ICAgICAgIkZvckluU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAgICAiSWZT
dGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAgICJTd2l0Y2hDYXNlIjogaW5j
cmVhc2VTd2l0Y2hDb21wbGV4aXR5LAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFz
ZUNvbXBsZXhpdHksCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4
aXR5CisgICAgfTsKKworfTsKKworfSx7fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb25zaXN0ZW50IHJl
dHVybiB2YWx1ZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJp
Y3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHZhciBmdW5jdGlvbnMgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24g
ZW50ZXJGdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnB1c2goe30pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGV4aXRGdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnBvcCgpOwor
ICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVj
bGFyYXRpb24iOiBlbnRlckZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjog
ZW50ZXJGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRG
dW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZXhpdEZ1bmN0aW9u
LAorCisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIHZhciByZXR1cm5JbmZvID0gZnVuY3Rpb25zW2Z1bmN0aW9ucy5sZW5ndGggLSAxXSwK
KyAgICAgICAgICAgICAgICByZXR1cm5UeXBlRGVmaW5lZCA9ICJ0eXBlIiBpbiByZXR1cm5JbmZv
OworCisgICAgICAgICAgICBpZiAocmV0dXJuVHlwZURlZmluZWQpIHsKKworICAgICAgICAgICAg
ICAgIGlmIChyZXR1cm5JbmZvLnR5cGUgIT09ICEhbm9kZS5hcmd1bWVudCkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgIiArIChyZXR1cm5JbmZv
LnR5cGUgPyAiYSIgOiAibm8iKSArICIgcmV0dXJuIHZhbHVlLiIpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm5JbmZvLnR5
cGUgPSAhIW5vZGUuYXJndW1lbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgY29uc2lzdGVudCBuYW1pbmcgb2Yg
InRoaXMiIGNvbnRleHQgdmFyaWFibGVzCisgKiBAYXV0aG9yIFJhcGhhZWwgUGlndWxsYQorICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJh
dGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbGlhcyA9IGNvbnRleHQu
b3B0aW9uc1swXTsKKworICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5j
dGlvbihkZWNsYXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZC5u
YW1lID09PSBhbGlhcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIShkZWNsYXJhdGlvbi5p
bml0ICYmIGRlY2xhcmF0aW9uLmluaXQudHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIikpIHsKKwor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAiRGVzaWduYXRlZCAndGhpcycgYWxp
YXMgJ3t7YWxpYXN9fScgaXMgbm90IGFzc2lnbmVkICIgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0byB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgeyBhbGlhczogZGVjbGFyYXRpb24uaWQubmFtZSB9CisgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlY2xh
cmF0aW9uLmluaXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmluaXQu
dHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVj
bGFyYXRpb24uaWQubmFtZSAhPT0gYWxpYXMpIHsKKworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAiVW5leHBlY3RlZCBhbGlhcyAne3thbGlhc319JyBmb3IgJ3RoaXMnLiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICB7IGFsaWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KKyAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDIxOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVt
ZW50cyB3aXRob3V0IGN1cmx5IGJyYWNlcworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwor
ICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG11bHRpT25seSA9IChjb250ZXh0Lm9wdGlvbnNb
MF0gPT09ICJtdWx0aSIpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBl
cnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhl
IGJvZHkgb2YgYSBub2RlIHRvIHNlZSBpZiBpdCdzIGEgYmxvY2sgc3RhdGVtZW50LiBEZXBlbmRp
bmcgb24KKyAgICAgKiB0aGUgcnVsZSBvcHRpb25zLCByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBw
cm9ibGVtcy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVwb3J0
IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUg
Ym9keSBub2RlIHRvIGNoZWNrIGZvciBibG9ja3MuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgVGhlIG5hbWUgdG8gcmVwb3J0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBzdWZmaXggQWRkaXRpb25hbCBzdHJpbmcgdG8gYWRkIHRvIHRoZSBlbmQgb2Yg
YSByZXBvcnQuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24g
Y2hlY2tCb2R5KG5vZGUsIGJvZHksIG5hbWUsIHN1ZmZpeCkgeworICAgICAgICB2YXIgaGFzQmxv
Y2sgPSAoYm9keS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKTsKKworICAgICAgICBpZiAobXVs
dGlPbmx5KSB7CisgICAgICAgICAgICBpZiAoaGFzQmxvY2sgJiYgYm9keS5ib2R5Lmxlbmd0aCA9
PT0gMSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2Fy
eSB7IGFmdGVyICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdWZmaXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAiIikKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoIWhhc0Jsb2NrKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIHsgYWZ0ZXIgJ3t7bmFtZX19J3t7c3VmZml4fX0uIiwK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogKHN1ZmZpeCA/ICIgIiArIHN1ZmZp
eCA6ICIiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgY2hl
Y2tCb2R5KG5vZGUsIG5vZGUuY29uc2VxdWVudCwgImlmIiwgImNvbmRpdGlvbiIpOworCisgICAg
ICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklm
U3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmFsdGVy
bmF0ZSwgImVsc2UiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJX
aGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrQm9keShu
b2RlLCBub2RlLmJvZHksICJ3aGlsZSIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBj
aGVja0JvZHkobm9kZSwgbm9kZS5ib2R5LCAiZG8iKTsKKyAgICAgICAgfSwKKworICAgICAgICAi
Rm9yU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tCb2R5KG5v
ZGUsIG5vZGUuYm9keSwgImZvciIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyByZXF1aXJlIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2ggc3RhdGVtZW50
cworICogQGF1dGhvciBBbGlha3NlaSBTaHl0a2luCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IENPTU1FTlRfVkFMVUUgPSAibm8gZGVmYXVsdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAg
KiBTaG9ydGN1dCB0byBnZXQgbGFzdCBlbGVtZW50IG9mIGFycmF5CisgICAgICogQHBhcmFtICB7
KltdfSBjb2xsZWN0aW9uIEFycmF5CisgICAgICogQHJldHVybnMgeyp9IExhc3QgZWxlbWVudAor
ICAgICAqLworICAgIGZ1bmN0aW9uIGxhc3QoY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4g
Y29sbGVjdGlvbltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdOworICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7
CisKKyAgICAgICAgICAgIGlmICghbm9kZS5jYXNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAvLyBza2lwIGNoZWNrIG9mIGVtcHR5IHN3aXRjaCBiZWNhdXNlIHRoZXJlIGlzIG5vIGVhc3kg
d2F5CisgICAgICAgICAgICAgICAgLy8gdG8gZXh0cmFjdCBjb21tZW50cyBpbnNpZGUgaXQgbm93
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIgaGFzRGVmYXVsdCA9IG5vZGUuY2FzZXMuc29tZShmdW5jdGlvbih2KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHYudGVzdCA9PT0gbnVsbDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBpZiAoIWhhc0RlZmF1bHQpIHsKKworICAgICAgICAgICAgICAgIHZhciBjb21tZW50Owor
ICAgICAgICAgICAgICAgIHZhciBjb21tZW50czsKKworICAgICAgICAgICAgICAgIHZhciBsYXN0
Q2FzZSA9IGxhc3Qobm9kZS5jYXNlcyk7CisgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb250
ZXh0LmdldENvbW1lbnRzKGxhc3RDYXNlKS50cmFpbGluZzsKKworICAgICAgICAgICAgICAgIGlm
IChjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3Qo
Y29tbWVudHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghY29t
bWVudCB8fCBjb21tZW50LnZhbHVlLnRyaW0oKSAhPT0gQ09NTUVOVF9WQUxVRSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBkZWZhdWx0IGNh
c2UuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKK307CisKK30se31dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHdhcm4gYWJvdXQgdXNpbmcgZG90IG5vdGF0aW9u
IGluc3RlYWQgb2Ygc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd2hlbiBwb3NzaWJsZS4KKyAqIEBh
dXRob3IgSm9zaCBQZXJlegorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Zh
ciB2YWxpZElkZW50aWZpZXIgPSAvXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQvOwordmFyIGtl
eXdvcmRzID0gWworICAgICJ0aGlzIiwKKyAgICAiZnVuY3Rpb24iLAorICAgICJpZiIsCisgICAg
InJldHVybiIsCisgICAgInZhciIsCisgICAgImVsc2UiLAorICAgICJmb3IiLAorICAgICJuZXci
LAorICAgICJhcmd1bWVudHMiLAorICAgICJpbiIsCisgICAgInR5cGVvZiIsCisgICAgIndoaWxl
IiwKKyAgICAiY2FzZSIsCisgICAgImJyZWFrIiwKKyAgICAidHJ5IiwKKyAgICAiY2F0Y2giLAor
ICAgICJkZWxldGUiLAorICAgICJ0aHJvdyIsCisgICAgInN3aXRjaCIsCisgICAgImNvbnRpbnVl
IiwKKyAgICAiZGVmYXVsdCIsCisgICAgImluc3RhbmNlb2YiLAorICAgICJkbyIsCisgICAgInZv
aWQiLAorICAgICJmaW5hbGx5IiwKKyAgICAid2l0aCIsCisgICAgImRlYnVnZ2VyIiwKKyAgICAi
ZXZhbCIsCisgICAgImltcGxlbWVudHMiLAorICAgICJpbnRlcmZhY2UiLAorICAgICJwYWNrYWdl
IiwKKyAgICAicHJpdmF0ZSIsCisgICAgInByb3RlY3RlZCIsCisgICAgInB1YmxpYyIsCisgICAg
InN0YXRpYyIsCisgICAgInlpZWxkIiwKKyAgICAibGV0IiwKKyAgICAiY2xhc3MiLAorICAgICJl
bnVtIiwKKyAgICAiZXhwb3J0IiwKKyAgICAiZXh0ZW5kcyIsCisgICAgImltcG9ydCIsCisgICAg
InN1cGVyIiwKKyAgICAidHJ1ZSIsCisgICAgImZhbHNlIiwKKyAgICAibnVsbCIsCisgICAgImFi
c3RyYWN0IiwKKyAgICAiYm9vbGVhbiIsCisgICAgImJ5dGUiLAorICAgICJjaGFyIiwKKyAgICAi
Y29uc3QiLAorICAgICJkb3VibGUiLAorICAgICJmaW5hbCIsCisgICAgImZsb2F0IiwKKyAgICAi
Z290byIsCisgICAgImludCIsCisgICAgImxvbmciLAorICAgICJuYXRpdmUiLAorICAgICJzaG9y
dCIsCisgICAgInN5bmNocm9uaXplZCIsCisgICAgInRocm93cyIsCisgICAgInRyYW5zaWVudCIs
CisgICAgInZvbGF0aWxlIgorXTsKKworZnVuY3Rpb24gY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlv
bihub2RlKSB7CisgICAgcmV0dXJuIG5vZGUuY29tcHV0ZWQgPT09IHRydWUgJiYKKyAgICAgICAg
bm9kZS5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgdmFsaWRJZGVudGlm
aWVyLnRlc3Qobm9kZS5wcm9wZXJ0eS52YWx1ZSkgJiYKKyAgICAgICAga2V5d29yZHMuaW5kZXhP
ZigiIiArIG5vZGUucHJvcGVydHkudmFsdWUpID09PSAtMTsKK30KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgIk1lbWJlckV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoY2FuQmVXcml0dGVuSW5E
b3ROb3RhdGlvbihub2RlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJbJyIgKyBub2RlLnByb3BlcnR5LnZhbHVlICsgIiddIGlzIGJldHRlciB3cml0dGVuIGluIGRv
dCBub3RhdGlvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9
LHt9XSwyNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUmVxdWlyZSBmaWxlIHRvIGVuZCB3aXRoIHNpbmdsZSBuZXdsaW5lLgorICogQGF1
dGhvciBOb2RlY2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVu
Y3Rpb24gY2hlY2tCYWRFT0Yobm9kZSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBz
b3VyY2UgY29kZSwgbm90IGZvciBub2RlIG9ubHkuCisgICAgICAgICAgICB2YXIgc3JjID0gY29u
dGV4dC5nZXRTb3VyY2UoKSwgbG9jYXRpb24gPSB7Y29sdW1uOiAxfTsKKworICAgICAgICAgICAg
aWYgKHNyYy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcmNbc3JjLmxlbmd0aCAtIDFdICE9PSAiXG4iKSB7
CisgICAgICAgICAgICAgICAgLy8gZmlsZSBpcyBub3QgbmV3bGluZS10ZXJtaW5hdGVkCisgICAg
ICAgICAgICAgICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZykubGVuZ3RoOworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiTmV3bGluZSByZXF1
aXJlZCBhdCBlbmQgb2YgZmlsZSBidXQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfSBlbHNl
IGlmICgvXG5ccypcbiQvLnRlc3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgbGlu
ZSBpcyBlbXB0eQorICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBzcmMuc3BsaXQoL1xu
L2cpLmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9j
YXRpb24sICJVbmV4cGVjdGVkIGJsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGUuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDI1OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgc3RhdGVtZW50cyB0aGF0IHVzZSAhPSBhbmQgPT0gaW5zdGVhZCBvZiAhPT0gYW5kID09PQor
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGVpdGhlciBvcGVyYW5kIG9mIGEgYmluYXJ5IGV4cHJl
c3Npb24gaXMgYSB0eXBlb2Ygb3BlcmF0aW9uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9uZSBvZiB0
aGUgb3BlcmFuZHMgaXMgdHlwZW9mCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBpc1R5cGVPZihub2RlKSB7CisgICAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJp
Z2h0XS5zb21lKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUg
PT09ICJVbmFyeUV4cHJlc3Npb24iICYmIG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgb3BlcmFuZHMgYXJl
IGxpdGVyYWxzIG9mIHRoZSBzYW1lIHR5cGUgKHZpYSB0eXBlb2YpCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59
IGlmIG9wZXJhbmRzIGFyZSBvZiBzYW1lIHR5cGUKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGFyZUxpdGVyYWxzQW5kU2FtZVR5cGUobm9kZSkgeworICAgICAgICByZXR1
cm4gbm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJM
aXRlcmFsIiAmJgorICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxlZnQudmFsdWUgPT09IHR5
cGVvZiBub2RlLnJpZ2h0LnZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBp
ZiBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIGEgbGl0ZXJhbCBudWxsCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59
IGlmIG9wZXJhbmRzIGFyZSBudWxsCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBpc051bGxDaGVjayhub2RlKSB7CisgICAgICAgIHJldHVybiAobm9kZS5yaWdodC50eXBl
ID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC52YWx1ZSA9PT0gbnVsbCkgfHwKKyAgICAgICAg
ICAgICAgICAobm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQudmFsdWUg
PT09IG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIChs
aW5lIGFuZCBjb2x1bW4pIG9mIHRoZSBiaW5hcnkgZXhwcmVzc2lvbidzIG9wZXJhdG9yCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNo
ZWNrCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBmaW5k
CisgICAgICogQHJldHVybnMge09iamVjdH0geyBsaW5lLCBjb2x1bW4gfSBsb2NhdGlvbiBvZiBv
cGVyYXRvcgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0T3BlcmF0
b3JMb2NhdGlvbihub2RlKSB7CisgICAgICAgIHZhciBvcFRva2VuID0gY29udGV4dC5nZXRUb2tl
bnMobm9kZSlbY29udGV4dC5nZXRUb2tlbnMobm9kZS5sZWZ0KS5sZW5ndGhdOworICAgICAgICBy
ZXR1cm4ge2xpbmU6IG9wVG9rZW4ubG9jLnN0YXJ0LmxpbmUsIGNvbHVtbjogb3BUb2tlbi5sb2Mu
c3RhcnQuY29sdW1ufTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmluYXJ5RXhw
cmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9y
ICE9PSAiPT0iICYmIG5vZGUub3BlcmF0b3IgIT09ICIhPSIpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNb
MF0gPT09ICJzbWFydCIgJiYgKGlzVHlwZU9mKG5vZGUpIHx8CisgICAgICAgICAgICAgICAgICAg
IGFyZUxpdGVyYWxzQW5kU2FtZVR5cGUobm9kZSkpIHx8IGlzTnVsbENoZWNrKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
Y29udGV4dC5vcHRpb25zWzBdID09PSAiYWxsb3ctbnVsbCIgJiYgaXNOdWxsQ2hlY2sobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgIG5vZGUsIGdldE9wZXJhdG9yTG9jYXRp
b24obm9kZSksCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkICd7e29wfX09JyBhbmQgaW5zdGVh
ZCBzYXcgJ3t7b3B9fScuIiwKKyAgICAgICAgICAgICAgICB7b3A6IG5vZGUub3BlcmF0b3J9Cisg
ICAgICAgICAgICApOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjY6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gd2FybiB3aGVuIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBkb2VzIG5vdCBoYXZlIGEgbmFtZS4K
KyAqIEBhdXRob3IgS3lsZSBULiBOdW5lcnkKKyAqLworICJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgdmFyIG5hbWUgPSBub2RlLmlkICYmIG5vZGUuaWQubmFtZTsKKworICAgICAgICAg
ICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1p
c3NpbmcgZnVuY3Rpb24gZXhwcmVzc2lvbiBuYW1lLiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKK307CisKK30se31dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgYSBwYXJ0aWN1bGFy
IGZ1bmN0aW9uIHN0eWxlCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ug
c3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0sCisgICAgICAgIGVu
Zm9yY2VEZWNsYXJhdGlvbnMgPSAoc3R5bGUgPT09ICJkZWNsYXJhdGlvbiIpOworCisgICAgcmV0
dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIGlmICghZW5mb3JjZURlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lv
biI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5j
ZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbmZvcmNlRGVjbGFyYXRpb25zICYm
IHBhcmVudC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KHBhcmVudCwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24u
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyODpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIG9yIHJlcXVpcmUgZ2xvYmFsIHN0cmljdCBtb2RlLgorICogQGF1dGhvciBO
aWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG1vZGUgPSBjb250
ZXh0Lm9wdGlvbnNbMF07CisKKyAgICBpZiAobW9kZSA9PT0gImFsd2F5cyIpIHsKKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBzdGF0ZW1lbnQgPSBub2RlLmJvZHlbMF07CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCEoc3RhdGVtZW50LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJiBzdGF0ZW1l
bnQuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZ2xvYmFsIGZvcm0gb2YgXCJ1
c2Ugc3RyaWN0XCIuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICB9IGVsc2UgeyAvLyBtb2RlID0gIm5l
dmVyIgorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVu
dCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4
dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJl
c3Npb24udmFsdWUgPT09ICJ1c2Ugc3RyaWN0IiAmJiBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0i
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGZ1
bmN0aW9uIGZvcm0gb2YgXCJ1c2Ugc3RyaWN0XCIuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHt9XSwyOTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIGZvci1pbiBsb29wcyB3aXRob3V0IGlmIHN0YXRlbWVudHMgaW5zaWRlCisgKiBAYXV0
aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1
cm4geworCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoZSBmb3ItaW4gc3RhdGVtZW50IGhhcyB7
fSwgdGhlbiB0aGUgcmVhbCBib2R5IGlzIHRoZSBib2R5CisgICAgICAgICAgICAgKiBvZiB0aGUg
QmxvY2tTdGF0ZW1lbnQuIE90aGVyd2lzZSwganVzdCB1c2UgYm9keSBhcyBwcm92aWRlZC4KKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgdmFyIGJvZHkgPSBub2RlLmJvZHkudHlwZSA9PT0g
IkJsb2NrU3RhdGVtZW50IiA/IG5vZGUuYm9keS5ib2R5WzBdIDogbm9kZS5ib2R5OworCisgICAg
ICAgICAgICBpZiAoYm9keSAmJiBib2R5LnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGJvZHkgb2YgYSBmb3ItaW4gc2hv
dWxkIGJlIHdyYXBwZWQgaW4gYW4gaWYgc3RhdGVtZW50IHRvIGZpbHRlciB1bndhbnRlZCBwcm9w
ZXJ0aWVzIGZyb20gdGhlIHByb3RvdHlwZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK307CisKK30se31dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBFbnN1cmUgaGFuZGxpbmcgb2YgZXJyb3JzIHdoZW4g
d2Uga25vdyB0aGV5IGV4aXN0LgorICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb24KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBlcnJvckFyZ3VtZW50ID0gY29udGV4dC5vcHRpb25z
WzBdIHx8ICJlcnIiOworICAgIHZhciBjYWxsYmFja3MgPSBbXTsKKyAgICB2YXIgc2NvcGVzID0g
MDsKKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgc2hvdWxk
IGJlIGludGVycHJldGVkIGFzIGEgcmVnZXhwIHBhdHRlcm4uCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IHN0cmluZ1RvQ2hlY2sgVGhlIHN0cmluZyB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4KKyAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHN0cmluZyBzaG91bGQg
YmUgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGF0
dGVybihzdHJpbmdUb0NoZWNrKSB7CisgICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHJpbmdUb0No
ZWNrWzBdOworICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09PSAiXiI7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3Vy
ZWQgZXJyb3IgYXJndW1lbnQuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUg
d2hpY2ggc2hvdWxkIGJlIGNvbXBhcmVkLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0
aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVycm9yIHZh
cmlhYmxlIG5hbWUuCisgICAgICovCisgICAgZnVuY3Rpb24gbWF0Y2hlc0NvbmZpZ3VyZWRFcnJv
ck5hbWUobmFtZSkgeworICAgICAgICBpZiAoaXNQYXR0ZXJuKGVycm9yQXJndW1lbnQpKSB7Cisg
ICAgICAgICAgICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChlcnJvckFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIHJldHVybiByZWdleHAudGVzdChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbmFtZSA9PT0gZXJyb3JBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVj
ayB0aGUgYXJndW1lbnRzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBl
cnJvciBvYmplY3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0
byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBz
dGFydEZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIG5lc3RlZCBz
Y29wZXMKKyAgICAgICAgc2NvcGVzKys7CisKKyAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZpcnN0
IGFyZ3VtZW50IG1hdGNoZXMgb3VyIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgdmFyIGZpcnN0QXJn
ID0gbm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXNbMF07CisgICAgICAgIGlmIChmaXJzdEFyZyAm
JiBtYXRjaGVzQ29uZmlndXJlZEVycm9yTmFtZShmaXJzdEFyZy5uYW1lKSkgeworICAgICAgICAg
ICAgY2FsbGJhY2tzLnB1c2goe2hhbmRsZWQ6IGZhbHNlLCBkZXB0aDogc2NvcGVzLCBlcnJvclZh
cmlhYmxlTmFtZTogZmlyc3RBcmcubmFtZX0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoq
CisgICAgICogQXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNoZWNrIHRvIHNlZSBpZiB0aGUgZXJy
b3Igd2FzIGhhbmRsZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBlbmRGdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tz
W2NhbGxiYWNrcy5sZW5ndGggLSAxXSB8fCB7fTsKKworICAgICAgICAvLyBjaGVjayBpZiBhIGNh
bGxiYWNrIGlzIGVuZGluZywgaWYgc28gcG9wIGl0IG9mZiB0aGUgc3RhY2sKKyAgICAgICAgaWYg
KGNhbGxiYWNrLmRlcHRoID09PSBzY29wZXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5wb3Ao
KTsKKworICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgd2VyZSBubyBoYW5kbGVkIGVycm9y
cyBzaW5jZSB0aGUgbGFzdCBjYWxsYmFjaworICAgICAgICAgICAgaWYgKCFjYWxsYmFjay5oYW5k
bGVkKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGVy
cm9yIHRvIGJlIGhhbmRsZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBsZXNzIG5lc3RlZCBmdW5jdGlvbnMKKyAgICAgICAgc2NvcGVzLS07CisKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgaGFuZGxpbmcgdGhlIGVycm9y
IG9iamVjdCBwcm9wZXJseS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBu
b2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0
aW9uIGNoZWNrRm9yRXJyb3Iobm9kZSkgeworICAgICAgICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxsYmFja3MubGVu
Z3RoIC0gMV0gfHwge307CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbm9kZSdzIG5h
bWUgbWF0Y2hlcyBvdXIgZXJyb3IgYXJndW1lbnQgbmFtZQorICAgICAgICAgICAgdmFyIGlzQWJv
dXRFcnJvciA9IG5vZGUubmFtZSA9PT0gY2FsbGJhY2suZXJyb3JWYXJpYWJsZU5hbWU7CisKKyAg
ICAgICAgICAgIC8vIHdlIGRvbid0IGNvbnNpZGVyIHRoZXNlIHVzZSBjYXNlcyBhcyAiaGFuZGxp
bmciIHRoZSBlcnJvcgorICAgICAgICAgICAgdmFyIGRvTm90Q291bnQgPSBbIkZ1bmN0aW9uRGVj
bGFyYXRpb24iLCAiRnVuY3Rpb25FeHByZXNzaW9uIiwgIkNhdGNoQ2xhdXNlIl07CisKKyAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGlzIGlkZW50aWZpZXIgaXNuJ3QgdXNlZCBhcyBwYXJ0IG9m
IG9uZSBvZiB0aGVtCisgICAgICAgICAgICB2YXIgaXNIYW5kbGVkID0gZG9Ob3RDb3VudC5pbmRl
eE9mKG5vZGUucGFyZW50LnR5cGUpID09PSAtMTsKKworICAgICAgICAgICAgaWYgKGlzQWJvdXRF
cnJvciAmJiBpc0hhbmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyByZWNvcmQgdGhhdCB0aGlz
IGNhbGxiYWNrIGhhbmRsZWQgaXRzIGVycm9yCisgICAgICAgICAgICAgICAgY2FsbGJhY2suaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiSWRlbnRp
ZmllciI6IGNoZWNrRm9yRXJyb3IsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQi
OiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVu
Y3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBzcGVjaWZ5IHNwYWNpbmcg
b2Ygb2JqZWN0IGxpdGVyYWwga2V5cyBhbmQgdmFsdWVzCisgKiBAYXV0aG9yIEJyYW5kb24gTWls
bHMKKyAqIEBjb3B5cmlnaHQgMjAxNCBCcmFuZG9uIE1pbGxzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxw
ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEdldHMgYW4gb2JqZWN0IGxp
dGVyYWwgcHJvcGVydHkncyBrZXkgYXMgdGhlIGlkZW50aWZpZXIgbmFtZSBvciBzdHJpbmcgdmFs
dWUuCisgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgd2hvc2Uga2V5
IHRvIHJldHJpZXZlLgorICogQHJldHVybnMge3N0cmluZ30gVGhlIHByb3BlcnR5J3Mga2V5Lgor
ICovCitmdW5jdGlvbiBnZXRLZXkocHJvcGVydHkpIHsKKyAgICByZXR1cm4gcHJvcGVydHkua2V5
Lm5hbWUgfHwgcHJvcGVydHkua2V5LnZhbHVlOworfQorCisvKioKKyAqIEdldHMgdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIGluIGEga2V5LCBpbmNsdWRpbmcgcXVvdGVzIGFyb3VuZCBzdHJpbmcg
a2V5cy4KKyAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgb2Ygb24gb2JqZWN0
IGxpdGVyYWwuCisgKiBAcmV0dXJucyB7aW50fSBXaWR0aCBvZiB0aGUga2V5LCBpbmNsdWRpbmcg
c3RyaW5nIHF1b3RlcyB3aGVyZSBwcmVzZW50LgorICovCitmdW5jdGlvbiBnZXRLZXlXaWR0aChw
cm9wZXJ0eSkgeworICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5rZXk7CisgICAgcmV0dXJuIChrZXku
dHlwZSA9PT0gIklkZW50aWZpZXIiID8ga2V5Lm5hbWUgOiBrZXkucmF3KS5sZW5ndGg7Cit9CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK3ZhciBtZXNzYWdlcyA9IHsKKyAgICBrZXk6ICJ7e2Vycm9yfX0gc3Bh
Y2UgYWZ0ZXIga2V5IFwie3trZXl9fVwiLiIsCisgICAgdmFsdWU6ICJ7e2Vycm9yfX0gc3BhY2Ug
YmVmb3JlIHZhbHVlIGZvciBrZXkgXCJ7e2tleX19XCIuIgorfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBPUFRJT05TCisgICAgICog
ImtleS1zcGFjaW5nIjogWzIsIHsKKyAgICAgKiAgICAgYmVmb3JlQ29sb246IGZhbHNlLAorICAg
ICAqICAgICBhZnRlckNvbG9uOiB0cnVlLAorICAgICAqICAgICBhbGlnbjogImNvbG9uIiAvLyBP
cHRpb25hbCwgb3IgInZhbHVlIgorICAgICAqIH0KKyAgICAgKi8KKworICAgIHZhciBvcHRpb25z
ID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBhbGlnbiA9IG9wdGlvbnMuYWxp
Z24sCisgICAgICAgIGJlZm9yZUNvbG9uID0gKyEhb3B0aW9ucy5iZWZvcmVDb2xvbiwgLy8gRGVm
YXVsdHMgdG8gZmFsc2UKKyAgICAgICAgYWZ0ZXJDb2xvbiA9ICshKG9wdGlvbnMuYWZ0ZXJDb2xv
biA9PT0gZmFsc2UpOyAvLyBEZWZhdWx0cyB0byB0cnVlCisKKyAgICAvKioKKyAgICAgKiBHZXRz
IHRoZSBzcGFjaW5nIGFyb3VuZCB0aGUgY29sb24gaW4gYW4gb2JqZWN0IGxpdGVyYWwgcHJvcGVy
dHkKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgZnJvbSBh
biBvYmplY3QgbGl0ZXJhbAorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFNwYWNpbmcgYmVmb3Jl
IGFuZCBhZnRlciB0aGUgcHJvcGVydHkncyBjb2xvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGdl
dFByb3BlcnR5U3BhY2luZyhwcm9wZXJ0eSkgeworICAgICAgICB2YXIgd2hpdGVzcGFjZSA9IC9e
KFxzKik6KFxzKikvLmV4ZWMoY29udGV4dC5nZXRTb3VyY2UoKS5zbGljZSgKKyAgICAgICAgICAg
IHByb3BlcnR5LmtleS5yYW5nZVsxXSwgcHJvcGVydHkudmFsdWUucmFuZ2VbMF0KKyAgICAgICAg
KSk7CisKKyAgICAgICAgaWYgKHdoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgYmVmb3JlQ29sb246IHdoaXRlc3BhY2VbMV0ubGVuZ3RoLAorICAgICAg
ICAgICAgICAgIGFmdGVyQ29sb246IHdoaXRlc3BhY2VbMl0ubGVuZ3RoCisgICAgICAgICAgICB9
OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhbiBhcHByb3By
aWF0ZWx5LWZvcm1hdHRlZCBlcnJvciBpZiBzcGFjaW5nIGlzIGluY29ycmVjdCBvbiBvbmUKKyAg
ICAgKiBzaWRlIG9mIHRoZSBjb2xvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5
IEtleS12YWx1ZSBwYWlyIGluIGFuIG9iamVjdCBsaXRlcmFsLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBzaWRlIFNpZGUgYmVpbmcgdmVyaWZpZWQgLSBlaXRoZXIgImtleSIgb3IgInZhbHVlIi4K
KyAgICAgKiBAcGFyYW0ge2ludH0gZGlmZiBEaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsIGFuZCBl
eHBlY3RlZCBzcGFjaW5nLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1
bmN0aW9uIHJlcG9ydChwcm9wZXJ0eSwgc2lkZSwgZGlmZikgeworICAgICAgICBpZiAoZGlmZikg
eworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocHJvcGVydHlbc2lkZV0sIG1lc3NhZ2VzW3Np
ZGVdLCB7CisgICAgICAgICAgICAgICAgZXJyb3I6IGRpZmYgPiAwID8gIkV4dHJhIiA6ICJNaXNz
aW5nIiwKKyAgICAgICAgICAgICAgICBrZXk6IGdldEtleShwcm9wZXJ0eSkKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsaWduKSB7IC8vIFZlcmlmeSB2ZXJ0
aWNhbCBhbGlnbm1lbnQKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgIk9iamVjdEV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRp
ZXMgPSBub2RlLnByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByb3Bl
cnRpZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB3aWR0aHMgPSBwcm9wZXJ0aWVzLm1h
cChnZXRLZXlXaWR0aCksIC8vIFdpZHRoIG9mIGtleXMsIGluY2x1ZGluZyBxdW90ZXMKKyAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGggPSBNYXRoLm1heC5hcHBseShudWxsLCB3aWR0aHMp
LAorICAgICAgICAgICAgICAgICAgICBpLCBwcm9wZXJ0eSwgc3BhY2luZywgd2lkdGg7CisKKyAg
ICAgICAgICAgICAgICAvLyBDb25kaXRpb25hbGx5IGluY2x1ZGUgb25lIHNwYWNlIGJlZm9yZSBv
ciBhZnRlciBjb2xvbgorICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoICs9IChhbGlnbiA9PT0g
ImNvbG9uIiA/IGJlZm9yZUNvbG9uIDogYWZ0ZXJDb2xvbik7CisKKyAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkgPSBwcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgICAgICBzcGFjaW5nID0gZ2V0UHJv
cGVydHlTcGFjaW5nKHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYWNp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBPYmplY3QgbGl0ZXJh
bCBnZXR0ZXJzL3NldHRlcnMgbGFjayBhIGNvbG9uCisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoc1tpXTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxpZ24gPT09ICJ2YWx1ZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydChwcm9wZXJ0eSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBiZWZvcmVDb2xvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2YWx1ZSIsICh3aWR0
aCArIHNwYWNpbmcuYWZ0ZXJDb2xvbikgLSB0YXJnZXRXaWR0aCk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7IC8vIGFsaWduID0gImNvbG9uIgorICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3J0KHByb3BlcnR5LCAia2V5IiwgKHdpZHRoICsgc3BhY2luZy5iZWZvcmVDb2xvbikgLSB0
YXJnZXRXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2
YWx1ZSIsIHNwYWNpbmcuYWZ0ZXJDb2xvbiAtIGFmdGVyQ29sb24pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgfSBlbHNlIHsgLy8gU3RyaWN0bHkgb2JleSBiZWZvcmVDb2xvbiBhbmQgYWZ0ZXJDb2xvbiBp
biBlYWNoIHByb3BlcnR5CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJQcm9wZXJ0
eSI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSBnZXRQ
cm9wZXJ0eVNwYWNpbmcobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNpbmcpIHsgLy8g
T2JqZWN0IGxpdGVyYWwgZ2V0dGVycy9zZXR0ZXJzIGxhY2sgY29sb24gc3BhY2luZworICAgICAg
ICAgICAgICAgICAgICByZXBvcnQobm9kZSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBi
ZWZvcmVDb2xvbik7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLCAidmFsdWUiLCBz
cGFjaW5nLmFmdGVyQ29sb24gLSBhZnRlckNvbG9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30se31dLDMyOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUg
dG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIGJsb2NrIGNhbiBiZSBuZXN0ZWQgaW4gYSBmdW5jdGlv
bi4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICB2YXIgZnVuY3Rpb25TdGFjayA9IFtdLAorICAgICAgICBtYXhE
ZXB0aCA9IGNvbnRleHQub3B0aW9uc1swXSB8fCA0OworCisgICAgZnVuY3Rpb24gc3RhcnRGdW5j
dGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25TdGFjay5wdXNoKDApOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGVuZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBvcCgpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHB1c2hCbG9jayhub2RlKSB7CisgICAgICAgIHZhciBsZW4gPSAr
K2Z1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAo
bGVuID4gbWF4RGVwdGgpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJCbG9j
a3MgYXJlIG5lc3RlZCB0b28gZGVlcGx5ICh7e2RlcHRofX0pLiIsCisgICAgICAgICAgICAgICAg
ICAgIHsgZGVwdGg6IGxlbiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBv
cEJsb2NrKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0g
MV0tLTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQ
SQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9n
cmFtIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFy
dEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwK
KworICAgICAgICAiSWZTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJTd2l0Y2hTdGF0
ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisg
ICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiV2hpbGVTdGF0
ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogcHVzaEJsb2NrLAor
ICAgICAgICAiRm9yU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiRm9ySW5TdGF0ZW1l
bnQiOiBwdXNoQmxvY2ssCisKKyAgICAgICAgIklmU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywK
KyAgICAgICAgIlN3aXRjaFN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJUcnlT
dGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudDpleGl0
IjogcG9wQmxvY2ssCisgICAgICAgICJXaGlsZVN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisg
ICAgICAgICJXaXRoU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIkZvclN0YXRl
bWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogcG9w
QmxvY2ssCisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9u
LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAg
ICAgIlByb2dyYW06ZXhpdCI6IGVuZEZ1bmN0aW9uCisgICAgfTsKKworfTsKKworfSx7fV0sMzM6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gY2hlY2sgZm9yIG1heCBsZW5ndGggb24gYSBsaW5lLgorICogQGF1dGhvciBNYXR0
IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqIEBjb3B5cmlnaHQgMjAxMyBN
YXR0IER1VmFsbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIG1hZGUgdXAgb2YgcmVwZWF0
aW5nIGEgZ2l2ZW4gc3RyaW5nIGEgY2VydGFpbgorICAgICAqIG51bWJlciBvZiB0aW1lcy4gVGhp
cyB1c2VzIGV4cG9uZW50aWF0aW9uIG9mIHNxdWFyZXMgdG8gYWNoaWV2ZSBzaWduaWZpY2FudAor
ICAgICAqIHBlcmZvcm1hbmNlIGdhaW5zIG92ZXIgdGhlIG1vcmUgdHJhZGl0aW9uYWwgaW1wbGVt
ZW50YXRpb24gb2Ygc3VjaAorICAgICAqIGZ1bmN0aW9uYWxpdHkuCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIHJlcGVhdC4KKyAgICAgKiBAcGFyYW0ge2ludH0gbnVt
IFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuCisgICAgICogQHJldHVy
bnMge3N0cmluZ30gVGhlIGNyZWF0ZWQgc3RyaW5nLgorICAgICAqIEBwcml2YXRlCisgICAgICov
CisgICAgZnVuY3Rpb24gc3RyaW5nUmVwZWF0KHN0ciwgbnVtKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSAiIjsKKyAgICAgICAgZm9yIChudW0gfD0gMDsgbnVtID4gMDsgbnVtID4+Pj0gMSwgc3Ry
ICs9IHN0cikgeworICAgICAgICAgICAgaWYgKG51bSAmIDEpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gc3RyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdmFyIHRhYldpZHRoID0gY29udGV4dC5vcHRpb25zWzFdOwor
CisgICAgdmFyIG1heExlbmd0aCA9IGNvbnRleHQub3B0aW9uc1swXSwKKyAgICAgICAgdGFiU3Ry
aW5nID0gc3RyaW5nUmVwZWF0KCIgIiwgdGFiV2lkdGgpOworCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnVuY3Rp
b24gY2hlY2tQcm9ncmFtRm9yTWF4TGVuZ3RoKG5vZGUpIHsKKyAgICAgICAgdmFyIGxpbmVzID0g
Y29udGV4dC5nZXRTb3VyY2VMaW5lcygpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRhYnMK
KyAgICAgICAgLy8gU3BsaXQgKGhvbm9ycyBsaW5lLWVuZGluZykKKyAgICAgICAgLy8gSXRlcmF0
ZQorICAgICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAg
IGlmIChsaW5lLnJlcGxhY2UoL1x0L2csIHRhYlN0cmluZykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29s
OiAxIH0sICJMaW5lICIgKyAoaSArIDEpICsgIiBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbmUgbGVu
Z3RoIG9mICIgKyBtYXhMZW5ndGggKyAiLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0i
OiBjaGVja1Byb2dyYW1Gb3JNYXhMZW5ndGgKKyAgICB9OworCit9OworCit9LHt9XSwzNDpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBlbmZvcmNlIGEgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIGNhbGxiYWNrcy4KKyAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIENvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHZhciBjYWxsYmFja1N0YWNrID0gW107CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAg
ICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAg
ICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIikgeworICAgICAgICAgICAg
ICAgIGNhbGxiYWNrU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrU3RhY2subGVuZ3RoID4gVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG9wdHMgPSB7bnVtOiBjYWxsYmFja1N0YWNrLmxlbmd0aCwgbWF4OiBUSFJFU0hPTER9
OworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUb28gbWFueSBuZXN0ZWQg
Y2FsbGJhY2tzICh7e251bX19KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgb3B0cyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uOmV4aXQiOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrU3RhY2sucG9wKCk7
CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDM1OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hl
biBhIGZ1bmN0aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzCisgKiBAYXV0aG9yIElseWEgVm9s
b2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG51bVBhcmFtcyA9IGNvbnRl
eHQub3B0aW9uc1swXSB8fCAzOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmFt
cy5sZW5ndGggPiBudW1QYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycyAoe3tjb3VudH19KS4g
TWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgeworICAgICAgICAgICAgICAgICAgICBjb3Vu
dDogbm9kZS5wYXJhbXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBtYXg6IG51bVBhcmFt
cworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS5wYXJhbXMubGVuZ3RoID4gbnVtUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMg
KHt7Y291bnR9fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsIHsKKyAgICAgICAgICAg
ICAgICAgICAgY291bnQ6IG5vZGUucGFyYW1zLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
bWF4OiBudW1QYXJhbXMKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisKK307CisKK30se31dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gc2V0IHRoZSBtYXhpbXVt
IG51bWJlciBvZiBzdGF0ZW1lbnRzIGluIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIElhbiBDaHJp
c3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFy
IGZ1bmN0aW9uU3RhY2sgPSBbXSwKKyAgICAgICAgbWF4U3RhdGVtZW50cyA9IGNvbnRleHQub3B0
aW9uc1swXSB8fCAxMDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAg
IGZ1bmN0aW9uU3RhY2sucHVzaCgwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlv
bihub2RlKSB7CisgICAgICAgIHZhciBjb3VudCA9IGZ1bmN0aW9uU3RhY2sucG9wKCk7CisKKyAg
ICAgICAgaWYgKGNvdW50ID4gbWF4U3RhdGVtZW50cykgeworICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHN0YXRlbWVudHMgKHt7Y291
bnR9fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsCisgICAgICAgICAgICAgICAgICAg
IHsgY291bnQ6IGNvdW50LCBtYXg6IG1heFN0YXRlbWVudHMgfSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjb3VudFN0YXRlbWVudHMobm9kZSkgeworICAgICAgICBmdW5jdGlv
blN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gKz0gbm9kZS5ib2R5Lmxlbmd0aDsKKyAg
ICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0
YXJ0RnVuY3Rpb24sCisKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogY291bnRTdGF0ZW1lbnRz
LAorCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9
OworCit9LHt9XSwzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zdHJ1Y3RvcnMgd2l0aG91dCBj
YXBpdGFsIGxldHRlcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqIEBjb3B5cmln
aHQgMjAxMy0yMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICov
CisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENBUFNfQUxMT1dFRCA9IFsKKyAgICAiTnVtYmVyIiwK
KyAgICAiU3RyaW5nIiwKKyAgICAiQm9vbGVhbiIsCisgICAgIkRhdGUiLAorICAgICJBcnJheSIs
CisgICAgIlN5bWJvbCIsCisgICAgIlJlZ0V4cCIKK107CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIGNvbmZpZyA9IGNvbnRl
eHQub3B0aW9uc1swXSB8fCB7fTsKKyAgICBjb25maWcubmV3SXNDYXAgPSBjb25maWcubmV3SXND
YXAgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOworICAgIGNvbmZpZy5jYXBJc05ldyA9IGNvbmZp
Zy5jYXBJc05ldyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisKKyAgICB2YXIgbGlzdGVuZXJz
ID0ge307CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEdldCBleGFjdCBjYWxsZWUgbmFt
ZSBmcm9tIGV4cHJlc3Npb24KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJl
c3Npb24gb3IgTmV3RXhwcmVzc2lvbiBub2RlCisgICAgICogQHJldHVybnMge1N0cmluZ30gbmFt
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSkg
eworCisgICAgICAgIHZhciBuYW1lID0gIiIsCisgICAgICAgICAgICBwcm9wZXJ0eTsKKworICAg
ICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAg
ICAgICAgICBwcm9wZXJ0eSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5OworCisgICAgICAgICAgICBp
ZiAocHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmICh0eXBlb2YgcHJvcGVydHkudmFsdWUg
PT09ICJzdHJpbmciKSkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS52YWx1ZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYm
ICFub2RlLmNhbGxlZS5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0
eS5uYW1lOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFt
ZSA9IG5vZGUuY2FsbGVlLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWU7Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2FwaXRhbGl6YXRpb24gc3RhdGUg
b2YgdGhlIHN0cmluZyAtCisgICAgICogV2hldGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHVw
cGVyY2FzZSwgbG93ZXJjYXNlLCBvciBub24tYWxwaGFiZXRpYworICAgICAqIEBwYXJhbSB7U3Ry
aW5nfSBzdHIgU3RyaW5nCisgICAgICogQHJldHVybnMge1N0cmluZ30gY2FwaXRhbGl6YXRpb24g
c3RhdGU6ICJub24tYWxwaGEiLCAibG93ZXIiLCBvciAidXBwZXIiCisgICAgICovCisgICAgZnVu
Y3Rpb24gZ2V0Q2FwKHN0cikgeworICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgw
KTsKKworICAgICAgICB2YXIgZmlyc3RDaGFyTG93ZXIgPSBmaXJzdENoYXIudG9Mb3dlckNhc2Uo
KTsKKyAgICAgICAgdmFyIGZpcnN0Q2hhclVwcGVyID0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCk7
CisKKyAgICAgICAgaWYgKGZpcnN0Q2hhckxvd2VyID09PSBmaXJzdENoYXJVcHBlcikgeworICAg
ICAgICAgICAgLy8gY2hhciBoYXMgbm8gdXBwZXJjYXNlIHZhcmlhbnQsIHNvIGl0J3Mgbm9uLWFs
cGhhYmV0aWMKKyAgICAgICAgICAgIHJldHVybiAibm9uLWFscGhhIjsKKyAgICAgICAgfSBlbHNl
IGlmIChmaXJzdENoYXIgPT09IGZpcnN0Q2hhckxvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4g
Imxvd2VyIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAidXBwZXIiOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgY2FwaXRhbGl6YXRp
b24gaXMgYWxsb3dlZCBmb3IgYSBDYWxsRXhwcmVzc2lvbgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBDYWxsRXhwcmVzc2lvbiBub2RlCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxl
ZU5hbWUgQ2FwaXRhbGl6ZWQgY2FsbGVlIG5hbWUgZnJvbSBhIENhbGxFeHByZXNzaW9uCisgICAg
ICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVlIG1heSBiZSBj
YXBpdGFsaXplZAorICAgICAqLworICAgIGZ1bmN0aW9uIGlzQ2FwQWxsb3dlZChub2RlLCBjYWxs
ZWVOYW1lKSB7CisgICAgICAgIGlmIChDQVBTX0FMTE9XRUQuaW5kZXhPZihjYWxsZWVOYW1lKSA+
PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y2FsbGVlTmFtZSA9PT0gIlVUQyIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJl
c3Npb24iKSB7CisgICAgICAgICAgICAvLyBhbGxvdyBpZiBjYWxsZWUgaXMgRGF0ZS5VVEMKKyAg
ICAgICAgICAgIHJldHVybiBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIi
ICYmCisgICAgICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJEYXRl
IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIGlmIChjb25maWcubmV3SXNDYXApIHsKKyAgICAgICAgbGlzdGVuZXJzLk5ld0V4cHJlc3Np
b24gPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjb25zdHJ1Y3Rvck5hbWUg
PSBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgaWYgKGNvbnN0
cnVjdG9yTmFtZSAmJiBnZXRDYXAoY29uc3RydWN0b3JOYW1lKSA9PT0gImxvd2VyIikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIGNvbnN0cnVjdG9yIG5hbWUgc2hv
dWxkIG5vdCBzdGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlci4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLmNhcElzTmV3KSB7CisgICAgICAg
IGxpc3RlbmVycy5DYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgdmFyIGNhbGxlZU5hbWUgPSBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAg
ICAgICAgICAgaWYgKGNhbGxlZU5hbWUgJiYgZ2V0Q2FwKGNhbGxlZU5hbWUpID09PSAidXBwZXIi
ICYmICFpc0NhcEFsbG93ZWQobm9kZSwgY2FsbGVlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiQSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBzdGFydGluZyB3aXRo
IGFuIHVwcGVyY2FzZSBsZXR0ZXIgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0cnVjdG9y
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHJldHVybiBsaXN0
ZW5lcnM7Cit9OworCit9LHt9XSwzODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3RydWN0
b3Igd2l0aG91dCBwYXJlbnRoZXNlcworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRU
b2tlbnMobm9kZSk7CisgICAgICAgICAgICB2YXIgcHJlbnRpY2VzVG9rZW5zID0gdG9rZW5zLmZp
bHRlcihmdW5jdGlvbih0b2tlbikgeworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1
ZSA9PT0gIigiIHx8IHRva2VuLnZhbHVlID09PSAiKSI7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGlmIChwcmVudGljZXNUb2tlbnMubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nICcoKScgaW52b2tpbmcgYSBjb25zdHJ1Y3Rv
ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMzk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYWxlcnQsIGNvbmZpcm0sIHByb21wdAorICogQGF1dGhvciBO
aWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBIZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBt
YXRjaFByb2hpYml0ZWQobmFtZSkgeworICAgIHJldHVybiBuYW1lLm1hdGNoKC9eKGFsZXJ0fGNv
bmZpcm18cHJvbXB0KSQvKTsKK30KKworZnVuY3Rpb24gcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJl
c3VsdCkgeworICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHt7bmFtZX19LiIs
IHsgbmFtZTogcmVzdWx0WzFdIH0pOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2Fs
bEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQ7
CisKKyAgICAgICAgICAgIC8vIHdpdGhvdXQgd2luZG93LgorICAgICAgICAgICAgaWYgKG5vZGUu
Y2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbWF0Y2hQcm9oaWJpdGVkKG5vZGUuY2FsbGVlLm5hbWUpOworCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnByb3Bl
cnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bWF0Y2hQcm9oaWJpdGVkKG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpOworCisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gIndpbmRvdyIp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBjb25zdHJ1Y3Rpb24gb2YgZGVuc2UgYXJyYXlzIHVz
aW5nIHRoZSBBcnJheSBjb25zdHJ1Y3RvcgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDov
L3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5j
dGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIG5vZGUuYXJndW1l
bnRzLmxlbmd0aCAhPT0gMSAmJgorICAgICAgICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gIklk
ZW50aWZpZXIiICYmCisgICAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAiQXJyYXkiCisg
ICAgICAgICkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBhcnJheSBs
aXRlcmFsIG5vdGF0aW9uIFtdIGlzIHByZWZlcnJhYmxlLiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAg
ICJOZXdFeHByZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSw0MTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIGJpdHdpc2UgaWRlbnRpZmllcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
KyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7Cisg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiAne3tvcGVyYXRv
cn19Jy4iLCB7IG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yIH0pOworICAgIH0KKworICAgIHJldHVy
biB7CisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAg
ICAgICAgICAvLyB3YXJuIGZvciBeIHwgJiB+IDw8ID4+ID4+PgorICAgICAgICAgICAgaWYgKG5v
ZGUub3BlcmF0b3IubWF0Y2goL14oPzpbXF4mXHx+XXw8PHw+Pj4/KSQvKSkgeworICAgICAgICAg
ICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAg
ICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8v
IHdhcm4gZm9yIH4KKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAifiIpIHsKKyAg
ICAgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQor
ICAgIH07CisKK307CisKK30se31dLDQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFyZ3VtZW50cy5j
YWxsZWUgYW5kIGFyZ3VtZW50cy5jYWxsZXIuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2Fz
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1i
ZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9iamVjdE5h
bWUgPSBub2RlLm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5v
ZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09ICJhcmd1
bWVudHMiICYmICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUu
bWF0Y2goL15jYWxsZVtlcl0kLykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiQXZvaWQgYXJndW1lbnRzLnt7cHJvcGVydHl9fS4iLCB7IHByb3BlcnR5OiBwcm9wZXJ0
eU5hbWUgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDQzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgdmFyaWFibGUgbGVhayBpbiBDYXRjaENsYXVzZXMgaW4gSUUg
OCBhbmQgZWFybGllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIHBhcmFtSXNTaGFkb3dpbmco
c2NvcGUsIG5hbWUpIHsKKyAgICAgICAgdmFyIGZvdW5kID0gc2NvcGUudmFyaWFibGVzLnNvbWUo
ZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS5uYW1lID09
PSBuYW1lOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyYW1Jc1NoYWRvd2luZyhzY29wZS51cHBlciwgbmFtZSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
KyAgICByZXR1cm4geworCisgICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKworICAgICAgICAg
ICAgaWYgKHBhcmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5vZGUucGFyYW0ubmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVmFsdWUgb2YgJ3t7bmFtZX19JyBtYXkg
YmUgb3ZlcndyaXR0ZW4gaW4gSUUgOCBhbmQgZWFybGllci4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgeyBuYW1lOiBub2RlLnBhcmFtLm5hbWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCit9OworCit9LHt9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIGNvbW1h
cyBpbiBvYmplY3QgbGl0ZXJhbHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8g
SGVscGVycworICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9y
VHJhaWxpbmdDb21tYShub2RlKSB7CisgICAgICAgIHZhciBzZWNvbmRUb0xhc3RUb2tlbiA9IGNv
bnRleHQuZ2V0TGFzdFRva2Vucyhub2RlLCAyKVswXTsKKworICAgICAgICB2YXIgaXRlbXMgPSBu
b2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVtZW50cywKKyAgICAgICAgICAgIGxhc3RJdGVtID0g
aXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07CisgICAgICAgIC8vIFRoZSBsYXN0IHRva2VuIGluIGFu
IG9iamVjdC9hcnJheSBsaXRlcmFsIHdpbGwgYWx3YXlzIGJlIGEgY2xvc2luZworICAgICAgICAv
LyBjdXJseSwgc28gd2UgY2hlY2sgdGhlIHNlY29uZCB0byBsYXN0IHRva2VuIGZvciBhIGNvbW1h
LgorICAgICAgICBpZiAoc2Vjb25kVG9MYXN0VG9rZW4udmFsdWUgPT09ICIsIiAmJiBpdGVtcy5s
ZW5ndGggJiYgbGFzdEl0ZW0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGxhc3RJdGVt
LCBzZWNvbmRUb0xhc3RUb2tlbi5sb2Muc3RhcnQsICJUcmFpbGluZyBjb21tYS4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJ
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIk9iamVj
dEV4cHJlc3Npb24iOiBjaGVja0ZvclRyYWlsaW5nQ29tbWEsCisgICAgICAgICJBcnJheUV4cHJl
c3Npb24iOiBjaGVja0ZvclRyYWlsaW5nQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSw0NTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIGFzc2lnbm1lbnQgaW4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uCisgKiBA
YXV0aG9yIFN0ZXBoZW4gTXVycmF5IDxzcG11cnJheXp6ej4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91
c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRU
b2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJl
dmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9k
ZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4
dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgZnVuY3Rpb24g
aXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9
IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAgICAgICBuZXh0VG9rZW4g
PSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAgICAgcmV0dXJuIGlzUGFy
ZW50aGVzaXNlZChub2RlKSAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0g
IigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAg
ICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5v
ZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEZvckFzc2lnbihub2RlKSB7
CisgICAgICAgIGlmIChub2RlLnRlc3QgJiYgKG5vZGUudGVzdC50eXBlID09PSAiQXNzaWdubWVu
dEV4cHJlc3Npb24iKSAmJiAhaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhw
cmVzc2lvbiBhbmQgaW5zdGVhZCBzYXcgYW4gYXNzaWdubWVudC4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgICJJZlN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24s
CisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAgICJEb1do
aWxlU3RhdGVtZW50IjogdGVzdEZvckFzc2lnbiwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IHRl
c3RGb3JBc3NpZ24KKyAgICB9OworCit9OworCit9LHt9XSw0NjpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBv
ZiBjb25zb2xlIG9iamVjdAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5vYmplY3QubmFt
ZSA9PT0gImNvbnNvbGUiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IlVuZXhwZWN0ZWQgY29uc29sZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgfQorICAgIH07CisKK307CisKK30se31dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIGNvbnN0YW50
IGNvbmRpdGlvbnMKKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVseiA8aHR0cDovL3JuZG0uZGU+
CisgKi8KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICog
Q2hlY2tzIGlmIGEgbm9kZSBoYXMgYSBjb25zdGFudCB0cnV0aGluZXNzIHZhbHVlLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJl
dHVybnMge0Jvb2x9IHRydWUgd2hlbiBub2RlJ3MgdHJ1dGhpbmVzcyBpcyBjb25zdGFudAorICAg
ICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNDb25zdGFudChub2RlKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgIkxpdGVyYWwiOgorICAg
ICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAgICBjYXNlICJPYmplY3RFeHBy
ZXNzaW9uIjoKKyAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgIGNhc2UgIkJpbmFyeUV4
cHJlc3Npb24iOgorICAgICAgICBjYXNlICJMb2dpY2FsRXhwcmVzc2lvbiI6CisgICAgICAgICAg
ICByZXR1cm4gaXNDb25zdGFudChub2RlLmxlZnQpICYmIGlzQ29uc3RhbnQobm9kZS5yaWdodCk7
CisgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVy
biBpc0NvbnN0YW50KG5vZGUucmlnaHQpOworICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Np
b24iOgorICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9kZS5leHByZXNzaW9uc1tub2Rl
LmV4cHJlc3Npb25zLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBv
cnRzIHdoZW4gdGhlIGdpdmVuIG5vZGUgY29udGFpbnMgYSBjb25zdGFudCBjb25kaXRpb24uCisg
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAg
KiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9u
IGNoZWNrQ29uc3RhbnRDb25kaXRpb24obm9kZSkgeworICAgICAgICBpZiAobm9kZS50ZXN0ICYm
IGlzQ29uc3RhbnQobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgY29uc3RhbnQgY29uZGl0aW9uLiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24i
OiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBjaGVja0Nv
bnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50
Q29uZGl0aW9uLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25k
aXRpb24sCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uCisg
ICAgfTsKKworfTsKKworfSx7fV0sNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZm9yYmlkIGNvbnRyb2wgY2hhcmFjdGVz
IGZyb20gcmVndWxhciBleHByZXNzaW9ucy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
KyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworCisgICAgZnVuY3Rpb24gZ2V0UmVnRXhwKG5vZGUp
IHsKKworICAgICAgICBpZiAobm9kZS52YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAg
ICAgICAgcmV0dXJuIG5vZGUudmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUu
dmFsdWUgPT09ICJzdHJpbmciKSB7CisKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0
LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgaWYgKChwYXJlbnQudHlwZSA9PT0g
Ik5ld0V4cHJlc3Npb24iIHx8IHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSAmJgor
ICAgICAgICAgICAgcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgcGFyZW50
LmNhbGxlZS5uYW1lID09PSAiUmVnRXhwIikgeworCisgICAgICAgICAgICAgICAgLy8gdGhlcmUg
Y291bGQgYmUgYW4gaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nCisgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobm9kZS52
YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAg
fQorCisKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2Rl
KSB7CisKKyAgICAgICAgICAgIHZhciBjb21wdXRlZFZhbHVlLAorICAgICAgICAgICAgICAgIHJl
Z2V4ID0gZ2V0UmVnRXhwKG5vZGUpOworCisgICAgICAgICAgICBpZiAocmVnZXgpIHsKKyAgICAg
ICAgICAgICAgICBjb21wdXRlZFZhbHVlID0gcmVnZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoL1tceDAwLVx4MWZdLy50ZXN0KGNvbXB1dGVkVmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFj
dGVyIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0OTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHVzZSBvZiBhIGRlYnVnZ2VyIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWth
cworICovCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiRGVi
dWdnZXJTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVW5leHBlY3RlZCAnZGVidWdnZXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBkZWxldGluZyB2
YXJpYWJsZXMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImRlbGV0ZSIgJiYgbm9k
ZS5hcmd1bWVudC50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVmFyaWFibGVzIHNob3VsZCBub3QgYmUgZGVsZXRlZC4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDUxOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGNoZWNrIGZvciBhbWJpZ3VvdXMgZGl2IG9wZXJhdG9yIGluIHJlZ2V4ZXMKKyAqIEBhdXRob3Ig
TWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2Rl
LCAxKVswXSwKKyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCisgICAgICAg
ICAgICAgICAgc291cmNlOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFy
RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldEZpcnN0
VG9rZW5zKG5vZGUsIDEpWzBdLnZhbHVlOworCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVsx
XSA9PT0gIj0iKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJB
IHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIGNhbiBiZSBjb25mdXNlZCB3aXRoICcvPScuIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sNTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZHVwbGljYXRlIGtleXMgaW4gYW4g
b2JqZWN0LgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBPYmplY3QgdGhhdCB3aWxsIGJlIGEgbWFw
IG9mIHByb3BlcnRpZXMtLXNhZmUgYmVjYXVzZSB3ZSB3aWxsCisgICAgICAgICAgICAvLyBwcmVm
aXggYWxsIG9mIHRoZSBrZXlzLgorICAgICAgICAgICAgdmFyIG5vZGVQcm9wcyA9IHt9OworCisg
ICAgICAgICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgewor
ICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lID0gcHJvcGVydHkua2V5Lm5hbWUgfHwgcHJvcGVy
dHkua2V5LnZhbHVlOworICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5raW5kICsg
Ii0iICsga2V5TmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlUHJvcHNba2V5XSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRHVwbGljYXRlIGtleSAn
e3trZXl9fScuIiwgeyBrZXk6IGtleU5hbWUgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZVByb3BzW2tleV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSw1MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIGBlbHNlYCBhZnRlciBhIGByZXR1cm5gIGluIGBpZmAKKyAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICBmdW5jdGlvbiBjaGVja0ZvclJldHVyblN0YXRlbWVudChub2RlLCBhbHRlcm5h
dGUpIHsKKyAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlJldHVyblN0YXRlbWVudCIpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KGFsdGVybmF0ZSwgIlVuZXhwZWN0ZWQgJ2Vsc2UnIGFm
dGVyICdyZXR1cm4nLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGZpbmRpbmcgYSBSZXR1cm5TdGF0ZW1lbnQsIGlmIHRo
ZXJlJ3Mgbm8gYGVsc2VgCisgICAgICAgICAgICAvLyBvciBpZiB0aGUgYWx0ZXJuYXRlIGlzIGFs
c28gYW4gaWYgKGluZGljYXRpbmcgYW4gZWxzZSBpZikuCisgICAgICAgICAgICBpZiAobm9kZS5h
bHRlcm5hdGUgJiYgbm9kZS5jb25zZXF1ZW50ICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJ
ZlN0YXRlbWVudCIpIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBCbG9ja1N0
YXRlbWVudCwgY2hlY2sgZWFjaCBjb25zZXF1ZW50IGJvZHkgbm9kZS4KKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS5jb25zZXF1ZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5jb25zZXF1ZW50LmJvZHkuZm9yRWFjaChmdW5jdGlvbiAoYm9k
eU5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50
KGJvZHlOb2RlLCBub2RlLmFsdGVybmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgLy8gSWYgbm90IGEgYmxvY2sgc3RhdGVtZW50LCBtYWtlIHN1cmUgdGhl
IGNvbnNlcXVlbnQgaXNuJ3QgYQorICAgICAgICAgICAgICAgIC8vIFJldHVyblN0YXRlbWVudAor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0
dXJuU3RhdGVtZW50KG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sNTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB0aGUgdXNlIG9mIGVtcHR5IGNoYXJhY3RlciBjbGFzc2VzIGlu
IHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRv
a2Vucyhub2RlKTsKKyAgICAgICAgICAgIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikg
eworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgcGxhaW4tRW5nbGlzaCBkZXNj
cmlwdGlvbiBvZiB0aGUgZm9sbG93aW5nIHJlZ2V4cDoKKyAgICAgICAgICAgICAgICAwLiBgXmAg
Zml4IHRoZSBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAg
ICAgICAxLiBgXC9gOiB0aGUgYC9gIHRoYXQgYmVnaW5zIHRoZSByZWdleHAKKyAgICAgICAgICAg
ICAgICAyLiBgKFteXFxbXXxcXC58XFsoW15cXFxdXXxcXC4pK1xdKSpgOiByZWdleHAgY29udGVu
dHM7IDAgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAyLjAuIGBb
XlxcW11gOiBhbnkgY2hhcmFjdGVyIHRoYXQncyBub3QgYSBgXGAgb3IgYSBgW2AgKGFueXRoaW5n
IGJ1dCBlc2NhcGUgc2VxdWVuY2VzIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcykKKyAgICAgICAgICAg
ICAgICAgIDIuMS4gYFxcLmA6IGFuIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAg
Mi4yLiBgXFsoW15cXFxdXXxcXC4pK1xdYDogYSBjaGFyYWN0ZXIgY2xhc3MgdGhhdCBpc24ndCBl
bXB0eQorICAgICAgICAgICAgICAgIDMuIGBcL2AgdGhlIGAvYCB0aGF0IGVuZHMgdGhlIHJlZ2V4
cAorICAgICAgICAgICAgICAgIDQuIGBbZ2lteV0qYDogb3B0aW9uYWwgcmVnZXhwIGZsYWdzCisg
ICAgICAgICAgICAgICAgNS4gYCRgOiBmaXggdGhlIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN0
cmluZworICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09ICJSZWd1bGFyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAhL15cLyhbXlxcW118
XFwufFxbKFteXFxcXV18XFwuKStcXSkqXC9bZ2lteV0qJC8udGVzdCh0b2tlbi52YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkVtcHR5IGNsYXNzLiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9
OworCit9OworCit9LHt9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gbGFiZWwgaXMgbm90IHVzZWQg
Zm9yIGEgbG9vcCBvciBzd2l0Y2gKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS50eXBlICE9PSAi
Rm9yU3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIldoaWxlU3RhdGVtZW50IiAmJiBu
b2RlLmJvZHkudHlwZSAhPT0gIkRvV2hpbGVTdGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9
PSAiU3dpdGNoU3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIkZvckluU3RhdGVtZW50
IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxh
YmVsIHt7bH19Iiwge2w6IG5vZGUubGFiZWwubmFtZX0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gZW1w
dHkgYmxvY2sgc3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFu
Y2VzdG9ycygpLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMu
bGVuZ3RoIC0gMV0sCisgICAgICAgICAgICAgICAgcGFyZW50VHlwZSA9IHBhcmVudC50eXBlLAor
ICAgICAgICAgICAgICAgIGlzRmluYWxseUJsb2NrID0gKHBhcmVudFR5cGUgPT09ICJUcnlTdGF0
ZW1lbnQiKSAmJiAocGFyZW50LmZpbmFsaXplciA9PT0gbm9kZSk7CisKKyAgICAgICAgICAgIGlm
ICgvRnVuY3Rpb25FeHByZXNzaW9ufEZ1bmN0aW9uRGVjbGFyYXRpb258Q2F0Y2hDbGF1c2UvLnRl
c3QocGFyZW50VHlwZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGlzRmluYWxseUJsb2NrICYm
ICFwYXJlbnQuaGFuZGxlcnMubGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgYmxvY2sgc3RhdGVt
ZW50LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5j
YXNlcyA9PT0gInVuZGVmaW5lZCIgfHwgbm9kZS5jYXNlcy5sZW5ndGggPT09IDApIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgc3dpdGNoIHN0YXRlbWVudC4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDU3Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgY29tcGFyaXNvbnMgdG8gbnVsbCB3aXRob3V0IGEgdHlwZS1jaGVja2luZwor
ICogb3BlcmF0b3IuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGJhZE9wZXJhdG9yID0gbm9kZS5vcGVy
YXRvciA9PT0gIj09IiB8fCBub2RlLm9wZXJhdG9yID09PSAiIT0iOworCisgICAgICAgICAgICBp
ZiAobm9kZS5yaWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC5yYXcgPT09ICJu
dWxsIiAmJiBiYWRPcGVyYXRvciB8fAorICAgICAgICAgICAgICAgICAgICBub2RlLmxlZnQudHlw
ZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUubGVmdC5yYXcgPT09ICJudWxsIiAmJiBiYWRPcGVyYXRv
cikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2Ug4oCYPT094oCZ
IHRvIGNvbXBhcmUgd2l0aCDigJhudWxs4oCZLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sNTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZXZhbCgpIHN0
YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgdmFyIElNUExJRURfRVZBTCA9IC9zZXQoPzpUaW1lb3V0fEludGVydmFsKS87
CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgYSBub2RlIHJlcHJl
c2VudHMgYSBjYWxsIHRvIHNldFRpbWVvdXQvc2V0SW50ZXJ2YWwgd2l0aAorICAgICAqIGEgc3Ry
aW5nIGFyZ3VtZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBj
aGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBtYXRjaGVz
LCBmYWxzZSBpZiBub3QuCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c0ltcGxpZWRFdmFsKG5vZGUpIHsKKworICAgICAgICB2YXIgaXNNZW1iZXJFeHByZXNzaW9uID0g
KG5vZGUuY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiksCisgICAgICAgICAgICBp
c0lkZW50aWZpZXIgPSAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSwKKyAgICAg
ICAgICAgIGlzU2V0TWV0aG9kID0gKGlzSWRlbnRpZmllciAmJiBJTVBMSUVEX0VWQUwudGVzdChu
b2RlLmNhbGxlZS5uYW1lKSkgfHwKKyAgICAgICAgICAgICAgICAoaXNNZW1iZXJFeHByZXNzaW9u
ICYmIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSAid2luZG93IiAmJgorICAgICAgICAgICAg
ICAgIElNUExJRURfRVZBTC50ZXN0KG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpKSwKKyAgICAg
ICAgICAgIGhhc1N0cmluZ0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMubGVuZ3RoICYmICh0eXBl
b2Ygbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPT09ICJzdHJpbmciKTsKKworICAgICAgICByZXR1
cm4gaXNTZXRNZXRob2QgJiYgaGFzU3RyaW5nQXJndW1lbnQ7CisgICAgfQorCisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJldmFsIikgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJldmFsIGNhbiBiZSBoYXJtZnVsLiIpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ltcGxpZWRFdmFsKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRz
WzBdLnZhbHVlID09PSAic3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkltcGxpZWQgZXZhbCBjYW4gYmUgaGFybWZ1bC4gUGFzcyBhIGZ1bmN0aW9u
IGluc3RlYWQgb2YgYSBzdHJpbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3Np
Z25tZW50IG9mIHRoZSBleGNlcHRpb24gcGFyYW1ldGVyCisgKiBAYXV0aG9yIFN0ZXBoZW4gTXVy
cmF5IDxzcG11cnJheXp6ej4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBpbkNh
dGNoID0gZmFsc2UsCisgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBudWxsOworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBpbkNhdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBub2RlLnBhcmFt
Lm5hbWU7CisgICAgICAgIH0sCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlOmV4aXQiOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGluQ2F0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGV4Y2VwdGlv
bk5hbWUgPSBudWxsOworICAgICAgICB9LAorCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGluQ2F0Y2gpIHsKKworICAg
ICAgICAgICAgICAgIGlmIChub2RlLmxlZnQubmFtZSA9PT0gZXhjZXB0aW9uTmFtZSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IGFzc2lnbiB0byB0
aGUgZXhjZXB0aW9uIHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDYwOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcg
YWRkaW5nIHByb3BlcnRpZXMgdG8gbmF0aXZlIG9iamVjdCdzIHByb3RvdHlwZXMuCisgKiBAYXV0
aG9yIERhdmlkIE5lbHNvbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1
aXJlbWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBCVUlMVElOUyA9IFsKKyAg
ICAiT2JqZWN0IiwgIkZ1bmN0aW9uIiwgIkFycmF5IiwgIlN0cmluZyIsICJCb29sZWFuIiwgIk51
bWJlciIsICJEYXRlIiwKKyAgICAiUmVnRXhwIiwgIkVycm9yIiwgIkV2YWxFcnJvciIsICJSYW5n
ZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwKKyAgICAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9y
IiwgIlVSSUVycm9yIgorXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgIC8vIGhhbmRsZSB0aGUgQXJyYXkucHJvdG90eXBlLmV4dHJhIHN0eWxlIGNhc2UKKyAg
ICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgdmFyIGxocyA9IG5vZGUubGVmdCwgYWZmZWN0c1Byb3RvOworCisgICAgICAgICAgICBpZiAo
bGhzLnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBsaHMub2JqZWN0LnR5cGUgIT09ICJN
ZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYWZmZWN0c1Byb3RvID0gbGhzLm9iamVjdC5jb21wdXRlZCA/Cisg
ICAgICAgICAgICAgICAgbGhzLm9iamVjdC5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYg
bGhzLm9iamVjdC5wcm9wZXJ0eS52YWx1ZSA9PT0gInByb3RvdHlwZSIgOgorICAgICAgICAgICAg
ICAgIGxocy5vYmplY3QucHJvcGVydHkubmFtZSA9PT0gInByb3RvdHlwZSI7CisKKyAgICAgICAg
ICAgIGlmICghYWZmZWN0c1Byb3RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBCVUlMVElOUy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWx0aW4p
IHsKKyAgICAgICAgICAgICAgICBpZiAobGhzLm9iamVjdC5vYmplY3QubmFtZSA9PT0gYnVpbHRp
bikgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBidWlsdGluICsg
IiBwcm90b3R5cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgLy8gaGFuZGxlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBl
KSBjYXNlCisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlLAorICAgICAgICAgICAgICAgIHN1Ympl
Y3QsCisgICAgICAgICAgICAgICAgb2JqZWN0OworCisgICAgICAgICAgICAvLyBvbmx5IHdvcnJ5
IGFib3V0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eQorICAgICAgICAgICAgaWYgKGNhbGxlZS50eXBl
ID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICBjYWxsZWUub2JqZWN0
Lm5hbWUgPT09ICJPYmplY3QiICYmCisgICAgICAgICAgICAgICAgY2FsbGVlLnByb3BlcnR5Lm5h
bWUgPT09ICJkZWZpbmVQcm9wZXJ0eSIpIHsKKworICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0
aGUgb2JqZWN0IGJlaW5nIGFkZGVkIHRvIGlzIGEgbmF0aXZlIHByb3RvdHlwZQorICAgICAgICAg
ICAgICAgIHN1YmplY3QgPSBub2RlLmFyZ3VtZW50c1swXTsKKyAgICAgICAgICAgICAgICBvYmpl
Y3QgPSBzdWJqZWN0Lm9iamVjdDsKKworICAgICAgICAgICAgICAgIGlmIChvYmplY3QgJiYKKyAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAg
ICAgICAgICAgICAgICAoQlVJTFRJTlMuaW5kZXhPZihvYmplY3QubmFtZSkgPiAtMSkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgc3ViamVjdC5wcm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIikg
eworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG9iamVjdC5uYW1l
ICsgIiBwcm90b3R5cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRk
ZWQuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSw2MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IGJpbmQgY2Fs
bHMKKyAqIEBhdXRob3IgQmVuY2UgRMOhbnlpIDxiZW5jZUBkYW55aS5tZT4KKyAqIEBjb3B5cmln
aHQgMjAxNCBCZW5jZSBEw6FueWkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICB2YXIgc2NvcGUgPSBbeworICAgICAgICBkZXB0aDogLTEsCisgICAgICAgIGZv
dW5kOiAwCisgICAgfV07CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHRvcG1vc3Qgc2NvcGUK
KyAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgdG9wbW9zdCBzY29wZQorICAgICAqLworICAg
IGZ1bmN0aW9uIGdldFRvcFNjb3BlKCkgeworICAgICAgICByZXR1cm4gc2NvcGVbc2NvcGUubGVu
Z3RoIC0gMV07CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRoZSBkZXB0aCBv
ZiB0aGUgdG9wIHNjb3BlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gaW5jcmVtZW50U2NvcGVEZXB0aCgpIHsKKyAgICAgICAgdmFyIHRvcCA9IGdldFRvcFNj
b3BlKCk7CisgICAgICAgIHRvcC5kZXB0aCsrOworICAgIH0KKworICAgIC8qKgorICAgICAqIERl
Y3JlbWVudCB0aGUgZGVwdGggb2YgdGhlIHRvcCBzY29wZQorICAgICAqIEByZXR1cm5zIHt2b2lk
fQorICAgICAqLworICAgIGZ1bmN0aW9uIGRlY3JlbWVudFNjb3BlRGVwdGgoKSB7CisgICAgICAg
IHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOworICAgICAgICB0b3AuZGVwdGgtLTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxICYmCisgICAgICAg
ICAgICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCisgICAg
ICAgICAgICAgICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PT0gImJpbmQiICYmCisgICAg
ICAgICAgICAgICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Np
b24iKSB7CisgICAgICAgICAgICAgICAgc2NvcGUucHVzaCh7CisgICAgICAgICAgICAgICAgICAg
IGNhbGw6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgIGRlcHRoOiAtMSwKKyAgICAgICAgICAg
ICAgICAgICAgZm91bmQ6IDAKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uOmV4aXQiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICh0
b3AuY2FsbCA9PT0gbm9kZSAmJiB0b3AuZm91bmQgPT09IDApIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGZ1bmN0aW9uIGJpbmRpbmcgaXMgdW5uZWNlc3Nhcnku
Iik7CisgICAgICAgICAgICAgICAgc2NvcGUucG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBpbmNyZW1lbnRTY29wZURlcHRoLAor
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGluY3JlbWVudFNjb3BlRGVwdGgsCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAg
ICAgICAiVGhpc0V4cHJlc3Npb24iOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0b3Ag
PSBnZXRUb3BTY29wZSgpOworICAgICAgICAgICAgaWYgKHRvcC5kZXB0aCA9PT0gMCkgeworICAg
ICAgICAgICAgICAgIHRvcC5mb3VuZCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sNjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1bm5lY2Vzc2FyeSBkb3VibGUgbmVn
YXRpb24gaW4gQm9vbGVhbiBjb250ZXh0cworICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiVW5hcnlFeHByZXNz
aW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250
ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9ycy5w
b3AoKSwKKyAgICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKwor
ICAgICAgICAgICAgLy8gRXhpdCBlYXJseSBpZiBpdCdzIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNo
CisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0gIiEiIHx8CisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudC50eXBlICE9PSAiVW5hcnlFeHByZXNzaW9uIiB8fAorICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQub3BlcmF0b3IgIT09ICIhIikgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgKDxib29sPikgLi4uCisgICAg
ICAgICAgICBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIklmU3RhdGVtZW50IikgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9u
IGluIGFuIGlmIHN0YXRlbWVudCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIGRvIC4u
LiB3aGlsZSAoPGJvb2w+KQorICAgICAgICAgICAgfSBlbHNlIGlmIChncmFuZHBhcmVudC50eXBl
ID09PSAiRG9XaGlsZVN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIGRvIHdoaWxlIGxvb3AgY29u
ZGl0aW9uLiIpOworCisgICAgICAgICAgICAvLyB3aGlsZSAoPGJvb2w+KSAuLi4KKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIldoaWxlU3RhdGVtZW50Iikgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5l
Z2F0aW9uIGluIGEgd2hpbGUgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIDxi
b29sPiA/IC4uLiA6IC4uLgorICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlw
ZSA9PT0gIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFy
ZW50ID09PSBncmFuZHBhcmVudC50ZXN0KSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgdGVybmFyeSBjb25kaXRp
b24uIik7CisKKyAgICAgICAgICAgIC8vIGZvciAoLi4uOyA8Ym9vbD47IC4uLikgLi4uCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiRm9yU3RhdGVtZW50IiAm
JgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFyZW50LnRlc3QpKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVn
YXRpb24gaW4gYSBmb3IgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vICE8Ym9v
bD4KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJVbmFyeUV4
cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Lm9wZXJhdG9yID09
PSAiISIpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFu
dCBtdWx0aXBsZSBuZWdhdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gQm9vbGVhbig8Ym9vbD4p
CisgICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJl
c3Npb24iICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09
PSAiSWRlbnRpZmllciIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVl
Lm5hbWUgPT09ICJCb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBjYWxsIHRvIEJvb2xlYW4oKS4iKTsK
KworICAgICAgICAgICAgLy8gbmV3IEJvb2xlYW4oPGJvb2w+KQorICAgICAgICAgICAgfSBlbHNl
IGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJlc3Npb24iICYmCisgICAgICAgICAg
ICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAg
ICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLm5hbWUgPT09ICJCb29sZWFuIikp
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJs
ZSBuZWdhdGlvbiBpbiBCb29sZWFuIGNvbnN0cnVjdG9yIGNhbGwuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2MzpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgcGFyZW50aGVz
ZXNpc25nIGhpZ2hlciBwcmVjZWRlbmNlIHN1YmV4cHJlc3Npb25zLgorICogQGF1dGhvciBNaWNo
YWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVz
aXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tl
bkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5B
ZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAg
dmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAg
ICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisg
ICAgICAgIHJldHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBu
ZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBw
cmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5l
eHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdl
WzFdOworICAgIH0KKworICAgIGZ1bmN0aW9uIHByZWNlZGVuY2Uobm9kZSkgeworCisgICAgICAg
IHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Np
b24iOgorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBjYXNlICJBc3Np
Z25tZW50RXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAg
ICAgIGNhc2UgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IDM7CisKKyAgICAgICAgICAgIGNhc2UgIkxvZ2ljYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi
fHwiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgIiYmIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAg
ICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAiQmluYXJ5RXhw
cmVzc2lvbiI6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgInwiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDY7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIl4iOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDc7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiYiOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj09IjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAiIT0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI9
PT0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICIhPT0iOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjwiOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICI8PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4iOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlICI+PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImlu
IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTA7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjw8IjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAiPj4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI+
Pj4iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDExOworICAgICAgICAgICAgICAg
ICAgICBjYXNlICIrIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiLSI6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMTI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIioiOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlICIvIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi
JSI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTM7CisgICAgICAgICAgICAgICAg
ICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyog
ZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMTQ7CisgICAgICAgICAgICBjYXNlICJVcGRhdGVFeHByZXNz
aW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTU7CisgICAgICAgICAgICBjYXNlICJDYWxs
RXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgLy8gSUlGRSBpcyBhbGxvd2VkIHRvIGhhdmUg
cGFyZW5zIGluIGFueSBwb3NpdGlvbiAoIzY1NSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5j
YWxsZWUudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
MTY7CisgICAgICAgICAgICBjYXNlICJOZXdFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTc7CisgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIDE4OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJHcmF0dWl0b3VzIHBhcmVudGhlc2VzIGFyb3VuZCBleHBy
ZXNzaW9uLiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeVVuYXJ5VXBkYXRlKG5vZGUpIHsK
KyAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSAmJiBwcmVjZWRlbmNl
KG5vZGUuYXJndW1lbnQpID49IHByZWNlZGVuY2Uobm9kZSkpIHsKKyAgICAgICAgICAgIHJlcG9y
dChub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeUNh
bGxOZXcobm9kZSkgeworICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuY2FsbGVlKSAm
JiBwcmVjZWRlbmNlKG5vZGUuY2FsbGVlKSA+PSBwcmVjZWRlbmNlKG5vZGUpICYmCisgICAgICAg
ICEobm9kZS50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09
ICJGdW5jdGlvbkV4cHJlc3Npb24iKSkgeworICAgICAgICAgICAgcmVwb3J0KG5vZGUuY2FsbGVl
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7
CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5hcmd1bWVudHNbMF0p
ICYmIHByZWNlZGVuY2Uobm9kZS5hcmd1bWVudHNbMF0pID49IHByZWNlZGVuY2Uoe3R5cGU6ICJB
c3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFy
Z3VtZW50c1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBbXS5mb3JFYWNoLmNhbGwobm9kZS5hcmd1bWVudHMsIGZ1bmN0aW9uKGFyZykgeworICAgICAg
ICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQoYXJnKSAmJiBwcmVjZWRlbmNlKGFyZykgPj0g
cHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChhcmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5QmluYXJ5TG9naWNhbChub2Rl
KSB7CisgICAgICAgIHZhciBwcmVjID0gcHJlY2VkZW5jZShub2RlKTsKKyAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlLmxlZnQpICYmIHByZWNlZGVuY2Uobm9kZS5sZWZ0KSA+PSBwcmVj
KSB7CisgICAgICAgICAgICByZXBvcnQobm9kZS5sZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUucmlnaHQpICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkg
PiBwcmVjKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKG5vZGUuZWxlbWVudHMsIGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZSAmJiBpc1BhcmVudGhlc2lzZWQoZSkgJiYg
cHJlY2VkZW5jZShlKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24i
fSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUucmlnaHQpICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPj0gcHJlY2VkZW5jZShub2RlKSkg
eworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2FsLAor
ICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBkcnlDYWxsTmV3LAorICAgICAgICAiQ29uZGl0aW9u
YWxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50
aGVzaXNlZChub2RlLnRlc3QpICYmIHByZWNlZGVuY2Uobm9kZS50ZXN0KSA+PSBwcmVjZWRlbmNl
KHt0eXBlOiAiTG9naWNhbEV4cHJlc3Npb24iLCBvcGVyYXRvcjogInx8In0pKSB7CisgICAgICAg
ICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuY29uc2VxdWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmNv
bnNlcXVlbnQpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkg
eworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmNvbnNlcXVlbnQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFsdGVybmF0ZSkgJiYgcHJl
Y2VkZW5jZShub2RlLmFsdGVybmF0ZSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRF
eHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYWx0ZXJuYXRlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9k
ZS50ZXN0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBmaXJzdFRva2VuOworICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlLmV4cHJlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgZmlyc3RU
b2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmV4cHJlc3Npb24pOworICAgICAgICAg
ICAgICAgIGlmIChmaXJzdFRva2VuLnZhbHVlICE9PSAiZnVuY3Rpb24iICYmIGZpcnN0VG9rZW4u
dmFsdWUgIT09ICJ7IikgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5leHByZXNz
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChp
c1BhcmVudGhlc2lzZWQobm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9k
ZS5yaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIGlzUGFy
ZW50aGVzaXNlZChub2RlLmluaXQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5p
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNQYXJl
bnRoZXNpc2VkKG5vZGUudGVzdCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlICYmIGlzUGFy
ZW50aGVzaXNlZChub2RlLnVwZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS51
cGRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiSWZTdGF0ZW1lbnQi
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uo
bm9kZS50ZXN0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBkcnlCaW5h
cnlMb2dpY2FsLAorICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc1BhcmVudGhlc2lzZWQobm9kZS5v
YmplY3QpICYmCisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZShub2RlLm9iamVjdCkgPj0gcHJl
Y2VkZW5jZShub2RlKSAmJgorICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS5jb21wdXRlZCB8fAorICAgICAgICAgICAgICAgICAgICAhKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5vYmplY3QudHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlb2Ygbm9kZS5vYmplY3QudmFsdWUgPT09ICJudW1iZXIiICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAvXlswLTldKyQvLnRlc3QoY29udGV4dC5nZXRGaXJzdFRva2Vu
KG5vZGUub2JqZWN0KS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg
ICAgICkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLm9iamVj
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJOZXdFeHByZXNzaW9uIjog
ZHJ5Q2FsbE5ldywKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbihl
KSB7CisgICAgICAgICAgICAgICAgdmFyIHYgPSBlLnZhbHVlOworICAgICAgICAgICAgICAgIGlm
ICh2ICYmIGlzUGFyZW50aGVzaXNlZCh2KSAmJiBwcmVjZWRlbmNlKHYpID49IHByZWNlZGVuY2Uo
e3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXBvcnQodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0s
CisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5hcmd1bWVudCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5hcmd1bWVudCkpIHsK
KyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5leHByZXNzaW9ucywgZnVuY3Rpb24o
ZSkgeworICAgICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5j
ZShlKSA+PSBwcmVjZWRlbmNlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgIlN3aXRjaENhc2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS50
ZXN0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVw
b3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJTd2l0
Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZS5kaXNjcmltaW5hbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0
KG5vZGUuZGlzY3JpbWluYW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
IlRocm93U3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFy
ZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2Rl
LmFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlVuYXJ5RXhw
cmVzc2lvbiI6IGRyeVVuYXJ5VXBkYXRlLAorICAgICAgICAiVXBkYXRlRXhwcmVzc2lvbiI6IGRy
eVVuYXJ5VXBkYXRlLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5p
bml0KSAmJiBwcmVjZWRlbmNlKG5vZGUuaW5pdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2ln
bm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2Rl
LnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUub2JqZWN0KSkgewor
ICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB1bm5l
Y2Vzc2FyeSBzZW1pY29sb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJFbXB0eVN0YXRlbWVu
dCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bm5lY2Vzc2FyeSBzZW1pY29sb24uIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSw2NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IHN0cmljdCBkaXJlY3RpdmVzLgorICogQGF1
dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlv
biBkaXJlY3RpdmVzKGJsb2NrKSB7CisgICAgICAgIHZhciBkcyA9IFtdLCBib2R5ID0gYmxvY2su
Ym9keSwgZSwgaSwgbDsKKworICAgICAgICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkg
PCBsOyArK2kpIHsKKyAgICAgICAgICAgIGUgPSBib2R5W2ldOworCisgICAgICAgICAgICBpZiAo
CisgICAgICAgICAgICAgICAgZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAg
ICAgICAgICAgICAgICBlLmV4cHJlc3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAg
ICAgICAgICAgdHlwZW9mIGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyIKKyAgICAgICAg
ICAgICkgeworICAgICAgICAgICAgICAgIGRzLnB1c2goZS5leHByZXNzaW9uKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0
KGRpcmVjdGl2ZSkgeworICAgICAgICByZXR1cm4gZGlyZWN0aXZlLnZhbHVlID09PSAidXNlIHN0
cmljdCI7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmlj
dChub2RlKSB7CisgICAgICAgIHZhciB1c2VTdHJpY3REaXJlY3RpdmVzLCBzY29wZSwgdXBwZXI7
CisgICAgICAgIHVzZVN0cmljdERpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzKG5vZGUpLmZpbHRlcihp
c1N0cmljdCk7CisKKyAgICAgICAgc3dpdGNoICh1c2VTdHJpY3REaXJlY3RpdmVzLmxlbmd0aCkg
eworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7
CisgICAgICAgICAgICAgICAgdXBwZXIgPSBzY29wZS51cHBlcjsKKworICAgICAgICAgICAgICAg
IGlmICh1cHBlciAmJiB1cHBlci5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAg
ICAgICAgICAgICB1cHBlciA9IHVwcGVyLnVwcGVyOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICh1cHBlciAmJiB1cHBlci5pc1N0cmljdCkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydCh1c2VTdHJpY3REaXJlY3RpdmVzWzBdLCAiVW5uZWNlc3Nh
cnkgJ3VzZSBzdHJpY3QnLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydCh1c2VTdHJpY3REaXJlY3RpdmVzWzFdLCAiTXVsdGlwbGUgJ3VzZSBzdHJpY3QnIGRpcmVj
dGl2ZXMuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQ
cm9ncmFtIjogY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdCwKKworICAgICAgICAiRnVuY3Rp
b25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5l
Y2Vzc2FyeVVzZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9LAorCisgICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JV
bm5lY2Vzc2FyeVVzZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBmYWxsLXRocm91Z2ggY2FzZXMgaW4gc3dpdGNoIHN0
YXRlbWVudHMuCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vbWF0dGR1dmFsbC5jb20v
PgorICovCisidXNlIHN0cmljdCI7CisKKwordmFyIEZBTExUSFJPVUdIX0NPTU1FTlQgPSAvZmFs
bHNcc3Rocm91Z2gvOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgIHZhciBzd2l0Y2hlcyA9IFtdOworCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiU3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFy
IGNvbnNlcXVlbnQgPSBub2RlLmNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAgc3dpdGNoRGF0
YSA9IHN3aXRjaGVzW3N3aXRjaGVzLmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgICAgIGksCisg
ICAgICAgICAgICAgICAgY29tbWVudHMsCisgICAgICAgICAgICAgICAgY29tbWVudDsKKworICAg
ICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNvbWUgZGV2ZWxvcGVycyB3cmFwIGNhc2UgYm9k
aWVzIGluIGJsb2Nrcywgc28gaWYgdGhlcmUgaXMganVzdCBvbmUKKyAgICAgICAgICAgICAqIG5v
ZGUgYW5kIGl0J3MgYSBibG9jayBzdGF0ZW1lbnQsIGNoZWNrIGluc2lkZS4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgaWYgKGNvbnNlcXVlbnQubGVuZ3RoID09PSAxICYmIGNvbnNlcXVl
bnRbMF0udHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnNl
cXVlbnQgPSBjb25zZXF1ZW50WzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBj
aGVja2luZyBvbiBwcmV2aW91cyBjYXNlCisgICAgICAgICAgICBpZiAoIXN3aXRjaERhdGEubGFz
dENhc2VDbG9zZWQpIHsKKworICAgICAgICAgICAgICAgIC8vIGEgZmFsbCB0aHJvdWdoIGNvbW1l
bnQgd2lsbCBiZSB0aGUgbGFzdCB0cmFpbGluZyBjb21tZW50IG9mIHRoZSBsYXN0IGNhc2UKKyAg
ICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMoc3dpdGNoRGF0YS5s
YXN0Q2FzZSkudHJhaWxpbmc7CisgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2Nv
bW1lbnRzLmxlbmd0aCAtIDFdOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGNvbW1l
bnQKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQgfHwgIUZBTExUSFJPVUdIX0NPTU1FTlQu
dGVzdChjb21tZW50LnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChzd2l0Y2hEYXRhLmxhc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVk
IGEgXCJicmVha1wiIHN0YXRlbWVudCBiZWZvcmUgXCJ7e2NvZGV9fVwiLiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB7IGNvZGU6IG5vZGUudGVzdCA/ICJjYXNlIiA6ICJkZWZhdWx0IiB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdyBk
ZWFsaW5nIHdpdGggdGhlIGN1cnJlbnQgY2FzZQorICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0
Q2FzZUNsb3NlZCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZSA9IG5v
ZGU7CisKKyAgICAgICAgICAgIC8vIHRyeSB0byB2ZXJpZnkgdXNpbmcgc3RhdGVtZW50cyAtIGdv
IGJhY2t3YXJkcyBhcyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNlYXJjaAorICAgICAgICAgICAgaWYg
KGNvbnNlcXVlbnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gY29uc2VxdWVu
dC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoLyg/
OkJyZWFrfENvbnRpbnVlfFJldHVybnxUaHJvdylTdGF0ZW1lbnQvLnRlc3QoY29uc2VxdWVudFtp
XS50eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNs
b3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gdGhlIGNhc2Ugc3RhdGVtZW50IGhhcyBubyBzdGF0ZW1lbnRzLCBzbyBp
dCBtdXN0IGxvZ2ljYWxseSBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgICAgICBzd2l0Y2hEYXRh
Lmxhc3RDYXNlQ2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoK
KyAgICAgICAgICAgICAqIEFueSB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG5leHQg
U3dpdGNoQ2FzZSBvY2N1cnMuCisgICAgICAgICAgICAgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdh
cm4gb24gdGhlIGxhc3QgU3dpdGNoQ2FzZSwgc2luY2UgaXQgY2FuJ3QKKyAgICAgICAgICAgICAq
IGZhbGwgdGhyb3VnaCB0byBhbnl0aGluZy4KKyAgICAgICAgICAgICAqLworICAgICAgICB9LAor
CisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBzd2l0Y2hlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAg
ICAgICAgIGxhc3RDYXNlQ2xvc2VkOiB0cnVlLAorICAgICAgICAgICAgICAgIGxhc3RDYXNlOiBu
dWxsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAiU3dpdGNoU3RhdGVt
ZW50OmV4aXQiOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHN3aXRjaGVzLnBvcCgpOworICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYSBs
ZWFkaW5nL3RyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaW4gYSBudW1lcmljIGxpdGVyYWwKKyAqIEBh
dXRob3IgSmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1
cm4geworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
aWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIGlm
IChub2RlLnJhdy5pbmRleE9mKCIuIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkEgbGVhZGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNl
ZCB3aXRoIGEgZG90LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5yYXcuaW5kZXhPZigiLiIpID09PSBub2RlLnJhdy5sZW5ndGggLSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHRyYWlsaW5nIGRlY2ltYWwgcG9p
bnQgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjg6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpZmllcnMgYXMgdmFyaWFibGVz
LgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIC8qCisgICAgICogV2FsayB0aGUgc2NvcGUgY2hhaW4gbG9va2lu
ZyBmb3IgZWl0aGVyIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBvciBhCisgICAgICogVmFyaWFibGVE
ZWNsYXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgbGVmdC1oYW5kIHNpZGUgb2YgdGhlCisg
ICAgICogQXNzaWdubWVudEV4cHJlc3Npb24uIElmIHdlIGZpbmQgdGhlIEZ1bmN0aW9uRGVjbGFy
YXRpb24gZmlyc3QsIHRoZW4gd2UKKyAgICAgKiB3YXJuLCBiZWNhdXNlIGEgRnVuY3Rpb25EZWNs
YXJhdGlvbiBpcyB0cnlpbmcgdG8gYmVjb21lIGEgVmFyaWFibGUgb3IgYQorICAgICAqIEZ1bmN0
aW9uRXhwcmVzc2lvbi4gSWYgd2UgZmluZCBhIFZhcmlhYmxlRGVjbGFyYXRpb24gZmlyc3QsIHRo
ZW4gd2UgaGF2ZQorICAgICAqIGEgbGVnaXRpbWF0ZSBzaGFkb3cgdmFyaWFibGUuCisgICAgICov
CisgICAgZnVuY3Rpb24gY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLCBuYW1lKSB7
CisgICAgICAgIHZhciB2YXJpYWJsZSwKKyAgICAgICAgICAgIGRlZiwKKyAgICAgICAgICAgIGks
CisgICAgICAgICAgICBqOworCisgICAgICAgIC8vIExvb3Agb3ZlciBhbGwgb2YgdGhlIGlkZW50
aWZpZXJzIGF2YWlsYWJsZSBpbiBzY29wZS4KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjb3Bl
LnZhcmlhYmxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyaWFibGUgPSBzY29wZS52
YXJpYWJsZXNbaV07CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGlkZW50aWZpZXIsIHNlZSBp
ZiBpdCB3YXMgZGVmaW5lZCBpbiBfdGhpc18gc2NvcGUuCisgICAgICAgICAgICBmb3IgKGogPSAw
OyBqIDwgdmFyaWFibGUuZGVmcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGRlZiA9
IHZhcmlhYmxlLmRlZnNbal07CisKKyAgICAgICAgICAgICAgICAvLyBJZGVudGlmaWVyIGlzIGEg
ZnVuY3Rpb24gYW5kIHdhcyBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgICAgICAgICAgICAg
aWYgKGRlZi5uYW1lLm5hbWUgPT09IG5hbWUgJiYgZGVmLnR5cGUgPT09ICJGdW5jdGlvbk5hbWUi
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSB2YXJpYWJsZSBhbmQgd2FzIGRl
Y2xhcmVkIGluIHRoaXMgc2NvcGUuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBpcyBhIGxlZ2l0
aW1hdGUgc2hhZG93IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZS5uYW1l
ID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0
aGUgdXBwZXIgc2NvcGUuCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAg
cmV0dXJuIGNoZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZS51cHBlciwgbmFtZSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBnbG9iYWwgc2NvcGUgYW5k
IGhhdmVuJ3QgZm91bmQgYW55dGhpbmcuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5n
ZXRTY29wZSgpLAorICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmxlZnQubmFtZTsKKworICAg
ICAgICAgICAgaWYgKGNoZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZSwgbmFtZSkpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bmFtZX19JyBpcyBhIGZ1
bmN0aW9uLiIsIHsgbmFtZTogbmFtZSB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisK
KyAgICB9OworCit9OworCit9LHt9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBpbXBsaWVkIGV2
YWwgdmlhIHNldFRpbWVvdXQgYW5kIHNldEludGVydmFsCisgKiBAYXV0aG9yIEphbWVzIEFsbGFy
ZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNh
bGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5j
YWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxl
ZSA9IG5vZGUuY2FsbGVlLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlID09PSAi
c2V0VGltZW91dCIgfHwgY2FsbGVlID09PSAic2V0SW50ZXJ2YWwiKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzWzBdOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnQgJiYgYXJndW1lbnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVv
ZiBhcmd1bWVudC52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2YWwuIENvbnNpZGVyIHBhc3NpbmcgYSBm
dW5jdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nLiIpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBkZWNsYXJhdGlvbnMgaW4gcHJvZ3JhbSBvciBm
dW5jdGlvbiBib2R5IHJvb3QuCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIG5lYXJlc3QgUHJvZ3JhbSBv
ciBGdW5jdGlvbiBhbmNlc3RvciBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuY2Vz
dG9yJ3MgdHlwZSBhbmQgZGlzdGFuY2UgZnJvbSBub2RlLgorICAgICAqLworICAgIGZ1bmN0aW9u
IG5lYXJlc3RCb2R5KCkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNl
c3RvcnMoKSwKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpLAorICAgICAg
ICAgICAgZ2VuZXJhdGlvbiA9IDE7CisKKyAgICAgICAgd2hpbGUgKGFuY2VzdG9yICYmIFsiUHJv
Z3JhbSIsICJGdW5jdGlvbkRlY2xhcmF0aW9uIiwKKyAgICAgICAgICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uIl0uaW5kZXhPZihhbmNlc3Rvci50eXBlKSA8IDApIHsKKyAgICAgICAgICAgIGdl
bmVyYXRpb24gKz0gMTsKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vIFR5cGUgb2YgY29u
dGFpbmluZyBhbmNlc3RvcgorICAgICAgICAgICAgdHlwZTogYW5jZXN0b3IudHlwZSwKKyAgICAg
ICAgICAgIC8vIFNlcGFyYXRpb24gYmV0d2VlbiBhbmNlc3RvciBhbmQgbm9kZQorICAgICAgICAg
ICAgZGlzdGFuY2U6IGdlbmVyYXRpb24KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBFbnN1cmUgdGhhdCBhIGdpdmVuIG5vZGUgaXMgYXQgYSBwcm9ncmFtIG9yIGZ1bmN0aW9u
IGJvZHkncyByb290LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBEZWNsYXJhdGlvbiBu
b2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0
aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgdmFyIGJvZHkgPSBuZWFyZXN0Qm9keShub2RlKSwK
KyAgICAgICAgICAgIHZhbGlkID0gKChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiAmJiBib2R5LmRp
c3RhbmNlID09PSAxKSB8fAorICAgICAgICAgICAgICAgIGJvZHkuZGlzdGFuY2UgPT09IDIpOwor
CisgICAgICAgIGlmICghdmFsaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJNb3ZlIHt7dHlwZX19IGRlY2xhcmF0aW9uIHRvIHt7Ym9keX19IHJvb3QuIiwKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IChub2RlLnR5cGUgPT09ICJGdW5j
dGlvbkRlY2xhcmF0aW9uIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24iIDog
InZhcmlhYmxlIiksCisgICAgICAgICAgICAgICAgICAgIGJvZHk6IChib2R5LnR5cGUgPT09ICJQ
cm9ncmFtIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAicHJvZ3JhbSIgOiAiZnVuY3Rpb24g
Ym9keSIpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVj
aywKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYm90aCIpIHsKKyAgICAgICAgICAg
ICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKwor
fTsKKworfSx7fV0sNzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFZhbGlkYXRlIHN0cmluZ3MgcGFzc2VkIHRvIHRoZSBSZWdFeHAgY29u
c3RydWN0b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICBmdW5jdGlvbiBpc1N0cmluZyhub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlICYmIG5v
ZGUudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5nIjsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIGlmIChub2RlLmNh
bGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gIlJlZ0V4
cCIgJiYgaXNTdHJpbmcobm9kZS5hcmd1bWVudHNbMF0pKSB7CisgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhub2RlLmFyZ3VtZW50c1sxXSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlLCBu
b2RlLmFyZ3VtZW50c1sxXS52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlLm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjog
Y2hlY2ssCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9
LHt9XSw3MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzYWdlIG9mIF9faXRlcmF0b3JfXyBwcm9wZXJ0eQorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworCisgICAgICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgorICAgICAgICAgICAgICAgICAg
ICAobm9kZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9wZXJ0eS5u
YW1lID09PSAiX19pdGVyYXRvcl9fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJvcGVy
dHkudmFsdWUgPT09ICJfX2l0ZXJhdG9yX18iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJSZXNlcnZlZCBuYW1lICdfX2l0ZXJhdG9yX18nLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNzM6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBs
YWJlbHMgdGhhdCBhcmUgdGhlIHNhbWUgYXMgYW4gaWRlbnRpZmllcgorICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IGZ1bmN0aW9uIGZpbmRJZGVudGlmaWVyKHNjb3BlLCBpZGVudGlmaWVyKSB7CisgICAgICAgIHZh
ciBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0
aW9uKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gaWRlbnRp
ZmllcikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHJl
ZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgPT09
IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgbm90IGZvdW5kIHRoZSBp
ZGVudGlmaWVyIGluIHRoaXMgc2NvcGUsIGNoZWNrIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gc2Nv
cGUuCisgICAgICAgIGlmIChzY29wZS51cHBlciAmJiAhZm91bmQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmaW5kSWRlbnRpZmllcihzY29wZS51cHBlciwgaWRlbnRpZmllcik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1
cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisg
ICAgICAgICAgICAvLyBGZXRjaCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgdmFy
IHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVs
eSBmaW5kIHRoZSBpZGVudGlmaWVyIHdhbGtpbmcgdXAgdGhlIHNjb3BlLCBzdGFydGluZworICAg
ICAgICAgICAgLy8gd2l0aCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgaWYgKGZp
bmRJZGVudGlmaWVyKHNjb3BlLCBub2RlLmxhYmVsLm5hbWUpKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkZvdW5kIGlkZW50aWZpZXIgd2l0aCBzYW1lIG5hbWUgYXMg
bGFiZWwuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30s
e31dLDc0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBEaXNhbGxvdyBMYWJlbGVkIFN0YXRlbWVudHMKKyAqIEBhdXRob3IgTmljaG9sYXMg
Qy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWxlZCBzdGF0ZW1lbnQuIik7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewor
CisgICAgICAgICAgICBpZiAobm9kZS5sYWJlbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGJyZWFrIHN0YXRlbWVudC4iKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUubGFiZWwpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbCBpbiBjb250
aW51ZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisKKyAgICB9
OworCit9OworCit9LHt9XSw3NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrcyB3aXRoIG5vIHJlYXNvbiB0
byBleGlzdAorICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBvY2N1cnJlbmNlIG9mIEJsb2NrU3Rh
dGVtZW50ID4gQmxvY2tTdGF0ZW1lbnQgb3IKKyAgICAgICAgICAgIC8vIFByb2dyYW0gPiBCbG9j
a1N0YXRlbWVudAorICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3Jz
KCkucG9wKCk7CisgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVu
dCIgfHwgcGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIikgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJCbG9jayBpcyBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgYmxvY2suIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw3NjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBkaXNhbGxvdyBpZiBhcyB0aGUgb25seSBzdGF0bWVuZXQgaW4gYW4gZWxzZSBibG9jawor
ICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4g
eworICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2
YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAgICAgICAgICBw
YXJlbnQgPSBhbmNlc3RvcnMucG9wKCksCisgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgPSBh
bmNlc3RvcnMucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUg
PT09ICJCbG9ja1N0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LmJvZHku
bGVuZ3RoID09PSAxICYmIGdyYW5kcGFyZW50ICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5k
cGFyZW50LnR5cGUgPT09ICJJZlN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFy
ZW50ID09PSBncmFuZHBhcmVudC5hbHRlcm5hdGUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBpZiBhcyB0aGUgb25seSBzdGF0ZW1lbnQgaW4gYW4g
ZWxzZSBibG9jay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisK
K30se31dLDc3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY3JlYXRpb24gb2YgZnVuY3Rpb24gaW5zaWRlIGEgbG9v
cAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGZ1bmN0aW9uIGNoZWNrRm9yTG9vcHMobm9kZSkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0g
Y29udGV4dC5nZXRBbmNlc3RvcnMoKTsKKworICAgICAgICBpZiAoYW5jZXN0b3JzLnNvbWUoZnVu
Y3Rpb24oYW5jZXN0b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci50eXBlID09PSAi
Rm9yU3RhdGVtZW50IiB8fCBhbmNlc3Rvci50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiIHx8IGFu
Y2VzdG9yLnR5cGUgPT09ICJEb1doaWxlU3RhdGVtZW50IjsKKyAgICAgICAgfSkpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEb24ndCBtYWtlIGZ1bmN0aW9ucyB3aXRoaW4g
YSBsb29wIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiRnVu
Y3Rpb25FeHByZXNzaW9uIjogY2hlY2tGb3JMb29wcywKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBjaGVja0Zvckxvb3BzCisgICAgfTsKK307CisKK30se31dLDc4OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVu
Zm9yY2UgZ3JvdXBlZCByZXF1aXJlIHN0YXRlbWVudHMgZm9yIE5vZGUuSlMKKyAqIEBhdXRob3Ig
UmFwaGFlbCBQaWd1bGxhCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICog
UmV0dXJucyB0aGUgbGlzdCBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgICAqCisgICAgICogQHJl
dHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBidWlsdC1pbiBOb2RlLmpzIG1vZHVsZXMuCisg
ICAgICovCisgICAgZnVuY3Rpb24gZ2V0QnVpbHRpbk1vZHVsZXMoKSB7CisgICAgICAgIC8vIFRo
aXMgbGlzdCBpcyBnZW5lcmF0ZWQgdXNpbmcgYHJlcXVpcmUoInJlcGwiKS5fYnVpbHRpbkxpYnMu
Y29uY2F0KCdyZXBsJykuc29ydCgpYAorICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgbGlzdCB3
YXMgZ2VuZXJhdGVkIHVzaW5nIG5vZGUgdjAuMTEuOQorICAgICAgICByZXR1cm4gWworICAgICAg
ICAgICAgImFzc2VydCIsICJidWZmZXIiLCAiY2hpbGRfcHJvY2VzcyIsICJjbHVzdGVyIiwgImNy
eXB0byIsCisgICAgICAgICAgICAiZGdyYW0iLCAiZG5zIiwgImRvbWFpbiIsICJldmVudHMiLCAi
ZnMiLCAiaHR0cCIsICJodHRwcyIsCisgICAgICAgICAgICAibmV0IiwgIm9zIiwgInBhdGgiLCAi
cHVueWNvZGUiLCAicXVlcnlzdHJpbmciLCAicmVhZGxpbmUiLAorICAgICAgICAgICAgInJlcGwi
LCAic21hbGxvYyIsICJzdHJlYW0iLCAic3RyaW5nX2RlY29kZXIiLCAidGxzIiwgInR0eSIsCisg
ICAgICAgICAgICAidXJsIiwgInV0aWwiLCAidm0iLCAiemxpYiIKKyAgICAgICAgXTsKKyAgICB9
CisKKyAgICB2YXIgQlVJTFRJTl9NT0RVTEVTID0gZ2V0QnVpbHRpbk1vZHVsZXMoKTsKKworICAg
IHZhciBERUNMX1JFUVVJUkUgPSAicmVxdWlyZSIsCisgICAgICAgIERFQ0xfVU5JTklUSUFMSVpF
RCA9ICJ1bmluaXRpYWxpemVkIiwKKyAgICAgICAgREVDTF9PVEhFUiA9ICJvdGhlciI7CisKKyAg
ICB2YXIgUkVRX0NPUkUgPSAiY29yZSIsCisgICAgICAgIFJFUV9GSUxFID0gImZpbGUiLAorICAg
ICAgICBSRVFfTU9EVUxFID0gIm1vZHVsZSIsCisgICAgICAgIFJFUV9DT01QVVRFRCA9ICJjb21w
dXRlZCI7CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGEgZGVjbGFy
YXRpb24gc3RhdGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24g
VGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5z
IHtzdHJpbmd9IFRoZSB0eXBlIG9mIGRlY2xhcmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBleHBy
ZXNzaW9uLgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldERlY2xhcmF0aW9uVHlwZShpbml0RXhw
cmVzc2lvbikgeworICAgICAgICBpZiAoIWluaXRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAv
LyAidmFyIHg7IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xfVU5JTklUSUFMSVpFRDsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpbml0RXhwcmVzc2lvbi50eXBlID09PSAiQ2FsbEV4cHJlc3Np
b24iICYmCisgICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PT0gIklkZW50
aWZpZXIiICYmCisgICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUubmFtZSA9PT0gInJl
cXVpcmUiCisgICAgICAgICkgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgndXRp
bCcpOyIKKyAgICAgICAgICAgIHJldHVybiBERUNMX1JFUVVJUkU7CisgICAgICAgIH0gZWxzZSBp
ZiAoaW5pdEV4cHJlc3Npb24udHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAg
ICAgICAvLyAidmFyIHggPSByZXF1aXJlKCdnbG9iJykuR2xvYjsiCisgICAgICAgICAgICByZXR1
cm4gZ2V0RGVjbGFyYXRpb25UeXBlKGluaXRFeHByZXNzaW9uLm9iamVjdCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyAidmFyIHggPSA0MjsiCisgICAgICAgIHJldHVybiBERUNMX09USEVSOwor
ICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgbW9kdWxlIHRo
YXQgaXMgbG9hZGVkIHZpYSByZXF1aXJlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4
cHJlc3Npb24gVGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAq
IEByZXR1cm5zIHtzdHJpbmd9IFRoZSBtb2R1bGUgdHlwZS4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpbmZlck1vZHVsZVR5cGUoaW5pdEV4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKGluaXRFeHBy
ZXNzaW9uLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgLy8gInZh
ciB4ID0gcmVxdWlyZSgnZ2xvYicpLkdsb2I7IgorICAgICAgICAgICAgcmV0dXJuIGluZmVyTW9k
dWxlVHlwZShpbml0RXhwcmVzc2lvbi5vYmplY3QpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRF
eHByZXNzaW9uWyJhcmd1bWVudHMiXS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIC8vICJ2
YXIgeCA9IHJlcXVpcmUoKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0NPTVBVVEVEOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGFyZyA9IGluaXRFeHByZXNzaW9uWyJhcmd1bWVudHMiXVsw
XTsKKworICAgICAgICBpZiAoYXJnLnR5cGUgIT09ICJMaXRlcmFsIiB8fCB0eXBlb2YgYXJnLnZh
bHVlICE9PSAic3RyaW5nIikgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSg0Mik7
IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9DT01QVVRFRDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChCVUlMVElOX01PRFVMRVMuaW5kZXhPZihhcmcudmFsdWUpICE9PSAtMSkgeworICAgICAg
ICAgICAgLy8gInZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJF
UV9DT1JFOworICAgICAgICB9IGVsc2UgaWYgKC9eXC57MCwyfVwvLy50ZXN0KGFyZy52YWx1ZSkp
IHsKKyAgICAgICAgICAgIC8vICJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7IgorICAg
ICAgICAgICAgcmV0dXJuIFJFUV9GSUxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gInZhciBhc3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJF
UV9NT0RVTEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0
aGUgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaXMgbWl4ZWQsIGkuZS4gd2hldGhlciBp
dAorICAgICAqIGNvbnRhaW5zIGJvdGggcmVxdWlyZSBhbmQgb3RoZXIgZGVjbGFyYXRpb25zLgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25zIFRoZSBsaXN0IG9mIFZhcmlhYmxl
RGVjbGFyYXRvcnMuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlY2xh
cmF0aW9ucyBhcmUgbWl4ZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c01peGVkKGRlY2xhcmF0aW9ucykgeworICAgICAgICB2YXIgY29udGFpbnMgPSB7fTsKKworICAg
ICAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHsKKyAgICAg
ICAgICAgIHZhciB0eXBlID0gZ2V0RGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uLmluaXQpOwor
ICAgICAgICAgICAgY29udGFpbnNbdHlwZV0gPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAg
ICByZXR1cm4gISEoCisgICAgICAgICAgICBjb250YWluc1tERUNMX1JFUVVJUkVdICYmCisgICAg
ICAgICAgICAoY29udGFpbnNbREVDTF9VTklOSVRJQUxJWkVEXSB8fCBjb250YWluc1tERUNMX09U
SEVSXSkKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhbGwg
cmVxdWlyZSBkZWNsYXJhdGlvbnMgaW4gdGhlIGdpdmVuIGxpc3QgYXJlIG9mIHRoZSBzYW1lCisg
ICAgICogdHlwZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGRlY2xhcmF0aW9ucyBUaGUgbGlz
dCBvZiBWYXJpYWJsZURlY2xhcmF0b3JzLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVl
IGlmIHRoZSBkZWNsYXJhdGlvbnMgYXJlIGdyb3VwZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBpc0dyb3VwZWQoZGVjbGFyYXRpb25zKSB7CisgICAgICAgIHZhciBmb3Vu
ZCA9IHt9OworCisgICAgICAgIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJh
dGlvbikgeworICAgICAgICAgICAgaWYgKGdldERlY2xhcmF0aW9uVHlwZShkZWNsYXJhdGlvbi5p
bml0KSA9PT0gREVDTF9SRVFVSVJFKSB7CisgICAgICAgICAgICAgICAgZm91bmRbaW5mZXJNb2R1
bGVUeXBlKGRlY2xhcmF0aW9uLmluaXQpXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworCisgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3VuZCkubGVuZ3RoIDw9IDE7Cisg
ICAgfQorCisKKyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGdyb3VwaW5nID0gISFjb250ZXh0Lm9w
dGlvbnNbMF07CisKKyAgICAgICAgICAgIGlmIChpc01peGVkKG5vZGUuZGVjbGFyYXRpb25zKSkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgICAgICBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAiRG8gbm90IG1peCAncmVxdWlyZScgYW5kIG90aGVy
IGRlY2xhcmF0aW9ucy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZ3JvdXBpbmcgJiYgIWlzR3JvdXBlZChub2RlLmRlY2xhcmF0aW9ucykpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgIkRvIG5vdCBtaXggY29yZSwgbW9kdWxlLCBmaWxlIGFuZCBjb21wdXRl
ZCByZXF1aXJlcy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDc5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBtaXhlZCBzcGFjZXMgYW5kIHRh
YnMgZm9yIGluZGVudGF0aW9uCisgKiBAYXV0aG9yIEphcnkgTmllYnVyCisgKiBAY29weXJpZ2h0
IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBAY29weXJp
Z2h0IDIwMTQgSmFyeSBOaWVidXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICB2YXIgc21hcnRUYWJzID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgdmFy
IENPTU1FTlRfU1RBUlQgPSAvXlxzKlwvXCovLAorICAgICAgICBNQVlCRV9DT01NRU5UID0gL15c
cypcKi87CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBdCBsZWFzdCBv
bmUgc3BhY2UgZm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAgICAgICAqIG9yIHRoZSByZXZlcnNl
IGJlZm9yZSBub24tdGFiLy1zcGFjZQorICAgICAgICAgICAgICogY2hhcmFjdGVycyBiZWdpbi4K
KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFyIHJlZ2V4ID0gL14oPz1bXHQgXSooXHQg
fCBcdCkpLywKKyAgICAgICAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICAgICAgICBsaW5lcyA9
IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKTsKKworICAgICAgICAgICAgaWYgKHNtYXJ0VGFicykg
eworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQXQgbGVhc3Qgb25lIHNw
YWNlIGZvbGxvd2VkIGJ5IGEgdGFiCisgICAgICAgICAgICAgICAgICogYmVmb3JlIG5vbi10YWIv
LXNwYWNlIGNoYXJhY3RlcnMgYmVnaW4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg
ICAgICAgcmVnZXggPSAvXig/PVtcdCBdKiBcdCkvOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAgICAgICBt
YXRjaCA9IHJlZ2V4LmV4ZWMobGluZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsK
KworICAgICAgICAgICAgICAgICAgICBpZiAoIU1BWUJFX0NPTU1FTlQudGVzdChsaW5lKSAmJiAh
Q09NTUVOVF9TVEFSVC50ZXN0KGxpbmVzW2kgLSAxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHsgbGluZTogaSArIDEsIGNvbHVtbjogbWF0Y2guaW5k
ZXggKyAxIH0sICJNaXhlZCBzcGFjZXMgYW5kIHRhYnMuIik7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICB9OworCit9OworCit9LHt9XSw4MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdXNlIG9mIG11bHRpcGxlIHNwYWNlcy4K
KyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNvcHlyaWdo
dCAyMDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICB2YXIgT1BFUkFUT1JTID0gWworICAgICAgICAiKiIsICIvIiwgIiUiLCAiKyIs
ICItIiwgIjw8IiwgIj4+IiwgIj4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiaW4iLAorICAg
ICAgICAiaW5zdGFuY2VvZiIsICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwgIiYiLCAiXiIsICJ8
IiwgIiYmIiwgInx8IiwgIj0iLAorICAgICAgICAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0i
LCAiPDw9IiwgIj4+PSIsICI+Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKKyAgICAgICAgIj8iLCAi
OiIsICIsIgorICAgIF0sIGVyck9wcyA9IFtdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAg
KiBSZXBvcnRzIGFuIEFTVCBub2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydC4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7
CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNdWx0aXBsZSBzcGFjZXMgZm91bmQgYXJv
dW5kICciICsgZXJyT3BzLnNoaWZ0KCkgKyAiJy4iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBDaGVja3Mgd2hldGhlciB0aGUgb3BlcmF0b3IgaXMgaW4gc2FtZSBsaW5lIGFzIHR3byBhZGph
Y2VudCB0b2tlbnMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0
IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tl
biByaWdodCB0byB0aGUgb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRv
ciBUaGUgb3BlcmF0b3IuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG9w
ZXJhdG9yIGlzIGluIHNhbWUgbGluZSBhcyB0d28gYWRqYWNlbnQgdG9rZW5zLgorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3Bl
cmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmxvYy5lbmQubGluZSA9PT0gbGVmdC5s
b2MuZW5kLmxpbmUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmxvYy5lbmQu
bGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAgICog
Q2hlY2sgd2hldGhlciB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCB0aGUgb3BlcmF0
b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBv
cGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0
byB0aGUgb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgb3Bl
cmF0b3IuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlcmUgYXJlIG11bHRp
cGxlIHNwYWNlcy4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTXVs
dGlTcGFjZWQobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBvcGVyYXRv
ci5yYW5nZVswXSAtIGxlZnQucmFuZ2VbMV0gPiAxIHx8CisgICAgICAgICAgICAgICAgcmlnaHQu
cmFuZ2VbMF0gLSBvcGVyYXRvci5yYW5nZVsxXSA+IDE7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogR2V0IHRva2VucyBhbmQgdmFsaWRhdGUgdGhlIHNwYWNpbmcuCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0byB0aGUgb3BlcmF0b3IuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgbXVsdGlwbGUgc3BhY2VzIHdlcmUgZm91bmQu
CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZVNwYWNpbmco
bGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHty
YW5nZTogW2xlZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpLAorICAgICAgICAg
ICAgb3BlcmF0b3I7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3Ro
IC0gMTsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgbGVmdCA9IHRva2Vuc1tpIC0gMV07Cisg
ICAgICAgICAgICBvcGVyYXRvciA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIHJpZ2h0ID0gdG9r
ZW5zW2kgKyAxXTsKKworICAgICAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yLnR5cGUg
PT09ICJQdW5jdHVhdG9yIiAmJiBPUEVSQVRPUlMuaW5kZXhPZihvcGVyYXRvci52YWx1ZSkgPj0g
MCAmJgorICAgICAgICAgICAgICAgIGlzU2FtZUxpbmUobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSAm
JiBpc011bHRpU3BhY2VkKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAg
ICBlcnJPcHMucHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNw
YWNlcyBvbiB0aGUgZXhwcmVzc2lvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0V4cHJlc3Npb24obm9kZSkgeworICAgICAgICBp
ZiAodmFsaWRhdGVTcGFjaW5nKG5vZGUubGVmdCwgbm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAg
IHJlcG9ydChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9y
dCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCBjb25kaXRpb25hbCB0ZXJuYXJ5
IG9wZXJhdG9ycy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hl
Y2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBjaGVja0NvbmRpdGlvbmFsKG5vZGUpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRl
U3BhY2luZyhub2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCkpIHsKKyAgICAgICAgICAgIHJlcG9y
dChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsaWRhdGVTcGFjaW5nKG5vZGUuY29u
c2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11
bHRpcGxlIHNwYWNlcyBhcm91bmQgZXF1YWwgb3BlcmF0b3IgaW4gdmFyaWFibGUgZGVjbGFyYXRp
b24uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAg
ICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rp
b24gY2hlY2tWYXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmIHZhbGlkYXRlU3Bh
Y2luZyhub2RlLmlkLCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11
bHRpcGxlIHNwYWNlcyBhcm91bmQgbGlzdCBvZiBpdGVtcyBpbiBvYmplY3RzLCBhcnJheXMsCisg
ICAgICogZnVuY3Rpb24gcGFyYW1ldGVycywgc2VxdWVuY2VzIGFuZCBkZWNsYXJhdGlvbnMuCisg
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2Ygbm9kZS4KKyAgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
TGlzdChub2RlLCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMgPSBub2RlW3Byb3BlcnR5
XTsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkr
KykgeworICAgICAgICAgICAgdmFyIGxlZnQgPSBpdGVtc1tpIC0gMV0sCisgICAgICAgICAgICAg
ICAgcmlnaHQgPSBpdGVtc1tpXSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGNvbnRleHQu
Z2V0VG9rZW5CZWZvcmUocmlnaHQpOworCisgICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3Bl
cmF0b3IudHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmIG9wZXJhdG9yLnZhbHVlID09PSAiLCIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpICYm
IGlzTXVsdGlTcGFjZWQobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSkgeworICAgICAgICAgICAgICAg
ICAgICBlcnJPcHMucHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJl
cG9ydChyaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJBc3NpZ25tZW50RXhw
cmVzc2lvbiI6IGNoZWNrRXhwcmVzc2lvbiwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBj
aGVja0V4cHJlc3Npb24sCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGNoZWNrRXhwcmVz
c2lvbiwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uZGl0aW9uYWws
CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBjaGVja1ZhciwKKyAgICAgICAgIkFycmF5
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2Rl
LCAiZWxlbWVudHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgInByb3BlcnRpZXMi
KTsKKyAgICAgICAgfSwKKyAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZXhwcmVzc2lvbnMiKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hl
Y2tMaXN0KG5vZGUsICJwYXJhbXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIlZhcmlhYmxlRGVj
bGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwg
ImRlY2xhcmF0aW9ucyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODE6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB3aGVuIHVzaW5nIG11bHRpbGluZSBzdHJpbmdzCisgKiBAYXV0aG9yIElseWEg
Vm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRp
b24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbGluZUJyZWFrID0g
L1xuLzsKKyAgICAgICAgICAgIGlmIChsaW5lQnJlYWsudGVzdChub2RlLnJhdykpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTXVsdGlsaW5lIHN1cHBvcnQgaXMgbGlt
aXRlZCB0byBicm93c2VycyBzdXBwb3J0aW5nIEVTNSBvbmx5LiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBtdWx0aXBsZSBi
bGFuayBsaW5lcy4KKyAqIGltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSB0aGUgbm8tdHJhaWxp
bmctc3BhY2VzIHJ1bGUuCisgKiBAYXV0aG9yIEdyZWcgQ29jaGFyZAorICogQGNvcHlyaWdodCAy
MDE0IEdyZWcgQ29jaGFyZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIC8vIFVzZSBvcHRpb25zLm1heCBvciAyIGFzIGRlZmF1bHQKKyAgICB2YXIgbnVtTGlu
ZXMgPSAyOworCisgICAgaWYgKGNvbnRleHQub3B0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgbnVt
TGluZXMgPSBjb250ZXh0Lm9wdGlvbnNbMF0ubWF4OworICAgIH0KKworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hlY2tCbGFua0xpbmVzKG5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKSwK
KyAgICAgICAgICAgICAgICBjdXJyZW50TG9jYXRpb24gPSAtMSwKKyAgICAgICAgICAgICAgICBs
YXN0TG9jYXRpb24sCisgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyID0gMCwKKyAgICAgICAg
ICAgICAgICBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICB0cmltbWVkTGluZXMgPSBsaW5lcy5t
YXAoZnVuY3Rpb24oc3RyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIudHJpbSgp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBBZ2dyZWdhdGUgYW5kIGNv
dW50IGJsYW5rIGxpbmVzCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbGFzdExv
Y2F0aW9uID0gY3VycmVudExvY2F0aW9uOworICAgICAgICAgICAgICAgIGN1cnJlbnRMb2NhdGlv
biA9IHRyaW1tZWRMaW5lcy5pbmRleE9mKCIiLGN1cnJlbnRMb2NhdGlvbiArIDEpOworICAgICAg
ICAgICAgICAgIGlmIChsYXN0TG9jYXRpb24gPT09IGN1cnJlbnRMb2NhdGlvbiAtIDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyKys7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsYW5rQ291bnRlciA+PSBudW1MaW5lcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZTogbGFzdExvY2F0aW9uICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IGxpbmVzW2xhc3RMb2NhdGlvbl0ubGVuZ3RoCisgICAgICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
bG9jYXRpb24sICJNdWx0aXBsZSBibGFuayBsaW5lcyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIHJlc2V0IHRo
ZSBibGFuayBjb3VudGVyCisgICAgICAgICAgICAgICAgICAgIGJsYW5rQ291bnRlciA9IDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudExvY2F0aW9uICE9
PSAtMSk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHdoZW4gcmUtYXNzaWduaW5nIG5hdGl2ZSBvYmplY3RzCisgKiBAYXV0aG9yIElseWEgVm9sb2Rp
bgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG5hdGl2ZU9iamVjdHMgPSBbIkFy
cmF5IiwgIkJvb2xlYW4iLCAiRGF0ZSIsICJkZWNvZGVVUkkiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgImRlY29kZVVSSUNvbXBvbmVudCIsICJlbmNvZGVVUkkiLCAiZW5jb2RlVVJJQ29tcG9u
ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciIsICJldmFsIiwgIkV2YWxFcnJv
ciIsICJGdW5jdGlvbiIsICJpc0Zpbml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXNO
YU4iLCAiSlNPTiIsICJNYXRoIiwgIk51bWJlciIsICJPYmplY3QiLCAicGFyc2VJbnQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcnNlRmxvYXQiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVu
Y2VFcnJvciIsICJSZWdFeHAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyIsICJT
eW50YXhFcnJvciIsICJUeXBlRXJyb3IiLCAiVVJJRXJyb3IiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIk1hcCIsICJOYU4iLCAiU2V0IiwgIldlYWtNYXAiLCAiSW5maW5pdHkiLCAidW5kZWZp
bmVkIl07CisKKyAgICByZXR1cm4geworCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChuYXRpdmVPYmplY3RzLmluZGV4T2Yo
bm9kZS5sZWZ0Lm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCBub2RlLmxlZnQubmFtZSArICIgaXMgYSByZWFkLW9ubHkgbmF0aXZlIG9iamVjdC4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9y
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhP
Zihub2RlLmlkLm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiUmVkZWZpbml0aW9uIG9mICd7e25hdGl2ZU9iamVjdH19Jy4iLCB7IG5hdGl2ZU9iamVj
dDogbm9kZS5pZC5uYW1lIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sODQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBkaXNhbGxvdyBuZWdhdGVkIGxlZnQgb3BlcmFuZHMg
b2YgdGhlIGBpbmAgb3BlcmF0b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09
ICJpbiIgJiYgbm9kZS5sZWZ0LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24iICYmIG5vZGUubGVm
dC5vcGVyYXRvciA9PT0gIiEiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlRoZSBgaW5gIGV4cHJlc3Npb24ncyBsZWZ0IG9wZXJhbmQgaXMgbmVnYXRlZCIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyBuZXN0ZWQgdGVybmFyeSBleHByZXNzaW9ucworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFu
IE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAi
Q29uZGl0aW9uYWxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUuYWx0ZXJuYXRlLnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iIHx8CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUuY29uc2VxdWVudC50eXBlID09PSAiQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3Qg
bmVzdCB0ZXJuYXJ5IGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworfTsKKworfSx7fV0sODY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIG5ldyBGdW5jdGlv
bgorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gIkZ1bmN0aW9uIikgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgRnVuY3Rpb24gY29uc3RydWN0b3Ig
aXMgZXZhbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDg3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBBIHJ1bGUgdG8gZGlzYWxsb3cgY2FsbHMgdG8gdGhlIE9iamVjdCBjb25zdHJ1Y3Rv
cgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+Cisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5h
bWUgPT09ICJPYmplY3QiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IlRoZSBvYmplY3QgbGl0ZXJhbCBub3RhdGlvbiB7fSBpcyBwcmVmZXJyYWJsZS4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg4OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRp
c2FsbG93IHVzZSBvZiBuZXcgb3BlcmF0b3Igd2l0aCB0aGUgYHJlcXVpcmVgIGZ1bmN0aW9uCisg
KiBAYXV0aG9yIFdpbCBNb29yZSBJSUkKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUuY2Fs
bGVlLm5hbWUgPT09ICJyZXF1aXJlIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiBuZXcgd2l0aCByZXF1aXJlLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODk6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3
aGVuIHVzaW5nIGNvbnN0cnVjdG9yIGZvciB3cmFwcGVyIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5
YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAg
ICAgICJOZXdFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHdy
YXBwZXJPYmplY3RzID0gWyJTdHJpbmciLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiTWF0aCIsICJK
U09OIl07CisgICAgICAgICAgICBpZiAod3JhcHBlck9iamVjdHMuaW5kZXhPZihub2RlLmNhbGxl
ZS5uYW1lKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRv
IG5vdCB1c2Uge3tmbn19IGFzIGEgY29uc3RydWN0b3IuIiwgeyBmbjogbm9kZS5jYWxsZWUubmFt
ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDkw
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgc3RhdGVtZW50cyB3aXRoIGZ1bmN0aW9uIGludm9jYXRpb24gcHJlY2Vk
ZWQgYnkKKyAqICJuZXciIGFuZCBub3QgcGFydCBvZiBhc3NpZ25tZW50CisgKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgaWYgKG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSAnbmV3JyBmb3Igc2lk
ZSBlZmZlY3RzLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKwor
fSx7fV0sOTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gb2JqZWN0IHByb3BlcnR5IG9mIHRoZSBn
bG9iYWwgb2JqZWN0IChNYXRoIGFuZCBKU09OKSBhcyBhIGZ1bmN0aW9uCisgKiBAYXV0aG9yIEph
bWVzIEFsbGFyZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBp
ZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAg
dmFyIG5hbWUgPSBub2RlLmNhbGxlZS5uYW1lOworICAgICAgICAgICAgICAgIGlmIChuYW1lID09
PSAiTWF0aCIgfHwgbmFtZSA9PT0gIkpTT04iKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICIne3tuYW1lfX0nIGlzIG5vdCBhIGZ1bmN0aW9uLiIsIHsgbmFtZTog
bmFtZSB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSw5MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG9jdGFsIGVzY2FwZSBzZXF1ZW5j
ZXMgaW4gc3RyaW5nIGxpdGVyYWxzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFs
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9
PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBtYXRjaCA9IG5vZGUucmF3Lm1hdGNoKC9eKFteXFxdfFxcW14wLTddKSpc
XChbMC03XSkvKSwKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0OworCisgICAgICAgICAgICBp
ZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0ID0gbWF0Y2hbMl07CisgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBvY3RhbDogJ1xce3tv
Y3RhbERpZ2l0fX0nLiBVc2UgJ1xcdS4uLi4nIGluc3RlYWQuIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsgb2N0YWxEaWdpdDogb2N0YWxEaWdpdCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRp
YWxpemluZyBvY3RhbCBsaXRlcmFsCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
InVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gIm51bWJl
ciIgJiYgL14wWzAtN10vLnRlc3Qobm9kZS5yYXcpKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIk9jdGFsIGxpdGVyYWxzIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDk0OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxv
dyBzdHJpbmcgY29uY2F0ZW5hdGlvbiB3aGVuIHVzaW5nIF9fZGlybmFtZSBhbmQgX19maWxlbmFt
ZQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
dmFyIE1BVENIRVIgPSAvXl9fKD86ZGlyfGZpbGUpbmFtZSQvOworCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisK
KyAgICAgICAgICAgIHZhciBsZWZ0ID0gbm9kZS5sZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0
ID0gbm9kZS5yaWdodDsKKworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICIrIiAm
JgorICAgICAgICAgICAgICAgICAgICAoKGxlZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIE1B
VENIRVIudGVzdChsZWZ0Lm5hbWUpKSB8fAorICAgICAgICAgICAgICAgICAgICAocmlnaHQudHlw
ZSA9PT0gIklkZW50aWZpZXIiICYmIE1BVENIRVIudGVzdChyaWdodC5uYW1lKSkpCisgICAgICAg
ICAgICApIHsKKworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgcGF0
aC5qb2luKCkgb3IgcGF0aC5yZXNvbHZlKCkgaW5zdGVhZCBvZiArIHRvIGNyZWF0ZSBwYXRocy4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTU6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdW5hcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0
b3JzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IG9wZXJh
dG9yICciICsgbm9kZS5vcGVyYXRvciArICInIHVzZWQuIik7CisgICAgICAgIH0KKworICAgIH07
CisKK307CisKK30se31dLDk2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZW52KCkKKyAq
IEBhdXRob3IgVmlnbmVzaCBBbmFuZAorICogQGNvcHlyaWdodCAyMDE0IFZpZ25lc2ggQW5hbmQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgdmFyIG9iamVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9IG5vZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVj
dE5hbWUgPT09ICJwcm9jZXNzIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBwcm9wZXJ0eU5hbWUgJiYg
cHJvcGVydHlOYW1lID09PSAiZW52IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiBwcm9jZXNzLmVudi4iKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw5NzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdGhlIHVz
ZSBvZiBwcm9jZXNzLmV4aXQoKQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisi
dXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRp
b24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUu
Y2FsbGVlOworCisgICAgICAgICAgICBpZiAoY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNz
aW9uIiAmJiBjYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJwcm9jZXNzIiAmJgorICAgICAgICAgICAg
ICAgIGNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAiZXhpdCIKKyAgICAgICAgICAgICkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEb24ndCB1c2UgcHJvY2Vzcy5leGl0
KCk7IHRocm93IGFuIGVycm9yIGluc3RlYWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgIH07CisKK307CisKK30se31dLDk4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19wcm90
b19fIHByb3BlcnR5CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVydHkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUu
cHJvcGVydHkubmFtZSA9PT0gIl9fcHJvdG9fXyIgJiYgIW5vZGUuY29tcHV0ZWQpIHx8CisgICAg
ICAgICAgICAgICAgICAgIChub2RlLnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2Rl
LnByb3BlcnR5LnZhbHVlID09PSAiX19wcm90b19fIikpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVGhlICdfX3Byb3RvX18nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw5OTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHdoZW4gdGhlIHNhbWUgdmFyaWFibGUgaXMgZGVjbGFyZWQgbW9yZSB0aGVu
IG9uY2UuCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgZnVuY3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29u
dGV4dC5nZXRTY29wZSgpOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0
aW9uKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUuaWRlbnRpZmllcnMgJiYg
dmFyaWFibGUuaWRlbnRpZmllcnMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHZhcmlh
YmxlLmlkZW50aWZpZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYS5yYW5nZVsxXSAtIGIucmFuZ2VbMV07CisgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHZhcmlhYmxlLmlkZW50aWZpZXJz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dCh2YXJpYWJsZS5pZGVudGlmaWVyc1tpXSwgInt7YX19IGlzIGFscmVhZHkgZGVmaW5lZCIsIHth
OiB2YXJpYWJsZS5uYW1lfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGZpbmRW
YXJpYWJsZXMsCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmaW5kVmFyaWFibGVzLAor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZpbmRWYXJpYWJsZXMKKyAgICB9OworfTsK
KworfSx7fV0sMTAwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGNvdW50IG11bHRpcGxlIHNwYWNlcyBpbiByZWd1bGFyIGV4
cHJlc3Npb25zCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwu
Y29tLz4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBjb250
ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDEpWzBdLAorICAgICAgICAgICAgICAgIG5vZGVUeXBl
ID0gdG9rZW4udHlwZSwKKyAgICAgICAgICAgICAgICBub2RlVmFsdWUgPSB0b2tlbi52YWx1ZSwK
KyAgICAgICAgICAgICAgICBtdWx0aXBsZVNwYWNlc1JlZ2V4ID0gLyggezIsfSkrPy8sCisgICAg
ICAgICAgICAgICAgcmVnZXhSZXN1bHRzOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09
ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZWdleFJlc3VsdHMgPSBt
dWx0aXBsZVNwYWNlc1JlZ2V4LmV4ZWMobm9kZVZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlm
IChyZWdleFJlc3VsdHMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlNwYWNlcyBhcmUgaGFyZCB0byBjb3VudC4gVXNlIHsiICsgcmVnZXhSZXN1
bHRzWzBdLmxlbmd0aCArICJ9LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwMTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBy
ZXNlcnZlZCB3b3JkcyBiZWluZyB1c2VkIGFzIGtleXMKKyAqIEBhdXRob3IgRW1pbCBCYXkKKyAq
IEBjb3B5cmlnaHQgMjAxNCBFbWlsIEJheS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBNRVNTQUdFID0gIlJlc2VydmVkIHdvcmQgJ3t7a2V5
fX0nIHVzZWQgYXMga2V5LiI7CisKKyAgICB2YXIgcmVzZXJ2ZWRXb3JkcyA9IFsKKyAgICAgICAg
ImFic3RyYWN0IiwKKyAgICAgICAgImJvb2xlYW4iLCAiYnJlYWsiLCAiYnl0ZSIsCisgICAgICAg
ICJjYXNlIiwgImNhdGNoIiwgImNoYXIiLCAiY2xhc3MiLCAiY29uc3QiLCAiY29udGludWUiLAor
ICAgICAgICAiZGVidWdnZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZG91YmxlIiwK
KyAgICAgICAgImVsc2UiLCAiZW51bSIsICJleHBvcnQiLCAiZXh0ZW5kcyIsCisgICAgICAgICJm
aW5hbCIsICJmaW5hbGx5IiwgImZsb2F0IiwgImZvciIsICJmdW5jdGlvbiIsCisgICAgICAgICJn
b3RvIiwKKyAgICAgICAgImlmIiwgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgImluIiwgImluc3Rh
bmNlb2YiLCAiaW50IiwgImludGVyZmFjZSIsCisgICAgICAgICJsb25nIiwKKyAgICAgICAgIm5h
dGl2ZSIsICJuZXciLAorICAgICAgICAicGFja2FnZSIsICJwcml2YXRlIiwgInByb3RlY3RlZCIs
ICJwdWJsaWMiLAorICAgICAgICAicmV0dXJuIiwKKyAgICAgICAgInNob3J0IiwgInN0YXRpYyIs
ICJzdXBlciIsICJzd2l0Y2giLCAic3luY2hyb25pemVkIiwKKyAgICAgICAgInRoaXMiLCAidGhy
b3ciLCAidGhyb3dzIiwgInRyYW5zaWVudCIsICJ0cnkiLCAidHlwZW9mIiwKKyAgICAgICAgInZh
ciIsICJ2b2lkIiwgInZvbGF0aWxlIiwKKyAgICAgICAgIndoaWxlIiwgIndpdGgiCisgICAgXTsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9w
ZXJ0eSkgeworCisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSAiSWRl
bnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5r
ZXkubmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9m
KCIiICsga2V5TmFtZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCBNRVNTQUdFLCB7IGtleToga2V5TmFtZSB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDEwMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVzdHJpY3QgdXNhZ2Ugb2Ygc3BlY2lmaWVk
IG5vZGUgbW9kdWxlcy4KKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVsegorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRl
eHQpIHsKKyAgICAvLyB0cmltIHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWVzCisgICAgdmFyIHJlc3Ry
aWN0ZWRNb2R1bGVzID0gY29udGV4dC5vcHRpb25zOworCisgICAgLy8gaWYgbm8gbW9kdWxlcyBh
cmUgcmVzdHJpY3RlZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBDYWxsRXhwcmVzc2lvbnMK
KyAgICBpZiAocmVzdHJpY3RlZE1vZHVsZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVy
biB7fTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG5v
ZGUgaXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IElmIHRoZSBub2RlIGlz
IGEgc3RyaW5nIGxpdGVyYWwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTdHJpbmcobm9kZSkg
eworICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBl
b2Ygbm9kZS52YWx1ZSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVu
Y3Rpb24gdG8gY2hlY2sgaWYgYSBub2RlIGlzIGEgcmVxdWlyZSBjYWxsLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gSWYgdGhlIG5vZGUgaXMgYSByZXF1aXJlIGNhbGwuCisgICAgICovCisgICAgZnVuY3Rp
b24gaXNSZXF1aXJlQ2FsbChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLmNhbGxlZS50eXBl
ID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiOworICAg
IH0KKworICAgIC8qKgorICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBoYXMgYW4g
YXJndW1lbnQgdGhhdCBpcyBhbiByZXN0cmljdGVkIG1vZHVsZSBhbmQgcmV0dXJuIGl0cyBuYW1l
LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAq
IEByZXR1cm5zIHt1bmRlZmluZWR8U3RyaW5nfSByZXN0cmljdGVkIG1vZHVsZSBuYW1lIG9yIHVu
ZGVmaW5lZCBpZiBub2RlIGFyZ3VtZW50IGlzbid0IHJlc3RyaWN0ZWQuCisgICAgICovCisgICAg
ZnVuY3Rpb24gZ2V0UmVzdHJpY3RlZE1vZHVsZU5hbWUobm9kZSkgeworICAgICAgICB2YXIgbW9k
dWxlTmFtZTsKKworICAgICAgICAvLyBub2RlIGhhcyBhcmd1bWVudHMgYW5kIGZpcnN0IGFyZ3Vt
ZW50IGlzIHN0cmluZworICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICYmIGlzU3Ry
aW5nKG5vZGUuYXJndW1lbnRzWzBdKSkgeworICAgICAgICAgICAgdmFyIGFyZ3VtZW50VmFsdWUg
PSBub2RlLmFyZ3VtZW50c1swXS52YWx1ZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNr
IGlmIGFyZ3VtZW50IHZhbHVlIGlzIGluIHJlc3RyaWN0ZWQgbW9kdWxlcyBhcnJheQorICAgICAg
ICAgICAgaWYgKHJlc3RyaWN0ZWRNb2R1bGVzLmluZGV4T2YoYXJndW1lbnRWYWx1ZSkgIT09IC0x
KSB7CisgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IGFyZ3VtZW50VmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbW9kdWxlTmFtZTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkg
eworICAgICAgICAgICAgaWYgKGlzUmVxdWlyZUNhbGwobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcmVzdHJpY3RlZE1vZHVsZU5hbWUgPSBnZXRSZXN0cmljdGVkTW9kdWxlTmFtZShub2Rl
KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTW9kdWxlTmFtZSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bW9kdWxlTmFtZX19JyBtb2R1
bGUgaXMgcmVzdHJpY3RlZCBmcm9tIGJlaW5nIHVzZWQuIiwgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kdWxlTmFtZTogcmVzdHJpY3RlZE1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKK307CisKK30se31dLDEwMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmV0dXJuIHN0YXRlbWVudCBj
b250YWlucyBhc3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnQgJiYgbm9kZS5hcmd1bWVu
dC50eXBlID09PSAiQXNzaWdubWVudEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIlJldHVybiBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBjb250YWluIGFz
c2lnbm1lbnQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSwxMDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIGphdmFzY3JpcHQ6IHVybHMKKyAqIEBh
dXRob3IgSWx5YSBWb2xvZGluCisgKi8KKy8qanNoaW50IHNjcmlwdHVybDogdHJ1ZSAqLworLypl
c2xpbnQgbm8tc2NyaXB0LXVybDogMCovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2YXIg
dmFsdWU7CisKKyAgICAgICAgICAgIGlmIChub2RlLnZhbHVlICYmIHR5cGVvZihub2RlLnZhbHVl
KSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG5vZGUudmFsdWUudG9M
b3dlckNhc2UoKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCJqYXZhc2Ny
aXB0OiIpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJTY3JpcHQgVVJMIGlzIGEgZm9ybSBvZiBldmFsLiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwNTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIGNvbXBhcmlzb24gd2hlcmUgbGVmdCBwYXJ0IGlzIHRoZSBzYW1lIGFzIHRoZSByaWdo
dAorICogcGFydC4KKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBvcGVyYXRvcnMgPSBbIj09PSIsICI9PSIsICIhPT0i
LCAiIT0iLCAiPiIsICI8IiwgIj49IiwgIjw9Il07CisgICAgICAgICAgICBpZiAob3BlcmF0b3Jz
LmluZGV4T2Yobm9kZS5vcGVyYXRvcikgPiAtMSAmJgorICAgICAgICAgICAgICAgIChub2RlLmxl
ZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIklkZW50aWZp
ZXIiICYmIG5vZGUubGVmdC5uYW1lID09PSBub2RlLnJpZ2h0Lm5hbWUgfHwKKyAgICAgICAgICAg
ICAgICBub2RlLmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0g
IkxpdGVyYWwiICYmIG5vZGUubGVmdC52YWx1ZSA9PT0gbm9kZS5yaWdodC52YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQ29tcGFyaW5nIHRvIGl0c2VsZiBp
cyBwb3RlbnRpYWxseSBwb2ludGxlc3MuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxMDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgY29tbWEgb3BlcmF0
b3IKKyAqIEBhdXRob3IgQnJhbmRvbiBNaWxscworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgLyoqCisgICAgICogUGFydHMgb2YgdGhlIGdyYW1tYXIgdGhhdCBhcmUgcmVxdWlyZWQgdG8g
aGF2ZSBwYXJlbnMuCisgICAgICovCisgICAgdmFyIHBhcmVudGhlc2l6ZWQgPSB7CisgICAgICAg
ICJEb1doaWxlU3RhdGVtZW50IjogInRlc3QiLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiAidGVz
dCIsCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiAiZGlzY3JpbWluYW50IiwKKyAgICAgICAg
IldoaWxlU3RhdGVtZW50IjogInRlc3QiLAorICAgICAgICAiV2l0aFN0YXRlbWVudCI6ICJvYmpl
Y3QiCisKKyAgICAgICAgLy8gT21pdHRpbmcgQ2FsbEV4cHJlc3Npb24gLSBjb21tYXMgYXJlIHBh
cnNlZCBhcyBhcmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0aW5nIE5ld0V4cHJl
c3Npb24gLSBjb21tYXMgYXJlIHBhcnNlZCBhcyBhcmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAg
IC8vIE9taXR0aW5nIEZvckluU3RhdGVtZW50IC0gcGFydHMgYXJlbid0IGluZGl2aWR1YWxseSBw
YXJlbnRoZXNpc2VkCisgICAgICAgIC8vIE9taXR0aW5nIEZvclN0YXRlbWVudCAtIHBhcnRzIGFy
ZW4ndCBpbmRpdmlkdWFsbHkgcGFyZW50aGVzaXNlZAorICAgIH07CisKKyAgICAvKioKKyAgICAg
KiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub2RlIGlzIHJlcXVpcmVkIGJ5IHRoZSBncmFtbWFyIHRv
IGJlIHdyYXBwZWQgaW4KKyAgICAgKiBwYXJlbnMsIGUuZy4gdGhlIHRlc3Qgb2YgYW4gaWYgc3Rh
dGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAg
ICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHBhcmVucyBhcm91bmQgbm9kZSBiZWxvbmcg
dG8gcGFyZW50IG5vZGUuCisgICAgICovCisgICAgZnVuY3Rpb24gcmVxdWlyZXNFeHRyYVBhcmVu
cyhub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnBhcmVudCAmJiBwYXJlbnRoZXNpemVkW25v
ZGUucGFyZW50LnR5cGVdICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBub2RlID09PSBub2Rl
LnBhcmVudFtwYXJlbnRoZXNpemVkW25vZGUucGFyZW50LnR5cGVdXTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgd3JhcHBlZCBpbiBwYXJlbnMuCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCisgICAgICogQHJldHVybnMge2Jv
b2xlYW59IFRydWUgaWYgdGhlIG5vZGUgaGFzIGEgcGFyZW4gb24gZWFjaCBzaWRlLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2
aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5l
eHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4g
cHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4u
dmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0g
JiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5n
ZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlm
IGEgbm9kZSBpcyB3cmFwcGVkIGluIHR3byBsZXZlbHMgb2YgcGFyZW5zLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBUcnVlIGlmIHR3byBwYXJlbnMgc3Vycm91bmQgdGhlIG5vZGUgb24gZWFjaCBzaWRlLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAg
dmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAg
ICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisg
ICAgICAgIHJldHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBu
ZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBw
cmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5l
eHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdl
WzFdOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAvLyBBbHdheXMgYWxsb3cgc2VxdWVuY2Vz
IGluIGZvciBzdGF0ZW1lbnQgdXBkYXRlCisgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlw
ZSA9PT0gIkZvclN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUgPT09IG5v
ZGUucGFyZW50LmluaXQgfHwgbm9kZSA9PT0gbm9kZS5wYXJlbnQudXBkYXRlKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV3JhcHBp
bmcgYSBzZXF1ZW5jZSBpbiBleHRyYSBwYXJlbnMgaW5kaWNhdGVzIGludGVudAorICAgICAgICAg
ICAgaWYgKHJlcXVpcmVzRXh0cmFQYXJlbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgY29tbWEgb3BlcmF0b3IuIik7Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHNoYWRvd2luZyBv
ZiBOYU4sIHVuZGVmaW5lZCwgYW5kIEluZmluaXR5IChFUzUgc2VjdGlvbiAxNS4xLjEpCisgKiBA
YXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIFJFU1RS
SUNURUQgPSBbInVuZGVmaW5lZCIsICJOYU4iLCAiSW5maW5pdHkiLCAiYXJndW1lbnRzIiwgImV2
YWwiXTsKKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVmlvbGF0aW9uKGlkKSB7CisgICAgICAgIGlm
IChSRVNUUklDVEVELmluZGV4T2YoaWQubmFtZSkgPiAtMSkgeworICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQoaWQsICJTaGFkb3dpbmcgb2YgZ2xvYmFsIHByb3BlcnR5IFwiIiArIGlkLm5hbWUg
KyAiXCIuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFy
aWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JW
aW9sYXRpb24obm9kZS5pZCk7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pZCkgeworICAgICAg
ICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgW10ubWFwLmNhbGwobm9kZS5wYXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLmlkKTsKKyAgICAgICAgICAgIFtd
Lm1hcC5jYWxsKG5vZGUucGFyYW1zLCBjaGVja0ZvclZpb2xhdGlvbik7CisgICAgICAgIH0sCisg
ICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNr
Rm9yVmlvbGF0aW9uKG5vZGUucGFyYW0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sMTA4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgb24gZGVjbGFyaW5nIHZhcmlhYmxlcyBhbHJlYWR5IGRlY2xh
cmVkIGluIHRoZSBvdXRlciBzY29wZQorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHZhcmlhYmxlIGlz
IGNvbnRhaW5lZCBpbiB0aGUgbGlzdCBvZiBnaXZlbiBzY29wZSB2YXJpYWJsZXMuCisgICAgICog
QHBhcmFtIHtPYmplY3R9IHZhcmlhYmxlIFRoZSB2YXJpYWJsZSB0byBjaGVjay4KKyAgICAgKiBA
cGFyYW0ge0FycmF5fSBzY29wZVZhcnMgVGhlIHNjb3BlIHZhcmlhYmxlcyB0byBsb29rIGZvci4K
KyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHZhcmlhYmxlIGlz
IGNvbnRhaW5zIGluIHRoZSBsaXN0IG9mIHNjb3BlIHZhcmlhYmxlcy4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBpc0NvbnRhaW5lZEluU2NvcGVWYXJzKHZhcmlhYmxlLCBzY29wZVZhcnMpIHsKKyAg
ICAgICAgcmV0dXJuIHNjb3BlVmFycy5zb21lKGZ1bmN0aW9uIChzY29wZVZhcikgeworICAgICAg
ICAgICAgaWYgKHNjb3BlVmFyLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFyaWFibGUubmFtZSA9PT0gc2NvcGVWYXIubmFtZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIHNoYWRvd2VkIGlu
IHRoZSBnaXZlbiBzY29wZS4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZXMgVGhlIHZh
cmlhYmxlcyB0byBsb29rIGZvcgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBUaGUgc2Nv
cGUgdG8gYmUgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBjaGVja1NoYWRvd3NJblNjb3BlKHZhcmlhYmxlcywgc2NvcGUpIHsKKyAgICAgICAg
dmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAo
aXNDb250YWluZWRJblNjb3BlVmFycyh2YXJpYWJsZSwgc2NvcGUudmFyaWFibGVzKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHZhcmlhYmxlLmlkZW50aWZpZXJzWzBdLCAie3th
fX0gaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGUgdXBwZXIgc2NvcGUuIiwge2E6IHZhcmlhYmxl
Lm5hbWV9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisg
ICAgICogRmlsdGVycyBhbGwgdmFyaWFibGVzIG9mIGEgbGlzdCB3aGljaCBhbHJlYWR5IG9jY3Vy
IGluIGFub3RoZXIgbGlzdC4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZUxpc3RBIExp
c3Qgb2YgdmFyaWFibGVzIHdoaWNoIHNob3VsZCBiZSBmaWx0ZXJlZC4KKyAgICAgKiBAcGFyYW0g
e0FycmF5fSB2YXJpYWJsZUxpc3RCIExpc3Qgb2YgdmFyaWFibGVzIHdoaWNoIHNob3VsZCBubyBv
Y2N1ciBpbiB2YXJpYWJsZUxpc3RBLgorICAgICAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQg
bGlzdCBvZiB2YXJpYWJsZXMuCisgICAgICovCisgICAgZnVuY3Rpb24gZmlsdGVyVmFyaWFibGVM
aXN0KHZhcmlhYmxlTGlzdEEsIHZhcmlhYmxlTGlzdEIpIHsKKyAgICAgICAgcmV0dXJuIHZhcmlh
YmxlTGlzdEEuZmlsdGVyKGZ1bmN0aW9uICh2YXJpYWJsZUEpIHsKKyAgICAgICAgICAgIHJldHVy
biAhdmFyaWFibGVMaXN0Qi5zb21lKGZ1bmN0aW9uICh2YXJpYWJsZUIpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFyaWFibGVBLm5hbWUgPT09IHZhcmlhYmxlQi5uYW1lOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUg
Z2l2ZW4gbm9kZSBmb3Igc2hhZG93ZWQgdmFyaWFibGVzLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIG9yIEZ1bmN0aW9u
RXhwcmVzc2lvbi4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBjaGVja0ZvclNoYWRvd3Mobm9kZSkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0Lmdl
dFNjb3BlKCksCisgICAgICAgICAgICBhcmdzID0gbm9kZS5wYXJhbXMsCisgICAgICAgICAgICB2
YXJpYWJsZXMgPSBmaWx0ZXJWYXJpYWJsZUxpc3Qoc2NvcGUudmFyaWFibGVzLCBhcmdzKTsKKwor
ICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5IG9mIHZhcmlhYmxlcyBhbmQgZmlu
ZCBkdXBsaWNhdGVzIHdpdGggdGhlIHVwcGVyIHNjb3BlCisgICAgICAgIHZhciB1cHBlciA9IHNj
b3BlLnVwcGVyOworICAgICAgICB3aGlsZSAodXBwZXIpIHsKKyAgICAgICAgICAgIGNoZWNrU2hh
ZG93c0luU2NvcGUodmFyaWFibGVzLCB1cHBlcik7CisgICAgICAgICAgICB1cHBlciA9IHVwcGVy
LnVwcGVyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOiBjaGVja0ZvclNoYWRvd3MsCisgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBjaGVja0ZvclNoYWRvd3MKKyAgICB9OworCit9OworCit9LHt9XSwxMDk6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gcmVxdWlyZSB2YXJpYWJsZXMgZGVjbGFyZWQgd2l0aG91dCB3aGl0ZXNwYWNlIGJlZm9yZSB0
aGUgbGluZXMgc2VtaWNvbG9uCisgKiBAYXV0aG9yIEpvbmF0aGFuIEtpbmdzdG9uCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgc2VtaWNvbG9uV2hpdGVzcGFjZSA9IC9cczskLzsK
KworICAgIHJldHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUp
OworICAgICAgICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlhYmxlIGRlY2xhcmVkIHdp
dGggdHJhaWxpbmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUpOwor
ICAgICAgICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cHJlc3Npb24gY2FsbGVkIHdpdGgg
dHJhaWxpbmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIHRoYXQgc3Bh
Y2VkIGZ1bmN0aW9uIGFwcGxpY2F0aW9uCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8v
d3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rp
b24gZGV0ZWN0T3BlblNwYWNlcyhub2RlKSB7CisgICAgICAgIHZhciBsYXN0Q2FsbGVlVG9rZW4g
PSBjb250ZXh0LmdldExhc3RUb2tlbihub2RlLmNhbGxlZSk7CisgICAgICAgIHZhciB0b2tlbnMg
PSBjb250ZXh0LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgdmFyIGkgPSB0b2tlbnMuaW5kZXhP
ZihsYXN0Q2FsbGVlVG9rZW4pLCBsID0gdG9rZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGkg
PCBsICYmIHRva2Vuc1tpXS52YWx1ZSAhPT0gIigiKSB7CisgICAgICAgICAgICArK2k7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGkgPj0gbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIGxvb2sgZm9yIGEgc3BhY2UgYmV0d2VlbiB0aGUgY2FsbGVlIGFuZCB0
aGUgb3BlbiBwYXJlbgorICAgICAgICBpZiAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSAhPT0gdG9r
ZW5zW2ldLnJhbmdlWzBdKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5l
eHBlY3RlZCBzcGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVuLiIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZGV0
ZWN0T3BlblNwYWNlcywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkZXRlY3RPcGVuU3BhY2Vz
CisgICAgfTsKKworfTsKKworfSx7fV0sMTExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzcGFyc2UgYXJyYXlzCisgKiBA
YXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
KyAgICByZXR1cm4geworCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7CisKKyAgICAgICAgICAgIHZhciBlbXB0eVNwb3QgPSBub2RlLmVsZW1lbnRzLmluZGV4T2Yo
bnVsbCkgPiAtMTsKKworICAgICAgICAgICAgaWYgKGVtcHR5U3BvdCkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbW1hIGluIG1pZGRsZSBvZiBh
cnJheS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sMTEyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdob3NlIGlkZW50aWZpZXIgZW5k
cyB3aXRoIHRoZSBzdHJpbmcgU3luYworICogQGF1dGhvciBNYXR0IER1VmFsbDxodHRwOi8vbWF0
dGR1dmFsbC5jb20vPgorICovCisKKy8qanNoaW50IG5vZGU6dHJ1ZSovCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5
Lm5hbWUsCisgICAgICAgICAgICAgICAgc3luY1JlZ2V4ID0gLy4qU3luYyQvOworCisgICAgICAg
ICAgICBpZiAoc3luY1JlZ2V4LmV4ZWMocHJvcGVydHlOYW1lKSAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHN5bmMgbWV0aG9kOiAn
IiArIHByb3BlcnR5TmFtZSArICInLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sMTEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHRlcm5hcnkgb3BlcmF0
b3JzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGVybmFy
eSBvcGVyYXRvciB1c2VkLiIpOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwx
MTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IERpc2FsbG93IHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGxpbmVzLgorICogQGF1
dGhvciBOb2RlY2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgIHZhciBUUkFJTEVSID0gIlsgXHRcdTAwYTBcdTIwMDBcdTIwMDFcdTIwMDJc
dTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJcdTIw
MjhcdTIwMjlcdTMwMDBdKyQiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IlByb2dyYW0iOiBmdW5jdGlvbiBjaGVja1RyYWlsaW5nU3BhY2VzKG5vZGUpIHsKKworICAgICAg
ICAgICAgLy8gTGV0J3MgaGFjay4gU2luY2UgRXNwcmltYSBkb2VzIG5vdCByZXR1cm4gd2hpdGVz
cGFjZSBub2RlcywKKyAgICAgICAgICAgIC8vIGZldGNoIHRoZSBzb3VyY2UgY29kZSBhbmQgZG8g
YmxhY2sgbWFnaWMgdmlhIHJlZ2V4cHMuCisKKyAgICAgICAgICAgIHZhciBzcmMgPSBjb250ZXh0
LmdldFNvdXJjZSgpLAorICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ0V4cChUUkFJTEVSLCAi
bWciKSwKKyAgICAgICAgICAgICAgICBtYXRjaCwgbGluZXMsIGxvY2F0aW9uOworCisgICAgICAg
ICAgICB3aGlsZSAoKG1hdGNoID0gcmUuZXhlYyhzcmMpKSAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIGxpbmVzID0gc3JjLnNsaWNlKDAsIHJlLmxhc3RJbmRleCkuc3BsaXQoL1xyP1xuL2cp
OworCisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgIGxp
bmU6IGxpbmVzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsaW5lc1tsaW5l
cy5sZW5ndGggLSAxXS5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGggKyAxCisgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgICAgIC8vIFBhc3Npbmcgbm9kZSBpcyBhIGJpdCBkaXJ0eSwg
YmVjYXVzZSBtZXNzYWdlIGRhdGEgd2lsbCBjb250YWluCisgICAgICAgICAgICAgICAgLy8gYmln
IHRleHQgaW4gYHNvdXJjZWAuIEJ1dC4uLiB3aG8gY2FyZXMgOikgPworICAgICAgICAgICAgICAg
IC8vIE9uZSBtb3JlIGtsdWRnZSB3aWxsIG5vdCBtYWtlIHdvcnNlIHRoZSBibG9vZHkgd2l6YXJk
cnkgb2YgdGhpcyBwbHVnaW4uCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
bG9jYXRpb24sICJUcmFpbGluZyBzcGFjZXMgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgIH07Cit9OworCit9LHt9XSwxMTU6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVu
IGluaXRpYWxpemluZyB0byB1bmRlZmluZWQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURl
Y2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUu
aWQubmFtZTsKKyAgICAgICAgICAgIHZhciBpbml0ID0gbm9kZS5pbml0ICYmIG5vZGUuaW5pdC5u
YW1lOworCisgICAgICAgICAgICBpZiAoaW5pdCA9PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSXQncyBub3QgbmVjZXNzYXJ5IHRvIGluaXRp
YWxpemUgJ3t7bmFtZX19JyB0byB1bmRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE2OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgcmVmZXJlbmNlcyB0byB1bmRlY2xhcmVkIHZhcmlhYmxlcy4KKyAqIEBhdXRob3IgTWFyayBN
YWNkb25hbGQKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gSGVscGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gaXNJbXBsaWNp
dEdsb2JhbCh2YXJpYWJsZSkgeworICAgIHJldHVybiB2YXJpYWJsZS5kZWZzLmV2ZXJ5KGZ1bmN0
aW9uKGRlZikgeworICAgICAgICByZXR1cm4gZGVmLnR5cGUgPT09ICJJbXBsaWNpdEdsb2JhbFZh
cmlhYmxlIjsKKyAgICB9KTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBkZWNsYXJlZCB2YXJpYWJs
ZSwgZGVmaW5lZCBpbiBgc2NvcGVgLCB0aGF0IGByZWZgIHJlZmVycyB0by4KKyAqIEBwYXJhbSB7
U2NvcGV9IHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBzZWFyY2guCisgKiBAcGFyYW0ge1Jl
ZmVyZW5jZX0gcmVmIFRoZSByZWZlcmVuY2UgdG8gZmluZCBpbiB0aGUgc2NvcGUuCisgKiBAcmV0
dXJucyB7VmFyaWFibGV9IFRoZSB2YXJpYWJsZSwgb3IgbnVsbCBpZiByZWYgcmVmZXJzIHRvIGFu
IHVuZGVjbGFyZWQgdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIGdldERlY2xhcmVkR2xvYmFsVmFy
aWFibGUoc2NvcGUsIHJlZikgeworICAgIHZhciBkZWNsYXJlZEdsb2JhbCA9IG51bGw7CisgICAg
c2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAgICAgaWYgKHZh
cmlhYmxlLm5hbWUgPT09IHJlZi5pZGVudGlmaWVyLm5hbWUpIHsKKyAgICAgICAgICAgIC8vIElm
IGl0J3MgYW4gaW1wbGljaXQgZ2xvYmFsLCBpdCBtdXN0IGhhdmUgYSBgd3JpdGVhYmxlYCBmaWVs
ZCAoaW5kaWNhdGluZyBpdCB3YXMgZGVjbGFyZWQpCisgICAgICAgICAgICBpZiAoIWlzSW1wbGlj
aXRHbG9iYWwodmFyaWFibGUpIHx8IHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICJ3
cml0ZWFibGUiKSkgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkR2xvYmFsID0gdmFyaWFibGU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBkZWNsYXJlZEdsb2Jh
bDsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oLypub2Rl
Ki8pIHsKKworICAgICAgICAgICAgdmFyIGdsb2JhbFNjb3BlID0gY29udGV4dC5nZXRTY29wZSgp
OworCisgICAgICAgICAgICBnbG9iYWxTY29wZS50aHJvdWdoLmZvckVhY2goZnVuY3Rpb24ocmVm
KSB7CisgICAgICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0RGVjbGFyZWRHbG9iYWxWYXJp
YWJsZShnbG9iYWxTY29wZSwgcmVmKSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlZi5p
ZGVudGlmaWVyLm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChyZWYuaWRlbnRpZmllciwgIid7e25hbWV9fScg
aXMgbm90IGRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmVmLmlzV3JpdGUoKSAmJiB2YXJpYWJsZS53cml0ZWFibGUgPT09IGZhbHNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFt
ZX19JyBpcyByZWFkIG9ubHkuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE3Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgcmVmZXJlbmNlcyB0byB0aGUgdW5kZWZpbmVkIHZhcmlhYmxlLgorICogQGF1
dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS5uYW1lID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQg
PSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgICAgIGlmICghcGFy
ZW50IHx8IHBhcmVudC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwgbm9kZSAhPT0gcGFy
ZW50LnByb3BlcnR5IHx8IHBhcmVudC5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgdW5kZWZpbmVkLiIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisK
K30se31dLDExODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGluIHZhcmlhYmxl
IGRlY2xhcmF0aW9ucy4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1
dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlv
biBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgeworICAgICAgICB2YXIgbGVuID0g
aWRlbnRpZmllci5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgIT09ICJfIiAm
JiAoaWRlbnRpZmllclswXSA9PT0gIl8iIHx8IGlkZW50aWZpZXJbbGVuIC0gMV0gPT09ICJfIik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJGb3JNZW1iZXJF
eHByZXNzaW9uKGlkZW50aWZpZXIpIHsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT09ICJf
X3Byb3RvX18iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3BlY2lhbENhc2VJZGVudGlmaWVy
SW5WYXJpYWJsZUV4cHJlc3Npb24oaWRlbnRpZmllcikgeworICAgICAgICAvLyBDaGVja3MgZm9y
IHRoZSB1bmRlcnNjb3JlIGxpYnJhcnkgdXNhZ2UgaGVyZQorICAgICAgICByZXR1cm4gaWRlbnRp
ZmllciA9PT0gIl8iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRl
cnNjb3JlSW5GdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZp
ZXIgPSBub2RlLmlkLm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAi
dW5kZWZpbmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikpIHsKKyAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAn
IiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJsZUV4cHJlc3Npb24obm9kZSkgewor
ICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5vZGUuaWQubmFtZTsKKworICAgICAgICBpZiAodHlw
ZW9mIGlkZW50aWZpZXIgIT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShp
ZGVudGlmaWVyKSAmJgorICAgICAgICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlmaWVySW5WYXJp
YWJsZUV4cHJlc3Npb24oaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4i
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRl
cnNjb3JlSW5NZW1iZXJFeHByZXNzaW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZpZXIg
PSBub2RlLnByb3BlcnR5Lm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9
PSAidW5kZWZpbmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgJiYKKyAg
ICAgICAgICAgICFpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJlc3Npb24oaWRl
bnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVk
IGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluRnVuY3Rpb25EZWNsYXJhdGlvbiwK
KyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3Jl
SW5WYXJpYWJsZUV4cHJlc3Npb24sCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogY2hlY2tG
b3JUcmFpbGluZ1VuZGVyc2NvcmVJbk1lbWJlckV4cHJlc3Npb24KKyAgICB9OworCit9OworCit9
LHt9XSwxMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IENoZWNrcyBmb3IgdW5yZWFjaGFibGUgY29kZSBkdWUgdG8gcmV0dXJuLCB0aHJv
d3MsIGJyZWFrLCBhbmQgY29udGludWUuCisgKiBAYXV0aG9yIEpvZWwgRmVlbnN0cmEKKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitmdW5jdGlvbiByZXBvcnQoY29udGV4dCwgbm9kZSwg
dW5yZWFjaGFibGVUeXBlKSB7CisgICAgdmFyIGtleXdvcmQ7CisgICAgc3dpdGNoICh1bnJlYWNo
YWJsZVR5cGUpIHsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAgICAgICAgICAg
a2V5d29yZCA9ICJicmVhayI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ29u
dGludWVTdGF0ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9ICJjb250aW51ZSI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKKyAgICAgICAg
ICAgIGtleXdvcmQgPSAicmV0dXJuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJUaHJvd1N0YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gInRocm93IjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgdW5leHBlY3RlZCBzdGF0ZW1lbnQg
YWZ0ZXIgYSB7e3R5cGV9fS4iLCB7IHR5cGU6IGtleXdvcmQgfSk7Cit9CisKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAg
ICAgKiBDaGVja3MgaWYgYSBub2RlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igbm8tdW5yZWFjaGFibGUg
YmVjYXVzZSBvZiB2YXJpYWJsZS9mdW5jdGlvbiBob2lzdGluZworICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xl
YW59IGlmIHRoZSBub2RlIGRvZXNuJ3QgdHJpZ2dlciB1bnJlYWNoYWJsZQorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNVbnJlYWNoYWJsZUFsbG93ZWQobm9kZSkgewor
ICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgfHwKKyAg
ICAgICAgICAgIG5vZGUudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iICYmCisgICAgICAg
ICAgICBub2RlLmRlY2xhcmF0aW9ucy5ldmVyeShmdW5jdGlvbihkZWNsYXJhdGlvbikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbi50eXBlID09PSAiVmFyaWFibGVEZWNsYXJh
dG9yIiAmJiBkZWNsYXJhdGlvbi5pbml0ID09PSBudWxsOworICAgICAgICAgICAgfSk7CisgICAg
fQorCisgICAgLyoKKyAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBub2RlIGlzIHRoZSBs
YXN0IG5vZGUgb3IgZm9sbG93ZWQgZXhjbHVzaXZlbHkgYnkKKyAgICAgKiBob2lzdGVkIGRlY2xh
cmF0aW9ucworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBOb2RlIHRoYXQgc2hvdWxkIGJl
IHRoZSBsYXN0IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQor
ICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrTm9kZShub2RlKSB7CisgICAgICAgIHZhciBwYXJl
bnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICB2YXIgZmllbGQsIGks
IHNpYmxpbmc7CisKKyAgICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAg
Y2FzZSAiU3dpdGNoQ2FzZSI6CisgICAgICAgICAgICAgICAgZmllbGQgPSAiY29uc2VxdWVudCI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJQcm9ncmFtIjoKKyAg
ICAgICAgICAgIGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKKyAgICAgICAgICAgICAgICBmaWVsZCA9
ICJib2R5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gcGFy
ZW50W2ZpZWxkXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgc2libGlu
ZyA9IHBhcmVudFtmaWVsZF1baV07CisgICAgICAgICAgICBpZiAoc2libGluZyA9PT0gbm9kZSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRm91bmQgdGhlIGxhc3QgcmVhY2hhYmxlIHN0
YXRlbWVudCwgYWxsIGRvbmUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc1Vu
cmVhY2hhYmxlQWxsb3dlZChzaWJsaW5nKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChjb250
ZXh0LCBzaWJsaW5nLCBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGNoZWNrTm9kZSwK
KyAgICAgICAgIlRocm93U3RhdGVtZW50IjogY2hlY2tOb2RlLAorICAgICAgICAiQ29udGludWVT
dGF0ZW1lbnQiOiBjaGVja05vZGUsCisgICAgICAgICJCcmVha1N0YXRlbWVudCI6IGNoZWNrTm9k
ZQorICAgIH07CisKK307CisKK30se31dLDEyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRmxhZyBleHByZXNzaW9ucyBpbiBzdGF0ZW1l
bnQgcG9zaXRpb24gdGhhdCBkbyBub3Qgc2lkZSBlZmZlY3QKKyAqIEBhdXRob3IgTWljaGFlbCBG
aWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgLSBhbnkgbm9kZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRo
ZSBnaXZlbiBub2RlIHN0cnVjdHVyYWxseSByZXByZXNlbnRzIGEgZGlyZWN0aXZlCisgICAgICov
CisgICAgZnVuY3Rpb24gbG9va3NMaWtlRGlyZWN0aXZlKG5vZGUpIHsKKyAgICAgICByZXR1cm4g
bm9kZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgbm9kZS5l
eHByZXNzaW9uLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZh
bHVlID09PSAic3RyaW5nIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBwcmVkaWNhdGUgLSAoW2FdIC0+IEJvb2xlYW4pIHRoZSBmdW5jdGlvbiB1c2VkIHRvIG1h
a2UgdGhlIGRldGVybWluYXRpb24KKyAgICAgKiBAcGFyYW0ge2FbXX0gbGlzdCAtIHRoZSBpbnB1
dCBsaXN0CisgICAgICogQHJldHVybnMge2FbXX0gdGhlIGxlYWRpbmcgc2VxdWVuY2Ugb2YgbWVt
YmVycyBpbiB0aGUgZ2l2ZW4gbGlzdCB0aGF0IHBhc3MgdGhlIGdpdmVuIHByZWRpY2F0ZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUsIGxpc3QpIHsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAg
ICAgaWYgKCFwcmVkaWNhdGUobGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChsaXN0
LCAwLCBpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
LSBhIFByb2dyYW0gb3IgQmxvY2tTdGF0ZW1lbnQgbm9kZQorICAgICAqIEByZXR1cm5zIHtBU1RO
b2RlW119IHRoZSBsZWFkaW5nIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZSBub2RlcyBpbiB0aGUgZ2l2
ZW4gbm9kZSdzIGJvZHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkaXJlY3RpdmVzKG5vZGUpIHsK
KyAgICAgICAgcmV0dXJuIHRha2VXaGlsZShsb29rc0xpa2VEaXJlY3RpdmUsIG5vZGUuYm9keSk7
CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYW55IG5v
ZGUKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gYW5jZXN0b3JzIC0gdGhlIGdpdmVuIG5vZGUn
cyBhbmNlc3RvcnMKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4g
bm9kZSBpcyBjb25zaWRlcmVkIGEgZGlyZWN0aXZlIGluIGl0cyBjdXJyZW50IHBvc2l0aW9uCisg
ICAgICovCisgICAgZnVuY3Rpb24gaXNEaXJlY3RpdmUobm9kZSwgYW5jZXN0b3JzKSB7CisgICAg
ICAgIHZhciBwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdLAorICAgICAg
ICAgICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDJdOworICAg
ICAgICByZXR1cm4gKHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIgfHwgcGFyZW50LnR5cGUgPT09
ICJCbG9ja1N0YXRlbWVudCIgJiYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJl
c3Npb24iIHx8IGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikpICYm
CisgICAgICAgICAgICBkaXJlY3RpdmVzKHBhcmVudCkuaW5kZXhPZihub2RlKSA+PSAwOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworCisgICAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUuZXhwcmVzc2lvbi50eXBl
LAorICAgICAgICAgICAgICAgIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisK
KyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICAhL14oPzpBc3NpZ25tZW50fENhbGx8
TmV3fFVwZGF0ZSlFeHByZXNzaW9uJC8udGVzdCh0eXBlKSAmJgorICAgICAgICAgICAgICAgICh0
eXBlICE9PSAiVW5hcnlFeHByZXNzaW9uIiB8fCBbImRlbGV0ZSIsICJ2b2lkIl0uaW5kZXhPZihu
b2RlLmV4cHJlc3Npb24ub3BlcmF0b3IpIDwgMCkgJiYKKyAgICAgICAgICAgICAgICAhaXNEaXJl
Y3RpdmUobm9kZSwgYW5jZXN0b3JzKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgb3IgZnVuY3Rpb24g
Y2FsbCBhbmQgaW5zdGVhZCBzYXcgYW4gZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGRlY2xhcmVk
IGJ1dCB1bnVzZWQgdmFyaWFibGVzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICB2YXIgY29uZmlnID0geworICAgICAgICB2YXJzOiAiYWxsIiwKKyAg
ICAgICAgYXJnczogImFmdGVyLXVzZWQiCisgICAgfTsKKworICAgIGlmIChjb250ZXh0Lm9wdGlv
bnNbMF0pIHsKKyAgICAgICAgaWYgKHR5cGVvZihjb250ZXh0Lm9wdGlvbnNbMF0pID09PSAic3Ry
aW5nIikgeworICAgICAgICAgICAgY29uZmlnLnZhcnMgPSBjb250ZXh0Lm9wdGlvbnNbMF07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9u
c1swXS52YXJzIHx8IGNvbmZpZy52YXJzOworICAgICAgICAgICAgY29uZmlnLmFyZ3MgPSBjb250
ZXh0Lm9wdGlvbnNbMF0uYXJncyB8fCBjb25maWcuYXJnczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZhciBNRVNTQUdFID0gInt7bmFtZX19IGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQiOwor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtSZWZlcmVuY2V9IHJlZiAtIGFuIGVzY29wZSBSZWZl
cmVuY2UKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gcmVmZXJl
bmNlIHJlcHJlc2VudHMgYSByZWFkIG9wZXJhdGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGlz
UmVhZFJlZihyZWYpIHsKKyAgICAgICAgcmV0dXJuIHJlZi5pc1JlYWQoKTsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1Njb3BlfSBzY29wZSAtIGFuIGVzY29wZSBTY29wZSBvYmpl
Y3QKKyAgICAgKiBAcmV0dXJucyB7VmFyaWFibGVbXX0gbW9zdCBvZiB0aGUgbG9jYWwgdmFyaWFi
bGVzIHdpdGggbm8gcmVhZCByZWZlcmVuY2VzCisgICAgICovCisgICAgZnVuY3Rpb24gdW51c2Vk
TG9jYWxzKHNjb3BlKSB7CisgICAgICAgIHZhciB1bnVzZWQgPSBbXTsKKyAgICAgICAgdmFyIHZh
cmlhYmxlcyA9IHNjb3BlLnZhcmlhYmxlczsKKyAgICAgICAgaWYgKHNjb3BlLnR5cGUgIT09ICJn
bG9iYWwiKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhcmlhYmxlcy5sZW5n
dGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGZ1bmN0aW9uIGV4cHJl
c3Npb24gbmFtZXMKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9u
U2NvcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIC8vIHNraXAgaW1wbGljaXQgImFyZ3VtZW50cyIgdmFyaWFibGUK
KyAgICAgICAgICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiB2YXJpYWJs
ZXNbaV0ubmFtZSA9PT0gImFyZ3VtZW50cyIgJiYgdmFyaWFibGVzW2ldLmlkZW50aWZpZXJzLmxl
bmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB2YXJpYWJsZXNbaV0uZGVmc1swXS50
eXBlOworICAgICAgICAgICAgICAgIC8vIHNraXAgY2F0Y2ggdmFyaWFibGVzCisgICAgICAgICAg
ICAgICAgaWYgKHR5cGUgPT09ICJDYXRjaENsYXVzZSIpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlmICJhcmdz
IiBvcHRpb24gaXMgIm5vbmUiLCBza2lwIGFueSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBp
ZiAoY29uZmlnLmFyZ3MgPT09ICJub25lIiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIikgeworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgLy8gaWYgImFyZ3MiIG9wdGlvbiBpcyAiYWZ0ZXItdXNlZCIsIHNraXAgYWxsIGJ1dCB0
aGUgbGFzdCBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFyZ3MgPT09ICJh
ZnRlci11c2VkIiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIiAmJiB2YXJpYWJsZXNbaV0uZGVmc1sw
XS5pbmRleCA8IHZhcmlhYmxlc1tpXS5kZWZzWzBdLm5vZGUucGFyYW1zLmxlbmd0aCAtIDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZXNbaV0ucmVmZXJlbmNlcy5maWx0ZXIoaXNSZWFkUmVmKS5s
ZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2godmFyaWFibGVz
W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseSh1bnVzZWQsIFtdLm1hcC5jYWxsKHNjb3BlLmNoaWxk
U2NvcGVzLCB1bnVzZWRMb2NhbHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAi
UHJvZ3JhbSI6IGZ1bmN0aW9uKHByb2dyYW1Ob2RlKSB7CisgICAgICAgICAgICB2YXIgZ2xvYmFs
U2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisgICAgICAgICAgICB2YXIgdW51c2VkID0gdW51
c2VkTG9jYWxzKGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhciBpLCBsOworCisgICAgICAg
ICAgICAvLyBkZXRlcm1pbmUgdW51c2VkIGdsb2JhbHMKKyAgICAgICAgICAgIGlmIChjb25maWcu
dmFycyA9PT0gImFsbCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdW5yZXNvbHZlZFJlZnMgPSBn
bG9iYWxTY29wZS50aHJvdWdoLmZpbHRlcihpc1JlYWRSZWYpLm1hcChmdW5jdGlvbihyZWYpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi5pZGVudGlmaWVyLm5hbWU7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGdsb2JhbFNjb3Bl
LnZhcmlhYmxlcy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHVucmVzb2x2ZWRSZWZzLmluZGV4T2YoZ2xvYmFsU2NvcGUudmFyaWFibGVzW2ldLm5hbWUpIDwg
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2goZ2xvYmFsU2NvcGUudmFy
aWFibGVzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHVudXNlZC5sZW5ndGg7
IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodW51c2VkW2ldLmVzbGludEV4cGxp
Y2l0R2xvYmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHByb2dyYW1O
b2RlLCBNRVNTQUdFLCB1bnVzZWRbaV0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW51
c2VkW2ldLmRlZnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydCh1bnVzZWRbaV0uaWRlbnRpZmllcnNbMF0sIE1FU1NBR0UsIHVudXNlZFtpXSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKwor
fSx7fV0sMTIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHZhcmlhYmxlcyBiZWZvcmUgdGhleSBhcmUg
ZGVmaW5lZAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgTk9f
RlVOQyA9ICJub2Z1bmMiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIGZpbmRE
ZWNsYXJhdGlvbihuYW1lLCBzY29wZSkgeworICAgICAgICAvLyB0cnkgc2VhcmNoaW5nIGluIHRo
ZSBjdXJyZW50IHNjb3BlIGZpcnN0CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2NvcGUu
dmFyaWFibGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjb3BlLnZh
cmlhYmxlc1tpXS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3Bl
LnZhcmlhYmxlc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBjaGVj
ayBpZiB0aGVyZSdzIHVwcGVyIHNjb3BlIGFuZCBjYWxsIHJlY3Vyc2l2bHkgdGlsbCB3ZSBmaW5k
IHRoZSB2YXJpYWJsZQorICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmaW5kRGVjbGFyYXRpb24obmFtZSwgc2NvcGUudXBwZXIpOworICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0g
Y29udGV4dC5nZXRTY29wZSgpOworICAgICAgICB2YXIgdHlwZU9wdGlvbiA9IGNvbnRleHQub3B0
aW9uc1swXTsKKworICAgICAgICBmdW5jdGlvbiBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVy
ZW5jZSwgZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0eXBlT3B0aW9uICE9PSBOT19G
VU5DIHx8IGRlY2xhcmF0aW9uLmRlZnNbMF0udHlwZSAhPT0gIkZ1bmN0aW9uTmFtZSIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaWRlbnRpZmllcnNbMF0ucmFuZ2VbMV0gPiBy
ZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChyZWZlcmVuY2UuaWRlbnRpZmllciwgInt7YX19IHdhcyB1c2VkIGJlZm9yZSBp
dCB3YXMgZGVmaW5lZCIsIHthOiByZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lfSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2NvcGUucmVm
ZXJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkgeworICAgICAgICAgICAgLy8gaWYg
dGhlIHJlZmVyZW5jZSBpcyByZXNvbHZlZCBjaGVjayBmb3IgZGVjbGFyYXRpb24gbG9jYXRpb24K
KyAgICAgICAgICAgIC8vIGlmIG5vdCwgaXQgY291bGQgYmUgZnVuY3Rpb24gaW52b2NhdGlvbiwg
dHJ5IHRvIGZpbmQgbWFudWFsbHkKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2UucmVzb2x2ZWQg
JiYgcmVmZXJlbmNlLnJlc29sdmVkLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgICAgICBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgcmVmZXJlbmNlLnJlc29s
dmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0
aW9uID0gZmluZERlY2xhcmF0aW9uKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdyZSBubyBpZGVudGlmaWVycywgdGhpcyBpcyBh
IGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIChkZWNsYXJh
dGlvbiAmJiBkZWNsYXJhdGlvbi5pZGVudGlmaWVycy5sZW5ndGggIT09IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIGRlY2xhcmF0aW9u
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0K
KworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKKyAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9LHt9XSwxMjM6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZGlzYWxsb3cgdXNlIG9mIHZvaWQgb3BlcmF0b3IuCisgKiBAYXV0aG9yIE1pa2UgU2lk
b3JvdgorICogQGNvcHlyaWdodCAyMDE0IE1pa2UgU2lkb3Jvdi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAi
VW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUu
b3BlcmF0b3IgPT09ICJ2b2lkIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJFeHBlY3RlZCAndW5kZWZpbmVkJyBhbmQgaW5zdGVhZCBzYXcgJ3ZvaWQnLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTI0OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRo
YXQgd2FybnMgYWJvdXQgdXNlZCB3YXJuaW5nIGNvbW1lbnRzCisgKiBAYXV0aG9yIEFsZXhhbmRl
ciBTY2htaWR0IDxodHRwczovL2dpdGh1Yi5jb20vbHhhbmRlcnM+CisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBjb25maWd1cmF0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9
LAorICAgICAgICB3YXJuaW5nVGVybXMgPSBjb25maWd1cmF0aW9uLnRlcm1zIHx8IFsidG9kbyIs
ICJmaXhtZSIsICJ4eHgiXSwKKyAgICAgICAgbG9jYXRpb24gPSBjb25maWd1cmF0aW9uLmxvY2F0
aW9uIHx8ICJzdGFydCI7CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIHNwZWNpZmllZCBj
b21tZW50IGZvciBiZWluZyBjaGVja2VkLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50
IFRoZSBjb21tZW50IHRvIHByZXBhcmUuCisgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIHNw
ZWNpZmllZCBjb21tZW50IHByZXBhcmVkIGZvciBiZWluZyBjaGVja2VkLgorICAgICAqLworICAg
IGZ1bmN0aW9uIHByZXBhcmVDb21tZW50Rm9yQ2hlY2tpbmcoY29tbWVudCkgeworICAgICAgICB2
YXIgY29tbWVudFRvQ2hlY2s7CisKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50LnRv
TG93ZXJDYXNlKCk7CisgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gY29tbWVudFRvQ2hlY2sudHJp
bSgpOworCisgICAgICAgIHJldHVybiBjb21tZW50VG9DaGVjazsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBjb21tZW50IHN0YXJ0cyB3aXRoIGEgc3Bl
Y2lmaWVkIHRlcm0uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnRUb0NoZWNrIFRoZSBj
b21tZW50IHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsb3dlckNhc2VUZXJtIFRo
ZSB0ZXJtIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYg
dGhlIGNvbW1lbnQgc3RhcnRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGVybSwgZWxzZSBmYWxzZS4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRvQ2hl
Y2ssIGxvd2VyQ2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4
T2YobG93ZXJDYXNlVGVybSkgPT09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tz
IGlmIHRoZSBzcGVjaWZpZWQgY29tbWVudCBjb250YWlucyBhIHNwZWNpZmllZCB0ZXJtIGF0IGFu
eSBsb2NhdGlvbi4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNv
bW1lbnQgdG8gY2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhl
IHRlcm0gdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0
aGUgdGVybSB3YXMgY29udGFpbmVkIGluIHRoZSBjb21tZW50LCBlbHNlIGZhbHNlLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGNvbW1lbnRDb250YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2Vy
Q2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93ZXJD
YXNlVGVybSkgIT09IC0xOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBz
cGVjaWZpZWQgY29tbWVudCBmb3IgbWF0Y2hlcyBvZiB0aGUgY29uZmlndXJlZCB3YXJuaW5nIHRl
cm1zIGFuZCByZXR1cm5zIHRoZSBtYXRjaGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21t
ZW50IFRoZSBjb21tZW50IHdoaWNoIGlzIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge0FycmF5
fSBBbGwgbWF0Y2hlZCB3YXJuaW5nIHRlcm1zIGZvciB0aGlzIGNvbW1lbnQuCisgICAgICovCisg
ICAgZnVuY3Rpb24gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0oY29tbWVudCkgeworICAgICAg
ICB2YXIgbWF0Y2hlcyA9IFtdOworCisgICAgICAgIHdhcm5pbmdUZXJtcy5mb3JFYWNoKGZ1bmN0
aW9uICh0ZXJtKSB7CisgICAgICAgICAgICB2YXIgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dl
ckNhc2UoKSwKKyAgICAgICAgICAgICAgICBjb21tZW50VG9DaGVjayA9IHByZXBhcmVDb21tZW50
Rm9yQ2hlY2tpbmcoY29tbWVudCk7CisKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gInN0
YXJ0IikgeworICAgICAgICAgICAgICAgIGlmIChjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVu
dFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMu
cHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxv
Y2F0aW9uID09PSAiYW55d2hlcmUiKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRDb250
YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXMucHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0KKworICAg
IC8qKgorICAgICAqIENoZWNrcyB0aGUgc3BlY2lmaWVkIG5vZGUgZm9yIG1hdGNoaW5nIHdhcm5p
bmcgY29tbWVudHMgYW5kIHJlcG9ydHMgdGhlbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIEFTVCBub2RlIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVu
ZGVmaW5lZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NvbW1lbnQobm9kZSkgeworICAg
ICAgICB2YXIgbWF0Y2hlcyA9IGNvbW1lbnRDb250YWluc1dhcm5pbmdUZXJtKG5vZGUudmFsdWUp
OworCisgICAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlZFRlcm0pIHsKKyAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkICIgKyBtYXRjaGVkVGVy
bSArICIgY29tbWVudC4iKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgIkJsb2NrQ29tbWVudCI6IGNoZWNrQ29tbWVudCwKKyAgICAgICAgIkxpbmVDb21tZW50
IjogY2hlY2tDb21tZW50CisgICAgfTsKK307CisKK30se31dLDEyNTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVz
ZSBvZiB3aXRoIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiV2l0aFN0YXRlbWVu
dCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIHVzZSBvZiAnd2l0aCcgc3RhdGVtZW50LiIpOworICAgICAgICB9CisgICAgfTsK
KworfTsKKworfSx7fV0sMTI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd3JhcHBpbmcgbm9uZS1pZmZlIGluIHBh
cmVucworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygp
LAorICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4sIG5leHRUb2tlbjsKKworICAgICAgICAg
ICAgaWYgKCEvQ2FsbEV4cHJlc3Npb258TmV3RXhwcmVzc2lvbi8udGVzdChhbmNlc3RvcnMucG9w
KCkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRU
b2tlbkJlZm9yZShub2RlKTsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0Lmdl
dFRva2VuQWZ0ZXIobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4udmFs
dWUgPT09ICIoIiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIpIikgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24gbGl0
ZXJhbHMgaW4gcGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEyNzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxl
IHRvIGVuc3VyZSB0aGUgdXNlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHZhciBmdW5jdGlvblN0YWNrID0gW107CisKKyAgICBmdW5jdGlvbiBzdGFy
dEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goZmFsc2UpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBv
cCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGVjbGFyYXRpb25zKG5vZGUpIHsKKyAg
ICAgICAgaWYgKGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSkgeworICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkNvbWJpbmUgdGhpcyB3aXRoIHRoZSBwcmV2
aW91cyAndmFyJyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm
dW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6
IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisKKyAg
ICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBjaGVja0RlY2xhcmF0aW9ucywKKworICAgICAg
ICAiUHJvZ3JhbTpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0
IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwxMjg6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1
cmUgYmxhbmsgbGluZXMgd2l0aGluIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNr
IDxodHRwczovL2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFz
IFNjaHJlY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAg
dmFyIHJlcXVpcmVQYWRkaW5nID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOworCisg
ICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBo
YXMgYSBibGFuayBsaW5lIGJlZm9yZSBpdHMgZmlyc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBzdGFydHMgd2l0
aCBhIGJsYW5rIGxpbmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2NrVG9w
UGFkZGVkKG5vZGUpIHsKKyAgICAgICAgdmFyIGJsb2NrU3RhcnQgPSBub2RlLmxvYy5zdGFydC5s
aW5lLAorICAgICAgICAgICAgZmlyc3QgPSBub2RlLmJvZHlbMF0sCisgICAgICAgICAgICBmaXJz
dExpbmUgPSBmaXJzdC5sb2Muc3RhcnQubGluZSwKKyAgICAgICAgICAgIGV4cGVjdGVkRmlyc3RM
aW5lID0gYmxvY2tTdGFydCArIDIsCisgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBjb250
ZXh0LmdldENvbW1lbnRzKGZpcnN0KS5sZWFkaW5nOworCisgICAgICAgIGlmIChsZWFkaW5nQ29t
bWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZmlyc3RMaW5lID0gbGVhZGluZ0NvbW1l
bnRzWzBdLmxvYy5zdGFydC5saW5lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cGVj
dGVkRmlyc3RMaW5lIDw9IGZpcnN0TGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVj
a3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBhIGJsYW5rIGxpbmUgYWZ0
ZXIgaXRzIGxhc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59
IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKSB7CisgICAg
ICAgIHZhciBibG9ja0VuZCA9IG5vZGUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgbGFzdCA9
IG5vZGUuYm9keVtub2RlLmJvZHkubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICBsYXN0TGluZSA9
IGxhc3QubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRMYXN0TGluZSA9IGJsb2Nr
RW5kIC0gMiwKKyAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENvbW1l
bnRzKGxhc3QpLnRyYWlsaW5nOworCisgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0
aCA+IDApIHsKKyAgICAgICAgICAgIGxhc3RMaW5lID0gdHJhaWxpbmdDb21tZW50c1t0cmFpbGlu
Z0NvbW1lbnRzLmxlbmd0aCAtIDFdLmxvYy5lbmQubGluZTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBsYXN0TGluZSA8PSBleHBlY3RlZExhc3RMaW5lOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIEFO
RCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gV2hldGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsg
bGluZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkg
eworICAgICAgICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpICYmIGlzTm9u
RW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIHN0YXJ0cyBPUiBlbmRzIHdp
dGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5v
ZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhl
ciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBoYXNOb25FbXB0eUJsb2NrRXh0cmFQYWRkaW5nKG5vZGUpIHsK
KyAgICAgICAgcmV0dXJuIGlzTm9uRW1wdHlCbG9ja1RvcFBhZGRlZChub2RlKSB8fCBpc05vbkVt
cHR5QmxvY2tCb3R0b21QYWRkZWQobm9kZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hl
Y2tzIHRoZSBnaXZlbiBCbG9ja1N0YXRlbWVudCBub2RlIHRvIGJlIHBhZGRlZCBpZiB0aGUgYmxv
Y2sgaXMgbm90IGVtcHR5LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5v
ZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVk
LgorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrUGFkZGluZyhub2RlKSB7CisgICAgICAgIGlm
IChub2RlLmJvZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVQYWRkaW5n
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3QgYmUg
cGFkZGVkIGJ5IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRp
bmcobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJs
b2NrIG11c3Qgbm90IGJlIHBhZGRlZCBieSBibGFuayBsaW5lcy4iKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBjaGVja1BhZGRpbmcKKyAgICB9OworCit9OworCit9LHt9
XSwxMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tcXVvdGVkIHByb3BlcnR5IG5hbWVzIGluIG9iamVjdCBs
aXRlcmFscy4KKyAqIEBhdXRob3IgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5z
LmJlLz4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgZXNwcmltYSA9IHJlcXVpcmUoImVzcHJp
bWEiKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICB2YXIgTU9ERSA9IGNvbnRleHQub3B0aW9uc1swXTsKKworICAgIHN3
aXRjaCAoTU9ERSkgeworCisgICAgICAgIGNhc2UgImFzLW5lZWRlZCI6CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIFByb3BlcnR5OiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBrZXkgPSBub2RlLmtleTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgYW55IHF1b3RlZCBwcm9wZXJ0eSBuYW1lcyByZXF1aXJlZCBxdW90aW5n
CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVv
ZiBrZXkudmFsdWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBlc3ByaW1hLnRva2Vu
aXplKGtleS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5s
ZW5ndGggIT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdCA9IHRva2Vuc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09ICJJZGVudGlm
aWVyIiB8fCB0LnR5cGUgPT09ICJOdWxsIiB8fCB0LnR5cGUgPT09ICJCb29sZWFuIiB8fCB0LnR5
cGUgPT09ICJOdW1lcmljIiAmJiAiIiArICt0LnZhbHVlID09PSB0LnZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJpbHkg
cXVvdGVkIHByb3BlcnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUg
YWxsIHByb3BlcnR5IG5hbWVzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtl
eS50eXBlICE9PSAiTGl0ZXJhbCIgfHwgdHlwZW9mIGtleS52YWx1ZSAhPT0gInN0cmluZyIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbnF1b3RlZCBw
cm9wZXJ0eSBge3tuYW1lfX1gIGZvdW5kLiIsIGtleSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHsi
ZXNwcmltYSI6Nn1dLDEzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGNob29zZSBiZXR3ZWVuIHNpbmdsZSBhbmQgZG91
YmxlIHF1b3RlIG1hcmtzCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRk
dXZhbGwuY29tLz4sIEJyYW5kb24gUGF5dG9uCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFFVT1RFX1NF
VFRJTkdTID0geworICAgICJkb3VibGUiOiB7CisgICAgICAgIHF1b3RlOiAiXCIiLAorICAgICAg
ICBhbHRlcm5hdGVRdW90ZTogIiciLAorICAgICAgICBkZXNjcmlwdGlvbjogImRvdWJsZXF1b3Rl
IgorICAgIH0sCisgICAgInNpbmdsZSI6IHsKKyAgICAgICAgcXVvdGU6ICInIiwKKyAgICAgICAg
YWx0ZXJuYXRlUXVvdGU6ICJcIiIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAic2luZ2xlcXVvdGUi
CisgICAgfQorfTsKKwordmFyIEFWT0lEX0VTQ0FQRSA9ICJhdm9pZC1lc2NhcGUiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoYXQgYSBzdHJpbmcgcGFz
c2VkIGluIGlzIHN1cnJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIKKyAgICAgKiBA
cGFyYW0gIHtzdHJpbmd9IHZhbCBUaGUgdGV4dCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0gIHtz
dHJpbmd9IGNoYXJhY3RlciBUaGUgY2hhcmFjdGVyIHRvIHNlZSBpZiBpdCdzIHN1cnJvdW5kZWQg
YnkuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRleHQgaXMgc3Vycm91
bmRlZCBieSB0aGUgY2hhcmFjdGVyLCBmYWxzZSBpZiBub3QuCisgICAgICovCisgICAgZnVuY3Rp
b24gaXNTdXJyb3VuZGVkQnkodmFsLCBjaGFyYWN0ZXIpIHsKKyAgICAgICAgcmV0dXJuIHZhbFsw
XSA9PT0gY2hhcmFjdGVyICYmIHZhbFt2YWwubGVuZ3RoIC0gMV0gPT09IGNoYXJhY3RlcjsKKyAg
ICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3
VmFsID0gbm9kZS5yYXcsCisgICAgICAgICAgICAgICAgcXVvdGVPcHRpb24gPSBjb250ZXh0Lm9w
dGlvbnNbMF0sCisgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBRVU9URV9TRVRUSU5HU1txdW90
ZU9wdGlvbl0sCisgICAgICAgICAgICAgICAgYXZvaWRFc2NhcGUgPSBjb250ZXh0Lm9wdGlvbnNb
MV0gPT09IEFWT0lEX0VTQ0FQRSwKKyAgICAgICAgICAgICAgICBpc1ZhbGlkOworCisgICAgICAg
ICAgICBpZiAoc2V0dGluZ3MgJiYgdHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgICAgICBpc1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5xdW90ZSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgYXZvaWRFc2NhcGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzU3Vycm91bmRlZEJ5KHJhd1ZhbCwgc2V0dGluZ3Mu
YWx0ZXJuYXRlUXVvdGUpICYmIHJhd1ZhbC5pbmRleE9mKHNldHRpbmdzLnF1b3RlKSA+PSAwOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU3RyaW5ncyBtdXN0IHVzZSAi
ICsgc2V0dGluZ3MuZGVzY3JpcHRpb24gKyAiLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEzMTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHVzZSBvZiBwYXJzZUludCB3aXRob3V0IGEgcmFkaXggYXJndW1lbnQKKyAqIEBhdXRob3Ig
SmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
ICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAg
IHZhciByYWRpeDsKKworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJwYXJz
ZUludCIpIHsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPCAy
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHJh
ZGl4IHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAg
ICAgICAgICAgIHJhZGl4ID0gbm9kZS5hcmd1bWVudHNbMV07CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZG9uJ3QgYWxsb3cgbm9uLW51bWVyaWMgbGl0ZXJhbHMgb3IgdW5kZWZpbmVkCisgICAg
ICAgICAgICAgICAgICAgIGlmICgocmFkaXgudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBy
YWRpeC52YWx1ZSAhPT0gIm51bWJlciIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocmFk
aXgudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIHJhZGl4Lm5hbWUgPT09ICJ1bmRlZmluZWQiKQor
ICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJJbnZhbGlkIHJhZGl4IHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sMTMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbWlzc2luZyBzZW1pY29sb25z
LgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZh
ciBPUFRfT1VUX1BBVFRFUk4gPSAvW1xbXChcL1wrXC1dLzsKKworICAgIHZhciBhbHdheXMgPSBj
b250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAg
ICAqIENoZWNrcyBhIG5vZGUgdG8gc2VlIGlmIGl0J3MgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24u
CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAq
IEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2VtaWNvbG9u
KG5vZGUpIHsKKyAgICAgICAgdmFyIGxhc3RUb2tlbiA9IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5v
ZGUpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUp
OworCisgICAgICAgIGlmIChhbHdheXMpIHsKKyAgICAgICAgICAgIGlmIChsYXN0VG9rZW4udHlw
ZSAhPT0gIlB1bmN0dWF0b3IiIHx8IGxhc3RUb2tlbi52YWx1ZSAhPT0gIjsiKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbGFzdFRva2VuLmxvYy5lbmQsICJNaXNzaW5n
IHNlbWljb2xvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChsYXN0VG9rZW4udHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmIGxhc3RUb2tlbi52YWx1
ZSA9PT0gIjsiKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIW5leHRUb2tlbiB8fCAhKE9QVF9P
VVRfUEFUVEVSTi50ZXN0KG5leHRUb2tlbi52YWx1ZSkpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsIG5vZGUubG9jLmVuZCwgIkV4dHJhIHNlbWljb2xvbi4iKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlcmUncyBhIHNlbWljb2xvbiBhZnRl
ciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBjaGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkgewor
CisgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAg
ICAgICAgcGFyZW50SW5kZXggPSBhbmNlc3RvcnMubGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIHBh
cmVudCA9IGFuY2VzdG9yc1twYXJlbnRJbmRleF07CisKKyAgICAgICAgaWYgKChwYXJlbnQudHlw
ZSAhPT0gIkZvclN0YXRlbWVudCIgfHwgcGFyZW50LmluaXQgIT09IG5vZGUpICYmCisgICAgICAg
ICAgICAocGFyZW50LnR5cGUgIT09ICJGb3JJblN0YXRlbWVudCIgfHwgcGFyZW50LmxlZnQgIT09
IG5vZGUpCisgICAgICAgICkgeworICAgICAgICAgICAgY2hlY2tGb3JTZW1pY29sb24obm9kZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVi
bGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBjaGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVj
bGFyYXRpb24sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29s
b24sCisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAg
ICAgIkRlYnVnZ2VyU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJCcmVh
a1N0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiQ29udGludWVTdGF0ZW1l
bnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkVtcHR5U3RhdGVtZW50IjogZnVuY3Rp
b24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBuZXh0VG9rZW47CisKKyAgICAgICAgICAgIGlm
ICghYWx3YXlzKSB7CisgICAgICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tl
bkFmdGVyKG5vZGUpIHx8IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5vZGUpOworCisgICAgICAgICAg
ICAgICAgaWYgKCEoT1BUX09VVF9QQVRURVJOLnRlc3QobmV4dFRva2VuLnZhbHVlKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4dHJhIHNlbWljb2xvbi4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sMTMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHJlcXVpcmUgc29ydGluZyBvZiB2YXJpYWJs
ZXMgd2l0aGluIGEgc2luZ2xlIFZhcmlhYmxlIERlY2xhcmF0aW9uIGJsb2NrCisgKiBAYXV0aG9y
IElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGNvbmZpZ3Vy
YXRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisgICAgICAgIGlnbm9yZUNhc2UgPSBj
b25maWd1cmF0aW9uLmlnbm9yZUNhc2UgfHwgZmFsc2U7CisKKyAgICByZXR1cm4geworICAgICAg
ICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIG5v
ZGUuZGVjbGFyYXRpb25zLnJlZHVjZShmdW5jdGlvbihtZW1vLCBkZWNsKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGxhc3RWYXJpYWJsZU5hbWUgPSBtZW1vLmlkLm5hbWUsCisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlblZhcmlhYmxlTmFtZSA9IGRlY2wuaWQubmFtZTsKKworICAgICAgICAgICAg
ICAgIGlmIChpZ25vcmVDYXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RWYXJpYWJsZU5h
bWUgPSBsYXN0VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlblZhcmlhYmxlTmFtZSA9IGN1cnJlblZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW5WYXJpYWJsZU5h
bWUgPCBsYXN0VmFyaWFibGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KGRlY2wsICJWYXJpYWJsZXMgd2l0aGluIHRoZSBzYW1lIGRlY2xhcmF0aW9uIGJsb2NrIHNo
b3VsZCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1lbW87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGRlY2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgbm9kZS5kZWNs
YXJhdGlvbnNbMF0pOworICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDEzNDpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBlbmZvcmNlIHRoZSBudW1iZXIgb2Ygc3BhY2VzIGFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAq
IEBhdXRob3IgTmljayBGaXNoZXIKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vIHVubGVzcyB0
aGUgZmlyc3Qgb3B0aW9uIGlzIGAibmV2ZXIiYCwgdGhlbiBhIHNwYWNlIGlzIHJlcXVpcmVkCisg
ICAgdmFyIHJlcXVpcmVzU3BhY2UgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciIsCisg
ICAgICAgIGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1sxXSB8fCB7IGNoZWNrRnVuY3Rpb25LZXl3
b3JkOiBmYWxzZSB9OworCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIHNlcGFyYXRpb24g
b2YgdHdvIGFkamFjZW50IHRva2VucyBtZWV0cyB0aGUgc3BhY2luZyBydWxlcywgYW5kIHJlcG9y
dCBhIHByb2JsZW0gaWYgbm90LgorICAgICAqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
ICBUaGUgbm9kZSB0byB3aGljaCB0aGUgcG90ZW50aWFsIHByb2JsZW0gYmVsb25ncy4KKyAgICAg
KiBAcGFyYW0ge1Rva2VufSBsZWZ0ICAgIFRoZSBmaXJzdCB0b2tlbi4KKyAgICAgKiBAcGFyYW0g
e1Rva2VufSByaWdodCAgIFRoZSBzZWNvbmQgdG9rZW4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja1Rva2Vucyhub2RlLCBsZWZ0LCByaWdodCkgewor
ICAgICAgICB2YXIgaGFzU3BhY2UgPSBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF0sCisg
ICAgICAgICAgICB2YWx1ZSA9IGxlZnQudmFsdWU7CisKKyAgICAgICAgaWYgKGhhc1NwYWNlICE9
PSByZXF1aXJlc1NwYWNlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiS2V5
d29yZCBcInt7dmFsdWV9fVwiIG11c3Qge3tub3R9fWJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2Uu
IiwgeworICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBub3Q6
IHJlcXVpcmVzU3BhY2UgPyAiIiA6ICJub3QgIgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gbm9kZSAoYGlmYCwg
YGZvcmAsIGB3aGlsZWAsIGV0YyksIGhhcyB0aGUgY29ycmVjdCBzcGFjaW5nIGFmdGVyIGl0Lgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBA
cmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAg
ICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpOworICAgICAg
ICBjaGVja1Rva2Vucyhub2RlLCB0b2tlbnNbMF0sIHRva2Vuc1sxXSk7CisgICAgfQorCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGBlbHNlYAorICAg
ICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJ
ZlN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLmFsdGVybmF0
ZSwgY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLmFsdGVybmF0ZSksIGNvbnRleHQuZ2V0Rmly
c3RUb2tlbihub2RlLmFsdGVybmF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICAiRm9yU3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJGb3JPZlN0YXRlbWVudCI6IGNo
ZWNrLAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIldoaWxlU3Rh
dGVtZW50IjogY2hlY2ssCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24gKG5v
ZGUpIHsKKyAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhl
IGB3aGlsZWAKKyAgICAgICAgICAgIHZhciB3aGlsZVRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5z
QmVmb3JlKG5vZGUudGVzdCwgMik7CisgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLCB3aGls
ZVRva2Vuc1swXSwgd2hpbGVUb2tlbnNbMV0pOworICAgICAgICB9LAorICAgICAgICAiU3dpdGNo
U3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUg
YGZpbmFsbHlgCisgICAgICAgICAgICBpZiAobm9kZS5maW5hbGl6ZXIpIHsKKyAgICAgICAgICAg
ICAgICBjaGVja1Rva2Vucyhub2RlLmZpbmFsaXplciwgY29udGV4dC5nZXRUb2tlbkJlZm9yZShu
b2RlLmZpbmFsaXplciksIGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmZpbmFsaXplcikpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiQ2F0Y2hTdGF0ZW1lbnQiOiBjaGVj
aywKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkZ1bmN0aW9uRXhw
cmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoY29uZmlnLmNoZWNr
RnVuY3Rpb25LZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTM1OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZW5z
dXJlIHdoaXRlc3BhY2UgYmVmb3JlIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNr
IDxodHRwczovL2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFz
IFNjaHJlY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAg
dmFyIHJlcXVpcmVTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAg
IC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBo
YXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0
IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAt
IFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRo
ZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5y
YW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVy
bWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgor
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSB0b2tlbnMgYXJlIG9uIHRo
ZSBzYW1lIGxpbmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdo
dCkgeworICAgICAgICByZXR1cm4gbGVmdC5sb2Muc3RhcnQubGluZSA9PT0gcmlnaHQubG9jLnN0
YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBnaXZlbiBCbG9j
a1N0YXRlbWVudCBub2RlIGhhcyBhIHByZWNlZGluZyBzcGFjZSBpZiBpdCBkb2VzbuKAmXQgc3Rh
cnQgb24gYSBuZXcgbGluZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBu
b2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5l
ZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja1ByZWNlZGluZ1NwYWNlKG5vZGUpIHsKKyAg
ICAgICAgdmFyIHByZWNlZGluZ1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwK
KyAgICAgICAgICAgIGhhc1NwYWNlOworCisgICAgICAgIGlmIChwcmVjZWRpbmdUb2tlbiAmJiBp
c1NhbWVMaW5lKHByZWNlZGluZ1Rva2VuLCBub2RlKSkgeworICAgICAgICAgICAgaGFzU3BhY2Ug
PSBpc1NwYWNlZChwcmVjZWRpbmdUb2tlbiwgbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChyZXF1
aXJlU3BhY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1NwYWNlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHNwYWNlIGJlZm9yZSBvcGVu
aW5nIGJyYWNlLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGhhc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHNwYWNlIGJlZm9yZSBvcGVuaW5nIGJyYWNlLiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB7CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGNoZWNrUHJlY2VkaW5nU3Bh
Y2UKKyAgICB9OworCit9OworCit9LHt9XSwxMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBvciBlbmZvcmNlcyBzcGFj
ZXMgaW5zaWRlIG9mIGJyYWNrZXRzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisg
KiBAY29weXJpZ2h0IDIwMTQgQnJhbmR5biBCZW5uZXR0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQGNvcHlyaWdodCAyMDE0IE1pY2hhZWwgRmljYXJyYS4gTm8gcmlnaHRzIHJlc2VydmVkLgor
ICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNwYWNlZDog
Y29udGV4dC5vcHRpb25zWzBdID09PSAiYWx3YXlzIiwKKyAgICAgICAgc2luZ2xlRWxlbWVudEV4
Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNb
MV0uc2luZ2xlVmFsdWUsCisgICAgICAgIG9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4
dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0ub2JqZWN0c0luQXJy
YXlzLAorICAgICAgICBhcnJheXNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFd
ICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uYXJyYXlzSW5BcnJheXMsCisgICAgICAg
IHByb3BlcnR5TmFtZTogY29udGV4dC5vcHRpb25zWzFdID09IG51bGwgfHwgY29udGV4dC5vcHRp
b25zWzFdLnByb3BlcnR5TmFtZSA9PSBudWxsIHx8ICEhY29udGV4dC5vcHRpb25zWzFdLnByb3Bl
cnR5TmFtZQorICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVy
cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMg
d2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0
aGVtLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0
LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3Qu
CisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNl
IGJldHdlZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0
LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBd
OworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNl
bnQgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBs
ZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdo
dCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdo
ZXRoZXIgb3Igbm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVm
dC5sb2Muc3RhcnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAg
LyoqCisgICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgc3BhY2UgYWZ0ZXIg
dGhlIGZpcnN0IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0
byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICogQHBhcmFtIHtPYmplY3Rb
XX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5nLgorICAgICog
QHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnROb0JlZ2lubmluZ1Nw
YWNlKG5vZGUsIHRva2VucykgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNb
MF0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNw
YWNlIGFmdGVyICciICsgdG9rZW5zWzBdLnZhbHVlICsgIiciKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAqIFJlcG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzcGFjZSBiZWZvcmUgdGhl
IGxhc3QgdG9rZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJl
cG9ydCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFyYW0ge09iamVjdFtdfSB0
b2tlbnMgLSBUaGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCisgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9k
ZSwgdG9rZW5zKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1t0b2tlbnMu
bGVuZ3RoIC0gMV0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxk
IGJlIG5vIHNwYWNlIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udmFsdWUg
KyAiJyIpOworICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3Vs
ZCBiZSBhIHNwYWNlIGFmdGVyIHRoZSBmaXJzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAg
ICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBm
b3Igc3BhY2luZy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24g
cmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zWzBdLmxvYy5zdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgIkEgc3BhY2UgaXMgcmVxdWlyZWQgYWZ0ZXIgJyIgKyB0b2tlbnNbMF0udmFsdWUgKyAiJyIp
OworICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZCBiZSBh
IHNwYWNlIGJlZm9yZSB0aGUgbGFzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBw
YXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3Bh
Y2luZy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0
UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Muc3RhcnQsCisgICAgICAgICAg
ICAgICAgICAgICJBIHNwYWNlIGlzIHJlcXVpcmVkIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMu
bGVuZ3RoIC0gMV0udmFsdWUgKyAiJyIpOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVy
biB7CisKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogb3B0aW9ucy5wcm9wZXJ0eU5hbWUgPyBm
dW5jdGlvbiBjaGVja01lbWJlcihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5jb21wdXRl
ZCkgeworICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2Rl
LnByb3BlcnR5LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB2YXIgdG9rZW5BID0gdG9rZW5zWzBd
LCB0b2tlbkIgPSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vu
c1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07
CisgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2Ft
ZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25z
LnNwYWNlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkEs
IHRva2VuQikgJiYgaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSAmJiBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkRW5kaW5nU3BhY2Uo
bm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tl
bkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnROb0JlZ2lu
bmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tlbnMp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IDogZnVuY3Rpb24oKSB7fSwK
KworICAgICAgICBBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRv
a2Vucyhub2RlKTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9
IHRva2Vuc1sxXSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0
aCAtIDJdLCB0b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworCisgICAgICAgICAg
ICB2YXIgb3BlbmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgPQorICAgICAgICAgICAgICAgIG9wdGlv
bnMub2JqZWN0c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQi52YWx1ZSA9PT0gInsiIHx8Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucy5hcnJheXNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkIu
dmFsdWUgPT09ICJbIiB8fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuc2luZ2xlRWxlbWVudEV4
Y2VwdGlvbiAmJiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMQorICAgICAgICAgICAgICAgID8g
IW9wdGlvbnMuc3BhY2VkIDogb3B0aW9ucy5zcGFjZWQ7CisKKyAgICAgICAgICAgIHZhciBjbG9z
aW5nQnJhY2tldE11c3RCZVNwYWNlZCA9CisgICAgICAgICAgICAgICAgb3B0aW9ucy5vYmplY3Rz
SW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5DLnZhbHVlID09PSAifSIgfHwKKyAgICAgICAgICAg
ICAgICBvcHRpb25zLmFycmF5c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQy52YWx1ZSA9PT0g
Il0iIHx8CisgICAgICAgICAgICAgICAgb3B0aW9ucy5zaW5nbGVFbGVtZW50RXhjZXB0aW9uICYm
IG5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAxCisgICAgICAgICAgICAgICAgPyAhb3B0aW9ucy5z
cGFjZWQgOiBvcHRpb25zLnNwYWNlZDsKKworICAgICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9r
ZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG9wZW5pbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmICFpc1NwYWNlZCh0b2tlbkEs
IHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdT
cGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wZW5pbmdC
cmFja2V0TXVzdEJlU3BhY2VkICYmIGlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjbG9zaW5nQnJhY2tldE11c3RCZVNw
YWNlZCAmJiAhaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcG9ydFJlcXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFjbG9zaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiBpc1NwYWNlZCh0b2tl
bkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShu
b2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKworICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0
LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRv
a2VuQiA9IHRva2Vuc1sxXSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5z
Lmxlbmd0aCAtIDJdLCB0b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAg
ICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9rZW5D
LCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3BhY2VkKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vu
cyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1Nw
YWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJl
cXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNl
ZCh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVn
aW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgIH07CisKK307CisKK30se31dLDEzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVuZm9yY2VzIHNw
YWNlcyBpbnNpZGUgb2YgcGFyZW50aGVzZXMuCisgKiBAYXV0aG9yIEpvbmF0aGFuIFJhamF2dW9y
aQorICogQGNvcHlyaWdodCAyMDE0IEpvbmF0aGFuIFJhamF2dW9yaS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBSRSwgTUVTU0FHRTsKKworICAgIGlm
IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiKSB7CisgICAgICAgIFJFID0gL1woW14g
XCldfFteIFwoXVwpL21nOworICAgICAgICBNRVNTQUdFID0gIlRoZXJlIG11c3QgYmUgYSBzcGFj
ZSBpbnNpZGUgdGhpcyBwYXJlbi4iOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFID0gL1woIHwg
XCkvbWc7CisgICAgICAgIE1FU1NBR0UgPSAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlcyBpbnNp
ZGUgdGhpcyBwYXJlbi4iOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgc2tpcFJhbmdl
cyA9IFtdOworCisgICAgLyoqCisgICAgICogQWRkcyB0aGUgcmFuZ2Ugb2YgYSBub2RlIHRvIHRo
ZSBzZXQgdG8gYmUgc2tpcHBlZCB3aGVuIGNoZWNraW5nIHBhcmVucworICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBza2lwCisgICAgICogQHJldHVybnMge3ZvaWR9Cisg
ICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhZGRTa2lwUmFuZ2Uobm9kZSkg
eworICAgICAgICBza2lwUmFuZ2VzLnB1c2gobm9kZS5yYW5nZSk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogU29ydHMgdGhlIHNraXBSYW5nZXMgYXJyYXkuIE11c3QgYmUgY2FsbGVkIGJlZm9y
ZSBzaG91bGRTa2lwCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBzb3J0U2tpcFJhbmdlcygpIHsKKyAgICAgICAgc2tpcFJhbmdl
cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF07
CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIGNlcnRh
aW4gcG9zaXRpb24gaW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc2tpcHBlZAorICAgICAqIEBwYXJh
bSB7TnVtYmVyfSBwb3MgVGhlIDAtYmFzZWQgaW5kZXggaW4gdGhlIHNvdXJjZQorICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgc2tpcHBlZAor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gc2hvdWxkU2tpcChwb3MpIHsK
KyAgICAgICAgdmFyIGksIGxlbiwgcmFuZ2U7CisgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHNr
aXBSYW5nZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgIHJhbmdlID0g
c2tpcFJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmIChwb3MgPCByYW5nZVswXSkgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPCByYW5nZVsxXSkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsK
KworICAgICAgICAiUHJvZ3JhbTpleGl0IjogZnVuY3Rpb24gY2hlY2tQYXJlblNwYWNlcyhub2Rl
KSB7CisKKyAgICAgICAgICAgIHZhciBtYXRjaCwKKyAgICAgICAgICAgICAgICBuZXh0TGluZSwK
KyAgICAgICAgICAgICAgICBjb2x1bW4sCisgICAgICAgICAgICAgICAgbGluZSA9IDEsCisgICAg
ICAgICAgICAgICAgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSwKKyAgICAgICAgICAgICAg
ICBwb3MgPSAwOworCisgICAgICAgICAgICBzb3J0U2tpcFJhbmdlcygpOworCisgICAgICAgICAg
ICB3aGlsZSAoKG1hdGNoID0gUkUuZXhlYyhzb3VyY2UpKSAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UuY2hhckF0KG1hdGNoLmluZGV4KSAhPT0gIigiKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE1hdGNoZWQgYSBjbG9zaW5nIHBhcmVuIHBhdHRlcm4KKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoIXNob3VsZFNraXAobWF0Y2guaW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICgobmV4dExpbmUgPSBzb3VyY2UuaW5kZXhPZigiXG4iLCBwb3MpKSAhPT0g
LTEgJiYgbmV4dExpbmUgPCBtYXRjaC5pbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cG9zID0gbmV4dExpbmUgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAxOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1hdGNo
LmluZGV4IC0gcG9zOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IHsgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4gfSwgTUVTU0FHRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0sCisKKworICAgICAgICAvLyBUaGVzZSBu
b2RlcyBjYW4gY29udGFpbiBwYXJlbnRoZXNlcyB0aGF0IHRoaXMgcnVsZSBkb2Vzbid0IGNhcmUg
YWJvdXQKKworICAgICAgICBMaW5lQ29tbWVudDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIEJs
b2NrQ29tbWVudDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIExpdGVyYWw6IGFkZFNraXBSYW5n
ZQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBhcm91bmQgaW5m
aXggb3BlcmF0b3JzCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgdmFyIE9QRVJBVE9SUyA9IFsKKyAgICAgICAgIioiLCAiLyIsICIlIiwgIisiLCAi
LSIsICI8PCIsICI+PiIsICI+Pj4iLCAiPCIsICI8PSIsICI+IiwgIj49IiwgImluIiwKKyAgICAg
ICAgImluc3RhbmNlb2YiLCAiPT0iLCAiIT0iLCAiPT09IiwgIiE9PSIsICImIiwgIl4iLCAifCIs
ICImJiIsICJ8fCIsICI9IiwKKyAgICAgICAgIis9IiwgIi09IiwgIio9IiwgIi89IiwgIiU9Iiwg
Ijw8PSIsICI+Pj0iLCAiPj4+PSIsICImPSIsICJePSIsICJ8PSIsCisgICAgICAgICI/IiwgIjoi
LCAiLCIKKyAgICBdOworCisgICAgZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmlnaHQpIHsKKyAg
ICAgICAgdmFyIG9wLCB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJh
bmdlWzFdLCByaWdodC5yYW5nZVswXV19LCAxLCAxKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDEs
IGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgb3AgPSB0
b2tlbnNbaV07CisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgb3AudHlwZSA9PT0g
IlB1bmN0dWF0b3IiICYmCisgICAgICAgICAgICAgICAgT1BFUkFUT1JTLmluZGV4T2Yob3AudmFs
dWUpID49IDAgJiYKKyAgICAgICAgICAgICAgICAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSA+PSBv
cC5yYW5nZVswXSB8fCBvcC5yYW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdKQorICAg
ICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzUmlnaHRTcGFjZWQobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIG9wLCB0b2tlbnMgPSBj
b250ZXh0LmdldFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCByaWdodC5yYW5nZVswXV19
LCAxLCAxKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsg
aSA8IGw7ICsraSkgeworICAgICAgICAgICAgb3AgPSB0b2tlbnNbaV07CisgICAgICAgICAgICBp
ZiAoCisgICAgICAgICAgICAgICAgb3AudHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmCisgICAgICAg
ICAgICAgICAgT1BFUkFUT1JTLmluZGV4T2Yob3AudmFsdWUpID49IDAgJiYKKyAgICAgICAgICAg
ICAgICBvcC5yYW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdCisgICAgICAgICAgICAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVwb3J0KG5v
ZGUpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkluZml4IG9wZXJhdG9ycyBtdXN0
IGJlIHNwYWNlZC4iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0JpbmFyeShub2RlKSB7
CisgICAgICAgIGlmICghaXNTcGFjZWQobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KSkgeworICAgICAg
ICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tTZXF1ZW5jZShub2RlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5leHBy
ZXNzaW9ucy5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmln
aHRTcGFjZWQobm9kZS5leHByZXNzaW9uc1tpXSwgbm9kZS5leHByZXNzaW9uc1tpICsgMV0pKSB7
CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tDb25k
aXRpb25hbChub2RlKSB7CisgICAgICAgIGlmICghaXNTcGFjZWQobm9kZS50ZXN0LCBub2RlLmNv
bnNlcXVlbnQpIHx8ICFpc1NwYWNlZChub2RlLmNvbnNlcXVlbnQsIG5vZGUuYWx0ZXJuYXRlKSkg
eworICAgICAgICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY2hlY2tWYXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmICFpc1NwYWNl
ZChub2RlLmlkLCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Np
b24iOiBjaGVja0JpbmFyeSwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBjaGVja0JpbmFy
eSwKKyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCisgICAgICAgICJD
b25kaXRpb25hbEV4cHJlc3Npb24iOiBjaGVja0NvbmRpdGlvbmFsLAorICAgICAgICAiU2VxdWVu
Y2VFeHByZXNzaW9uIjogY2hlY2tTZXF1ZW5jZSwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRv
ciI6IGNoZWNrVmFyCisgICAgfTsKKworfTsKKworfSx7fV0sMTM5OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBm
b2xsb3dpbmcgcmV0dXJuLCB0aHJvdywgYW5kIGNhc2UKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNh
cnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAg
ICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpLAorICAgICAg
ICAgICAgdmFsdWUgPSB0b2tlbnNbMF0udmFsdWU7CisKKyAgICAgICAgaWYgKHRva2Vuc1swXS5y
YW5nZVsxXSA+PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJLZXl3b3JkIFwiIiArIHZhbHVlICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkg
d2hpdGVzcGFjZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICAiU3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3RhdGVtZW50IjogY2hl
Y2sKKyAgICB9OworCit9OworCit9LHt9XSwxNDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGZvbGxvd2luZyB1
bmFyeSB3b3JkIG9wZXJhdG9ycworICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVz
ZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2Vu
czsKKyAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAyKTsKKyAg
ICAgICAgaWYgKHRva2Vuc1swXS5yYW5nZVsxXSA+PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodG9rZW5zWzBdLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSAiZGVsZXRlIjoKKyAgICAgICAgICAgICAgICBjYXNlICJuZXciOgorICAgICAgICAgICAgICAg
IGNhc2UgInR5cGVvZiI6CisgICAgICAgICAgICAgICAgY2FzZSAidm9pZCI6CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmFyeSB3b3JkIG9wZXJhdG9yIFwiIiAr
IHRva2Vuc1swXS52YWx1ZSArICJcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIik7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIG5vIGRlZmF1
bHQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICAgICJOZXdFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBj
aGVjaworICAgIH07CisKK307CisKK30se31dLDE0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRW5mb3JjZXMgb3IgZGlzYWxsb3dzIGEg
c3BhY2UgYmVnaW5uaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4KKyAqIEBhdXRob3IgR3JlZyBD
b2NoYXJkCisgKiBAY29weXJpZ2h0IDIwMTQgR3JlZyBDb2NoYXJkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8gVW5sZXNzIHRoZSBmaXJzdCBvcHRpb24g
aXMgbmV2ZXIsIHJlcXVpcmUgYSBzcGFjZQorICAgIHZhciByZXF1aXJlU3BhY2UgPSBjb250ZXh0
Lm9wdGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAgICAvLyBEZWZhdWx0IHRvIG1hdGNoIGFueXRo
aW5nLCBzbyBhbGwgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBubyBleGNlcHRpb25zCisgICAgdmFy
IGV4Y2VwdGlvbk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIgIik7CisKKyAgICAvLyBHcmFiIHRoZSBl
eGNlcHRpb25zIGFycmF5IGFuZCBidWlsZCBhIFJlZ0V4cCBtYXRjaGVyIGZvciBpdAorICAgIHZh
ciBoYXNFeGNlcHRpb25zID0gY29udGV4dC5vcHRpb25zLmxlbmd0aCA9PT0gMjsKKyAgICB2YXIg
dW5lc2NhcGVkRXhjZXB0aW9ucyA9IGhhc0V4Y2VwdGlvbnMgPyBjb250ZXh0Lm9wdGlvbnNbMV0u
ZXhjZXB0aW9ucyA6IFtdOworICAgIHZhciBleGNlcHRpb25zOworCisgICAgaWYgKHVuZXNjYXBl
ZEV4Y2VwdGlvbnMubGVuZ3RoKSB7CisgICAgICAgIGV4Y2VwdGlvbnMgPSB1bmVzY2FwZWRFeGNl
cHRpb25zLm1hcChmdW5jdGlvbihzKSB7CisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8o
Wy4qKz8ke30oKXxcXlxbXF1cL1xcXSkvZywgIlxcJDEiKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGV4Y2VwdGlvbk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIoXigiICsgZXhjZXB0aW9ucy5qb2luKCIp
KyQpfCheKCIpICsgIikrJCkiKTsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJMaW5lQ29tbWVudCI6IGZ1bmN0aW9uIGNoZWNrQ29tbWVudEZvclNwYWNlKG5v
ZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgPT09IDEgJiYgL14j
IS8udGVzdChjb250ZXh0LmdldFNvdXJjZUxpbmVzKClbMF0pKSB7CisKKyAgICAgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICAgICAqIEhBQ0s6IHJldHVybiBpZiB3ZSBhcmUgb24gdGhlIGZp
cnN0IGxpbmUgYW5kCisgICAgICAgICAgICAgICAgICogZW5jb3VudGVyIGEgc2hlYmFuZyBhdCB0
aGUgYmVnaW5uaW5nLgorICAgICAgICAgICAgICAgICAqIEl0IHNlZW1zIHRoZSBwYXJzZXIgd2ls
bCByZXR1cm4gdGhpcyBhcyBhCisgICAgICAgICAgICAgICAgICogY29tbWVudCBhbmQgZmlsdGVy
IG91dCB0aGUgIyBzbyB3ZSBtdXN0IGZldGNoCisgICAgICAgICAgICAgICAgICogdGhlIGFjdHVh
bCBzb3VyY2UgbGluZS4gSXMgdGhpcyBiZWluZyBjYXVzZWQKKyAgICAgICAgICAgICAgICAgKiBi
eSBlc3ByaW1hIG9yIGVzbGludD8gU29tZXRoaW5nIGVsc2U/CisgICAgICAgICAgICAgICAgICov
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAocmVxdWlyZVNwYWNlKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTcGFjZSBleHBlY3RlZCBh
bmQgbm90IGZvdW5kCisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUuaW5kZXhPZigiICIp
ICE9PSAwKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAg
ICogRG8gdHdvIHRlc3RzOyBvbmUgZm9yIHNwYWNlIHN0YXJ0aW5nIHRoZSBsaW5lLAorICAgICAg
ICAgICAgICAgICAgICAgKiBhbmQgb25lIGZvciBhIGNvbW1lbnQgY29tcHJpc2VkIG9ubHkgb2Yg
ZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0V4Y2VwdGlvbnMgJiYgIWV4Y2VwdGlvbk1hdGNoZXIudGVzdChub2RlLnZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVk
IGV4Y2VwdGlvbiBibG9jayBvciBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNFeGNlcHRpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgLy8g
aW4gY29tbWVudC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnZhbHVl
LmluZGV4T2YoIiAiKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVW5leHBlY3RlZCBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKK307CisKK30s
e31dLDE0MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBlbnN1cmUgY29kZSBpcyBydW5uaW5nIGluIHN0cmljdCBtb2RlLgor
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICogQGNvcHlyaWdodCAyMDEzLTIwMTQgTmlj
aG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgc2NvcGVzID0gW107CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIGEg
Z2l2ZW4gbm9kZSBpcyAidXNlIHN0cmljdCIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRo
ZSBub2RlIGlzIGEgc3RyaWN0IHByYWdtYSwgZmFsc2UgaWYgbm90LgorICAgICAqIEB2b2lkCisg
ICAgICovCisgICAgZnVuY3Rpb24gaXNTdHJpY3RQcmFnbWEobm9kZSkgeworICAgICAgICByZXR1
cm4gKG5vZGUgJiYgbm9kZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAg
ICAgICAgICAgICBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJ1c2Ugc3RyaWN0Iik7CisgICAg
fQorCisgICAgLyoqCisgICAgICogV2hlbiB5b3UgZW50ZXIgYSBzY29wZSwgcHVzaCB0aGUgc3Ry
aWN0IHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjb3BlCisgICAgICogb250byB0aGUgc3RhY2su
CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBiZWluZyBjaGVja2Vk
LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAg
ZnVuY3Rpb24gZW50ZXJTY29wZShub2RlKSB7CisKKyAgICAgICAgdmFyIGlzU3RyaWN0ID0gZmFs
c2UsCisgICAgICAgICAgICBpc1Byb2dyYW0gPSAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIpLAor
ICAgICAgICAgICAgaXNQYXJlbnRHbG9iYWwgPSBzY29wZXMubGVuZ3RoID09PSAxLAorICAgICAg
ICAgICAgaXNQYXJlbnRTdHJpY3QgPSBzY29wZXMubGVuZ3RoID8gc2NvcGVzW3Njb3Blcy5sZW5n
dGggLSAxXSA6IGZhbHNlOworCisgICAgICAgIC8vIGxvb2sgZm9yIHRoZSAidXNlIHN0cmljdCIg
cHJhZ21hCisgICAgICAgIGlmIChpc1Byb2dyYW0pIHsKKyAgICAgICAgICAgIGlzU3RyaWN0ID0g
aXNTdHJpY3RQcmFnbWEobm9kZS5ib2R5WzBdKSB8fCBpc1BhcmVudFN0cmljdDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlzU3RyaWN0ID0gaXNTdHJpY3RQcmFnbWEobm9kZS5ib2R5
LmJvZHlbMF0pIHx8IGlzUGFyZW50U3RyaWN0OworICAgICAgICB9CisKKyAgICAgICAgc2NvcGVz
LnB1c2goaXNTdHJpY3QpOworCisgICAgICAgIC8vIG5ldmVyIHdhcm4gaWYgdGhlIHBhcmVudCBp
cyBzdHJpY3Qgb3IgdGhlIGZ1bmN0aW9uIGlzIHN0cmljdAorICAgICAgICBpZiAoIWlzUGFyZW50
U3RyaWN0ICYmICFpc1N0cmljdCAmJiBpc1BhcmVudEdsb2JhbCkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgXCJ1c2Ugc3RyaWN0XCIgc3RhdGVtZW50LiIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiB5b3UgZXhpdCBhIHNjb3Bl
LCBwb3Agb2ZmIHRoZSB0b3Agc2NvcGUgYW5kIHNlZSBpZiBpdCdzIHRydWUgb3IKKyAgICAgKiBm
YWxzZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGV4aXRTY29wZSgpIHsKKyAgICAgICAgc2NvcGVzLnBvcCgpOworICAgIH0K
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBlbnRlclNjb3BlLAorICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGVudGVyU2NvcGUsCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb24iOiBlbnRlclNjb3BlLAorCisgICAgICAgICJQcm9ncmFtOmV4aXQiOiBleGl0U2Nv
cGUsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBleGl0U2NvcGUsCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGV4aXRTY29wZQorICAgIH07CisKK307CisK
K30se31dLDE0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNvbXBhcmlzb25zIHRvIHRoZSB2YWx1ZSBOYU4KKyAq
IEBhdXRob3IgSmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKwor
ICAgICAgICAgICAgaWYgKCEvXlt8Jl5dJC8udGVzdChub2RlLm9wZXJhdG9yKSAmJiBub2RlLmxl
ZnQubmFtZSA9PT0gIk5hTiIgfHwgbm9kZS5yaWdodC5uYW1lID09PSAiTmFOIikgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGlzTmFOIGZ1bmN0aW9uIHRv
IGNvbXBhcmUgd2l0aCBOYU4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFZhbGlkYXRlcyBKU0RvYyBjb21tZW50cyBhcmUgc3ludGFjdGlj
YWxseSBjb3JyZWN0CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVtZW50cworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIGRvY3RyaW5lID0gcmVxdWlyZSgiZG9jdHJpbmUiKTsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKKyAgICAgICAgcHJl
ZmVyID0gb3B0aW9ucy5wcmVmZXIgfHwge30sCisKKyAgICAgICAgLy8gdGhlc2UgYm90aCBkZWZh
dWx0IHRvIHRydWUsIHNvIHlvdSBoYXZlIHRvIGV4cGxpY2l0bHkgbWFrZSB0aGVtIGZhbHNlCisg
ICAgICAgIHJlcXVpcmVSZXR1cm4gPSBvcHRpb25zLnJlcXVpcmVSZXR1cm4gPT09IGZhbHNlID8g
ZmFsc2UgOiB0cnVlLAorICAgICAgICByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbiA9IG9wdGlvbnMu
cmVxdWlyZVBhcmFtRGVzY3JpcHRpb24gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvLyBVc2luZyBhIHN0YWNrIHRvIHN0b3JlIGlmIGEgZnVuY3Rpb24gcmV0dXJu
cyBvciBub3QgKGhhbmRsaW5nIG5lc3RlZCBmdW5jdGlvbnMpCisgICAgdmFyIGZucyA9IFtdOwor
CisgICAgLyoqCisgICAgICogV2hlbiBwYXJzaW5nIGEgbmV3IGZ1bmN0aW9uLCBzdG9yZSBpdCBp
biBvdXIgZnVuY3Rpb24gc3RhY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHBy
aXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBm
bnMucHVzaCh7cmV0dXJuUHJlc2VudDogZmFsc2V9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBJbmRpY2F0ZSB0aGF0IHJldHVybiBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBmdW5j
dGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIHJldHVybiBub2RlLgorICAg
ICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rp
b24gYWRkUmV0dXJuKG5vZGUpIHsKKyAgICAgICAgdmFyIGZ1bmN0aW9uU3RhdGUgPSBmbnNbZm5z
Lmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmIChmdW5jdGlvblN0YXRlICYmIG5vZGUuYXJndW1l
bnQgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uU3RhdGUucmV0dXJuUHJlc2VudCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZSB0aGUg
SlNEb2Mgbm9kZSBhbmQgb3V0cHV0IHdhcm5pbmdzIGlmIGFueXRoaW5nIGlzIHdyb25nLgorICAg
ICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICog
QHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja0pTRG9jKG5vZGUpIHsKKyAgICAgICAgdmFyIGpzZG9jTm9kZSA9IGNvbnRleHQuZ2V0SlNE
b2NDb21tZW50KG5vZGUpLAorICAgICAgICAgICAgZnVuY3Rpb25EYXRhID0gZm5zLnBvcCgpLAor
ICAgICAgICAgICAgaGFzUmV0dXJucyA9IGZhbHNlLAorICAgICAgICAgICAgaGFzQ29uc3RydWN0
b3IgPSBmYWxzZSwKKyAgICAgICAgICAgIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCksCisg
ICAgICAgICAgICBqc2RvYzsKKworICAgICAgICAvLyBtYWtlIHN1cmUgb25seSB0byB2YWxpZGF0
ZSBKU0RvYyBjb21tZW50cworICAgICAgICBpZiAoanNkb2NOb2RlKSB7CisKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAganNkb2MgPSBkb2N0cmluZS5wYXJzZShqc2RvY05vZGUu
dmFsdWUsIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAorICAgICAgICAgICAg
ICAgICAgICB1bndyYXA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHNsb3BweTogdHJ1ZQor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKworICAgICAg
ICAgICAgICAgIGlmICgvYnJhY2VzL2kudGVzdChleC5tZXNzYWdlKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJKU0RvYyB0eXBlIG1pc3NpbmcgYnJh
Y2UuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiSlNEb2Mgc3ludGF4IGVycm9yLiIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAganNkb2MudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykgeworCisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0YWcudGl0bGUpIHsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJw
YXJhbSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZy50eXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBK
U0RvYyBwYXJhbWV0ZXIgdHlwZSBmb3IgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1lIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXRhZy5kZXNjcmlwdGlvbiAmJiByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3Npbmcg
SlNEb2MgcGFyYW1ldGVyIGRlc2NyaXB0aW9uIGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFn
Lm5hbWUgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJhbXNbdGFnLm5hbWVdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiRHVwbGljYXRlIEpTRG9jIHBhcmFtZXRlciAn
e3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRhZy5uYW1lLmluZGV4T2YoIi4iKSA9PT0gLSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW3RhZy5uYW1lXSA9IDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgICBjYXNlICJyZXR1cm4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXR1cm5z
IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JldHVybnMgPSB0cnVlOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlcXVpcmVSZXR1cm4gJiYgIWZ1bmN0aW9uRGF0YS5yZXR1
cm5QcmVzZW50ICYmIHRhZy50eXBlLm5hbWUgIT09ICJ2b2lkIiAmJiB0YWcudHlwZS5uYW1lICE9
PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KGpzZG9jTm9kZSwgIlVuZXhwZWN0ZWQgQCIgKyB0YWcudGl0bGUgKyAiIHRhZzsgZnVuY3Rp
b24gaGFzIG5vIHJldHVybiBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAi
TWlzc2luZyBKU0RvYyByZXR1cm4gdHlwZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnR5cGUubmFtZSAhPT0g
InZvaWQiICYmICF0YWcuZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyByZXR1cm4gZGVz
Y3JpcHRpb24uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICBjYXNlICJjb25zdHJ1Y3RvciI6CisgICAgICAgICAgICAgICAgICAgICAg
ICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGFnIHByZWZlcmVuY2VzCisgICAgICAgICAgICAg
ICAgaWYgKHByZWZlci5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIlVzZSBAe3tuYW1lfX0gaW5zdGVhZC4i
LCB7IG5hbWU6IHByZWZlclt0YWcudGl0bGVdIH0pOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBmdW5jdGlvbnMgbWlzc2lu
ZyBAcmV0dXJucworICAgICAgICAgICAgaWYgKCFoYXNSZXR1cm5zICYmICFoYXNDb25zdHJ1Y3Rv
cikgeworICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlUmV0dXJuIHx8IGZ1bmN0aW9uRGF0YS5y
ZXR1cm5QcmVzZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9j
Tm9kZSwgIk1pc3NpbmcgSlNEb2MgQHJldHVybnMgZm9yIGZ1bmN0aW9uLiIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFt
ZXRlcnMKKyAgICAgICAgICAgIHZhciBqc2RvY1BhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7
CisKKyAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocGFyYW0sIGkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHBhcmFtLm5hbWU7CisKKyAgICAgICAgICAgICAg
ICBpZiAoanNkb2NQYXJhbXNbaV0gJiYgKG5hbWUgIT09IGpzZG9jUGFyYW1zW2ldKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJFeHBlY3RlZCBKU0Rv
YyBmb3IgJ3t7bmFtZX19JyBidXQgZm91bmQgJ3t7anNkb2NOYW1lfX0nLiIsIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBqc2Rv
Y05hbWU6IGpzZG9jUGFyYW1zW2ldCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIXBhcmFtc1tuYW1lXSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIGZvciBwYXJhbWV0ZXIgJ3t7
bmFtZX19Jy4iLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIH0KKworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVu
Y3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQi
OiBjaGVja0pTRG9jLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogY2hlY2tK
U0RvYywKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGFkZFJldHVybgorICAgIH07CisKK307
CisKK30seyJkb2N0cmluZSI6NH1dLDE0NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRW5zdXJlcyB0aGF0IHRoZSByZXN1bHRzIG9mIHR5
cGVvZiBhcmUgY29tcGFyZWQgYWdhaW5zdCBhIHZhbGlkIHN0cmluZworICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgVkFMSURfVFlQRVMg
PSBbInN5bWJvbCIsICJ1bmRlZmluZWQiLCAib2JqZWN0IiwgImJvb2xlYW4iLCAibnVtYmVyIiwg
InN0cmluZyIsICJmdW5jdGlvbiJdLAorICAgICAgICBPUEVSQVRPUlMgPSBbIj09IiwgIj09PSIs
ICIhPSIsICIhPT0iXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJVbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBhcmVudCwg
c2libGluZzsKKworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiKSB7
CisgICAgICAgICAgICAgICAgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsK
KworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkJpbmFyeUV4cHJlc3Npb24i
ICYmIE9QRVJBVE9SUy5pbmRleE9mKHBhcmVudC5vcGVyYXRvcikgIT09IC0xKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQubGVmdCA9PT0gbm9kZSA/IHBhcmVudC5yaWdo
dCA6IHBhcmVudC5sZWZ0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLnR5cGUg
PT09ICJMaXRlcmFsIiAmJiBWQUxJRF9UWVBFUy5pbmRleE9mKHNpYmxpbmcudmFsdWUpID09PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoc2libGluZywgIklu
dmFsaWQgdHlwZW9mIGNvbXBhcmlzb24gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKwor
fTsKKworfSx7fV0sMTQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgdmFyIGRlY2xhcmF0aW9ucyBhcmUgb25s
eSBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIERhbm55IEZyaXR6CisgKiBA
YXV0aG9yIEd5YW5kZWVwIFNpbmdoCisgKiBAY29weXJpZ2h0IDIwMTQgRGFubnkgRnJpdHouIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQgR3lhbmRlZXAgU2luZ2guIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgIHZhciBlcnJvck1lc3Nh
Z2UgPSAiQWxsIFwidmFyXCIgZGVjbGFyYXRpb25zIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUg
ZnVuY3Rpb24gc2NvcGUuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxw
ZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gYW55IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhl
ciB0aGUgZ2l2ZW4gbm9kZSBzdHJ1Y3R1cmFsbHkgcmVwcmVzZW50cyBhIGRpcmVjdGl2ZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGxvb2tzTGlrZURpcmVjdGl2ZShub2RlKSB7CisgICAgICAgcmV0
dXJuIG5vZGUudHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgIG5v
ZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lv
bi52YWx1ZSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdo
ZXRoZXIgdGhpcyB2YXJpYWJsZSBpcyBvbiB0b3Agb2YgdGhlIGJsb2NrIGJvZHkKKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSB7
QVNUTm9kZVtdfSBzdGF0ZW1lbnRzIC0gY29sbGVjdGlvbiBvZiBBU1ROb2RlcyBmb3IgdGhlIHBh
cmVudCBub2RlIGJsb2NrCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdmFyIGlz
IG9uIHRvcCBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Zhck9uVG9w
IChub2RlLCBzdGF0ZW1lbnRzKSB7CisgICAgICAgIHZhciBpID0gMCwgbCA9IHN0YXRlbWVudHMu
bGVuZ3RoOworCisgICAgICAgIC8vIHNraXAgb3ZlciBkaXJlY3RpdmVzCisgICAgICAgIGZvciAo
OyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWxvb2tzTGlrZURpcmVjdGl2ZShzdGF0
ZW1lbnRzW2ldKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
dGF0ZW1lbnRzW2ldLnR5cGUgIT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0
ZW1lbnRzW2ldID09PSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hl
dGhlciB2YXJpYWJsZSBpcyBvbiB0b3AgYXQgdGhlIGdsb2JhbCBsZXZlbAorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBwYXJlbnQgLSBQYXJlbnQgb2YgdGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBnbG9iYWxWYXJDaGVjayAobm9kZSwgcGFyZW50KSB7Cisg
ICAgICAgIGlmICghaXNWYXJPblRvcChub2RlLCBwYXJlbnQuYm9keSkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJpYWJsZSBpcyBvbiB0b3AgYXQgZnVu
Y3Rpb25hbCBibG9jayBzY29wZSBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAt
IFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQgLSBQYXJl
bnQgb2YgdGhlIG5vZGUKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGdyYW5kUGFyZW50IC0gUGFy
ZW50IG9mIHRoZSBub2RlJ3MgcGFyZW50CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICov
CisgICAgZnVuY3Rpb24gYmxvY2tTY29wZVZhckNoZWNrIChub2RlLCBwYXJlbnQsIGdyYW5kUGFy
ZW50KSB7CisgICAgICAgIGlmICghKChncmFuZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNs
YXJhdGlvbiIKKyAgICAgICAgICAgIHx8IGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4
cHJlc3Npb24iKQorICAgICAgICAgICAgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVu
dCIKKyAgICAgICAgICAgICYmIGlzVmFyT25Ub3Aobm9kZSwgcGFyZW50LmJvZHkpKSkgeworICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVj
bGFyYXRpb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9
IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0
b3JzLnBvcCgpOworICAgICAgICAgICAgdmFyIGdyYW5kUGFyZW50ID0gYW5jZXN0b3JzLnBvcCgp
OworCisgICAgICAgICAgICBpZiAobm9kZS5raW5kID09PSAidmFyIikgey8vIGNoZWNrIHZhcmlh
YmxlIGlzIGB2YXJgIHR5cGUgYW5kIG5vdCBgbGV0YCBvciBgY29uc3RgCisgICAgICAgICAgICAg
ICAgaWYgKHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIpIHsvLyBUaGF0IG1lYW5zIGl0cyBhIGds
b2JhbCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJDaGVjayhub2RlLCBw
YXJlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJs
b2NrU2NvcGVWYXJDaGVjayhub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwx
NDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIElJRkUgaXMgbm90IHdyYXBwZWQgaW4gcGFyZW5zCisgKiBA
YXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciBzdHls
ZSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAib3V0c2lkZSI7CisKKyAgICBmdW5jdGlvbiB3cmFw
cGVkKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2Vu
QmVmb3JlKG5vZGUpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFm
dGVyKG5vZGUpOworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBwcmV2aW91c1Rva2Vu
LnZhbHVlID09PSAiKCIgJiYKKyAgICAgICAgICAgIG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFs
dWUgPT09ICIpIjsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDYWxsRXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBl
ID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHZhciBjYWxsRXhw
cmVzc2lvbldyYXBwZWQgPSB3cmFwcGVkKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbkV4cHJlc3Npb25XcmFwcGVkID0gd3JhcHBlZChub2RlLmNhbGxlZSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uV3JhcHBlZCAmJiAhZnVuY3Rpb25FeHByZXNzaW9u
V3JhcHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3Jh
cCBhbiBpbW1lZGlhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiBwYXJlbnRoZXNlcy4iKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAiaW5zaWRlIiAmJiAhZnVuY3Rpb25F
eHByZXNzaW9uV3JhcHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiV3JhcCBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIGluIHBhcmVucy4iKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAib3V0c2lkZSIgJiYgIWNhbGxFeHBy
ZXNzaW9uV3JhcHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiTW92ZSB0aGUgaW52b2NhdGlvbiBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBm
dW5jdGlvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSwxNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHJlZ2V4IGxpdGVy
YWxzIGFyZSBub3Qgd3JhcHBlZCBpbiBwYXJlbnMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0
dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUpLAorICAgICAgICAgICAg
ICAgIG5vZGVUeXBlID0gdG9rZW4udHlwZSwKKyAgICAgICAgICAgICAgICBzb3VyY2UsCisgICAg
ICAgICAgICAgICAgZ3JhbmRwYXJlbnQsCisgICAgICAgICAgICAgICAgYW5jZXN0b3JzOworCisg
ICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpOworICAgICAg
ICAgICAgICAgIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAg
ICAgICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdOworCisg
ICAgICAgICAgICAgICAgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9u
IiAmJiBncmFuZHBhcmVudC5vYmplY3QgPT09IG5vZGUgJiYKKyAgICAgICAgICAgICAgICAgICAg
KCFzb3VyY2UgfHwgc291cmNlLnZhbHVlICE9PSAiKCIpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIHRoZSByZWdleHAgbGl0ZXJhbCBpbiBwYXJlbnMg
dG8gZGlzYW1iaWd1YXRlIHRoZSBzbGFzaC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDk6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVx
dWlyZSBvciBkaXNhbGxvdyB5b2RhIGNvbXBhcmlzb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMu
IFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworCisgICAgLy8gRGVmYXVsdCB0byAibmV2ZXIiICgh
YWx3YXlzKSBpZiBubyBvcHRpb24KKworICAgIHZhciBhbHdheXMgPSAoY29udGV4dC5vcHRpb25z
WzBdID09PSAiYWx3YXlzIik7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVs
cGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWlu
ZXMgd2hldGhlciBhbiBvcGVyYXRvciBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICog
QHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBjaGVjay4KKyAgICAgKiBA
cmV0dXJucyB7Qm9vbGVhbn0gV2hldGhlciBvciBub3QgaXQgaXMgYSBjb21wYXJpc29uIG9wZXJh
dG9yLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzQ29tcGFyaXNvbk9wZXJhdG9yKG9wZXJhdG9y
KSB7CisgICAgICAgIHJldHVybiAoL14oPT18PT09fCE9fCE9PXw8fD58PD18Pj0pJC8pLnRlc3Qo
b3BlcmF0b3IpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJC
aW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGFs
d2F5cykgeworCisgICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBhbHdheXMgYmUg
eW9kYS1zdHlsZTogaWYgKCJibHVlIiA9PT0gY29sb3IpCisKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5yaWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYgaXNDb21wYXJpc29uT3BlcmF0b3Iobm9k
ZS5vcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IkV4cGVjdGVkIGxpdGVyYWwgdG8gYmUgb24gdGhlIGxlZnQgc2lkZSBvZiAiICsgbm9kZS5vcGVy
YXRvciArICIuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBuZXZlciBiZSB5b2RhLXN0eWxl
IChkZWZhdWx0KQorCisgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgaXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGxpdGVyYWwgdG8gYmUg
b24gdGhlIHJpZ2h0IHNpZGUgb2YgIiArIG5vZGUub3BlcmF0b3IgKyAiLiIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH07CisKK307CisK
K30se31dLDE1MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgQ29tbW9uIHV0aWxpdGllcy4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8qKgorICogTWVyZ2VzIHR3byBvYmplY3RzIHRvZ2V0aGVyIGFuZCBhc3NpZ25z
IHRoZSByZXN1bHQgdG8gdGhlIGluaXRpYWwgb2JqZWN0LiBDYW4gYmUgdXNlZCBmb3Igc2hhbGxv
dyBjbG9uaW5nLgorICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBvZiB0aGUgY2xvbmluZyBvcGVy
YXRpb24KKyAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2Ugb2JqZWN0CisgKiBAcmV0dXJucyB7dm9p
ZH0KKyAqLworZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7CisgICAg
T2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICB0YXJn
ZXRba2V5XSA9IHNvdXJjZVtrZXldOworICAgIH0pOworfTsKKworLyoqCisgKiBNZXJnZXMgdHdv
IGNvbmZpZyBvYmplY3RzLiBUaGlzIHdpbGwgbm90IG9ubHkgYWRkIG1pc3Npbmcga2V5cywgYnV0
IHdpbGwgYWxzbyBtb2RpZnkgdmFsdWVzIHRvIG1hdGNoLgorICogQHBhcmFtIHtPYmplY3R9IGJh
c2UgY29uZmlnIG9iamVjdAorICogQHBhcmFtIHtPYmplY3R9IGN1c3RvbSBjb25maWcgb2JqZWN0
LiBPdmVycmlkZXMgaW4gdGhpcyBjb25maWcgb2JqZWN0IHdpbGwgdGFrZSBwcmlvcml0eSBvdmVy
IGJhc2UuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBtZXJnZWQgY29uZmlnIG9iamVjdC4KKyAqLwor
ZXhwb3J0cy5tZXJnZUNvbmZpZ3MgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoYmFzZSwgY3VzdG9t
KSB7CisKKyAgICBPYmplY3Qua2V5cyhjdXN0b20pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewor
ICAgICAgICB2YXIgcHJvcGVydHkgPSBjdXN0b21ba2V5XTsKKworICAgICAgICBpZiAoa2V5ID09
PSAicGx1Z2lucyIpIHsKKyAgICAgICAgICAgIGlmICghYmFzZVtrZXldKSB7CisgICAgICAgICAg
ICAgICAgYmFzZVtrZXldID0gW107CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3Bl
cnR5LmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikgeworICAgICAgICAgICAgICAgIC8vIHNraXAg
ZHVwbGljYXRlcworICAgICAgICAgICAgICAgIGlmIChiYXNlW2tleV0uaW5kZXhPZihwbHVnaW4p
ID09PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBiYXNlW2tleV0ucHVzaChwbHVnaW4pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZVtrZXldKSAmJiAhQXJy
YXkuaXNBcnJheShwcm9wZXJ0eSkgJiYgdHlwZW9mIHByb3BlcnR5ID09PSAibnVtYmVyIikgewor
ICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgd2UgYXJlIGp1c3Qgb3ZlcnJpZGluZyBmaXJzdCBh
dHRyaWJ1dGUKKyAgICAgICAgICAgIGJhc2Vba2V5XVswXSA9IGN1c3RvbVtrZXldOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9
PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7CisgICAgICAgICAgICAv
LyBiYXNlW2tleV0gbWlnaHQgbm90IGV4aXN0LCBzbyBiZSBjYXJlZnVsIHdpdGggcmVjdXJzaW9u
IGhlcmUKKyAgICAgICAgICAgIGJhc2Vba2V5XSA9IG1lcmdlQ29uZmlncyhiYXNlW2tleV0gfHwg
e30sIGN1c3RvbVtrZXldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2Vba2V5
XSA9IGN1c3RvbVtrZXldOworICAgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gYmFzZTsK
K307CisKK30se31dfSx7fSxbOV0pKDkpCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240049</attachid>
            <date>2014-10-17 16:09:18 -0700</date>
            <delta_ts>2014-10-17 16:22:23 -0700</delta_ts>
            <desc>[PATCH] eslint addition FIX and CHANGELOG.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>625624</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDdiODliOWEuLjkzOGJmMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTEwLTE3ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgRVNMaW50
IG9wZW4gc291cmNlIGxpYnJhcnkgdG8gdGhlIGluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NzE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGJhY2sgdGhlIGVzbGludC5q
cyBleHRlcm5hbCBsaWJyYXJ5IHdpdGggYSBjb3JyZWN0aW9uIHRvIFNjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGwKKyAgICAgICAgdG8gcHJldmVudCBhIGJ1aWxkIGZhaWx1
cmUuCisKKyAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBs
OiBBZGRlZCBjb3B5IGNvbW1hbmRzIGZvciBFU0xpbnQuanMuCisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50LmpzOiBBZGRlZC4KKwogMjAxNC0xMC0xNCAgSm9u
byBXZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
QWRkIEVTTGludCBvcGVuIHNvdXJjZSBsaWJyYXJ5IHRvIHRoZSBpbnNwZWN0b3IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVz
b3VyY2VzLnBsIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVy
ZmFjZS1yZXNvdXJjZXMucGwKaW5kZXggNGZhZGZjNy4uZDYwYzRjNyAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMu
cGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFj
ZS1yZXNvdXJjZXMucGwKQEAgLTEwMCw5ICsxMDAsMTEgQEAgbXkgJHRhcmdldFJlc291cmNlUGF0
aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkRU5WeydUQVJHRVRfQlVJTERfRElSJ30sICRFTlZ7J1VO
TE8KIG15ICRwcm90b2NvbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0UmVzb3VyY2VQ
YXRoLCAnUHJvdG9jb2wnKTsKIG15ICRjb2RlTWlycm9yUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRp
cigkdWlSb290LCAnRXh0ZXJuYWwnLCAnQ29kZU1pcnJvcicpOwogbXkgJGVzcHJpbWFQYXRoID0g
RmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRlcm5hbCcsICdFc3ByaW1hJyk7CitteSAk
ZXNsaW50UGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnRVNM
aW50Jyk7CiAKIG15ICRjb2RlTWlycm9yTGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpT
cGVjLT5jYXRmaWxlKCRjb2RlTWlycm9yUGF0aCwgJ0xJQ0VOU0UnKSk7Ci1teSAkZXNwcmltYU1p
cnJvckxpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNwcmlt
YVBhdGgsICdMSUNFTlNFJykpOworbXkgJGVzcHJpbWFMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxl
KEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzcHJpbWFQYXRoLCAnTElDRU5TRScpKTsKK215ICRlc2xp
bnRMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzbGludFBh
dGgsICdMSUNFTlNFJykpOwogCiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3Vy
Y2VQYXRoKTsKIApAQCAtMTIzLDYgKzEyNSw5IEBAIGlmIChkZWZpbmVkICRFTlZ7J0NPTUJJTkVf
SU5TUEVDVE9SX1JFU09VUkNFUyd9ICYmICgkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9SRVNPCiAg
ICAgIyBDb21iaW5lIHRoZSBFc3ByaW1hIEphdmFTY3JpcHQgZmlsZXMgaW4gUHJvZHVjdGlvbiBi
dWlsZHMgaW50byBhIHNpbmdsZSBmaWxlIChFc3ByaW1hLmpzKS4KICAgICBzeXN0ZW0oJGNvbWJp
bmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9Fc3ByaW1hJywgJy0taW5w
dXQtaHRtbCcsICRkZXJpdmVkU291cmNlc01haW5IVE1MLCAnLS1pbnB1dC1odG1sLWRpcicsICR1
aVJvb3QsICctLWRlcml2ZWQtc291cmNlcy1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91
dHB1dC1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91dHB1dC1zY3JpcHQtbmFtZScsICdF
c3ByaW1hLmpzJyk7CiAKKyAgICAjIENvbWJpbmUgdGhlIEVTTGludCBKYXZhU2NyaXB0IGZpbGVz
IGluIFByb2R1Y3Rpb24gYnVpbGRzIGludG8gYSBzaW5nbGUgZmlsZSAoRVNMaW50LmpzKS4KKyAg
ICBzeXN0ZW0oJGNvbWJpbmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9F
U0xpbnQnLCAnLS1pbnB1dC1odG1sJywgJGRlcml2ZWRTb3VyY2VzTWFpbkhUTUwsICctLWlucHV0
LWh0bWwtZGlyJywgJHVpUm9vdCwgJy0tZGVyaXZlZC1zb3VyY2VzLWRpcicsICRkZXJpdmVkU291
cmNlc0RpciwgJy0tb3V0cHV0LWRpcicsICRkZXJpdmVkU291cmNlc0RpciwgJy0tb3V0cHV0LXNj
cmlwdC1uYW1lJywgJ0VTTGludC5qcycpOworCiAgICAgIyBSZW1vdmUgY29uc29sZS5hc3NlcnQg
Y2FsbHMgZnJvbSB0aGUgTWFpbi5qcyBmaWxlLgogICAgIG15ICRkZXJpdmVkU291cmNlc01haW5K
UyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnTWFpbi5qcycpOwog
ICAgIHN5c3RlbShGaWxlOjpTcGVjLT5jYXRmaWxlKCRzY3JpcHRzUm9vdCwgJ3JlbW92ZS1jb25z
b2xlLWFzc2VydHMucGwnKSwgJy0taW5wdXQtc2NyaXB0JywgJGRlcml2ZWRTb3VyY2VzTWFpbkpT
LCAnLS1vdXRwdXQtc2NyaXB0JywgJGRlcml2ZWRTb3VyY2VzTWFpbkpTKTsKQEAgLTE1NSw3ICsx
NjAsMTEgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTT1VSQ0VTJ30g
JiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KIAogICAgICMgRXhwb3J0IHRoZSBsaWNl
bnNlIGludG8gRXNwcmltYS5qcy4KICAgICBteSAkdGFyZ2V0RXNwcmltYUpTID0gRmlsZTo6U3Bl
Yy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnRXNwcmltYS5qcycpOwotICAgIHNlZWRG
aWxlKCR0YXJnZXRFc3ByaW1hSlMsICRlc3ByaW1hTWlycm9yTGljZW5zZSk7CisgICAgc2VlZEZp
bGUoJHRhcmdldEVzcHJpbWFKUywgJGVzcHJpbWFMaWNlbnNlKTsKKworICAgICMgRXhwb3J0IHRo
ZSBsaWNlbnNlIGludG8gRVNMaW50LmpzLgorICAgIG15ICR0YXJnZXRFU0xpbnRKUyA9IEZpbGU6
OlNwZWMtPmNhdGZpbGUoJHRhcmdldFJlc291cmNlUGF0aCwgJ0VTTGludC5qcycpOworICAgIHNl
ZWRGaWxlKCR0YXJnZXRFU0xpbnRKUywgJGVzbGludExpY2Vuc2UpOwogCiAgICAgIyBNaW5pZnkg
dGhlIE1haW4uanMgYW5kIE1haW4uY3NzIGZpbGVzLCB3aXRoIE1haW4uanMgYXBwZW5kaW5nIHRv
IHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgogICAgIG15ICRqc01pblNjcmlw
dCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHNjcmlwdHNSb290LCAnanNtaW4ucHknKTsKQEAgLTE3
Myw2ICsxODIsMTAgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTT1VS
Q0VTJ30gJiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KICAgICBteSAkZGVyaXZlZFNv
dXJlc3NFc3ByaW1hSlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291cmNlc0Rpciwg
J0VzcHJpbWEuanMnKTsKICAgICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5TY3JpcHQiIDwg
IiRkZXJpdmVkU291cmVzc0VzcHJpbWFKUyIgPj4gIiR0YXJnZXRFc3ByaW1hSlMiKSkgYW5kIGRp
ZSAiRmFpbGVkIHRvIG1pbmlmeSAkZGVyaXZlZFNvdXJlc3NFc3ByaW1hSlM6ICQhIjsKIAorICAg
ICMgTWluaWZ5IHRoZSBFU0xpbnQuanMgZmlsZSwgYXBwZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRo
YXQgd2FzIGV4cG9ydGVkIGFib3ZlLgorICAgIG15ICRkZXJpdmVkU291cmVzc0VTTGludEpTID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGVyaXZlZFNvdXJjZXNEaXIsICdFU0xpbnQuanMnKTsKKyAg
ICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5TY3JpcHQiIDwgIiRkZXJpdmVkU291cmVzc0VT
TGludEpTIiA+PiAiJHRhcmdldEVTTGludEpTIikpIGFuZCBkaWUgIkZhaWxlZCB0byBtaW5pZnkg
JGRlcml2ZWRTb3VyZXNzRVNMaW50SlM6ICQhIjsKKwogICAgICMgQ29weSBvdmVyIE1haW4uaHRt
bCBhbmQgdGhlIEltYWdlcyBkaXJlY3RvcnkuCiAgICAgY29weSgkZGVyaXZlZFNvdXJjZXNNYWlu
SFRNTCwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnTWFpbi5odG1s
JykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9FU0xpbnQvTElDRU5TRSBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1ZjA0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRQpAQCAtMCwwICsxLDE5IEBACitD
b3B5cmlnaHQgKGMpIDIwMTQgVEogSG9sb3dheWNodWsgPHRqQHZpc2lvbi1tZWRpYS5jYT4KKwor
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMgdG8gCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitz
bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
KworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
CitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgor
VEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uM2IxMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKQEAgLTAs
MCArMSwxODIyMyBAQAorIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYm
InVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vsc2UgaWYoImZ1
bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXt2YXIg
ZjsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz9mPXdpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9m
IGdsb2JhbD9mPWdsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJihmPXNlbGYpLGYuZXNs
aW50PWUoKX19KGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1
bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBh
PXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8s
ITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1
bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29d
PXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRb
b11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltv
XS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2
YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cz17CisgICAgImJ1aWx0aW4iOiB7
CisgICAgICAgICJOYU4iOiBmYWxzZSwKKyAgICAgICAgIkluZmluaXR5IjogZmFsc2UsCisgICAg
ICAgICJ1bmRlZmluZWQiOiBmYWxzZSwKKyAgICAgICAgImV2YWwiOiBmYWxzZSwKKworICAgICAg
ICAicGFyc2VGbG9hdCI6IGZhbHNlLAorICAgICAgICAicGFyc2VJbnQiOiBmYWxzZSwKKyAgICAg
ICAgImlzTmFOIjogZmFsc2UsCisgICAgICAgICJpc0Zpbml0ZSI6IGZhbHNlLAorCisgICAgICAg
ICJkZWNvZGVVUkkiOiBmYWxzZSwKKyAgICAgICAgImRlY29kZVVSSUNvbXBvbmVudCI6IGZhbHNl
LAorICAgICAgICAiZW5jb2RlVVJJIjogZmFsc2UsCisgICAgICAgICJlbmNvZGVVUklDb21wb25l
bnQiOiBmYWxzZSwKKworICAgICAgICAiT2JqZWN0IjogZmFsc2UsCisgICAgICAgICJGdW5jdGlv
biI6IGZhbHNlLAorICAgICAgICAiQXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlN0cmluZyI6IGZh
bHNlLAorICAgICAgICAiQm9vbGVhbiI6IGZhbHNlLAorICAgICAgICAiTWFwIjogZmFsc2UsCisg
ICAgICAgICJOdW1iZXIiOiBmYWxzZSwKKyAgICAgICAgIkRhdGUiOiBmYWxzZSwKKyAgICAgICAg
IlJlZ0V4cCI6IGZhbHNlLAorICAgICAgICAiRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIkV2YWxF
cnJvciI6IGZhbHNlLAorICAgICAgICAiUmFuZ2VFcnJvciI6IGZhbHNlLAorICAgICAgICAiUmVm
ZXJlbmNlRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlNldCI6IGZhbHNlLAorICAgICAgICAiU3lu
dGF4RXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlR5cGVFcnJvciI6IGZhbHNlLAorICAgICAgICAi
VVJJRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIldlYWtNYXAiOiBmYWxzZSwKKyAgICAgICAgIldl
YWtTZXQiOiBmYWxzZSwKKworICAgICAgICAiQXJyYXlCdWZmZXIiOiBmYWxzZSwKKyAgICAgICAg
IkZsb2F0MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiRmxvYXQ2NEFycmF5IjogZmFsc2UsCisg
ICAgICAgICJJbnQxNkFycmF5IjogZmFsc2UsCisgICAgICAgICJJbnQzMkFycmF5IjogZmFsc2Us
CisgICAgICAgICJJbnQ4QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlVpbnQxNkFycmF5IjogZmFs
c2UsCisgICAgICAgICJVaW50MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWludDhBcnJheSI6
IGZhbHNlLAorICAgICAgICAiVWludDhDbGFtcGVkQXJyYXkiOiBmYWxzZSwKKworICAgICAgICAi
TWF0aCI6IGZhbHNlLAorICAgICAgICAiSlNPTiI6IGZhbHNlLAorCisgICAgICAgICJ0b1N0cmlu
ZyI6IGZhbHNlLAorICAgICAgICAiaGFzT3duUHJvcGVydHkiOiBmYWxzZSwKKyAgICAgICAgInZh
bHVlT2YiOiBmYWxzZSwKKyAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIjogZmFsc2UsCisg
ICAgICAgICJjb25zdHJ1Y3RvciI6IGZhbHNlLAorICAgICAgICAiaXNQcm90b3R5cGVPZiI6IGZh
bHNlLAorICAgICAgICAidG9Mb2NhbGVTdHJpbmciOiBmYWxzZQorICAgIH0sCisKKyAgICAiYnJv
d3NlciI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAiYWRkRXZlbnRMaXN0
ZW5lciI6IGZhbHNlLAorICAgICAgICAgICAgImFwcGxpY2F0aW9uQ2FjaGUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJhdG9iIjogZmFsc2UsCisgICAgICAgICAgICAiQXVkaW8iOiBmYWxzZSwKKyAg
ICAgICAgICAgICJCbG9iIjogZmFsc2UsCisgICAgICAgICAgICAiYmx1ciI6IGZhbHNlLAorICAg
ICAgICAgICAgImJ0b2EiOiBmYWxzZSwKKyAgICAgICAgICAgICJjYW5jZWxBbmltYXRpb25GcmFt
ZSI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbG9zZSI6IGZhbHNlLAor
ICAgICAgICAgICAgImNsb3NlZCI6IGZhbHNlLAorICAgICAgICAgICAgImNyeXB0byI6IGZhbHNl
LAorICAgICAgICAgICAgIkRhdGFWaWV3IjogZmFsc2UsCisgICAgICAgICAgICAiZGVmYXVsdFN0
YXR1cyI6IGZhbHNlLAorICAgICAgICAgICAgImRldmljZVBpeGVsUmF0aW8iOiBmYWxzZSwKKyAg
ICAgICAgICAgICJkaXNwYXRjaEV2ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiZG9jdW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJET01QYXJzZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiRmlsZVJlYWRlciI6IGZhbHNlLAorICAgICAg
ICAgICAgImZpbmQiOiBmYWxzZSwKKyAgICAgICAgICAgICJmb2N1cyI6IGZhbHNlLAorICAgICAg
ICAgICAgIkZvcm1EYXRhIjogZmFsc2UsCisgICAgICAgICAgICAiZnJhbWVFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiZnJhbWVzIjogZmFsc2UsCisgICAgICAgICAgICAiZ2V0Q29tcHV0
ZWRTdHlsZSI6IGZhbHNlLAorICAgICAgICAgICAgImdldFNlbGVjdGlvbiI6IGZhbHNlLAorICAg
ICAgICAgICAgImhpc3RvcnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCYXNlRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxCb2R5RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCUkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxDYW52YXNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTERp
cmVjdG9yeUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRGl2RWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIkhUTUxETGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRm9udEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJIVE1MRm9ybUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZyYW1lU2V0RWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxIZWFkRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxI
ZWFkaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIUkVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MSHRtbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MSUZyYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTExhYmVsRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxMZWdlbmRF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTExJRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxMaW5rRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxNYXBF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1lbnVFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1v
ZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxPTGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MT3B0R3JvdXBFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MUGFyYWdyYXBoRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1M
UHJlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxRdW90ZUVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkhUTUxTZWxlY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFN0eWxlRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MVGFibGVDb2xFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGl0bGVF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFVMaXN0RWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJJbWFn
ZSI6IGZhbHNlLAorICAgICAgICAgICAgImluZGV4ZWREQiI6IGZhbHNlLAorICAgICAgICAgICAg
ImlubmVySGVpZ2h0IjogZmFsc2UsCisgICAgICAgICAgICAiaW5uZXJXaWR0aCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkludGwiOiBmYWxzZSwKKyAgICAgICAgICAgICJsZW5ndGgiOiBmYWxzZSwK
KyAgICAgICAgICAgICJsb2NhbFN0b3JhZ2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJsb2NhdGlv
biI6IGZhbHNlLAorICAgICAgICAgICAgIm1hdGNoTWVkaWEiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJNZXNzYWdlQ2hhbm5lbCI6IGZhbHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VFdmVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VQb3J0IjogZmFsc2UsCisgICAgICAgICAgICAibW92
ZUJ5IjogZmFsc2UsCisgICAgICAgICAgICAibW92ZVRvIjogZmFsc2UsCisgICAgICAgICAgICAi
TXV0YXRpb25PYnNlcnZlciI6IGZhbHNlLAorICAgICAgICAgICAgIm5hbWUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJuYXZpZ2F0b3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJOb2RlIjogZmFsc2Us
CisgICAgICAgICAgICAiTm9kZUZpbHRlciI6IGZhbHNlLAorICAgICAgICAgICAgIm9uYmVmb3Jl
dW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmJsdXIiOiB0cnVlLAorICAgICAgICAgICAg
Im9uZXJyb3IiOiB0cnVlLAorICAgICAgICAgICAgIm9uZm9jdXMiOiB0cnVlLAorICAgICAgICAg
ICAgIm9ubG9hZCI6IHRydWUsCisgICAgICAgICAgICAib25yZXNpemUiOiB0cnVlLAorICAgICAg
ICAgICAgIm9udW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvcGVuIjogZmFsc2UsCisgICAg
ICAgICAgICAib3BlbkRhdGFiYXNlIjogZmFsc2UsCisgICAgICAgICAgICAib3BlbmVyIjogZmFs
c2UsCisgICAgICAgICAgICAiT3B0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAib3V0ZXJIZWln
aHQiOiBmYWxzZSwKKyAgICAgICAgICAgICJvdXRlcldpZHRoIjogZmFsc2UsCisgICAgICAgICAg
ICAicGFnZVhPZmZzZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJwYWdlWU9mZnNldCI6IGZhbHNl
LAorICAgICAgICAgICAgInBhcmVudCI6IGZhbHNlLAorICAgICAgICAgICAgInBvc3RNZXNzYWdl
IjogZmFsc2UsCisgICAgICAgICAgICAicHJpbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZW1v
dmVFdmVudExpc3RlbmVyIjogZmFsc2UsCisgICAgICAgICAgICAicmVxdWVzdEFuaW1hdGlvbkZy
YW1lIjogZmFsc2UsCisgICAgICAgICAgICAicmVzaXplQnkiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJyZXNpemVUbyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcmVlbiI6IGZhbHNlLAorICAgICAg
ICAgICAgInNjcmVlblgiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JlZW5ZIjogZmFsc2UsCisg
ICAgICAgICAgICAic2Nyb2xsIjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsYmFycyI6IGZh
bHNlLAorICAgICAgICAgICAgInNjcm9sbEJ5IjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xs
VG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxYIjogZmFsc2UsCisgICAgICAgICAgICAi
c2Nyb2xsWSI6IGZhbHNlLAorICAgICAgICAgICAgInNlbGYiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJzZXNzaW9uU3RvcmFnZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldEludGVydmFsIjogZmFs
c2UsCisgICAgICAgICAgICAic2V0VGltZW91dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNoYXJl
ZFdvcmtlciI6IGZhbHNlLAorICAgICAgICAgICAgInNob3dNb2RhbERpYWxvZyI6IGZhbHNlLAor
ICAgICAgICAgICAgInN0b3AiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0FsdEdseXBoRGVmRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FsdEdseXBoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FsdEds
eXBoSXRlbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmdsZSI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRlZEFuZ2xlIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRCb29s
ZWFuIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkSW50ZWdlciI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR0FuaW1hdGVkTGVuZ3RoIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWROdW1iZXIiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdBbmltYXRlZE51bWJlckxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8iOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdBbmltYXRlZFJlY3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZFN0cmluZyI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0FuaW1hdGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGlvbkVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDaXJjbGVFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQ2xpcFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ29sb3Ii
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0N1cnNvckVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdEZWZzRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0Rlc2NFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRG9jdW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudEluc3RhbmNl
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0VsbGlwc2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
RkVCbGVuZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNvbG9yTWF0cml4RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVDb21wb3NpdGVFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZsb29kRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY0FFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHRkVGdW5jQkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZ1
bmNHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY1JFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHRkVJbWFnZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRU1l
cmdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdGRU9mZnNldEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdG
RVBvaW50TGlnaHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFU3BvdExpZ2h0RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFVGlsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
RmlsdGVyRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRm9udEZhY2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9u
dEZhY2VOYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlU3JjRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlVXJpRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlwaEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlwaFJlZkVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdHcmFkaWVudEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdIS2Vy
bkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdJbWFnZUVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdMZW5ndGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMZW5ndGhM
aXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHTGluZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdNYXJrZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTWFza0VsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdNYXRyaXgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdN
ZXRhZGF0YUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNaXNzaW5nR2x5cGhFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTVBhdGhFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHTnVtYmVyIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTnVtYmVyTGlzdCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhaW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0FyY0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bh
dGhTZWdBcmNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ2xvc2VQYXRoIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzIjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aFNlZ0xpbmV0b0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvUmVsIjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0xpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTW92
ZXRvQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ01vdmV0b1JlbCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR1BhdHRlcm5FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUG9pbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQb2ludExpc3QiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdQb2x5Z29uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bv
bHlsaW5lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW8iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdSZWN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUmVjdEVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSZW5kZXJpbmdJbnRlbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdTY3JpcHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
U2V0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0b3BFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHU3RyaW5nTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0
eWxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1NWR0VsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdTd2l0Y2hFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
U3ltYm9sRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRDb250ZW50RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVGV4dFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RpdGxlRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RyYW5zZm9ybSI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1RyYW5zZm9ybUxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUUmVmRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RTcGFuRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1VuaXRUeXBlcyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1VzZUVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdWaWV3RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1ZpZXdTcGVjIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVktlcm5FbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAidG9wIjogZmFsc2UsCisgICAgICAgICAgICAiV2ViU29ja2V0Ijog
ZmFsc2UsCisgICAgICAgICAgICAid2luZG93IjogZmFsc2UsCisgICAgICAgICAgICAiV29ya2Vy
IjogZmFsc2UsCisgICAgICAgICAgICAiWE1MSHR0cFJlcXVlc3QiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJYTUxTZXJpYWxpemVyIjogZmFsc2UsCisgICAgICAgICAgICAiWFBhdGhFdmFsdWF0b3Ii
OiBmYWxzZSwKKyAgICAgICAgICAgICJYUGF0aEV4cHJlc3Npb24iOiBmYWxzZSwKKyAgICAgICAg
ICAgICJYUGF0aFJlc3VsdCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorCisgICAgIm5vZGUi
OiB7CisgICAgICAgICJnbG9iYWxzIjogeworICAgICAgICAgICAgIl9fZmlsZW5hbWUiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJfX2Rpcm5hbWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJCdWZmZXIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJEYXRhVmlldyI6IGZhbHNlLAorICAgICAgICAgICAgImNv
bnNvbGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJleHBvcnRzIjogdHJ1ZSwKKyAgICAgICAgICAg
ICJHTE9CQUwiOiBmYWxzZSwKKyAgICAgICAgICAgICJnbG9iYWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJtb2R1bGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJwcm9jZXNzIjogZmFsc2UsCisgICAg
ICAgICAgICAicmVxdWlyZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldFRpbWVvdXQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJzZXRJ
bnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJzZXRJbW1lZGlhdGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbGVhckltbWVk
aWF0ZSI6IGZhbHNlCisgICAgICAgIH0sCisKKyAgICAgICAgInJ1bGVzIjogeworICAgICAgICAg
ICAgIm5vLWNhdGNoLXNoYWRvdyI6IDAsCisgICAgICAgICAgICAibm8tY29uc29sZSI6IDAsCisg
ICAgICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiAyLAorICAgICAgICAgICAgIm5vLW5ldy1y
ZXF1aXJlIjogMiwKKyAgICAgICAgICAgICJuby1wYXRoLWNvbmNhdCI6IDIsCisgICAgICAgICAg
ICAibm8tcHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgICAgICJnbG9iYWwtc3RyaWN0IjogWzAs
ICJhbHdheXMiXSwKKyAgICAgICAgICAgICJoYW5kbGUtY2FsbGJhY2stZXJyIjogWzIsICJlcnIi
XQorICAgICAgICB9CisgICAgfSwKKworICAgICJhbWQiOiB7CisgICAgICAgICJnbG9iYWxzIjog
eworICAgICAgICAgICAgInJlcXVpcmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJkZWZpbmUiOiBm
YWxzZQorICAgICAgICB9CisgICAgfSwKKworICAgICJtb2NoYSI6IHsKKyAgICAgICAgImdsb2Jh
bHMiOiB7CisgICAgICAgICAgICAiZGVzY3JpYmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJpdCI6
IGZhbHNlLAorICAgICAgICAgICAgImJlZm9yZSI6IGZhbHNlLAorICAgICAgICAgICAgImFmdGVy
IjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICAgICAgICAgICAg
ImFmdGVyRWFjaCI6IGZhbHNlLAorCisgICAgICAgICAgICAic3VpdGUiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJ0ZXN0IjogZmFsc2UsCisgICAgICAgICAgICAic2V0dXAiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJ0ZWFyZG93biI6IGZhbHNlLAorICAgICAgICAgICAgInN1aXRlU2V0dXAiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJzdWl0ZVRlYXJkb3duIjogZmFsc2UKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICAiamFzbWluZSI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAi
YWZ0ZXJFYWNoIjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICAg
ICAgICAgICAgImRlc2NyaWJlIjogZmFsc2UsCisgICAgICAgICAgICAiZXhwZWN0IjogZmFsc2Us
CisgICAgICAgICAgICAiaXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJqYXNtaW5lIjogZmFsc2Us
CisgICAgICAgICAgICAicGVuZGluZyI6IGZhbHNlLAorICAgICAgICAgICAgInNweU9uIjogZmFs
c2UsCisgICAgICAgICAgICAid2FpdHMiOiBmYWxzZSwKKyAgICAgICAgICAgICJ3YWl0c0ZvciI6
IGZhbHNlLAorICAgICAgICAgICAgInhkZXNjcmliZSI6IGZhbHNlLAorICAgICAgICAgICAgInhp
dCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CisKK30se31dLDI6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworbW9kdWxlLmV4cG9ydHM9eworICAgICJlbnYiOiB7CisgICAg
ICAgICJicm93c2VyIjogZmFsc2UsCisgICAgICAgICJub2RlIjogZmFsc2UsCisgICAgICAgICJh
bWQiOiBmYWxzZSwKKyAgICAgICAgIm1vY2hhIjogZmFsc2UsCisgICAgICAgICJqYXNtaW5lIjog
ZmFsc2UKKyAgICB9LAorCisgICAgInJ1bGVzIjogeworICAgICAgICAibm8tYWxlcnQiOiAyLAor
ICAgICAgICAibm8tYXJyYXktY29uc3RydWN0b3IiOiAyLAorICAgICAgICAibm8tYml0d2lzZSI6
IDAsCisgICAgICAgICJuby1jYWxsZXIiOiAyLAorICAgICAgICAibm8tY2F0Y2gtc2hhZG93Ijog
MiwKKyAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDIsCisgICAgICAgICJuby1jb25kLWFzc2ln
biI6IDIsCisgICAgICAgICJuby1jb25zb2xlIjogMiwKKyAgICAgICAgIm5vLWNvbnN0YW50LWNv
bmRpdGlvbiI6IDIsCisgICAgICAgICJuby1jb250cm9sLXJlZ2V4IjogMiwKKyAgICAgICAgIm5v
LWRlYnVnZ2VyIjogMiwKKyAgICAgICAgIm5vLWRlbGV0ZS12YXIiOiAyLAorICAgICAgICAibm8t
ZGl2LXJlZ2V4IjogMCwKKyAgICAgICAgIm5vLWR1cGUta2V5cyI6IDIsCisgICAgICAgICJuby1l
bHNlLXJldHVybiI6IDAsCisgICAgICAgICJuby1lbXB0eSI6IDIsCisgICAgICAgICJuby1lbXB0
eS1jbGFzcyI6IDIsCisgICAgICAgICJuby1lbXB0eS1sYWJlbCI6IDIsCisgICAgICAgICJuby1l
cS1udWxsIjogMCwKKyAgICAgICAgIm5vLWV2YWwiOiAyLAorICAgICAgICAibm8tZXgtYXNzaWdu
IjogMiwKKyAgICAgICAgIm5vLWV4dGVuZC1uYXRpdmUiOiAyLAorICAgICAgICAibm8tZXh0cmEt
YmluZCI6IDIsCisgICAgICAgICJuby1leHRyYS1ib29sZWFuLWNhc3QiOiAyLAorICAgICAgICAi
bm8tZXh0cmEtcGFyZW5zIjogMCwKKyAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAgICAg
ICAibm8tZXh0cmEtc3RyaWN0IjogMiwKKyAgICAgICAgIm5vLWZhbGx0aHJvdWdoIjogMiwKKyAg
ICAgICAgIm5vLWZsb2F0aW5nLWRlY2ltYWwiOiAwLAorICAgICAgICAibm8tZnVuYy1hc3NpZ24i
OiAyLAorICAgICAgICAibm8taW1wbGllZC1ldmFsIjogMiwKKyAgICAgICAgIm5vLWlubmVyLWRl
Y2xhcmF0aW9ucyI6IFsyLCAiZnVuY3Rpb25zIl0sCisgICAgICAgICJuby1pbnZhbGlkLXJlZ2V4
cCI6IDIsCisgICAgICAgICJuby1pdGVyYXRvciI6IDIsCisgICAgICAgICJuby1sYWJlbC12YXIi
OiAyLAorICAgICAgICAibm8tbGFiZWxzIjogMiwKKyAgICAgICAgIm5vLWxvbmUtYmxvY2tzIjog
MiwKKyAgICAgICAgIm5vLWxvbmVseS1pZiI6IDAsCisgICAgICAgICJuby1sb29wLWZ1bmMiOiAy
LAorICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiBbMCwgZmFsc2VdLAorICAgICAgICAibm8t
bWl4ZWQtc3BhY2VzLWFuZC10YWJzIjogWzIsIGZhbHNlXSwKKyAgICAgICAgIm5vLW11bHRpLXNw
YWNlcyI6IDIsCisgICAgICAgICJuby1tdWx0aS1zdHIiOiAyLAorICAgICAgICAibm8tbXVsdGlw
bGUtZW1wdHktbGluZXMiOiBbMCwgeyJtYXgiOiAyfV0sCisgICAgICAgICJuby1uYXRpdmUtcmVh
c3NpZ24iOiAyLAorICAgICAgICAibm8tbmVnYXRlZC1pbi1saHMiOiAyLAorICAgICAgICAibm8t
bmVzdGVkLXRlcm5hcnkiOiAwLAorICAgICAgICAibm8tbmV3IjogMiwKKyAgICAgICAgIm5vLW5l
dy1mdW5jIjogMiwKKyAgICAgICAgIm5vLW5ldy1vYmplY3QiOiAyLAorICAgICAgICAibm8tbmV3
LXJlcXVpcmUiOiAwLAorICAgICAgICAibm8tbmV3LXdyYXBwZXJzIjogMiwKKyAgICAgICAgIm5v
LW9iai1jYWxscyI6IDIsCisgICAgICAgICJuby1vY3RhbCI6IDIsCisgICAgICAgICJuby1vY3Rh
bC1lc2NhcGUiOiAyLAorICAgICAgICAibm8tcGF0aC1jb25jYXQiOiAwLAorICAgICAgICAibm8t
cGx1c3BsdXMiOiAwLAorICAgICAgICAibm8tcHJvY2Vzcy1lbnYiOiAwLAorICAgICAgICAibm8t
cHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgIm5vLXByb3RvIjogMiwKKyAgICAgICAgIm5vLXJl
ZGVjbGFyZSI6IDIsCisgICAgICAgICJuby1yZWdleC1zcGFjZXMiOiAyLAorICAgICAgICAibm8t
cmVzZXJ2ZWQta2V5cyI6IDAsCisgICAgICAgICJuby1yZXN0cmljdGVkLW1vZHVsZXMiOiAwLAor
ICAgICAgICAibm8tcmV0dXJuLWFzc2lnbiI6IDIsCisgICAgICAgICJuby1zY3JpcHQtdXJsIjog
MiwKKyAgICAgICAgIm5vLXNlbGYtY29tcGFyZSI6IDAsCisgICAgICAgICJuby1zZXF1ZW5jZXMi
OiAyLAorICAgICAgICAibm8tc2hhZG93IjogMiwKKyAgICAgICAgIm5vLXNoYWRvdy1yZXN0cmlj
dGVkLW5hbWVzIjogMiwKKyAgICAgICAgIm5vLXNwYWNlLWJlZm9yZS1zZW1pIjogMiwKKyAgICAg
ICAgIm5vLXNwYWNlZC1mdW5jIjogMiwKKyAgICAgICAgIm5vLXNwYXJzZS1hcnJheXMiOiAyLAor
ICAgICAgICAibm8tc3luYyI6IDAsCisgICAgICAgICJuby10ZXJuYXJ5IjogMCwKKyAgICAgICAg
Im5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICJuby11bmRlZiI6IDIsCisgICAgICAg
ICJuby11bmRlZi1pbml0IjogMiwKKyAgICAgICAgIm5vLXVuZGVmaW5lZCI6IDAsCisgICAgICAg
ICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDIsCisgICAgICAgICJuby11bnJlYWNoYWJsZSI6IDIs
CisgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAorICAgICAgICAibm8tdW51c2Vk
LXZhcnMiOiBbMiwgeyJ2YXJzIjogImFsbCIsICJhcmdzIjogImFmdGVyLXVzZWQifV0sCisgICAg
ICAgICJuby11c2UtYmVmb3JlLWRlZmluZSI6IDIsCisgICAgICAgICJuby12b2lkIjogMCwKKyAg
ICAgICAgIm5vLXdhcm5pbmctY29tbWVudHMiOiBbMCwgeyAidGVybXMiOiBbInRvZG8iLCAiZml4
bWUiLCAieHh4Il0sICJsb2NhdGlvbiI6ICJzdGFydCIgfV0sCisgICAgICAgICJuby13aXRoIjog
MiwKKyAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisKKyAgICAgICAgImJsb2NrLXNjb3BlZC12
YXIiOiAwLAorICAgICAgICAiYnJhY2Utc3R5bGUiOiBbMCwgIjF0YnMiXSwKKyAgICAgICAgImNh
bWVsY2FzZSI6IDIsCisgICAgICAgICJjb21tYS1zcGFjaW5nIjogMiwKKyAgICAgICAgImNvbW1h
LXN0eWxlIjogMCwKKyAgICAgICAgImNvbXBsZXhpdHkiOiBbMCwgMTFdLAorICAgICAgICAiY29u
c2lzdGVudC1yZXR1cm4iOiAyLAorICAgICAgICAiY29uc2lzdGVudC10aGlzIjogWzAsICJ0aGF0
Il0sCisgICAgICAgICJjdXJseSI6IFsyLCAiYWxsIl0sCisgICAgICAgICJkZWZhdWx0LWNhc2Ui
OiAwLAorICAgICAgICAiZG90LW5vdGF0aW9uIjogMiwKKyAgICAgICAgImVvbC1sYXN0IjogMiwK
KyAgICAgICAgImVxZXFlcSI6IDIsCisgICAgICAgICJmdW5jLW5hbWVzIjogMCwKKyAgICAgICAg
ImZ1bmMtc3R5bGUiOiBbMCwgImRlY2xhcmF0aW9uIl0sCisgICAgICAgICJnbG9iYWwtc3RyaWN0
IjogWzIsICJuZXZlciJdLAorICAgICAgICAiZ3VhcmQtZm9yLWluIjogMCwKKyAgICAgICAgImhh
bmRsZS1jYWxsYmFjay1lcnIiOiAwLAorICAgICAgICAia2V5LXNwYWNpbmciOiBbMiwgeyAiYmVm
b3JlQ29sb24iOiBmYWxzZSwgImFmdGVyQ29sb24iOiB0cnVlIH1dLAorICAgICAgICAibWF4LWRl
cHRoIjogWzAsIDRdLAorICAgICAgICAibWF4LWxlbiI6IFswLCA4MCwgNF0sCisgICAgICAgICJt
YXgtbmVzdGVkLWNhbGxiYWNrcyI6IFswLCAyXSwKKyAgICAgICAgIm1heC1wYXJhbXMiOiBbMCwg
M10sCisgICAgICAgICJtYXgtc3RhdGVtZW50cyI6IFswLCAxMF0sCisgICAgICAgICJuZXctY2Fw
IjogMiwKKyAgICAgICAgIm5ldy1wYXJlbnMiOiAyLAorICAgICAgICAib25lLXZhciI6IDAsCisg
ICAgICAgICJwYWRkZWQtYmxvY2tzIjogMCwKKyAgICAgICAgInF1b3RlLXByb3BzIjogMCwKKyAg
ICAgICAgInF1b3RlcyI6IFsyLCAiZG91YmxlIl0sCisgICAgICAgICJyYWRpeCI6IDAsCisgICAg
ICAgICJzZW1pIjogMiwKKyAgICAgICAgInNvcnQtdmFycyI6IDAsCisgICAgICAgICJzcGFjZS1h
ZnRlci1rZXl3b3JkcyI6IFswLCAiYWx3YXlzIl0sCisgICAgICAgICJzcGFjZS1iZWZvcmUtYmxv
Y2tzIjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgInNwYWNlLWluLWJyYWNrZXRzIjogWzAsICJu
ZXZlciJdLAorICAgICAgICAic3BhY2UtaW4tcGFyZW5zIjogWzAsICJuZXZlciJdLAorICAgICAg
ICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNl
IjogMiwKKyAgICAgICAgInNwYWNlLXVuYXJ5LXdvcmQtb3BzIjogMCwKKyAgICAgICAgInNwYWNl
ZC1saW5lLWNvbW1lbnQiOiBbMCwgImFsd2F5cyJdLAorICAgICAgICAic3RyaWN0IjogMiwKKyAg
ICAgICAgInVzZS1pc25hbiI6IDIsCisgICAgICAgICJ2YWxpZC1qc2RvYyI6IDAsCisgICAgICAg
ICJ2YWxpZC10eXBlb2YiOiAyLAorICAgICAgICAidmFycy1vbi10b3AiOiAwLAorICAgICAgICAi
d3JhcC1paWZlIjogMCwKKyAgICAgICAgIndyYXAtcmVnZXgiOiAwLAorICAgICAgICAieW9kYSI6
IFsyLCAibmV2ZXIiXQorICAgIH0KK30KKworfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNv
bnRyaWJ1dG9ycy4KKy8vCisvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorLy8gY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorLy8gIlNvZnR3YXJl
IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZworLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLAorLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdAorLy8gcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlCisvLyBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKy8vCisvLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorLy8gaW4gYWxsIGNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisvLworLy8gVEhF
IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ
TkQsIEVYUFJFU1MKKy8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4KKy8vIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN
LAorLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G
IENPTlRSQUNULCBUT1JUIE9SCisvLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisvLyBVU0UgT1IgT1RIRVIg
REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7Cisg
IHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTsKKyAgdGhpcy5fbWF4TGlzdGVuZXJz
ID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDsKK30KK21vZHVsZS5leHBvcnRzID0g
RXZlbnRFbWl0dGVyOworCisvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLngKK0V2
ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CisKK0V2ZW50RW1pdHRlci5w
cm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDsKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuX21h
eExpc3RlbmVycyA9IHVuZGVmaW5lZDsKKworLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdp
bGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlCisvLyBhZGRl
ZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVt
b3J5IGxlYWtzLgorRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDsKKworLy8g
T2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMg
ZnVuY3Rpb24gYWxsb3dzCisvLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9y
IHVubGltaXRlZC4KK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVu
Y3Rpb24obikgeworICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKQorICAg
IHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7CisgIHRoaXMu
X21heExpc3RlbmVycyA9IG47CisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRFbWl0dGVyLnBy
b3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwg
YXJncywgaSwgbGlzdGVuZXJzOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2
ZW50cyA9IHt9OworCisgIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIg
dGhlbiB0aHJvdy4KKyAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKKyAgICBpZiAoIXRoaXMuX2V2
ZW50cy5lcnJvciB8fAorICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAh
dGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHsKKyAgICAgIGVyID0gYXJndW1lbnRzWzFdOwor
ICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgdGhyb3cgZXI7IC8vIFVu
aGFuZGxlZCAnZXJyb3InIGV2ZW50CisgICAgICB9CisgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1Vu
Y2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpOworICAgIH0KKyAgfQorCisgIGhh
bmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIp
KQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkgeworICAg
IHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgLy8gZmFzdCBjYXNlcworICAgICAg
Y2FzZSAxOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSAyOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBh
cmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CisgICAgICAgIGJyZWFrOworICAgICAgLy8gc2xv
d2VyCisgICAgICBkZWZhdWx0OgorICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAg
ICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgICAgICBmb3IgKGkgPSAxOyBpIDwg
bGVuOyBpKyspCisgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisgICAgICAg
IGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CisgICAgfQorICB9IGVsc2UgaWYgKGlzT2JqZWN0
KGhhbmRsZXIpKSB7CisgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICBhcmdzID0gbmV3
IEFycmF5KGxlbiAtIDEpOworICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKKyAgICAgIGFy
Z3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworCisgICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGlj
ZSgpOworICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CisgICAgZm9yIChpID0gMDsgaSA8IGxl
bjsgaSsrKQorICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpOworICB9CisKKyAg
cmV0dXJuIHRydWU7Cit9OworCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0g
ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKKyAgdmFyIG07CisKKyAgaWYgKCFpc0Z1bmN0aW9u
KGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5j
dGlvbicpOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2ZW50cyA9IHt9Owor
CisgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09ICJuZXdM
aXN0ZW5lciIhIEJlZm9yZQorICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3Qg
ZW1pdCAibmV3TGlzdGVuZXIiLgorICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKQorICAg
IHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLAorICAgICAgICAgICAgICBpc0Z1bmN0aW9u
KGxpc3RlbmVyLmxpc3RlbmVyKSA/CisgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDog
bGlzdGVuZXIpOworCisgIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIC8vIE9wdGltaXpl
IHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2Jq
ZWN0LgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyOworICBlbHNlIGlmIChpc09i
amVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKQorICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFu
IGFycmF5LCBqdXN0IGFwcGVuZC4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5l
cik7CisgIGVsc2UKKyAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNo
YW5nZSB0byBhcnJheS4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5
cGVdLCBsaXN0ZW5lcl07CisKKyAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWsKKyAgaWYgKGlz
T2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQp
IHsKKyAgICB2YXIgbTsKKyAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykp
IHsKKyAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CisgICAgfSBlbHNlIHsKKyAgICAgIG0g
PSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczsKKyAgICB9CisKKyAgICBpZiAobSAm
JiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkgeworICAgICAgdGhpcy5f
ZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CisgICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkg
d2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICsKKyAgICAgICAgICAgICAg
ICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArCisgICAgICAgICAg
ICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1p
dC4nLAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTsKKyAg
ICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAv
LyBub3Qgc3VwcG9ydGVkIGluIElFIDEwCisgICAgICAgIGNvbnNvbGUudHJhY2UoKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1pdHRlci5wcm90
b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyOworCitFdmVudEVt
aXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgeworICBpZiAo
IWlzRnVuY3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVz
dCBiZSBhIGZ1bmN0aW9uJyk7CisKKyAgdmFyIGZpcmVkID0gZmFsc2U7CisKKyAgZnVuY3Rpb24g
ZygpIHsKKyAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpOworCisgICAgaWYgKCFmaXJl
ZCkgeworICAgICAgZmlyZWQgPSB0cnVlOworICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICB9CisgIH0KKworICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgIHRoaXMu
b24odHlwZSwgZyk7CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvLyBlbWl0cyBhICdyZW1vdmVM
aXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZAorRXZlbnRFbWl0dGVy
LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7Cisg
IHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpOworCisgIGlmICghaXNGdW5jdGlvbihsaXN0
ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24n
KTsKKworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIHJl
dHVybiB0aGlzOworCisgIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07CisgIGxlbmd0aCA9IGxp
c3QubGVuZ3RoOworICBwb3NpdGlvbiA9IC0xOworCisgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8
fAorICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0g
bGlzdGVuZXIpKSB7CisgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICBpZiAodGhp
cy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQorICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5l
cicsIHR5cGUsIGxpc3RlbmVyKTsKKworICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7Cisg
ICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykgeworICAgICAgaWYgKGxpc3RbaV0gPT09IGxp
c3RlbmVyIHx8CisgICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5l
ciA9PT0gbGlzdGVuZXIpKSB7CisgICAgICAgIHBvc2l0aW9uID0gaTsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAgIHJldHVybiB0
aGlzOworCisgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7CisgICAgICBsaXN0Lmxlbmd0aCA9
IDA7CisgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworICAgIH0gZWxzZSB7CisgICAg
ICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7CisgICAgfQorCisgICAgaWYgKHRoaXMuX2V2ZW50
cy5yZW1vdmVMaXN0ZW5lcikKKyAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBl
LCBsaXN0ZW5lcik7CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1pdHRlci5w
cm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIga2V5
LCBsaXN0ZW5lcnM7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgcmV0dXJuIHRoaXM7CisK
KyAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdAor
ICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikgeworICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID09PSAwKQorICAgICAgdGhpcy5fZXZlbnRzID0ge307CisgICAgZWxzZSBpZiAodGhp
cy5fZXZlbnRzW3R5cGVdKQorICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0
ZW5lcnMgb24gYWxsIGV2ZW50cworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAg
IGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykgeworICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxp
c3RlbmVyJykgY29udGludWU7CisgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpOwor
ICAgIH0KKyAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTsKKyAg
ICB0aGlzLl9ldmVudHMgPSB7fTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGxpc3RlbmVy
cyA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7
CisgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpOworICB9IGVsc2Ugewor
ICAgIC8vIExJRk8gb3JkZXIKKyAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCkKKyAgICAgIHRo
aXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7
CisgIH0KKyAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICByZXR1cm4gdGhpczsKK307
CisKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgewor
ICB2YXIgcmV0OworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKQor
ICAgIHJldCA9IFtdOworICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkp
CisgICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07CisgIGVsc2UKKyAgICByZXQgPSB0aGlz
Ll9ldmVudHNbdHlwZV0uc2xpY2UoKTsKKyAgcmV0dXJuIHJldDsKK307CisKK0V2ZW50RW1pdHRl
ci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkgeworICB2YXIgcmV0Owor
ICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKQorICAgIHJl
dCA9IDA7CisgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSkKKyAg
ICByZXQgPSAxOworICBlbHNlCisgICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0
aDsKKyAgcmV0dXJuIHJldDsKK307CisKK2Z1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7CisgIHJl
dHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nOworfQorCitmdW5jdGlvbiBpc051bWJlcihh
cmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInOworfQorCitmdW5jdGlvbiBp
c09iamVjdChhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAh
PT0gbnVsbDsKK30KKworZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7CisgIHJldHVybiBhcmcg
PT09IHZvaWQgMDsKK30KKworfSx7fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxNCBEYW4gVGFvIDxkYW5pZWwudGFv
QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBFaXNlbmJlcmcgPGFuZHJl
d0BlaXNlbmJlcmcuYXM+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8q
anNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlIGVxZXE6dHJ1ZSBub21lbjp0cnVlKi8K
Ky8qZ2xvYmFsIGRvY3RyaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgcGFyc2VUeXBlRXhwcmVzc2lv
bjp0cnVlLCBwYXJzZVRvcDp0cnVlKi8KKworKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgdmFyIFZFUlNJT04sCisgICAgICAgIFJlZ2V4LAorICAgICAgICBD
YW5BY2Nlc3NTdHJpbmdCeUluZGV4LAorICAgICAgICB0eXBlZCwKKyAgICAgICAganNkb2MsCisg
ICAgICAgIGlzQXJyYXksCisgICAgICAgIGhhc093blByb3BlcnR5OworCisgICAgLy8gU3luYyB3
aXRoIHBhY2thZ2UuanNvbi4KKyAgICBWRVJTSU9OID0gJzAuNS4yLWRldic7CisKKyAgICAvLyBT
ZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJlZ2V4ID0gewor
ICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4YWFceGI1XHhi
YVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRc
dTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM4Nlx1
MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFc
dTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1ZDAtXHUwNWVh
XHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQzXHUwNmQ1
XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVmXHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1MDcxMi1c
dTA3MmZcdTA3NGQtXHUwN2E1XHUwN2IxXHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1MDdmYVx1
MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOGEwXHUwOGEyLVx1
MDhhY1x1MDkwNC1cdTA5MzlcdTA5M2RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N1x1
MDk3OS1cdTA5N2ZcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlhYS1c
dTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJkXHUwOWNlXHUwOWRjXHUwOWRkXHUwOWRmLVx1
MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUw
YTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGE1OS1cdTBh
NWNcdTBhNWVcdTBhNzItXHUwYTc0XHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUw
YWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmRcdTBhZDBcdTBh
ZTBcdTBhZTFcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBi
MzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2
MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5
OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUt
XHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJh
LVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2RcdTBjNThcdTBjNTlcdTBjNjBcdTBjNjFcdTBjODUt
XHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNi
OVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNlMVx1MGNmMVx1MGNmMlx1MGQwNS1cdTBkMGNcdTBkMGUt
XHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0ZVx1MGQ2MFx1MGQ2MVx1MGQ3YS1cdTBkN2Zc
dTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2
XHUwZTAxLVx1MGUzMFx1MGUzMlx1MGUzM1x1MGU0MC1cdTBlNDZcdTBlODFcdTBlODJcdTBlODRc
dTBlODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1c
dTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWIwXHUwZWIyXHUwZWIzXHUw
ZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmNDAtXHUwZjQ3XHUw
ZjQ5LVx1MGY2Y1x1MGY4OC1cdTBmOGNcdTEwMDAtXHUxMDJhXHUxMDNmXHUxMDUwLVx1MTA1NVx1
MTA1YS1cdTEwNWRcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNmUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1
MTA4ZVx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZjLVx1MTI0OFx1
MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2MC1cdTEyODhc
dTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUxMmJlXHUxMmMw
XHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMx
OC1cdTEzNWFcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUx
NjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1MTcwY1x1
MTcwZS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NmNcdTE3NmUt
XHUxNzcwXHUxNzgwLVx1MTdiM1x1MTdkN1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGE4
XHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5NTAtXHUxOTZkXHUxOTcwLVx1MTk3
NFx1MTk4MC1cdTE5YWJcdTE5YzEtXHUxOWM3XHUxYTAwLVx1MWExNlx1MWEyMC1cdTFhNTRcdTFh
YTdcdTFiMDUtXHUxYjMzXHUxYjQ1LVx1MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVcdTFiYWZcdTFi
YmEtXHUxYmU1XHUxYzAwLVx1MWMyM1x1MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdkXHUxY2U5LVx1
MWNlY1x1MWNlZS1cdTFjZjFcdTFjZjVcdTFjZjZcdTFkMDAtXHUxZGJmXHUxZTAwLVx1MWYxNVx1
MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFmNTdcdTFmNTlc
dTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFmYmNcdTFmYmVc
dTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUxZmRiXHUxZmUw
LVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5
Y1x1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2
XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0
OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJj
ZTRcdTJjZWItXHUyY2VlXHUyY2YyXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQyZFx1MmQz
MC1cdTJkNjdcdTJkNmZcdTJkODAtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJkYWVcdTJk
YjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUyZGQwLVx1
MmRkNlx1MmRkOC1cdTJkZGVcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1c
dTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZh
XHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFm
MC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVh
NGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVhNjZlXHVh
NjdmLVx1YTY5N1x1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1c
dWE3OGVcdWE3OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MDFcdWE4MDMtXHVhODA1
XHVhODA3LVx1YTgwYVx1YTgwYy1cdWE4MjJcdWE4NDAtXHVhODczXHVhODgyLVx1YThiM1x1YThm
Mi1cdWE4ZjdcdWE4ZmJcdWE5MGEtXHVhOTI1XHVhOTMwLVx1YTk0Nlx1YTk2MC1cdWE5N2NcdWE5
ODQtXHVhOWIyXHVhOWNmXHVhYTAwLVx1YWEyOFx1YWE0MC1cdWFhNDJcdWFhNDQtXHVhYTRiXHVh
YTYwLVx1YWE3Nlx1YWE3YVx1YWE4MC1cdWFhYWZcdWFhYjFcdWFhYjVcdWFhYjZcdWFhYjktXHVh
YWJkXHVhYWMwXHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWFcdWFhZjItXHVhYWY0XHVh
YjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1c
dWFiMmVcdWFiYzAtXHVhYmUyXHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2Zi
XHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIx
ZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0
MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5
Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMjEtXHVm
ZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1
ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpLAorICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQ
YXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAy
YzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJlZVx1MDMwMC1cdTAzNzRcdTAz
NzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1cdTAz
YTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OGEtXHUwNTI3XHUw
NTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUw
NWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MTAtXHUw
NjFhXHUwNjIwLVx1MDY2OVx1MDY2ZS1cdTA2ZDNcdTA2ZDUtXHUwNmRjXHUwNmRmLVx1MDZlOFx1
MDZlYS1cdTA2ZmNcdTA2ZmZcdTA3MTAtXHUwNzRhXHUwNzRkLVx1MDdiMVx1MDdjMC1cdTA3ZjVc
dTA3ZmFcdTA4MDAtXHUwODJkXHUwODQwLVx1MDg1Ylx1MDhhMFx1MDhhMi1cdTA4YWNcdTA4ZTQt
XHUwOGZlXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NmZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3
Zlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlh
YS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJjLVx1MDljNFx1MDljN1x1MDljOFx1MDlj
Yi1cdTA5Y2VcdTA5ZDdcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUzXHUwOWU2LVx1MDlmMVx1MGEw
MS1cdTBhMDNcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1MGEyYS1cdTBh
MzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhM2NcdTBhM2UtXHUwYTQy
XHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE1OS1cdTBhNWNcdTBhNWVcdTBhNjYt
XHUwYTc1XHUwYTgxLVx1MGE4M1x1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkzLVx1MGFh
OFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJjLVx1MGFjNVx1MGFj
Ny1cdTBhYzlcdTBhY2ItXHUwYWNkXHUwYWQwXHUwYWUwLVx1MGFlM1x1MGFlNi1cdTBhZWZcdTBi
MDEtXHUwYjAzXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBiMmEtXHUw
YjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzYy1cdTBiNDRcdTBiNDdcdTBiNDhcdTBi
NGItXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2M1x1MGI2Ni1cdTBi
NmZcdTBiNzFcdTBiODJcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1cdTBi
OTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUwYmFh
XHUwYmFlLVx1MGJiOVx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJjZFx1MGJk
MFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDEtXHUwYzAzXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBj
MTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2QtXHUwYzQ0XHUw
YzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNThcdTBjNTlcdTBjNjAtXHUw
YzYzXHUwYzY2LVx1MGM2Zlx1MGM4Mlx1MGM4M1x1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUw
YzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JjLVx1MGNjNFx1MGNjNi1c
dTBjYzhcdTBjY2EtXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2RlXHUwY2UwLVx1MGNlM1x1MGNlNi1c
dTBjZWZcdTBjZjFcdTBjZjJcdTBkMDJcdTBkMDNcdTBkMDUtXHUwZDBjXHUwZDBlLVx1MGQxMFx1
MGQxMi1cdTBkM2FcdTBkM2QtXHUwZDQ0XHUwZDQ2LVx1MGQ0OFx1MGQ0YS1cdTBkNGVcdTBkNTdc
dTBkNjAtXHUwZDYzXHUwZDY2LVx1MGQ2Zlx1MGQ3YS1cdTBkN2ZcdTBkODJcdTBkODNcdTBkODUt
XHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2XHUwZGNh
XHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRkOC1cdTBkZGZcdTBkZjJcdTBkZjNcdTBlMDEtXHUwZTNh
XHUwZTQwLVx1MGU0ZVx1MGU1MC1cdTBlNTlcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhc
dTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBlYTNcdTBlYTVc
dTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWI5XHUwZWJiLVx1MGViZFx1MGVjMC1cdTBlYzRc
dTBlYzZcdTBlYzgtXHUwZWNkXHUwZWQwLVx1MGVkOVx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmMThc
dTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjNlLVx1MGY0N1x1MGY0OS1c
dTBmNmNcdTBmNzEtXHUwZjg0XHUwZjg2LVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMDAt
XHUxMDQ5XHUxMDUwLVx1MTA5ZFx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZh
XHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1
ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEy
YjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUx
MzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFcdTEzNWQtXHUxMzVmXHUxMzgwLVx1MTM4Zlx1MTNhMC1c
dTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAtXHUxNmVh
XHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3MGNcdTE3MGUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0
MC1cdTE3NTNcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3
ZDNcdTE3ZDdcdTE3ZGNcdTE3ZGRcdTE3ZTAtXHUxN2U5XHUxODBiLVx1MTgwZFx1MTgxMC1cdTE4
MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFjXHUx
OTIwLVx1MTkyYlx1MTkzMC1cdTE5M2JcdTE5NDYtXHUxOTZkXHUxOTcwLVx1MTk3NFx1MTk4MC1c
dTE5YWJcdTE5YjAtXHUxOWM5XHUxOWQwLVx1MTlkOVx1MWEwMC1cdTFhMWJcdTFhMjAtXHUxYTVl
XHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFhODlcdTFhOTAtXHUxYTk5XHUxYWE3XHUxYjAwLVx1MWI0
Ylx1MWI1MC1cdTFiNTlcdTFiNmItXHUxYjczXHUxYjgwLVx1MWJmM1x1MWMwMC1cdTFjMzdcdTFj
NDAtXHUxYzQ5XHUxYzRkLVx1MWM3ZFx1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2Y2XHUxZDAwLVx1
MWRlNlx1MWRmYy1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRc
dTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRc
dTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQz
XHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjAw
Y1x1MjAwZFx1MjAzZlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNcdTIwZDAt
XHUyMGRjXHUyMGUxXHUyMGU1LVx1MjBmMFx1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVc
dTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlc
dTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJl
XHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRcdTJjZWItXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQy
N1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkN2YtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRh
OC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUy
ZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJkZTAtXHUyZGZmXHUyZTJmXHUzMDA1LVx1
MzAwN1x1MzAyMS1cdTMwMmZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZc
dTMwOTlcdTMwOWFcdTMwOWQtXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUt
XHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRi
NVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2
MTAtXHVhNjJiXHVhNjQwLVx1YTY2Zlx1YTY3NC1cdWE2N2RcdWE2N2YtXHVhNjk3XHVhNjlmLVx1
YTZmMVx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5MC1cdWE3OTNc
dWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgyN1x1YTg0MC1cdWE4NzNcdWE4ODAtXHVhOGM0XHVhOGQw
LVx1YThkOVx1YThlMC1cdWE4ZjdcdWE4ZmJcdWE5MDAtXHVhOTJkXHVhOTMwLVx1YTk1M1x1YTk2
MC1cdWE5N2NcdWE5ODAtXHVhOWMwXHVhOWNmLVx1YTlkOVx1YWEwMC1cdWFhMzZcdWFhNDAtXHVh
YTRkXHVhYTUwLVx1YWE1OVx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhN2JcdWFhODAtXHVhYWMyXHVh
YWRiLVx1YWFkZFx1YWFlMC1cdWFhZWZcdWFhZjItXHVhYWY2XHVhYjAxLVx1YWIwNlx1YWIwOS1c
dWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmVh
XHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2Ni
LVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZi
MTdcdWZiMWQtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBcdWZi
NDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZcdWZk
OTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZTMzXHVm
ZTM0XHVmZTRkLVx1ZmU0Zlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjEwLVx1ZmYxOVx1
ZmYyMS1cdWZmM2FcdWZmM2ZcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdc
dWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJykKKyAgICB9OworCisgICAg
Q2FuQWNjZXNzU3RyaW5nQnlJbmRleCA9IHR5cGVvZiAnZG9jdHJpbmUnWzBdICE9PSB1bmRlZmlu
ZWQ7CisKKyAgICBmdW5jdGlvbiBzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCBsYXN0KSB7Cisg
ICAgICAgIHZhciBvdXRwdXQ7CisgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCkg
eworICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKGluZGV4LCBsYXN0KS5qb2luKCcn
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZShp
bmRleCwgbGFzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9CisK
KyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgICBpZiAoIWlzQXJyYXkpIHsKKyAgICAg
ICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJ5KSB7CisgICAgICAgICAgICByZXR1cm4g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyeSkgPT09ICdbb2JqZWN0IEFycmF5XSc7
CisgICAgICAgIH07CisgICAgfQorCisgICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTsKKyAgICAgICAgfTsKKyAgICB9KCkp
OworCisgICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7CisgICAgICAgIHZhciByZXQgPSB7
fSwga2V5OworICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChvYmou
aGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tl
eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAgIHJldHVybiBj
aCA9PT0gJ1xuJyB8fCBjaCA9PT0gJ1xyJyB8fCBjaCA9PT0gJ1x1MjAyOCcgfHwgY2ggPT09ICdc
dTIwMjknOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAnICcpIHx8IChjaCA9PT0gJ1x1MDAwOScpIHx8IChjaCA9PT0gJ1x1
MDAwQicpIHx8CisgICAgICAgICAgICAoY2ggPT09ICdcdTAwMEMnKSB8fCAoY2ggPT09ICdcdTAw
QTAnKSB8fAorICAgICAgICAgICAgKGNoLmNoYXJDb2RlQXQoMCkgPj0gMHgxNjgwICYmCisgICAg
ICAgICAgICAgJ1x1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAw
NVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1RkVGRicu
aW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQo
Y2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5Jy5pbmRleE9mKGNoKSA+PSAwOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIz
NDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9m
KGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0En
ICYmIGNoIDw9ICdaJykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09
ICckJykgfHwgKGNoID09PSAnXycpIHx8IChjaCA9PT0gJ1xcJykgfHwKKyAgICAgICAgICAgIChj
aCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAg
ICAgICAgICAgICgoY2guY2hhckNvZGVBdCgwKSA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlk
ZW50aWZpZXJTdGFydC50ZXN0KGNoKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlm
aWVyUGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAnJCcpIHx8IChjaCA9PT0gJ18n
KSB8fCAoY2ggPT09ICdcXCcpIHx8CisgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6
JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAoKGNoID49ICcw
JykgJiYgKGNoIDw9ICc5JykpIHx8CisgICAgICAgICAgICAoKGNoLmNoYXJDb2RlQXQoMCkgPj0g
MHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGNoKSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkgeworICAgICAgICByZXR1cm4gJz48KCl7fVtd
LDoqfD8hPScuaW5kZXhPZihjaCkgPT09IC0xICYmICFpc1doaXRlU3BhY2UoY2gpICYmICFpc0xp
bmVUZXJtaW5hdG9yKGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1BhcmFtVGl0bGUodGl0
bGUpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncGFyYW0nIHx8IHRpdGxlID09PSAnYXJn
dW1lbnQnIHx8IHRpdGxlID09PSAnYXJnJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1Byb3Bl
cnR5KHRpdGxlKSB7CisgICAgICAgIHJldHVybiB0aXRsZSA9PT0gJ3Byb3BlcnR5JyB8fCB0aXRs
ZSA9PT0gJ3Byb3AnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzTmFtZVBhcmFtZXRlclJlcXVp
cmVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0bGUpIHx8IGlzUHJv
cGVydHkodGl0bGUpIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2FsaWFzJyB8fCB0aXRsZSA9
PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAnbWl4ZXMnIHx8IHRpdGxlID09PSAncmVxdWlyZXMnOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5hbWUodGl0bGUpIHsKKyAgICAgICAgcmV0
dXJuIGlzTmFtZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8
fCB0aXRsZSA9PT0gJ2NvbnN0YW50JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FsbG93ZWRO
ZXN0ZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkodGl0bGUpIHx8IGlzUGFy
YW1UaXRsZSh0aXRsZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlUGFyYW1ldGVyUmVx
dWlyZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgdGl0
bGUgPT09ICdkZWZpbmUnIHx8IHRpdGxlID09PSAnZW51bScgfHwKKyAgICAgICAgICAgIHRpdGxl
ID09PSAnaW1wbGVtZW50cycgfHwgdGl0bGUgPT09ICdyZXR1cm4nIHx8CisgICAgICAgICAgICB0
aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAndHlwZScgfHwgdGl0bGUgPT09ICd0eXBlZGVm
JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdyZXR1cm5zJyB8fCBpc1Byb3BlcnR5KHRpdGxl
KTsKKyAgICB9CisKKyAgICAvLyBDb25zaWRlciBkZXByZWNhdGlvbiBpbnN0ZWFkIHVzaW5nICdp
c1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCcgYW5kICdSdWxlcycgZGVjbGFyYXRpb24gdG8gcGljayB3
aGVuIGEgdHlwZSBpcyBvcHRpb25hbC9yZXF1aXJlZAorICAgIC8vIFRoaXMgd291bGQgcmVxdWly
ZSBjaGFuZ2VzIHRvICdwYXJzZVR5cGUnCisgICAgZnVuY3Rpb24gaXNBbGxvd2VkVHlwZSh0aXRs
ZSkgeworICAgICAgICByZXR1cm4gaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRp
dGxlID09PSAndGhyb3dzJyB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8fCB0aXRsZSA9PT0gJ2NvbnN0
YW50JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICduYW1lc3BhY2UnIHx8IHRpdGxlID09PSAn
bWVtYmVyJyB8fCB0aXRsZSA9PT0gJ3ZhcicgfHwgdGl0bGUgPT09ICdtb2R1bGUnIHx8CisgICAg
ICAgICAgICB0aXRsZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0aXRsZSA9PT0gJ2NsYXNzJyB8fCB0
aXRsZSA9PT0gJ2V4dGVuZHMnIHx8IHRpdGxlID09PSAnYXVnbWVudHMnIHx8CisgICAgICAgICAg
ICB0aXRsZSA9PT0gJ3B1YmxpYycgfHwgdGl0bGUgPT09ICdwcml2YXRlJyB8fCB0aXRsZSA9PT0g
J3Byb3RlY3RlZCc7CisgICAgfQorCisgICAgZnVuY3Rpb24gRG9jdHJpbmVFcnJvcihtZXNzYWdl
KSB7CisgICAgICAgIHRoaXMubmFtZSA9ICdEb2N0cmluZUVycm9yJzsKKyAgICAgICAgdGhpcy5t
ZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CisgICAgRG9jdHJpbmVFcnJvci5wcm90b3R5cGUgPSBu
ZXcgRXJyb3IoKTsKKyAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERv
Y3RyaW5lRXJyb3I7CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IERvY3RyaW5lRXJyb3IobWVzc2FnZSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYXNzZXJ0KGNvbmQsIHRleHQpIHsKKyAgICAgICAgaWYgKFZFUlNJT04uc2xpY2UoLTMpID09
PSAnZGV2JykgeworICAgICAgICAgICAgaWYgKCFjb25kKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih0ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIHRyaW0oc3RyKSB7CisgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxzKy8sICcn
KS5yZXBsYWNlKC9ccyskLywgJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVud3JhcENvbW1l
bnQoZG9jKSB7CisgICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm0KKyAg
ICAgICAgLy8gICAvKioKKyAgICAgICAgLy8gICAgKiAuLi4uLi4uCisgICAgICAgIC8vICAgICov
CisgICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqCisgICAgICAgIHZhciBCRUZPUkVfU1RB
UiA9IDAsCisgICAgICAgICAgICBTVEFSID0gMSwKKyAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAy
LAorICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICBsZW4sCisgICAgICAgICAgICBtb2Rl
LAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgY2g7CisKKyAgICAgICAgZG9jID0g
ZG9jLnJlcGxhY2UoL15cL1wqXCo/LywgJycpLnJlcGxhY2UoL1wqXC8kLywgJycpOworICAgICAg
ICBpbmRleCA9IDA7CisgICAgICAgIGxlbiA9IGRvYy5sZW5ndGg7CisgICAgICAgIG1vZGUgPSBC
RUZPUkVfU1RBUjsKKyAgICAgICAgcmVzdWx0ID0gJyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuKSB7CisgICAgICAgICAgICBjaCA9IGRvY1tpbmRleF07CisgICAgICAgICAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQkVGT1JFX1NUQVI6CisgICAgICAgICAgICAg
ICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBjaDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKicpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbW9kZSA9IFNUQVI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh
aXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTVEFSOgorICAgICAg
ICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1vZGUgPSBp
c0xpbmVUZXJtaW5hdG9yKGNoKSA/IEJFRk9SRV9TVEFSIDogQUZURVJfU1RBUjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBRlRFUl9TVEFSOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRv
cihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIC8vIFR5cGUgRXhwcmVzc2lvbiBQYXJzZXIKKworICAgIChmdW5jdGlvbiAo
ZXhwb3J0cykgeworICAgICAgICB2YXIgU3ludGF4LAorICAgICAgICAgICAgVG9rZW4sCisgICAg
ICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBpbmRleCwK
KyAgICAgICAgICAgIHByZXZpb3VzLAorICAgICAgICAgICAgdG9rZW4sCisgICAgICAgICAgICB2
YWx1ZTsKKworICAgICAgICBTeW50YXggPSB7CisgICAgICAgICAgICBOdWxsYWJsZUxpdGVyYWw6
ICdOdWxsYWJsZUxpdGVyYWwnLAorICAgICAgICAgICAgQWxsTGl0ZXJhbDogJ0FsbExpdGVyYWwn
LAorICAgICAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsCisgICAgICAgICAgICBV
bmRlZmluZWRMaXRlcmFsOiAnVW5kZWZpbmVkTGl0ZXJhbCcsCisgICAgICAgICAgICBWb2lkTGl0
ZXJhbDogJ1ZvaWRMaXRlcmFsJywKKyAgICAgICAgICAgIFVuaW9uVHlwZTogJ1VuaW9uVHlwZScs
CisgICAgICAgICAgICBBcnJheVR5cGU6ICdBcnJheVR5cGUnLAorICAgICAgICAgICAgUmVjb3Jk
VHlwZTogJ1JlY29yZFR5cGUnLAorICAgICAgICAgICAgRmllbGRUeXBlOiAnRmllbGRUeXBlJywK
KyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZTogJ0Z1bmN0aW9uVHlwZScsCisgICAgICAgICAgICBQ
YXJhbWV0ZXJUeXBlOiAnUGFyYW1ldGVyVHlwZScsCisgICAgICAgICAgICBSZXN0VHlwZTogJ1Jl
c3RUeXBlJywKKyAgICAgICAgICAgIE5vbk51bGxhYmxlVHlwZTogJ05vbk51bGxhYmxlVHlwZScs
CisgICAgICAgICAgICBPcHRpb25hbFR5cGU6ICdPcHRpb25hbFR5cGUnLAorICAgICAgICAgICAg
TnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJywKKyAgICAgICAgICAgIE5hbWVFeHByZXNzaW9u
OiAnTmFtZUV4cHJlc3Npb24nLAorICAgICAgICAgICAgVHlwZUFwcGxpY2F0aW9uOiAnVHlwZUFw
cGxpY2F0aW9uJworICAgICAgICB9OworCisgICAgICAgIFRva2VuID0geworICAgICAgICAgICAg
SUxMRUdBTDogMCwgICAgLy8gSUxMRUdBTAorICAgICAgICAgICAgRE9UOiAxLCAgICAgICAgLy8g
LgorICAgICAgICAgICAgRE9UX0xUOiAyLCAgICAgLy8gLjwKKyAgICAgICAgICAgIFJFU1Q6IDMs
ICAgICAgIC8vIC4uLgorICAgICAgICAgICAgTFQ6IDQsICAgICAgICAgLy8gPAorICAgICAgICAg
ICAgR1Q6IDUsICAgICAgICAgLy8gPgorICAgICAgICAgICAgTFBBUkVOOiA2LCAgICAgLy8gKAor
ICAgICAgICAgICAgUlBBUkVOOiA3LCAgICAgLy8gKQorICAgICAgICAgICAgTEJSQUNFOiA4LCAg
ICAgLy8geworICAgICAgICAgICAgUkJSQUNFOiA5LCAgICAgLy8gfQorICAgICAgICAgICAgTEJS
QUNLOiAxMCwgICAgLy8gWworICAgICAgICAgICAgUkJSQUNLOiAxMSwgICAgLy8gXQorICAgICAg
ICAgICAgQ09NTUE6IDEyLCAgICAgLy8gLAorICAgICAgICAgICAgQ09MT046IDEzLCAgICAgLy8g
OgorICAgICAgICAgICAgU1RBUjogMTQsICAgICAgLy8gKgorICAgICAgICAgICAgUElQRTogMTUs
ICAgICAgLy8gfAorICAgICAgICAgICAgUVVFU1RJT046IDE2LCAgLy8gPworICAgICAgICAgICAg
QkFORzogMTcsICAgICAgLy8gIQorICAgICAgICAgICAgRVFVQUw6IDE4LCAgICAgLy8gPQorICAg
ICAgICAgICAgTkFNRTogMTksICAgICAgLy8gbmFtZSB0b2tlbgorICAgICAgICAgICAgU1RSSU5H
OiAyMCwgICAgLy8gc3RyaW5nCisgICAgICAgICAgICBOVU1CRVI6IDIxLCAgICAvLyBudW1iZXIK
KyAgICAgICAgICAgIEVPRjogMjIKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBDb250
ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9w
cmV2aW91cyA9IHByZXZpb3VzOworICAgICAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAg
ICAgICAgICAgIHRoaXMuX3Rva2VuID0gdG9rZW47CisgICAgICAgICAgICB0aGlzLl92YWx1ZSA9
IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgQ29udGV4dC5wcm90b3R5cGUucmVzdG9yZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHByZXZpb3VzID0gdGhpcy5fcHJldmlvdXM7Cisg
ICAgICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4OworICAgICAgICAgICAgdG9rZW4gPSB0aGlz
Ll90b2tlbjsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWU7CisgICAgICAgIH07CisK
KyAgICAgICAgQ29udGV4dC5zYXZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgfTsK
KworICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkgeworICAgICAgICAgICAgdmFyIGNoID0gc291
cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICByZXR1cm4g
Y2g7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkg
eworICAgICAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAgICAgICAgICBs
ZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNI
ZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9IGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5
YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7CisgICAgICAg
ICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlOyAv
L1RPRE8gcmV2aWV3IHJlbW92YWwgb2N0YWwgPSBmYWxzZQorICAgICAgICAgICAgcXVvdGUgPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgKytpbmRleDsKKworICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgIHF1
b3RlID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x0JzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcdic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyByZXZpZXcg
cmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChjb2RlICE9PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIG9jdGFsID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UT0RPIFJl
dmlldyBSZW1vdmFsIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25s
eSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChxdW90
ZSAhPT0gJycpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHF1b3Rl
Jyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlID0gc3RyOworICAgICAgICAg
ICAgcmV0dXJuIFRva2VuLlNUUklORzsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNj
YW5OdW1iZXIoKSB7CisgICAgICAgICAgICB2YXIgbnVtYmVyLCBjaDsKKworICAgICAgICAgICAg
bnVtYmVyID0gJyc7CisgICAgICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAg
ICAgIG51bWJlciA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGV4RGln
aXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gb25seSAweAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCAxNik7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxEaWdpdChjaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3Rl
ZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVt
YmVyLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVj
dGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVj
aW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9
PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVjaW1hbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8
IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworCisg
ICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9
IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7CisgICAg
ICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICB9CisKKworICAgICAgICBmdW5j
dGlvbiBzY2FuVHlwZU5hbWUoKSB7CisgICAgICAgICAgICB2YXIgY2gsIGNoMjsKKworICAgICAg
ICAgICAgdmFsdWUgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGggJiYgaXNUeXBlTmFtZShzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoKGluZGV4ICsgMSkgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoMiA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5BTUU7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAgICAgdmFyIGNoOworCisgICAgICAgICAg
ICBwcmV2aW91cyA9IGluZGV4OworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgg
JiYgaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRU9GOworICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhd
OworICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSAnIic6CisgICAg
ICAgICAgICAgICAgdG9rZW4gPSBzY2FuU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT0xPTjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgICAg
IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BOworICAgICAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFBBUkVO
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKSc6
CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uUlBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAg
Y2FzZSAnWyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gVG9rZW4uTEJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAg
ICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNFOworICAgICAgICAgICAgICAgIHJl
dHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVF9MVDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nICYmIGluZGV4ICsgMSA8IGxlbmd0aCAm
JiBzb3VyY2VbaW5kZXggKyAxXSA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IHNjYW5OdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IFRva2VuLkRPVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisK
KyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxUOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uR1Q7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSOworICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUElQRTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlFVRVNUSU9O
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnISc6
CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uQkFORzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNh
c2UgJz0nOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLkVRVUFMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Nhbk51bWJlcigpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gdHlwZSBzdHJpbmcgcGVybWl0cyBmb2xsb3dpbmcgY2FzZSwKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzcworICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gdGhpcyByZWR1Y2VkIDEgdG9rZW4gVEtf
TkFNRQorICAgICAgICAgICAgICAgIGlmIChpc1R5cGVOYW1lKGNoKSkgeworICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IHNjYW5UeXBlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBU
b2tlbi5JTExFR0FMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbnN1bWUodGFyZ2V0LCB0ZXh0KSB7
CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IHRhcmdldCwgdGV4dCB8fCAnY29uc3VtZWQg
dG9rZW4gbm90IG1hdGNoZWQnKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGV4cGVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAh
PT0gdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tl
bicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJworICAgICAgICAvLwor
ICAgICAgICAvLyBUeXBlVW5pb25MaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAg
ICAgICAgLy8gICB8IE5vbmVtcHR5VHlwZVVuaW9uTGlzdAorICAgICAgICAvLworICAgICAgICAv
LyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj0KKyAgICAgICAgLy8gICAgIFR5cGVFeHByZXNzaW9u
CisgICAgICAgIC8vICAgfCBUeXBlRXhwcmVzc2lvbiAnfCcgTm9uZW1wdHlUeXBlVW5pb25MaXN0
CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkgeworICAgICAgICAgICAgdmFyIGVs
ZW1lbnRzOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MUEFSRU4sICdVbmlvblR5cGUgc2hv
dWxkIHN0YXJ0IHdpdGggKCcpOworICAgICAgICAgICAgZWxlbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAgICAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHBy
ZXNzaW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJQQVJF
TikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLlBJUEUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUlBBUkVOLCAn
VW5pb25UeXBlIHNob3VsZCBlbmQgd2l0aCApJyk7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsCisgICAgICAgICAgICAgICAgZWxl
bWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
QXJyYXlUeXBlIDo9ICdbJyBFbGVtZW50VHlwZUxpc3QgJ10nCisgICAgICAgIC8vCisgICAgICAg
IC8vIEVsZW1lbnRUeXBlTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+CisgICAgICAg
IC8vICB8IFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICB8ICcuLi4nIFR5cGVFeHByZXNzaW9u
CisgICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uICcsJyBFbGVtZW50VHlwZUxpc3QKKyAgICAg
ICAgZnVuY3Rpb24gcGFyc2VBcnJheVR5cGUoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHM7
CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSywgJ0FycmF5VHlwZSBzaG91bGQgc3Rh
cnQgd2l0aCBbJyk7CisgICAgICAgICAgICBlbGVtZW50cyA9IFtdOworICAgICAgICAgICAgd2hp
bGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4g
PT09IFRva2VuLlJFU1QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNU
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBl
eHByZXNzaW9uOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5S
QlJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUkJS
QUNLKTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LkFycmF5VHlwZSwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFtZSgpIHsK
KyAgICAgICAgICAgIHZhciB2ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLk5BTUUgfHwgdG9rZW4gPT09IFRva2VuLlNUUklORykgeworICAgICAgICAgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBjb25z
dW1lKFRva2VuLk5VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmllbGRUeXBlIDo9CisgICAgICAgIC8vICAgICBG
aWVsZE5hbWUKKyAgICAgICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Npb24KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRmllbGROYW1lIDo9CisgICAgICAgIC8vICAgICBOYW1lRXhw
cmVzc2lvbgorICAgICAgICAvLyAgIHwgU3RyaW5nTGl0ZXJhbAorICAgICAgICAvLyAgIHwgTnVt
YmVyTGl0ZXJhbAorICAgICAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyCisgICAgICAgIGZ1
bmN0aW9uIHBhcnNlRmllbGRUeXBlKCkgeworICAgICAgICAgICAgdmFyIGtleTsKKworICAgICAg
ICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
RmllbGRUeXBlLAorICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5GaWVsZFR5cGUsCisgICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAgICAgICAg
ICAgICAgdmFsdWU6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9JworICAgICAgICAvLworICAgICAg
ICAvLyBGaWVsZFR5cGVMaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAgICAgICAg
Ly8gICB8IEZpZWxkVHlwZQorICAgICAgICAvLyAgIHwgRmllbGRUeXBlICcsJyBGaWVsZFR5cGVM
aXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHsKKyAgICAgICAgICAgIHZh
ciBmaWVsZHM7CisKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNFLCAnUmVjb3JkVHlw
ZSBzaG91bGQgc3RhcnQgd2l0aCB7Jyk7CisgICAgICAgICAgICBmaWVsZHMgPSBbXTsKKyAgICAg
ICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25z
dW1lKFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgZmll
bGRzLnB1c2gocGFyc2VGaWVsZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tl
biAhPT0gVG9rZW4uUkJSQUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9r
ZW4uQ09NTUEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDRSk7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZWNvcmRUeXBlLAorICAg
ICAgICAgICAgICAgIGZpZWxkczogZmllbGRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZh
ciBuYW1lID0gdmFsdWU7CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgLy8gVHlwZUV4cHJlc3Npb25MaXN0IDo9CisgICAgICAgIC8vICAgICBUb3BM
ZXZlbFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCBUb3BMZXZlbFR5cGVFeHByZXNzaW9u
ICcsJyBUeXBlRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhwcmVz
c2lvbkxpc3QoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKworICAgICAgICAg
ICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTsKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiA9
PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTsK
KyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VHlwZU5hbWUgOj0KKyAgICAgICAgLy8gICAgIE5hbWVFeHByZXNzaW9uCisgICAgICAgIC8vICAg
fCBOYW1lRXhwcmVzc2lvbiBUeXBlQXBwbGljYXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VHlwZUFwcGxpY2F0aW9uIDo9CisgICAgICAgIC8vICAgICAnLjwnIFR5cGVFeHByZXNzaW9uTGlz
dCAnPicKKyAgICAgICAgLy8gICB8ICc8JyBUeXBlRXhwcmVzc2lvbkxpc3QgJz4nICAgLy8gdGhp
cyBpcyBleHRlbnNpb24gb2YgZG9jdHJpbmUKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlTmFt
ZSgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBhcHBsaWNhdGlvbnM7CisKKyAgICAgICAgICAg
IGV4cHIgPSBwYXJzZU5hbWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09
IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHsKKyAgICAgICAgICAgICAgICBu
ZXh0KCk7CisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zID0gcGFyc2VUeXBlRXhwcmVzc2lv
bkxpc3QoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UeXBlQXBwbGlj
YXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAg
ICAgICAgICAgIGFwcGxpY2F0aW9uczogYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmVzdWx0VHlwZSA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+CisgICAgICAg
IC8vICAgfCAnOicgdm9pZAorICAgICAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9uCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEJORiBpcyBhYm92ZQorICAgICAgICAvLyBidXQsIHdlIHJlbW92
ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6Q09MT04K
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VSZXN1bHRUeXBlKCkgeworICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5DT0xPTiwgJ1Jlc3VsdFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggOicpOworICAgICAg
ICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbAorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBl
RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgOj0K
KyAgICAgICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBOb25SZXN0
UGFyYW1ldGVyc1R5cGUKKyAgICAgICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlwZSAnLCcg
UmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5
cGUgOj0KKyAgICAgICAgLy8gICAgICcuLi4nCisgICAgICAgIC8vICAgICAnLi4uJyBJZGVudGlm
aWVyCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vblJlc3RQYXJhbWV0ZXJzVHlwZSA6PQorICAg
ICAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBlCisgICAg
ICAgIC8vICAgfCBQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBPcHRpb25hbFBhcmFtZXRl
cnNUeXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUgOj0K
KyAgICAgICAgLy8gICAgIE9wdGlvbmFsUGFyYW1ldGVyVHlwZQorICAgICAgICAvLyAgIHwgT3B0
aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlCisgICAgICAgIC8vCisg
ICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyVHlwZSA6PSBQYXJhbWV0ZXJUeXBlPQorICAgICAg
ICAvLworICAgICAgICAvLyBQYXJhbWV0ZXJUeXBlIDo9IFR5cGVFeHByZXNzaW9uIHwgSWRlbnRp
ZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWRlbnRpZmll
ciBpcyAibmV3IiBvciAidGhpcyIKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzVHlw
ZSgpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwgbm9ybWFsID0gdHJ1ZSwgZXhwciwg
cmVzdCA9IGZhbHNlOworCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJQQVJF
TikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKFRva2VuLlJFU1QpOworICAgICAgICAgICAgICAgICAgICByZXN0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5OYW1lRXhw
cmVzc2lvbiAmJiB0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgY29u
c3VtZShUb2tlbi5DT0xPTik7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUGFyYW1ldGVyVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVR
VUFMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwpOworICAgICAg
ICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4Lk9wdGlvbmFsVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4
cHIKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0
ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocmVzdCkgeworICAgICAgICAgICAgICAgICAgICBleHByID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChleHByKTsKKyAg
ICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAgICAgICAgICAg
ICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICAv
LyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGUKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb25TaWduYXR1cmVUeXBlIDo9CisgICAgICAgIC8vICAg
fCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGUKKyAgICAgICAgLy8gICB8IFR5cGVQ
YXJhbWV0ZXJzICcoJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICAvLyAg
IHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5hbWUgJyknIFJlc3VsdFR5cGUK
KyAgICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcs
JyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUZ1
bmN0aW9uVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBpc05ldywgdGhpc0JpbmRpbmcsIHBhcmFt
cywgcmVzdWx0LCBmblR5cGU7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IFRva2VuLk5B
TUUgJiYgdmFsdWUgPT09ICdmdW5jdGlvbicsICdGdW5jdGlvblR5cGUgc2hvdWxkIHN0YXJ0IHdp
dGggXCdmdW5jdGlvblwnJyk7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworCisg
ICAgICAgICAgICAvLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBpcyBub3QgaW1wbGVtZW50aW5n
IFR5cGVQYXJhbWV0ZXJzLgorICAgICAgICAgICAgLy8gU28gd2UgZG8gbm90LiBpZiB3ZSBkb24n
dCBnZXQgJygnLCB3ZSBzZWUgaXQgYXMgZXJyb3IuCisgICAgICAgICAgICBleHBlY3QoVG9rZW4u
TFBBUkVOKTsKKworICAgICAgICAgICAgaXNOZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHBhcmFt
cyA9IFtdOworICAgICAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsOworICAgICAgICAgICAgaWYg
KHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICAvLyBQYXJhbWV0ZXJz
VHlwZSBvciAndGhpcycKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJ3RoaXMnIHx8IHZhbHVlID09
PSAnbmV3JykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoaXMnIG9yICduZXcnCisgICAg
ICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uCisg
ICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gdmFsdWUgPT09ICduZXcnOworICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
VG9rZW4uQ09MT04pOworICAgICAgICAgICAgICAgICAgICB0aGlzQmluZGluZyA9IHBhcnNlVHlw
ZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUlBBUkVOKTsKKworICAg
ICAgICAgICAgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
Q09MT04pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJlc3VsdFR5cGUoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm5UeXBlID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5GdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMs
CisgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBpZiAodGhpc0JpbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcg
bnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBmblR5cGVb
J3RoaXMnXSA9IHRoaXNCaW5kaW5nOworICAgICAgICAgICAgICAgIGlmIChpc05ldykgeworICAg
ICAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm5UeXBlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQmFzaWNUeXBlRXhwcmVzc2lvbiA6PQorICAgICAgICAvLyAgICAgJyonCisg
ICAgICAgIC8vICAgfCAnbnVsbCcKKyAgICAgICAgLy8gICB8ICd1bmRlZmluZWQnCisgICAgICAg
IC8vICAgfCBUeXBlTmFtZQorICAgICAgICAvLyAgIHwgRnVuY3Rpb25UeXBlCisgICAgICAgIC8v
ICAgfCBVbmlvblR5cGUKKyAgICAgICAgLy8gICB8IFJlY29yZFR5cGUKKyAgICAgICAgLy8gICB8
IEFycmF5VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSB7
CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgICAgIGNhc2UgVG9rZW4uU1RBUjoKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRv
a2VuLlNUQVIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5BbGxMaXRlcmFsCisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgY2FzZSBUb2tlbi5MUEFSRU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVW5pb25U
eXBlKCk7CisKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOgorICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUFycmF5VHlwZSgpOworCisgICAgICAgICAgICBjYXNlIFRva2VuLkxCUkFD
RToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7CisKKyAgICAgICAg
ICAgIGNhc2UgVG9rZW4uTkFNRToKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdudWxs
JykgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
Lk51bGxMaXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuZGVmaW5lZExpdGVy
YWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0ID0gQ29udGV4dC5zYXZlKCk7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlTmFtZSgpOworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFR5cGVFeHByZXNzaW9uIDo9Cisg
ICAgICAgIC8vICAgICBCYXNpY1R5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCAnPycgQmFz
aWNUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgJyEnIEJhc2ljVHlwZUV4cHJlc3Npb24K
KyAgICAgICAgLy8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJz8nCisgICAgICAgIC8vICAgfCBC
YXNpY1R5cGVFeHByZXNzaW9uICchJworICAgICAgICAvLyAgIHwgJz8nCisgICAgICAgIC8vICAg
fCBCYXNpY1R5cGVFeHByZXNzaW9uICdbXScKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhw
cmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZhciBleHByOworCisgICAgICAgICAgICBpZiAodG9r
ZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5R
VUVTVElPTik7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSB8fCB0
b2tlbiA9PT0gVG9rZW4uRVFVQUwgfHwgdG9rZW4gPT09IFRva2VuLlJCUkFDRSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJQQVJFTiB8fCB0b2tlbiA9PT0gVG9r
ZW4uUElQRSB8fCB0b2tlbiA9PT0gVG9rZW4uRU9GIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVMaXRlcmFsCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lv
bigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcp
IHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5
cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVz
c2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0gcGFyc2VCYXNpY1R5cGVF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5cGUsCisg
ICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAgICAgICAgICAg
IHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBmYWxz
ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uTEJSQUNLKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5M
QlJBQ0spOworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkJSQUNLLCAnZXhwZWN0ZWQg
YW4gYXJyYXktc3R5bGUgdHlwZSBkZWNsYXJhdGlvbiAoJyArIHZhbHVlICsgJ1tdKScpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5U
eXBlQXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6ICdBcnJheScKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl0KKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRvcExldmVsVHlwZUV4cHJlc3Npb24gOj0KKyAgICAgICAgLy8gICAgICBU
eXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgICB8IFR5cGVVbmlvbkxpc3QKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lv
biwgbm90IEVTNAorICAgICAgICAvLyBsaWtlLAorICAgICAgICAvLyAgIHsgbnVtYmVyIHwgc3Ry
aW5nIH0KKyAgICAgICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRlIGl0IGFz
CisgICAgICAgIC8vICAgeyAobnVtYmVyfHN0cmluZykgfQorICAgICAgICBmdW5jdGlvbiBwYXJz
ZVRvcCgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBlbGVtZW50czsKKworICAgICAgICAgICAg
ZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0g
VG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbGVtZW50cyA9IFsgZXhwciBdOworICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5QSVBFKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguVW5pb25UeXBlLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50
cworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVG9w
UGFyYW1UeXBlKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVT
VCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlJlc3RUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZVRv
cCgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXhw
ciA9IHBhcnNlVG9wKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVRVUFMKSB7
CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9wdGlvbmFsVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIg
ZXhwcjsKKworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0g
c291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZp
b3VzID0gMDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7CisK
KyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1UeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIgZXhwcjsKKworICAg
ICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0
aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZpb3VzID0gMDsKKwor
ICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wUGFyYW1UeXBlKCk7CisKKyAg
ICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAg
ICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN0
cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHsKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQsIGksIGl6OworCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICc/JzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50
YXguQWxsTGl0ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnKic7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFsOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9ICdudWxsJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDoKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
J3ZvaWQnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRh
eC5VbmlvblR5cGU6CisgICAgICAgICAgICAgICAgaWYgKCF0b3BMZXZlbCkgeworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSAnKCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5l
bGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9
PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgh
dG9wTGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3lu
dGF4LkFycmF5VHlwZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnWyc7CisgICAgICAgICAg
ICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5lbGVt
ZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBp
eikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAn
LCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAnXSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgU3ludGF4LlJlY29yZFR5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ3sn
OworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5maWVsZHMubGVuZ3RoOyBp
IDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1w
bChub2RlLmZpZWxkc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3Qg
PyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZToKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlLmtleSArIChj
b21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUudmFsdWUsIGNvbXBhY3Qp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG5vZGUua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25UeXBlOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXBhY3QgPyAnZnVuY3Rpb24oJyA6ICdmdW5jdGlvbiAoJzsKKworICAgICAgICAg
ICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVb
J25ldyddKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAn
bmV3OicgOiAnbmV3OiAnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICd0aGlzOicgOiAndGhpczogJyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
c3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0g
bm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsKKwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5yZXN1
bHQsIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBTeW50YXguUGFyYW1ldGVyVHlwZToKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBub2RlLm5hbWUgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5
SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXN0VHlwZToKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSAnLi4uJzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwg
Y29tcGFjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5Ob25OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUucHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICchJyArIHN0
cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUu
ZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnISc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5PcHRpb25hbFR5cGU6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNv
bXBhY3QpICsgJz0nOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFN5bnRheC5OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICc/JyArIHN0cmluZ2lmeUltcGwobm9kZS5l
eHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFj
dCkgKyAnPyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBub2RlLm5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnLjwnOworICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5hcHBsaWNhdGlvbnMubGVuZ3RoOyBpIDwgaXo7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2Rl
LmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3Qg
PyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPic7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignVW5rbm93
biB0eXBlICcgKyBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUs
IG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBvcHRpb25zID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
c3RyaW5naWZ5SW1wbChub2RlLCBvcHRpb25zLmNvbXBhY3QsIG9wdGlvbnMudG9wTGV2ZWwpOwor
ICAgICAgICB9CisKKyAgICAgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSBwYXJzZVR5cGU7CisgICAg
ICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSBwYXJzZVBhcmFtVHlwZTsKKyAgICAgICAgZXhw
b3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7CisgICAgICAgIGV4cG9ydHMuU3ludGF4ID0gU3lu
dGF4OworICAgIH0odHlwZWQgPSB7fSkpOworCisgICAgLy8gSlNEb2MgVGFnIFBhcnNlcgorCisg
ICAgKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgICAgIHZhciBSdWxlcywKKyAgICAgICAgICAg
IGluZGV4LAorICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgIGxlbmd0aCwKKyAg
ICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIHJlY292ZXJhYmxlLAorICAgICAgICAgICAg
c2xvcHB5LAorICAgICAgICAgICAgc3RyaWN0OworCisgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2Uo
KSB7CisgICAgICAgICAgICB2YXIgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaW5k
ZXggKz0gMTsKKyAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5UaXRsZSgpIHsKKyAg
ICAgICAgICAgIHZhciB0aXRsZSA9ICcnOworICAgICAgICAgICAgLy8gd2FzdGUgJ0AnCisgICAg
ICAgICAgICBhZHZhbmNlKCk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAm
JiBpc0FTQ0lJQWxwaGFudW1lcmljKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
dGl0bGUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
dGl0bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHsKKyAg
ICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4OworCisgICAgICAgICAgICB3
YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIGNoID0gc291cmNlW2xhc3RdOworICAgICAgICAgICAgICAgIGlmIChpc0xp
bmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7
CisgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAod2FpdGluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdAJykg
eworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCArPSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyB0eXBl
IGV4cHJlc3Npb24gbWF5IGhhdmUgbmVzdCBicmFjZSwgc3VjaCBhcywKKyAgICAgICAgLy8geyB7
IG9rOiBzdHJpbmcgfSB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHRoZXJlZm9yZSwgc2Nhbm5p
bmcgdHlwZSBleHByZXNzaW9uIHdpdGggYmFsYW5jaW5nIGJyYWNlcy4KKyAgICAgICAgZnVuY3Rp
b24gcGFyc2VUeXBlKHRpdGxlLCBsYXN0KSB7CisgICAgICAgICAgICB2YXIgY2gsIGJyYWNlLCB0
eXBlLCBkaXJlY3QgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gc2VhcmNoICd7JworICAgICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Qg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGlyZWN0KSB7CisgICAgICAgICAgICAg
ICAgLy8gdHlwZSBleHByZXNzaW9uIHsgaXMgZm91bmQKKyAgICAgICAgICAgICAgICBicmFjZSA9
IDE7CisgICAgICAgICAgICAgICAgdHlwZSA9ICcnOworICAgICAgICAgICAgICAgIHdoaWxlIChp
bmRleCA8IGxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhY2UgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYnJhY2UgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
ID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZSArPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
YnJhY2VzIGlzIG5vdCBiYWxhbmNlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxl
KHRpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVkLnBhcnNlUGFy
YW1UeXBlKHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlZC5wYXJzZVR5cGUodHlwZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAo
ZTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZmFpbGVkCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcihsYXN0KSB7CisgICAgICAgICAg
ICB2YXIgaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBsYXN0ICYmIGlzSWRlbnRpZmllclBhcnQoc291cmNlW2luZGV4XSkpIHsKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc2tpcFdoaXRlU3BhY2UobGFzdCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFz
dCAmJiAoaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pIHx8IGlzTGluZVRlcm1pbmF0b3Ioc291
cmNlW2luZGV4XSkpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lKGxhc3QsIGFsbG93QnJh
Y2tldHMsIGFsbG93TmVzdGVkUGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9ICcnLCB1
c2VCcmFja2V0czsKKworICAgICAgICAgICAgc2tpcFdoaXRlU3BhY2UobGFzdCk7CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhbGxvd0JyYWNrZXRzICYmIHNvdXJj
ZVtpbmRleF0gPT09ICdbJykgeworICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5hbWUg
Kz0gc2NhbklkZW50aWZpZXIobGFzdCk7CisKKyAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBh
cmFtcykgeworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VbaW5kZXhdID09PSAnLicpIHsK
KyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnLic7CisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFz
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dXNlQnJhY2tldHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGEgZGVmYXVsdCB2
YWx1ZSBmb3IgdGhpcz8KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJz0n
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1ib2wKKyAg
ICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGFzdCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxhc3QgIHx8IHNv
dXJjZVtpbmRleF0gIT09ICddJykgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZXZlciBm
b3VuZCBhIGNsb3NpbmcgJ10nCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhlIGxhc3QgJ10n
CisgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2tp
cFRvVGFnKCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHNvdXJjZVtp
bmRleF0gIT09ICdAJykgeworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoc291cmNlW2lu
ZGV4XSA9PT0gJ0AnKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gVGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKSB7CisgICAgICAgICAgICB0
aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7
CisgICAgICAgICAgICB0aGlzLl90YWcgPSB7CisgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxl
LAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubGluZU51bWJlcnMpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl90YWcubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9sYXN0ID0gMDsKKyAgICAgICAgICAgIC8vIHNwYWNlIHRvIHNhdmUgc3Bl
Y2lhbCBpbmZvcm1hdGlvbiBmb3IgdGl0bGUgcGFyc2Vycy4KKyAgICAgICAgICAgIHRoaXMuX2V4
dHJhID0geyB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkRXJyb3IoZXJyLCAuLi4pCisg
ICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuYWRkRXJyb3IgPSBmdW5jdGlvbiBhZGRFcnJvcihl
cnJvclRleHQpIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKSwKKyAgICAgICAgICAgICAgICBtc2cgPSBlcnJvclRleHQucmVw
bGFjZSgKKyAgICAgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5n
ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgaWYgKCF0
aGlzLl90YWcuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGFnLmVycm9ycyA9IFtd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IobXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Rh
Zy5lcnJvcnMucHVzaChtc2cpOworICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxlOworICAg
ICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXMKKyAgICAgICAgICAg
IGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlw
ZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJhbVRpdGxl
KHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5h
ZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3RhZy50eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVy
cm9yKGVycm9yLm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgLy8gb3B0aW9uYWwgdHlwZXMKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFz
dCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAv
L0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hlbiB3ZSBo
aXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNl
ci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0
LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7CisgICAgICAgICAg
ICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBu
YW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKGZhbHNl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBh
dGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJz
ZU5hbWVQYXRoKHRydWUpOworICAgICAgICB9OworCisKKyAgICAgICAgVGFnUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYXNzaWduLCBu
YW1lOworCisgICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFtZQorICAg
ICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFy
YW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkpOworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVu
IHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlCisgICAgICAgICAgICAgICAgICAgIC8v
IGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBpbiB3aGlj
aCBjYXNlIGl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQgdGhlIGVu
ZAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiB0
aGlzLl90YWcudHlwZS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHRy
YS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90
YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl90YWcudHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxp
ZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3Rh
Zy5uYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdbJyAm
JiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgb25lCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30gW3NvbWVi
b2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdu
ID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBhc3Np
Z25bMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb3B0aW9u
YWwgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBlLnR5cGUg
IT09ICdPcHRpb25hbFR5cGUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
dGFnLnR5cGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRp
b25hbFR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0
aGlzLl90YWcudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Owor
CisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1bmN0aW9u
IHBhcnNlRGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0cmlt
KHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAgICAgIGlm
IChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgIGlmICgoL14tXHMrLykudGVzdChkZXNj
cmlwdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bi5zdWJzdHJpbmcoMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMu
X3RhZy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUtpbmQgPSBmdW5jdGlvbiBwYXJzZUtpbmQoKSB7CisgICAgICAgICAgICB2YXIga2lu
ZCwga2luZHM7CisgICAgICAgICAgICBraW5kcyA9IHsKKyAgICAgICAgICAgICAgICAnY2xhc3Mn
OiB0cnVlLAorICAgICAgICAgICAgICAgICdjb25zdGFudCc6IHRydWUsCisgICAgICAgICAgICAg
ICAgJ2V2ZW50JzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZXh0ZXJuYWwnOiB0cnVlLAorICAg
ICAgICAgICAgICAgICdmaWxlJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZnVuY3Rpb24nOiB0
cnVlLAorICAgICAgICAgICAgICAgICdtZW1iZXInOiB0cnVlLAorICAgICAgICAgICAgICAgICdt
aXhpbic6IHRydWUsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6IHRydWUsCisgICAgICAgICAg
ICAgICAgJ25hbWVzcGFjZSc6IHRydWUsCisgICAgICAgICAgICAgICAgJ3R5cGVkZWYnOiB0cnVl
CisgICAgICAgICAgICB9OworICAgICAgICAgICAga2luZCA9IHRyaW0oc2xpY2VTb3VyY2Uoc291
cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdGhpcy5fdGFnLmtpbmQgPSBr
aW5kOworICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShraW5kcywga2luZCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQga2luZCBuYW1lIFwnJTBc
JycsIGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0gZnVuY3Rp
b24gcGFyc2VBY2Nlc3MoKSB7CisgICAgICAgICAgICB2YXIgYWNjZXNzOworICAgICAgICAgICAg
YWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7Cisg
ICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzOworICAgICAgICAgICAgaWYgKGFj
Y2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNjZXNzICE9
PSAncHVibGljJykgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxp
ZCBhY2Nlc3MgbmFtZSBcJyUwXCcnLCBhY2Nlc3MpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBl
LnBhcnNlVmFyaWF0aW9uID0gZnVuY3Rpb24gcGFyc2VWYXJpYXRpb24oKSB7CisgICAgICAgICAg
ICB2YXIgdmFyaWF0aW9uLCB0ZXh0OworICAgICAgICAgICAgdGV4dCA9IHRyaW0oc2xpY2VTb3Vy
Y2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdmFyaWF0aW9uID0g
cGFyc2VGbG9hdCh0ZXh0LCAxMCk7CisgICAgICAgICAgICB0aGlzLl90YWcudmFyaWF0aW9uID0g
dmFyaWF0aW9uOworICAgICAgICAgICAgaWYgKGlzTmFOKHZhcmlhdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgdmFyaWF0aW9uIFwnJTBcJycsIHRl
eHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVuc3VyZUVuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciBzaG91bGRCZUVtcHR5ID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2Us
IGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQmVFbXB0eSkgewor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignVW5rbm93biBjb250ZW50IFwnJTBc
JycsIHNob3VsZEJlRW1wdHkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxvZ3VlID0g
ZnVuY3Rpb24gZXBpbG9ndWUoKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247CisKKyAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uOworICAgICAgICAg
ICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvbgorICAgICAgICAgICAg
aWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYmIGRlc2Ny
aXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lOworICAgICAgICAgICAgICAgIHRo
aXMuX3RhZy5uYW1lID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgaWYgKCFzbG9wcHkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGlu
dmFsaWQgdGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBSdWxl
cyA9IHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nlc3MuaHRt
bAorICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSwKKyAgICAgICAgICAgIC8v
IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sCisgICAgICAgICAgICAnYWxpYXMn
OiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8v
dXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbAorICAgICAgICAgICAgJ2F1Z21lbnRzJzog
WydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAg
ICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWwKKyAg
ICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRp
b25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAnY2xhc3MnOiBbJ3Bh
cnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAg
ICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5odG1sCisg
ICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25h
bCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFn
cy1kZXByZWNhdGVkLmh0bWwKKyAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJzZURlc2Ny
aXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZ2xvYmFs
Lmh0bWwKKyAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAg
Ly8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWwKKyAgICAgICAgICAgICdpbm5l
cic6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3Rh
Z3MtaW5zdGFuY2UuaHRtbAorICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVFbmQnXSwK
KyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWwKKyAgICAg
ICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1taXhlcy5odG1sCisgICAgICAgICAgICAnbWl4ZXMnOiBbJ3BhcnNlTmFt
ZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3MtbWl4aW4uaHRtbAorICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQYXRoT3B0
aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlwZScsICdw
YXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdtZXRob2QnOiBb
J3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbAorICAgICAgICAgICAgJ21vZHVsZSc6
IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAg
ICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRt
bAorICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVF
bmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1t
ZXRob2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRoT3B0aW9u
YWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICd2YXInOiBbJ3BhcnNlVHlwZScs
ICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sCisgICAgICAgICAgICAnbmFtZSc6IFsn
cGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbAorICAgICAgICAgICAgJ25hbWVzcGFjZSc6IFsn
cGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWwKKyAgICAgICAg
ICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sCisgICAgICAg
ICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAg
ICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sCisgICAgICAg
ICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWwKKyAgICAgICAg
ICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbAorICAgICAgICAgICAgJ3JlcXVpcmVzJzogWydw
YXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpz
ZG9jLm9yZy90YWdzLXNpbmNlLmh0bWwKKyAgICAgICAgICAgICdzaW5jZSc6IFsncGFyc2VEZXNj
cmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN0YXRp
Yy5odG1sCisgICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSwKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWwKKyAgICAgICAgICAgICdz
dW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sCisgICAgICAgICAgICAndGhpcyc6IFsncGFyc2VOYW1l
UGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcv
dGFncy10b2RvLmh0bWwKKyAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0aW9uJ10s
CisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmFyaWF0aW9uLmh0bWwK
KyAgICAgICAgICAgICd2YXJpYXRpb24nOiBbJ3BhcnNlVmFyaWF0aW9uJ10sCisgICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmVyc2lvbi5odG1sCisgICAgICAgICAgICAn
dmVyc2lvbic6IFsncGFyc2VEZXNjcmlwdGlvbiddCisgICAgICAgIH07CisKKyAgICAgICAgVGFn
UGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkgeworICAgICAgICAgICAg
dmFyIGksIGl6LCBzZXF1ZW5jZXMsIG1ldGhvZDsKKworICAgICAgICAgICAgLy8gZW1wdHkgdGl0
bGUKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGl0bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0aXRsZScpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU2VlayB0byBjb250ZW50IGxhc3QgaW5kZXguCisgICAgICAgICAg
ICB0aGlzLl9sYXN0ID0gc2Vla0NvbnRlbnQodGhpcy5fdGl0bGUpOworCisgICAgICAgICAgICBp
ZiAoaGFzT3duUHJvcGVydHkoUnVsZXMsIHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAg
IHNlcXVlbmNlcyA9IFJ1bGVzW3RoaXMuX3RpdGxlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBzZXF1ZW5jZXMKKyAgICAgICAgICAgICAgICBzZXF1
ZW5jZXMgPSBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWUnLCAncGFyc2VEZXNjcmlwdGlvbicsICdl
cGlsb2d1ZSddOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9
IHNlcXVlbmNlcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgbWV0aG9k
ID0gc2VxdWVuY2VzW2ldOworICAgICAgICAgICAgICAgIGlmICghdGhpc1ttZXRob2RdKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIGdsb2JhbCBpbmRleCB0byBlbmQgb2Yg
dGhpcyB0YWcuCisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2xhc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGFnOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVGFn
KG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSwgcGFyc2VyOworCisgICAgICAgICAg
ICAvLyBza2lwIHRvIHRhZworICAgICAgICAgICAgaWYgKCFza2lwVG9UYWcoKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBz
Y2FuIHRpdGxlCisgICAgICAgICAgICB0aXRsZSA9IHNjYW5UaXRsZSgpOworCisgICAgICAgICAg
ICAvLyBjb25zdHJ1Y3QgdGFnIHBhcnNlcgorICAgICAgICAgICAgcGFyc2VyID0gbmV3IFRhZ1Bh
cnNlcihvcHRpb25zLCB0aXRsZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBQYXJzZSBKU0RvYworICAgICAg
ICAvLworCisgICAgICAgIGZ1bmN0aW9uIHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJycsIGNoLCBhdEFsbG93ZWQ7CisKKyAgICAgICAgICAg
IGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoYXRBbGxvd2VkICYmIGNoID09PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0
b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChhdEFsbG93ZWQgJiYgIWlzV2hpdGVTcGFjZShjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRyaW0oZGVzY3JpcHRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykgeworICAgICAgICAgICAgdmFy
IHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBpejsKKwor
ICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7CisgICAgICAg
ICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFncworICAgICAgICAgICAgaWYg
KG9wdGlvbnMudGFncykgeworICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlvbnMudGFn
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9OworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7IGkgPCBp
ejsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGFn
c1tpXSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVz
dGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ0ludmFs
aWQgInRhZ3MiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkICJ0YWdzIiBwYXJhbWV0
ZXI6ICcgKyBvcHRpb25zLnRhZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAgICAgICAg
ICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgcmVjb3ZlcmFibGUgPSBvcHRp
b25zLnJlY292ZXJhYmxlOworICAgICAgICAgICAgc2xvcHB5ID0gb3B0aW9ucy5zbG9wcHk7Cisg
ICAgICAgICAgICBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsKKworICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSBzY2FuSlNEb2NEZXNjcmlwdGlvbigpOworCisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHRhZyA9IHBhcnNlVGFnKG9wdGlvbnMpOworICAgICAgICAg
ICAgICAgIGlmICghdGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWludGVyZXN0aW5nVGFncyB8fCBpbnRlcmVz
dGluZ1RhZ3MuaGFzT3duUHJvcGVydHkodGFnLnRpdGxlKSkgeworICAgICAgICAgICAgICAgICAg
ICB0YWdzLnB1c2godGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgIHRhZ3M6IHRhZ3MKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICAgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworICAgIH0oanNkb2MgPSB7fSkpOwor
CisgICAgZXhwb3J0cy52ZXJzaW9uID0gVkVSU0lPTjsKKyAgICBleHBvcnRzLnBhcnNlID0ganNk
b2MucGFyc2U7CisgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7CisgICAg
ZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlOworICAgIGV4cG9y
dHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7CisgICAgZXhwb3J0cy5TeW50YXggPSBz
aGFsbG93Q29weSh0eXBlZC5TeW50YXgpOworICAgIGV4cG9ydHMuRXJyb3IgPSBEb2N0cmluZUVy
cm9yOworICAgIGV4cG9ydHMudHlwZSA9IHsKKyAgICAgICAgU3ludGF4OiBleHBvcnRzLlN5bnRh
eCwKKyAgICAgICAgcGFyc2VUeXBlOiB0eXBlZC5wYXJzZVR5cGUsCisgICAgICAgIHBhcnNlUGFy
YW1UeXBlOiB0eXBlZC5wYXJzZVBhcmFtVHlwZSwKKyAgICAgICAgc3RyaW5naWZ5OiB0eXBlZC5z
dHJpbmdpZnkKKyAgICB9OworfSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAoZG9j
dHJpbmUgPSB7fSkgOiBleHBvcnRzKSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAg
OiAqLworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qCisg
IENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggU2V2aWxsZSA8aGlAYWxleGFuZGVyc2V2
aWxsZS5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qKgorICog
RXNjb3BlICg8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2VzY29wZSI+
ZXNjb3BlPC9hPikgaXMgYW4gPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtMjYyLmh0bSI+RUNNQVNjcmlwdDwv
YT4KKyAqIHNjb3BlIGFuYWx5emVyIGV4dHJhY3RlZCBmcm9tIHRoZSA8YQorICogaHJlZj0iaHR0
cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9lc21hbmdsZSI+ZXNtYW5nbGUgcHJvamVjdDwv
YS8+LgorICogPHA+CisgKiA8ZW0+ZXNjb3BlPC9lbT4gZmluZHMgbGV4aWNhbCBzY29wZXMgaW4g
YSBzb3VyY2UgcHJvZ3JhbSwgaS5lLiBhcmVhcyBvZiB0aGF0CisgKiBwcm9ncmFtIHdoZXJlIGRp
ZmZlcmVudCBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBpZGVudGlmaWVyIHJlZmVyIHRvIHRoZSBz
YW1lCisgKiB2YXJpYWJsZS4gV2l0aCBlYWNoIHNjb3BlIHRoZSBjb250YWluZWQgdmFyaWFibGVz
IGFyZSBjb2xsZWN0ZWQsIGFuZCBlYWNoCisgKiBpZGVudGlmaWVyIHJlZmVyZW5jZSBpbiBjb2Rl
IGlzIGxpbmtlZCB0byBpdHMgY29ycmVzcG9uZGluZyB2YXJpYWJsZSAoaWYKKyAqIHBvc3NpYmxl
KS4KKyAqIDxwPgorICogPGVtPmVzY29wZTwvZW0+IHdvcmtzIG9uIGEgc3ludGF4IHRyZWUgb2Yg
dGhlIHBhcnNlZCBzb3VyY2UgY29kZSB3aGljaCBoYXMKKyAqIHRvIGFkaGVyZSB0byB0aGUgPGEK
KyAqIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvU3BpZGVy
TW9ua2V5L1BhcnNlcl9BUEkiPgorICogTW96aWxsYSBQYXJzZXIgQVBJPC9hPi4gRS5nLiA8YSBo
cmVmPSJodHRwOi8vZXNwcmltYS5vcmciPmVzcHJpbWE8L2E+IGlzIGEgcGFyc2VyCisgKiB0aGF0
IHByb2R1Y2VzIHN1Y2ggc3ludGF4IHRyZWVzLgorICogPHA+CisgKiBUaGUgbWFpbiBpbnRlcmZh
Y2UgaXMgdGhlIHtAbGluayBhbmFseXplfSBmdW5jdGlvbi4KKyAqIEBtb2R1bGUKKyAqLworCisv
KmpzbGludCBiaXR3aXNlOnRydWUgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRy
dWUsIHJlcXVpcmU6dHJ1ZSovCisoZnVuY3Rpb24gKGZhY3RvcnksIGdsb2JhbCkgeworICAgICd1
c2Ugc3RyaWN0JzsKKworICAgIGZ1bmN0aW9uIG5hbWVzcGFjZShzdHIsIG9iaikgeworICAgICAg
ICB2YXIgaSwgaXosIG5hbWVzLCBuYW1lOworICAgICAgICBuYW1lcyA9IHN0ci5zcGxpdCgnLicp
OworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5hbWVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsK
KyAgICAgICAgICAgIG5hbWUgPSBuYW1lc1tpXTsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3du
UHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvYmogPSBvYmpbbmFtZV07CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iaiA9IChvYmpbbmFtZV0gPSB7fSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisK
KyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQs
IENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gYW5kIHBsYWluIGJyb3dzZXIgbG9hZGluZywKKyAg
ICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAg
ICAgIGRlZmluZSgnZXNjb3BlJywgWydleHBvcnRzJywgJ2VzdHJhdmVyc2UnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIGVzdHJhdmVyc2UpIHsKKyAgICAgICAgICAgIGZhY3RvcnkoZXhwb3J0cywgZ2xv
YmFsLCBlc3RyYXZlcnNlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
b3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzLCBnbG9iYWws
IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeShu
YW1lc3BhY2UoJ2VzY29wZScsIGdsb2JhbCksIGdsb2JhbCwgZ2xvYmFsLmVzdHJhdmVyc2UpOwor
ICAgIH0KK30oZnVuY3Rpb24gKGV4cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSkgeworICAgICd1
c2Ugc3RyaWN0JzsKKworICAgIHZhciBTeW50YXgsCisgICAgICAgIE1hcCwKKyAgICAgICAgY3Vy
cmVudFNjb3BlLAorICAgICAgICBnbG9iYWxTY29wZSwKKyAgICAgICAgc2NvcGVzLAorICAgICAg
ICBvcHRpb25zOworCisgICAgU3ludGF4ID0gZXN0cmF2ZXJzZS5TeW50YXg7CisKKyAgICBpZiAo
dHlwZW9mIGdsb2JhbC5NYXAgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8vIEVTNiBNYXAK
KyAgICAgICAgTWFwID0gZ2xvYmFsLk1hcDsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXAgPSBm
dW5jdGlvbiBNYXAoKSB7CisgICAgICAgICAgICB0aGlzLl9fZGF0YSA9IHt9OworICAgICAgICB9
OworCisgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTWFwR2V0KGtleSkgewor
ICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRh
Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2Rh
dGFba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBNYXBIYXMo
a2V5KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fX2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KTsKKyAgICAgICAgfTsKKworICAgICAgICBN
YXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIE1hcFNldChrZXksIHZhbCkgeworICAgICAgICAg
ICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgdGhpcy5fX2RhdGFba2V5XSA9IHZhbDsK
KyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9u
IE1hcERlbGV0ZShrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAgICAgICAg
ICAgIHJldHVybiBkZWxldGUgdGhpcy5fX2RhdGFba2V5XTsKKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZCwgdGV4dCkgeworICAgICAgICBpZiAoIWNvbmQpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKCkgeworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgb3B0aW1pc3RpYzogZmFsc2UsCisgICAgICAgICAgICBkaXJlY3RpdmU6IGZhbHNlCisg
ICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlRGVlcGx5KHRhcmdldCwgb3Zl
cnJpZGUpIHsKKyAgICAgICAgdmFyIGtleSwgdmFsOworCisgICAgICAgIGZ1bmN0aW9uIGlzSGFz
aE9iamVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGFyZ2V0ID09PSAn
b2JqZWN0JyAmJiB0YXJnZXQgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh0YXJnZXQgaW5zdGFuY2Vv
ZiBSZWdFeHApOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChrZXkgaW4gb3ZlcnJpZGUpIHsK
KyAgICAgICAgICAgIGlmIChvdmVycmlkZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAg
ICAgICAgICAgdmFsID0gb3ZlcnJpZGVba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIYXNo
T2JqZWN0KHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9iamVjdCh0YXJn
ZXRba2V5XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURlZXBseSh0YXJnZXRb
a2V5XSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFtrZXldID0gdXBkYXRlRGVlcGx5KHt9LCB2YWwpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0W2tleV0gPSB2YWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQSBSZWZlcmVuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIGFuIGlkZW50
aWZpZXIgaW4gY29kZS4KKyAgICAgKiBAY2xhc3MgUmVmZXJlbmNlCisgICAgICovCisgICAgZnVu
Y3Rpb24gUmVmZXJlbmNlKGlkZW50LCBzY29wZSwgZmxhZywgd3JpdGVFeHByLCBtYXliZUltcGxp
Y2l0R2xvYmFsKSB7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogSWRlbnRpZmllciBzeW50YXgg
bm9kZS4KKyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNJZGVudGlmaWVyfSBSZWZlcmVuY2Uj
aWRlbnRpZmllciAKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50
OworICAgICAgICAvKiogCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5jbG9zaW5nIFNj
b3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gUmVmZXJlbmNlI2Zyb20gCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmZyb20gPSBzY29wZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb21lcyBmcm9tIGEgZHluYW1pYyBzY29wZSAoc3VjaCBh
cyAnZXZhbCcsCisgICAgICAgICAqICd3aXRoJywgZXRjLiksIGFuZCBtYXkgYmUgdHJhcHBlZCBi
eSBkeW5hbWljIHNjb3Blcy4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVmZXJlbmNl
I3RhaW50ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZhbHNlOworICAg
ICAgICAvKiogCisgICAgICAgICAqIFRoZSB2YXJpYWJsZSB0aGlzIHJlZmVyZW5jZSBpcyByZXNv
bHZlZCB3aXRoLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZX0gUmVmZXJlbmNlI3Jlc29s
dmVkIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZXNvbHZlZCA9IG51bGw7CisgICAgICAg
IC8qKiAKKyAgICAgICAgICogVGhlIHJlYWQtd3JpdGUgbW9kZSBvZiB0aGUgcmVmZXJlbmNlLiAo
VmFsdWUgaXMgb25lIG9mIHtAbGluaworICAgICAgICAgKiBSZWZlcmVuY2UuUkVBRH0sIHtAbGlu
ayBSZWZlcmVuY2UuUld9LCB7QGxpbmsgUmVmZXJlbmNlLldSSVRFfSkuCisgICAgICAgICAqIEBt
ZW1iZXIge251bWJlcn0gUmVmZXJlbmNlI2ZsYWcgCisgICAgICAgICAqIEBwcml2YXRlCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICBpZiAodGhpcy5pc1dy
aXRlKCkpIHsKKyAgICAgICAgICAgIC8qKiAKKyAgICAgICAgICAgICAqIElmIHJlZmVyZW5jZSBp
cyB3cml0ZWFibGUsIHRoaXMgaXMgdGhlIHRyZWUgYmVpbmcgd3JpdHRlbiB0byBpdC4KKyAgICAg
ICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEjTm9kZX0gUmVmZXJlbmNlI3dyaXRlRXhwciAKKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy53cml0ZUV4cHIgPSB3cml0ZUV4cHI7Cisg
ICAgICAgIH0KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBXaGV0aGVyIHRoZSBSZWZlcmVuY2Ug
bWlnaHQgcmVmZXIgdG8gYSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jv
b2xlYW59IFJlZmVyZW5jZSNfX21heWJlSW1wbGljaXRHbG9iYWwgCisgICAgICAgICAqIEBwcml2
YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCA9IG1h
eWJlSW1wbGljaXRHbG9iYWw7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIEBjb25zdGFudCBS
ZWZlcmVuY2UuUkVBRCAKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIFJlZmVyZW5jZS5S
RUFEID0gMHgxOworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLldSSVRFIAor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLldSSVRFID0gMHgyOworICAg
IC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLlJXIAorICAgICAqIEBwcml2YXRlCisg
ICAgICovCisgICAgUmVmZXJlbmNlLlJXID0gMHgzOworCisgICAgLyoqCisgICAgICogV2hldGhl
ciB0aGUgcmVmZXJlbmNlIGlzIHN0YXRpYy4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1N0
YXRpYworICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnBy
b3RvdHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlzU3RhdGljKCkgeworICAgICAgICByZXR1cm4g
IXRoaXMudGFpbnRlZCAmJiB0aGlzLnJlc29sdmVkICYmIHRoaXMucmVzb2x2ZWQuc2NvcGUuaXNT
dGF0aWMoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNl
IGlzIHdyaXRlYWJsZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1dyaXRlCisgICAgICog
QHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzV3Jp
dGUgPSBmdW5jdGlvbiBpc1dyaXRlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFnICYgUmVm
ZXJlbmNlLldSSVRFOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZl
cmVuY2UgaXMgcmVhZGFibGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkCisgICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlz
UmVhZCA9IGZ1bmN0aW9uIGlzUmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyAmIFJl
ZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZl
cmVuY2UgaXMgcmVhZC1vbmx5LgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZE9ubHkK
KyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5
cGUuaXNSZWFkT25seSA9IGZ1bmN0aW9uIGlzUmVhZE9ubHkoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBX
aGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgd3JpdGUtb25seS4KKyAgICAgKiBAbWV0aG9kIFJlZmVy
ZW5jZSNpc1dyaXRlT25seQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAg
UmVmZXJlbmNlLnByb3RvdHlwZS5pc1dyaXRlT25seSA9IGZ1bmN0aW9uIGlzV3JpdGVPbmx5KCkg
eworICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuV1JJVEU7CisgICAgfTsK
KworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyByZWFkLXdyaXRlLgor
ICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZFdyaXRlCisgICAgICogQHJldHVybiB7Ym9v
bGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzUmVhZFdyaXRlID0gZnVu
Y3Rpb24gaXNSZWFkV3JpdGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcgPT09IFJlZmVy
ZW5jZS5SVzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQSBWYXJpYWJsZSByZXByZXNlbnRz
IGEgbG9jYWxseSBzY29wZWQgaWRlbnRpZmllci4gVGhlc2UgaW5jbHVkZSBhcmd1bWVudHMgdG8K
KyAgICAgKiBmdW5jdGlvbnMuCisgICAgICogQGNsYXNzIFZhcmlhYmxlCisgICAgICovCisgICAg
ZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgLyoqICAKKyAgICAgICAg
ICogVGhlIHZhcmlhYmxlIG5hbWUsIGFzIGdpdmVuIGluIHRoZSBzb3VyY2UgY29kZS4KKyAgICAg
ICAgICogQG1lbWJlciB7U3RyaW5nfSBWYXJpYWJsZSNuYW1lIAorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgZGVm
aW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJsZSAobGlrZSBpbiAndmFyIC4uLicKKyAg
ICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0ZXIpLCBhcyBBU1Qgbm9kZXMuCisgICAg
ICAgICAqIEBtZW1iZXIge2VzcHJpbWEuSWRlbnRpZmllcltdfSBWYXJpYWJsZSNpZGVudGlmaWVy
cworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pZGVudGlmaWVycyA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZXN9IG9mIHRo
aXMgdmFyaWFibGUgKGV4Y2x1ZGluZyBwYXJhbWV0ZXIgZW50cmllcykKKyAgICAgICAgICogaW4g
aXRzIGRlZmluaW5nIHNjb3BlIGFuZCBhbGwgbmVzdGVkIHNjb3Blcy4gRm9yIGRlZmluaW5nCisg
ICAgICAgICAqIG9jY3VycmVuY2VzIG9ubHkgc2VlIHtAbGluayBWYXJpYWJsZSNkZWZzfS4KKyAg
ICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFZhcmlhYmxlI3JlZmVyZW5jZXMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOworCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFyaWFibGUgKGxp
a2UgaW4gJ3ZhciAuLi4nCisgICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFyYW1ldGVyKSwg
YXMgY3VzdG9tIG9iamVjdHMuCisgICAgICAgICAqIEB0eXBlZGVmIHtPYmplY3R9IERlZkVudHJ5
CisgICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBEZWZFbnRyeS50eXBlIC0gdGhlIHR5cGUg
b2YgdGhlIG9jY3VycmVuY2UgKGUuZy4KKyAgICAgICAgICogICAgICAiUGFyYW1ldGVyIiwgIlZh
cmlhYmxlIiwgLi4uKQorICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuSWRlbnRpZmllcn0g
RGVmRW50cnkubmFtZSAtIHRoZSBpZGVudGlmaWVyIEFTVCBub2RlIG9mIHRoZSBvY2N1cnJlbmNl
CisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5Ob2RlfSBEZWZFbnRyeS5ub2RlIC0gdGhl
IGVuY2xvc2luZyBub2RlIG9mIHRoZQorICAgICAgICAgKiAgICAgIGlkZW50aWZpZXIKKyAgICAg
ICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IFtEZWZFbnRyeS5wYXJlbnRdIC0gdGhlIGVu
Y2xvc2luZyBzdGF0ZW1lbnQKKyAgICAgICAgICogICAgICBub2RlIG9mIHRoZSBpZGVudGlmaWVy
CisgICAgICAgICAqIEBtZW1iZXIge0RlZkVudHJ5W119IFZhcmlhYmxlI2RlZnMKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuZGVmcyA9IFtdOworCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEgc3RhY2sgdmFy
aWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFZhcmlhYmxlI3N0YWNrCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnN0YWNrID0gdHJ1ZTsKKyAgICAgICAgLyoqIAorICAgICAg
ICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS4KKyAgICAgICAgICogQG1lbWJl
ciB7U2NvcGV9IFZhcmlhYmxlI3Njb3BlIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zY29w
ZSA9IHNjb3BlOworICAgIH0KKworICAgIFZhcmlhYmxlLkNhdGNoQ2xhdXNlID0gJ0NhdGNoQ2xh
dXNlJzsKKyAgICBWYXJpYWJsZS5QYXJhbWV0ZXIgPSAnUGFyYW1ldGVyJzsKKyAgICBWYXJpYWJs
ZS5GdW5jdGlvbk5hbWUgPSAnRnVuY3Rpb25OYW1lJzsKKyAgICBWYXJpYWJsZS5WYXJpYWJsZSA9
ICdWYXJpYWJsZSc7CisgICAgVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJsZSA9ICdJbXBs
aWNpdEdsb2JhbFZhcmlhYmxlJzsKKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0U2NvcGUoc2NvcGUs
IGJsb2NrKSB7CisgICAgICAgIHZhciBib2R5LCBpLCBpeiwgc3RtdCwgZXhwcjsKKworICAgICAg
ICAvLyBXaGVuIHVwcGVyIHNjb3BlIGlzIGV4aXN0cyBhbmQgc3RyaWN0LCBpbm5lciBzY29wZSBp
cyBhbHNvIHN0cmljdC4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmIHNjb3BlLnVwcGVyLmlz
U3RyaWN0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzY29wZS50eXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBib2R5ID0gYmxv
Y2suYm9keTsKKyAgICAgICAgfSBlbHNlIGlmIChzY29wZS50eXBlID09PSAnZ2xvYmFsJykgewor
ICAgICAgICAgICAgYm9keSA9IGJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aXZl
KSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBp
ejsgKytpKSB7CisgICAgICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RtdC50eXBlICE9PSAnRGlyZWN0aXZlU3RhdGVtZW50JykgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHN0bXQucmF3ID09PSAnInVzZSBzdHJpY3QiJyB8fCBzdG10LnJhdyA9PT0gJ1wndXNlIHN0
cmljdFwnJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAg
ICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoc3RtdC50eXBl
ICE9PSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhwciA9IHN0bXQuZXhw
cmVzc2lvbjsKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBTeW50YXguTGl0ZXJh
bCB8fCB0eXBlb2YgZXhwci52YWx1ZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChleHByLnJh
dyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnJhdyA9PT0gJyJ1c2Ug
c3RyaWN0IicgfHwgZXhwci5yYXcgPT09ICdcJ3VzZSBzdHJpY3RcJycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudmFsdWUgPT09
ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAq
IEBjbGFzcyBTY29wZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNjb3BlKGJsb2NrLCBvcHQpIHsK
KyAgICAgICAgdmFyIHZhcmlhYmxlLCBib2R5OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBP
bmUgb2YgJ2NhdGNoJywgJ3dpdGgnLCAnZnVuY3Rpb24nIG9yICdnbG9iYWwnLgorICAgICAgICAg
KiBAbWVtYmVyIHtTdHJpbmd9IFNjb3BlI3R5cGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dHlwZSA9CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkNhdGNoQ2xhdXNlKSA/
ICdjYXRjaCcgOgorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5XaXRoU3RhdGVt
ZW50KSA/ICd3aXRoJyA6CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LlByb2dy
YW0pID8gJ2dsb2JhbCcgOiAnZnVuY3Rpb24nOworICAgICAgICAgLyoqCisgICAgICAgICAqIFRo
ZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZSwgYXMgPGNvZGU+eyBWYXJp
YWJsZS5uYW1lCisgICAgICAgICAqIDogVmFyaWFibGUgfTwvY29kZT4uCisgICAgICAgICAqIEBt
ZW1iZXIge01hcH0gU2NvcGUjc2V0CisgICAgICAgICAqLworICAgICAgICB0aGlzLnNldCA9IG5l
dyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB0YWludGVkIHZhcmlhYmxlcyBv
ZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5hbWUgOgorICAgICAgICAgKiBib29s
ZWFuIH08L2NvZGU+LgorICAgICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3RhaW50cyAqLwor
ICAgICAgICB0aGlzLnRhaW50cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdlbmVyYWxseSwgdGhyb3VnaCB0aGUgbGV4aWNhbCBzY29waW5nIG9mIEpTIHlvdSBjYW4gYWx3
YXlzIGtub3cKKyAgICAgICAgICogd2hpY2ggdmFyaWFibGUgYW4gaWRlbnRpZmllciBpbiB0aGUg
c291cmNlIGNvZGUgcmVmZXJzIHRvLiBUaGVyZSBhcmUKKyAgICAgICAgICogYSBmZXcgZXhjZXB0
aW9ucyB0byB0aGlzIHJ1bGUuIFdpdGggJ2dsb2JhbCcgYW5kICd3aXRoJyBzY29wZXMgeW91Cisg
ICAgICAgICAqIGNhbiBvbmx5IGRlY2lkZSBhdCBydW50aW1lIHdoaWNoIHZhcmlhYmxlIGEgcmVm
ZXJlbmNlIHJlZmVycyB0by4KKyAgICAgICAgICogTW9yZW92ZXIsIGlmICdldmFsKCknIGlzIHVz
ZWQgaW4gYSBzY29wZSwgaXQgbWlnaHQgaW50cm9kdWNlIG5ldworICAgICAgICAgKiBiaW5kaW5n
cyBpbiB0aGlzIG9yIGl0cyBwcmFyZW50IHNjb3Blcy4KKyAgICAgICAgICogQWxsIHRob3NlIHNj
b3BlcyBhcmUgY29uc2lkZXJlZCAnZHluYW1pYycuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xl
YW59IFNjb3BlI2R5bmFtaWMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZHluYW1pYyA9IHRo
aXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnd2l0aCc7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc2NvcGUtZGVmaW5pbmcgc3ludGF4IG5v
ZGUuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZX0gU2NvcGUjYmxvY2sKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSB0aGF0IGFyZSBub3QgcmVzb2x2
ZWQgd2l0aCB0aGlzIHNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gU2Nv
cGUjdGhyb3VnaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50aHJvdWdoID0gW107CisgICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9cyBvZiB0aGlz
IHNjb3BlLiBJbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAqICdmdW5jdGlvbicgc2NvcGUgdGhp
cyBpbmNsdWRlcyB0aGUgYXV0b21hdGljIGFyZ3VtZW50IDxlbT5hcmd1bWVudHM8L2VtPiBhcwor
ICAgICAgICAgKiBpdHMgZmlyc3QgZWxlbWVudCwgYXMgd2VsbCBhcyBhbGwgZnVydGhlciBmb3Jt
YWwgYXJndW1lbnRzLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZVtdfSBTY29wZSN2YXJp
YWJsZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFyaWFibGVzID0gW107CisgICAgICAg
ICAvKioKKyAgICAgICAgICogQW55IHZhcmlhYmxlIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNl
fSBmb3VuZCBpbiB0aGlzIHNjb3BlLiBUaGlzCisgICAgICAgICAqIGluY2x1ZGVzIG9jY3VycmVu
Y2VzIG9mIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsIGFzIHZhcmlhYmxlcyBmcm9tCisgICAgICAg
ICAqIHBhcmVudCBzY29wZXMgKGluY2x1ZGluZyB0aGUgZ2xvYmFsIHNjb3BlKS4gRm9yIGxvY2Fs
IHZhcmlhYmxlcworICAgICAgICAgKiB0aGlzIGFsc28gaW5jbHVkZXMgZGVmaW5pbmcgb2NjdXJy
ZW5jZXMgKGxpa2UgaW4gYSAndmFyJyBzdGF0ZW1lbnQpLgorICAgICAgICAgKiBJbiBhICdmdW5j
dGlvbicgc2NvcGUgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUK
KyAgICAgICAgICogZm9ybWFsIHBhcmFtZXRlciBpbiB0aGUgcGFyYW1ldGVyIGxpc3QuCisgICAg
ICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29wZSNyZWZlcmVuY2VzCisgICAgICAgICAq
LworICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAgIC8qKgorICAgICAgICAg
KiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V9cyB0aGF0IGFyZSBsZWZ0IHRvIGJlIHJlc29sdmVk
IChpLmUuIHdoaWNoCisgICAgICAgICAqIG5lZWQgdG8gYmUgbGlua2VkIHRvIHRoZSB2YXJpYWJs
ZSB0aGV5IHJlZmVyIHRvKS4gVXNlZCBpbnRlcm5hbGx5IHRvCisgICAgICAgICAqIHJlc29sdmUg
YmluZGluZ3MgZHVyaW5nIHNjb3BlIGFuYWx5c2lzLiBPbiBhIGZpbmFsaXplZCBzY29wZQorICAg
ICAgICAgKiBhbmFseXNpcywgYWxsIHNvcGVzIGhhdmUgPGVtPmxlZnQ8L2VtPiB2YWx1ZSA8c3Ry
b25nPm51bGw8L3N0cm9uZz4uCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29w
ZSNsZWZ0CisgICAgICAgICAqLworICAgICAgICB0aGlzLmxlZnQgPSBbXTsKKyAgICAgICAgIC8q
KgorICAgICAgICAgKiBGb3IgJ2dsb2JhbCcgYW5kICdmdW5jdGlvbicgc2NvcGVzLCB0aGlzIGlz
IGEgc2VsZi1yZWZlcmVuY2UuIEZvcgorICAgICAgICAgKiBvdGhlciBzY29wZSB0eXBlcyB0aGlz
IGlzIHRoZSA8ZW0+dmFyaWFibGVTY29wZTwvZW0+IHZhbHVlIG9mIHRoZQorICAgICAgICAgKiBw
YXJlbnQgc2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN2YXJpYWJsZVNj
b3BlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcmlhYmxlU2NvcGUgPQorICAgICAgICAg
ICAgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnZnVuY3Rpb24nKSA/
IHRoaXMgOiBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZTsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBXaGV0aGVyIHRoaXMgc2NvcGUgaXMgY3JlYXRlZCBieSBhIEZ1bmN0aW9uRXhwcmVzc2lv
bi4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZnVuY3Rpb25FeHByZXNzaW9u
U2NvcGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUg
PSBmYWxzZTsKKyAgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBzY29w
ZSB0aGF0IGNvbnRhaW5zIGFuICdldmFsKCknIGludm9jYXRpb24uCisgICAgICAgICAqIEBtZW1i
ZXIge2Jvb2xlYW59IFNjb3BlI2RpcmVjdENhbGxUb0V2YWxTY29wZQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSBmYWxzZTsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSN0aGlzRm91bmQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMudGhpc0ZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvZHkgPSB0aGlzLnR5
cGUgPT09ICdmdW5jdGlvbicgPyBibG9jay5ib2R5IDogYmxvY2s7CisgICAgICAgIGlmIChvcHQu
bmFtaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9fZGVmaW5lKGJsb2NrLmlkLCB7CisgICAgICAg
ICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgIG5h
bWU6IGJsb2NrLmlkLAorICAgICAgICAgICAgICAgIG5vZGU6IGJsb2NrCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Z1bmN0aW9uJykg
eworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKCdhcmd1bWVudHMnLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhaW50cy5zZXQoJ2FyZ3VtZW50cycsIHRydWUp
OworICAgICAgICAgICAgICAgIHRoaXMuc2V0LnNldCgnYXJndW1lbnRzJywgdmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhw
cmVzc2lvbiAmJiBibG9jay5pZCkgeworICAgICAgICAgICAgICAgIG5ldyBTY29wZShibG9jaywg
eyBuYW1pbmc6IHRydWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAg
LyoqCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHtAbGluayBTY29wZXxzY29w
ZX0uCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN1cHBlcgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51cHBlciA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBXaGV0aGVyICd1c2Ugc3RyaWN0JyBpcyBpbiBlZmZlY3QgaW4gdGhpcyBzY29wZS4KKyAg
ICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjaXNTdHJpY3QKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNTdHJpY3QgPSBpc1N0cmljdFNjb3BlKHRoaXMsIGJsb2NrKTsKKworICAg
ICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbmVzdGVkIHtAbGluayBTY29wZX1zLgorICAg
ICAgICAgKiBAbWVtYmVyIHtTY29wZVtdfSBTY29wZSNjaGlsZFNjb3BlcworICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5jaGlsZFNjb3BlcyA9IFtdOworICAgICAgICBpZiAoY3VycmVudFNjb3Bl
KSB7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUuY2hpbGRTY29wZXMucHVzaCh0aGlzKTsKKyAg
ICAgICAgfQorCisKKyAgICAgICAgLy8gUkFJSQorICAgICAgICBjdXJyZW50U2NvcGUgPSB0aGlz
OworICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZ2xvYmFsJykgeworICAgICAgICAgICAgZ2xv
YmFsU2NvcGUgPSB0aGlzOworICAgICAgICAgICAgZ2xvYmFsU2NvcGUuaW1wbGljaXQgPSB7Cisg
ICAgICAgICAgICAgICAgc2V0OiBuZXcgTWFwKCksCisgICAgICAgICAgICAgICAgdmFyaWFibGVz
OiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBzY29wZXMucHVzaCh0aGlz
KTsKKyAgICB9CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19jbG9zZSA9IGZ1bmN0aW9uIF9fY2xv
c2UoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVmLCBjdXJyZW50LCBub2RlLCBpbXBsaWNpdDsK
KworICAgICAgICAvLyBCZWNhdXNlIGlmIHRoaXMgaXMgZ2xvYmFsIGVudmlyb25tZW50LCB1cHBl
ciBpcyBudWxsCisgICAgICAgIGlmICghdGhpcy5keW5hbWljIHx8IG9wdGlvbnMub3B0aW1pc3Rp
YykgeworICAgICAgICAgICAgLy8gc3RhdGljIHJlc29sdmUKKyAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAg
ICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9fcmVzb2x2
ZShyZWYpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0ZVRvVXBwZXJTY29w
ZShyZWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgImdsb2JhbCIgLyAid2l0aCIgLyAiZnVuY3Rpb24g
d2l0aCBldmFsIiBlbnZpcm9ubWVudAorICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3dp
dGgnKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3Ro
OyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07
CisgICAgICAgICAgICAgICAgICAgIHJlZi50YWludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9
IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IG5vdGlmeSBhbGwgbmFtZXMgYXJlIHRocm91Z2ggdG8gZ2xvYmFsCisgICAgICAgICAgICAgICAg
ICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRo
aXM7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQudGhyb3VnaC5wdXNoKHJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC51cHBlcjsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcpIHsKKyAgICAgICAgICAgIGltcGxpY2l0ID0gW107
CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsg
KytpKSB7CisgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAgICAgICAgICAg
ICAgIGlmIChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsICYmICF0aGlzLnNldC5oYXMocmVmLmlk
ZW50aWZpZXIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQucHVzaChyZWYu
X19tYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBnbG9iYWwgdmFyaWFibGUgZnJv
bSBhc3NpZ25tZW50IGV4cHJlc3Npb24KKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gaW1w
bGljaXQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBpbXBs
aWNpdFtpXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9fZGVmaW5lSW1wbGljaXQobm9kZS5sZWZ0
LCB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkltcGxpY2l0R2xvYmFsVmFy
aWFibGUsCisgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubGVmdCwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDsKKyAgICAgICAgY3VycmVudFNj
b3BlID0gdGhpcy51cHBlcjsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fcmVzb2x2
ZSA9IGZ1bmN0aW9uIF9fcmVzb2x2ZShyZWYpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlLCBuYW1l
OworICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAgaWYgKHRoaXMu
c2V0LmhhcyhuYW1lKSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQobmFt
ZSk7CisgICAgICAgICAgICB2YXJpYWJsZS5yZWZlcmVuY2VzLnB1c2gocmVmKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLnN0YWNrID0gdmFyaWFibGUuc3RhY2sgJiYgcmVmLmZyb20udmFyaWFibGVT
Y29wZSA9PT0gdGhpcy52YXJpYWJsZVNjb3BlOworICAgICAgICAgICAgaWYgKHJlZi50YWludGVk
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUudGFpbnRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdGhpcy50YWludHMuc2V0KHZhcmlhYmxlLm5hbWUsIHRydWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVmLnJlc29sdmVkID0gdmFyaWFibGU7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAg
IFNjb3BlLnByb3RvdHlwZS5fX2RlbGVnYXRlVG9VcHBlclNjb3BlID0gZnVuY3Rpb24gX19kZWxl
Z2F0ZVRvVXBwZXJTY29wZShyZWYpIHsKKyAgICAgICAgaWYgKHRoaXMudXBwZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMudXBwZXIubGVmdC5wdXNoKHJlZik7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy50aHJvdWdoLnB1c2gocmVmKTsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fZGVm
aW5lSW1wbGljaXQgPSBmdW5jdGlvbiBfX2RlZmluZUltcGxpY2l0KG5vZGUsIGluZm8pIHsKKyAg
ICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOworICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUg
PT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBuYW1lID0gbm9kZS5uYW1lOwor
ICAgICAgICAgICAgaWYgKCF0aGlzLmltcGxpY2l0LnNldC5oYXMobmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgICAgICB0aGlzLmltcGxpY2l0LnNl
dC5zZXQobmFtZSwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMuaW1wbGljaXQudmFy
aWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZSA9IHRoaXMuaW1wbGljaXQuc2V0LmdldChuYW1lKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZWZpbmUgPSBmdW5jdGlvbiBfX2RlZmluZShub2Rl
LCBpbmZvKSB7CisgICAgICAgIHZhciBuYW1lLCB2YXJpYWJsZTsKKyAgICAgICAgaWYgKG5vZGUg
JiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgbmFtZSA9
IG5vZGUubmFtZTsKKyAgICAgICAgICAgIGlmICghdGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXQuc2V0
KG5hbWUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUg
PSB0aGlzLnNldC5nZXQobmFtZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmll
cnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBl
Ll9fcmVmZXJlbmNpbmcgPSBmdW5jdGlvbiBfX3JlZmVyZW5jaW5nKG5vZGUsIGFzc2lnbiwgd3Jp
dGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIHZhciByZWY7CisgICAgICAg
IC8vIGJlY2F1c2UgQXJyYXkgZWxlbWVudCBtYXkgYmUgbnVsbAorICAgICAgICBpZiAobm9kZSAm
JiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZWYgPSBu
ZXcgUmVmZXJlbmNlKG5vZGUsIHRoaXMsIGFzc2lnbiB8fCBSZWZlcmVuY2UuUkVBRCwgd3JpdGVF
eHByLCBtYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlcy5w
dXNoKHJlZik7CisgICAgICAgICAgICB0aGlzLmxlZnQucHVzaChyZWYpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdEV2YWwgPSBmdW5jdGlvbiBfX2Rl
dGVjdEV2YWwoKSB7CisgICAgICAgIHZhciBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdGhp
czsKKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSB0cnVlOworICAgICAgICBk
byB7CisgICAgICAgICAgICBjdXJyZW50LmR5bmFtaWMgPSB0cnVlOworICAgICAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQudXBwZXI7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOworICAgIH07
CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZXRlY3RUaGlzID0gZnVuY3Rpb24gX19kZXRlY3RU
aGlzKCkgeworICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IHRydWU7CisgICAgfTsKKworICAgIFNj
b3BlLnByb3RvdHlwZS5fX2lzQ2xvc2VkID0gZnVuY3Rpb24gaXNDbG9zZWQoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmxlZnQgPT09IG51bGw7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNy
ZXNvbHZlKG5hbWUpCisgICAgLy8gcmV0dXJucyByZXNvbHZlZCByZWZlcmVuY2UKKyAgICBTY29w
ZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoaWRlbnQpIHsKKyAgICAgICAg
dmFyIHJlZiwgaSwgaXo7CisgICAgICAgIGFzc2VydCh0aGlzLl9faXNDbG9zZWQoKSwgJ3Njb3Bl
IHNob3VsZCBiZSBjbG9zZWQnKTsKKyAgICAgICAgYXNzZXJ0KGlkZW50LnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyLCAndGFyZ2V0IHNob3VsZCBiZSBpZGVudGlmaWVyJyk7CisgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAg
ICAgICAgICAgIHJlZiA9IHRoaXMucmVmZXJlbmNlc1tpXTsKKyAgICAgICAgICAgIGlmIChyZWYu
aWRlbnRpZmllciA9PT0gaWRlbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVmOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAg
ICAvLyBBUEkgU2NvcGUjaXNTdGF0aWMKKyAgICAvLyByZXR1cm5zIHRoaXMgc2NvcGUgaXMgc3Rh
dGljCisgICAgU2NvcGUucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7
CisgICAgICAgIHJldHVybiAhdGhpcy5keW5hbWljOworICAgIH07CisKKyAgICAvLyBBUEkgU2Nv
cGUjaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMg
bWF0ZXJpYWxpemVkIGFyZ3VtZW50cworICAgIFNjb3BlLnByb3RvdHlwZS5pc0FyZ3VtZW50c01h
dGVyaWFsaXplZCA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzTWF0ZXJpYWxpemVkKCkgeworICAgICAg
ICAvLyBUT0RPKENvbnN0ZWxsYXRpb24pCisgICAgICAgIC8vIFdlIGNhbiBtb3JlIGFnZ3Jlc3Np
dmUgb24gdGhpcyBjb25kaXRpb24gbGlrZSB0aGlzLgorICAgICAgICAvLworICAgICAgICAvLyBm
dW5jdGlvbiB0KCkgeworICAgICAgICAvLyAgICAgLy8gYXJndW1lbnRzIG9mIHQgaXMgYWx3YXlz
IGhpZGRlbi4KKyAgICAgICAgLy8gICAgIGZ1bmN0aW9uIGFyZ3VtZW50cygpIHsKKyAgICAgICAg
Ly8gICAgIH0KKyAgICAgICAgLy8gfQorICAgICAgICB2YXIgdmFyaWFibGU7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBub3QgZnVuY3Rpb24gc2NvcGUKKyAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0g
J2Z1bmN0aW9uJykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXRoaXMuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0LmdldCgnYXJndW1lbnRzJyk7
CisgICAgICAgIGFzc2VydCh2YXJpYWJsZSwgJ2Fsd2F5cyBoYXZlIGFyZ3VtZW50cyB2YXJpYWJs
ZScpOworICAgICAgICByZXR1cm4gdmFyaWFibGUudGFpbnRlZCB8fCB2YXJpYWJsZS5yZWZlcmVu
Y2VzLmxlbmd0aCAgIT09IDA7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNpc1RoaXNNYXRl
cmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMgbWF0ZXJpYWxpemVkIGB0aGlz
YCByZWZlcmVuY2UKKyAgICBTY29wZS5wcm90b3R5cGUuaXNUaGlzTWF0ZXJpYWxpemVkID0gZnVu
Y3Rpb24gaXNUaGlzTWF0ZXJpYWxpemVkKCkgeworICAgICAgICAvLyBUaGlzIGlzIG5vdCBmdW5j
dGlvbiBzY29wZQorICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuaXNTdGF0
aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMudGhpc0ZvdW5kOworICAgIH07CisKKyAgICBTY29wZS5tYW5nbGVkTmFtZSA9ICdf
XyRlc2NvcGUkX18nOworCisgICAgU2NvcGUucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIGF0
dGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Cisg
ICAgICAgICAgICB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXSA9IHRoaXM7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uIGRldGFj
aCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7CisgICAg
ICAgICAgICBkZWxldGUgdGhpcy5ibG9ja1tTY29wZS5tYW5nbGVkTmFtZV07CisgICAgICAgIH0K
KyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmlzVXNlZE5hbWUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICBpZiAodGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaXogPSB0aGlzLnRo
cm91Z2gubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMudGhyb3Vn
aFtpXS5pZGVudGlmaWVyLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEBjbGFzcyBTY29wZU1hbmFnZXIKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTY29wZU1hbmFnZXIoc2NvcGVzKSB7CisgICAgICAgIHRoaXMuc2NvcGVzID0g
c2NvcGVzOworICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8g
UmV0dXJucyBhcHByb3BsaWF0ZSBzY29wZSBmb3IgdGhpcyBub2RlCisgICAgU2NvcGVNYW5hZ2Vy
LnByb3RvdHlwZS5fX2dldCA9IGZ1bmN0aW9uIF9fZ2V0KG5vZGUpIHsKKyAgICAgICAgdmFyIGks
IGl6LCBzY29wZTsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBub2RlW1Njb3BlLm1hbmdsZWROYW1lXSB8fCBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmIChTY29wZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKKyAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlID0gdGhpcy5zY29wZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFzY29wZS5m
dW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUu
YmxvY2sgPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29wZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgU2NvcGVNYW5h
Z2VyLnByb3RvdHlwZS5hY3F1aXJlID0gZnVuY3Rpb24gYWNxdWlyZShub2RlKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9fZ2V0KG5vZGUpOworICAgIH07CisKKyAgICBTY29wZU1hbmFnZXIucHJv
dG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbiByZWxlYXNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHNj
b3BlID0gdGhpcy5fX2dldChub2RlKTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAgICAg
ICBzY29wZSA9IHNjb3BlLnVwcGVyOworICAgICAgICAgICAgd2hpbGUgKHNjb3BlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUu
YXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7CisgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgdGhpcy5zY29wZXNbaV0uYXR0YWNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5hdHRhY2hlZCA9IHRydWU7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUu
ZGV0YWNoID0gZnVuY3Rpb24gZGV0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7CisgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgdGhpcy5zY29wZXNbaV0uZGV0YWNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5hdHRhY2hlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBTY29wZS5pc1Njb3BlUmVxdWlyZWQg
PSBmdW5jdGlvbiBpc1Njb3BlUmVxdWlyZWQobm9kZSkgeworICAgICAgICByZXR1cm4gU2NvcGUu
aXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkgfHwgbm9kZS50eXBlID09PSBTeW50YXguV2l0
aFN0YXRlbWVudCB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5DYXRjaENsYXVzZTsKKyAgICB9Owor
CisgICAgU2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1ZhcmlhYmxl
U2NvcGVSZXF1aXJlZChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09IFN5bnRh
eC5Qcm9ncmFtIHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiB8fCBu
b2RlLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH07CisKKyAgICAv
KioKKyAgICAgKiBNYWluIGludGVyZmFjZSBmdW5jdGlvbi4gVGFrZXMgYW4gRXNwcmltYSBzeW50
YXggdHJlZSBhbmQgcmV0dXJucyB0aGUKKyAgICAgKiBhbmFseXplZCBzY29wZXMuCisgICAgICog
QGZ1bmN0aW9uIGFuYWx5emUKKyAgICAgKiBAcGFyYW0ge2VzcHJpbWEuVHJlZX0gdHJlZQorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlZE9wdGlvbnMgLSBPcHRpb25zIHRoYXQgdGFpbG9y
IHRoZSBzY29wZSBhbmFseXNpcworICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0
aW9ucy5vcHRpbWlzdGljPWZhbHNlXSAtIHRoZSBvcHRpbWlzdGljIGZsYWcKKyAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMuZGlyZWN0aXZlPWZhbHNlXS0gdGhlIGRpcmVj
dGl2ZSBmbGFnCisgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLmlnbm9y
ZUV2YWw9ZmFsc2VdLSB3aGV0aGVyIHRvIGNoZWNrICdldmFsKCknIGNhbGxzCisgICAgICogQHJl
dHVybiB7U2NvcGVNYW5hZ2VyfQorICAgICAqLworICAgIGZ1bmN0aW9uIGFuYWx5emUodHJlZSwg
cHJvdmlkZWRPcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHRTY29wZXM7CisKKyAgICAgICAg
b3B0aW9ucyA9IHVwZGF0ZURlZXBseShkZWZhdWx0T3B0aW9ucygpLCBwcm92aWRlZE9wdGlvbnMp
OworICAgICAgICByZXN1bHRTY29wZXMgPSBzY29wZXMgPSBbXTsKKyAgICAgICAgY3VycmVudFNj
b3BlID0gbnVsbDsKKyAgICAgICAgZ2xvYmFsU2NvcGUgPSBudWxsOworCisgICAgICAgIC8vIGF0
dGFjaCBzY29wZSBhbmQgY29sbGVjdCAvIHJlc29sdmUgbmFtZXMKKyAgICAgICAgZXN0cmF2ZXJz
ZS50cmF2ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIobm9k
ZSkgeworICAgICAgICAgICAgICAgIHZhciBpLCBpeiwgZGVjbDsKKyAgICAgICAgICAgICAgICBp
ZiAoU2NvcGUuaXNTY29wZVJlcXVpcmVkKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
dyBTY29wZShub2RlLCB7fSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25t
ZW50RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09
ICc9JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsICghY3VycmVudFNjb3Bl
LmlzU3RyaWN0ICYmIG5vZGUubGVmdC5uYW1lICE9IG51bGwpICYmIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuUlcsIG5vZGUucmlnaHQpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3Jl
ZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGUuZWxlbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQmxvY2tTdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9f
cmVmZXJlbmNpbmcobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQnJlYWtTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQ2FsbEV4cHJl
c3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGUuY2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlWydh
cmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtpXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGlzIGlz
IGRpcmVjdCBjYWxsIHRvIGV2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmln
bm9yZUV2YWwgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgbm9k
ZS5jYWxsZWUubmFtZSA9PT0gJ2V2YWwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RldGVjdEV2YWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
U3ludGF4LkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19k
ZWZpbmUobm9kZS5wYXJhbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFi
bGUuQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLnBhcmFt
LAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuY29uc2VxdWVudCk7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Db250
aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIFN5bnRheC5EaXJlY3RpdmVTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRG9XaGlsZVN0YXRlbWVudDoK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FeHByZXNzaW9uU3Rh
dGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhu
b2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5pbml0KTsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS51cGRhdGUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZvckluU3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09IFN5bnRheC5W
YXJpYWJsZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdLmlkLCBSZWZlcmVuY2Uu
V1JJVEUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCwg
UmVmZXJlbmNlLldSSVRFLCBudWxsLCAoIWN1cnJlbnRTY29wZS5pc1N0cmljdCAmJiBub2RlLmxl
ZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5G
dW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbkRlY2xh
cmF0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUudXBwZXIuX19kZWZpbmUobm9kZS5pZCwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogbm9kZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBpZCBpcyBkZWZp
bmVkIGluIHVwcGVyIHNjb3BlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0g
bm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGkK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguSWRl
bnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5JZlN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5MaXRlcmFsOgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguTG9naWNhbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5f
X3JlZmVyZW5jaW5nKG5vZGUubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUub2JqZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucHJvcGVydHkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jYWxsZWUpOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IG5vZGVbJ2FyZ3VtZW50cyddLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGVbJ2FyZ3VtZW50cyddW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9iamVjdEV4cHJl
c3Npb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguUHJvZ3JhbToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBjYXNlIFN5bnRheC5Qcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguUmV0dXJuU3RhdGVtZW50OgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmV4cHJlc3Npb25z
W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlN3aXRjaFN0YXRlbWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5kaXNjcmltaW5hbnQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LlN3aXRjaENhc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgY2FzZSBTeW50YXguVGhpc0V4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0VGhpcygpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlRocm93U3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVW5hcnlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5V
cGRhdGVFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmFyZ3VtZW50LCBSZWZlcmVuY2UuUlcsIG51bGwpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlZhcmlhYmxlRGVj
bGFyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5kZWNs
YXJhdGlvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZWZpbmUoZGVjbC5pZCwgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlZhcmlhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IGRlY2wuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZTogZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG5vZGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGZvdW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcoZGVjbC5pZCwgUmVm
ZXJlbmNlLldSSVRFLCBkZWNsLmluaXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmluaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9y
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19y
ZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdpdGhTdGF0ZW1lbnQgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYXQgdXBwZXIgc2NvcGUK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVyLl9fcmVmZXJlbmNpbmcobm9k
ZS5vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUobm9k
ZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50U2NvcGUgJiYgbm9kZSA9PT0gY3Vy
cmVudFNjb3BlLmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2Ns
b3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwor
ICAgICAgICBhc3NlcnQoY3VycmVudFNjb3BlID09PSBudWxsKTsKKyAgICAgICAgZ2xvYmFsU2Nv
cGUgPSBudWxsOworICAgICAgICBzY29wZXMgPSBudWxsOworICAgICAgICBvcHRpb25zID0gbnVs
bDsKKworICAgICAgICByZXR1cm4gbmV3IFNjb3BlTWFuYWdlcihyZXN1bHRTY29wZXMpOworICAg
IH0KKworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLnZlcnNpb24gKi8KKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMS4wLjEnOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlJlZmVyZW5j
ZSAqLworICAgIGV4cG9ydHMuUmVmZXJlbmNlID0gUmVmZXJlbmNlOworICAgIC8qKiBAbmFtZSBt
b2R1bGU6ZXNjb3BlLlZhcmlhYmxlICovCisgICAgZXhwb3J0cy5WYXJpYWJsZSA9IFZhcmlhYmxl
OworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlICovCisgICAgZXhwb3J0cy5TY29w
ZSA9IFNjb3BlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlTWFuYWdlciAqLwor
ICAgIGV4cG9ydHMuU2NvcGVNYW5hZ2VyID0gU2NvcGVNYW5hZ2VyOworICAgIC8qKiBAbmFtZSBt
b2R1bGU6ZXNjb3BlLmFuYWx5emUgKi8KKyAgICBleHBvcnRzLmFuYWx5emUgPSBhbmFseXplOwor
fSwgdGhpcykpOworLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7ImVz
dHJhdmVyc2UiOjd9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qCisg
IENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNv
bT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5j
b20+CisgIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJl
PgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFp
bC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdp
LmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13
aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlz
Lmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8
YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEg
SGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMg
SVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9S
IEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlICovCisv
Kmdsb2JhbCBlc3ByaW1hOnRydWUsIGRlZmluZTp0cnVlLCBleHBvcnRzOnRydWUsIHdpbmRvdzog
dHJ1ZSwKK3Rocm93RXJyb3JUb2xlcmFudDogdHJ1ZSwKK3Rocm93RXJyb3I6IHRydWUsIGdlbmVy
YXRlU3RhdGVtZW50OiB0cnVlLCBwZWVrOiB0cnVlLAorcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bjogdHJ1ZSwgcGFyc2VCbG9jazogdHJ1ZSwgcGFyc2VFeHByZXNzaW9uOiB0cnVlLAorcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uOiB0cnVlLCBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbjogdHJ1ZSwK
K3BhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czogdHJ1ZSwgcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXI6IHRydWUsCitwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb246IHRydWUsCitwYXJzZVVuYXJ5
RXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlU3RhdGVtZW50OiB0cnVlLCBwYXJzZVNvdXJjZUVsZW1l
bnQ6IHRydWUgKi8KKworKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJp
Y3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBv
cnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAorICAgIC8vIFJoaW5vLCBhbmQgcGxhaW4gYnJvd3Nl
ciBsb2FkaW5nLgorCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBpZiAodHlw
ZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIGRlZmlu
ZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBmYWN0b3J5KChyb290LmVzcHJpbWEgPSB7fSkpOworICAgIH0KK30odGhpcywg
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgVG9rZW4s
CisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5FeHByVG9rZW5zLAorICAgICAgICBTeW50
YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAgICAgTWVzc2FnZXMsCisgICAgICAgIFJl
Z2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCisgICAgICAgIHNvdXJjZSwKKyAgICAg
ICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAg
bGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAorICAgICAgICBs
b29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAgIFRva2VuID0g
eworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAorICAgICAgICBJ
ZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxsTGl0ZXJhbDog
NSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0b3I6IDcsCisg
ICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uOiA5Cisg
ICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tlbi5Cb29sZWFu
TGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4n
OworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVyJzsKKyAgICBU
b2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5OYW1lW1Rva2Vu
Lk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVy
YWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5j
dHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsK
KyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3VsYXJFeHByZXNz
aW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMg
aXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAneycsICdbJywgJ2lu
JywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCisgICAgICAgICAgICAgICAgICAgICdy
ZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisgICAgICAgICAgICAg
ICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgICAgICc9Jywg
Jys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScsCisgICAg
ICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAgICAnKycsICct
JywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcmJywKKyAg
ICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwnLCAnPycsICc6
JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAgICAgICAgICAgICc8PScsICc8JywgJz4n
LCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBBcnJheUV4cHJlc3Npb246
ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVt
ZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAg
ICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAgQ2FsbEV4cHJl
c3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1
c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Np
b24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JywKKyAg
ICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBEZWJ1
Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAgRW1wdHlTdGF0ZW1l
bnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHBy
ZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywK
KyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAgICAgIEZ1bmN0
aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAgICAgRnVuY3Rpb25F
eHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRlbnRpZmllcjogJ0lk
ZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICAgICAg
TGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0
YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24n
LAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsCisgICAgICAg
IE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lv
bjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCisgICAg
ICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1
cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJl
c3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAg
ICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHByZXNzaW9uOiAn
VGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50
JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAgICAgVW5hcnlF
eHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjog
J1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFi
bGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVj
bGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLAorICAg
ICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKKyAgICB9OworCisgICAgUHJvcGVy
dHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAgICAgICBHZXQ6IDIsCisgICAgICAgIFNl
dDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2Fs
IHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVjdGVkVG9rZW46ICAnVW5l
eHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICAnVW5leHBlY3Rl
ZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1VuZXhwZWN0ZWQgc3RyaW5n
JywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBlY3RlZCBpZGVudGlmaWVy
JywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0ZWQgcmVzZXJ2ZWQgd29y
ZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQnLAor
ICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cn
LAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAor
ICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246
IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAnSW52YWxpZCBs
ZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExIU0luRm9ySW46
ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBNdWx0aXBsZURl
ZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBz
dGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAgJ01pc3NpbmcgY2F0Y2ggb3Ig
ZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRlZmluZWQgbGFi
ZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBoYXMgYWxyZWFk
eSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxsZWdhbCBjb250
aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0
YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1l
bnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3Qg
aW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTog
ICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBt
b2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUg
ZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbU5h
bWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4g
c3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5j
dGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisgICAgICAgIFN0
cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1
bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICAnT2N0
YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCisgICAgICAgIFN0
cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJp
Y3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogICdEdXBsaWNhdGUg
ZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9k
ZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiAgJ09iamVjdCBsaXRlcmFsIG1heSBu
b3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUnLAor
ICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVs
dGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lJywKKyAgICAgICAgU3Ry
aWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5v
dCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUG9zdGZpeDogICdQ
b3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRz
IG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQcmVmaXg6ICAnUHJl
Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9w
ZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6ICAnVXNl
IG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJworICAgIH07CisKKyAgICAv
LyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJlZ2V4ID0g
eworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4QUFceEI1
XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAy
RTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM4
Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0
ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUw
NUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUw
NkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcx
Mi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdG
QVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXHUwOEEy
LVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3
N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlB
QS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURG
LVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4
XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1c
dTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMt
XHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBc
dTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1c
dTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1
MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1
MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBC
QUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUw
QzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBD
ODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1
MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBE
MEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBE
N0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUw
REM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBF
ODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVB
MS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIz
XHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3
XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1
NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4
MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0
OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEy
ODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUx
MkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1
MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYt
XHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcw
Q1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3
NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUx
OEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5NTAtXHUxOTZEXHUxOTcwLVx1
MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRc
dTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZc
dTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5
LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYx
NVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFG
NTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFG
QkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUx
RkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1
MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUy
MTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1
MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1c
dTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1
MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVc
dTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQw
LVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAz
MS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUz
MEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1
MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAt
XHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZF
XHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4
Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVB
ODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1
QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0Nc
dUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRC
XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjkt
XHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0
XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIy
OC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVE
N0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1
RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1
RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1
RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEt
XHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZD
Rlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAorICAgICAgICBOb25Bc2NpaUlkZW50aWZp
ZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1c
dTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRc
dTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1c
dTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTI3
XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMx
XHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAt
XHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZF
OFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3
RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMFx1MDhBMi1cdTA4QUNcdTA4
RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1
MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1
MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1
MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1
MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1c
dTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUw
QTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBB
NjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1
MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1
MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZc
dTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEt
XHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhc
dTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1c
dTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1c
dTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUw
QkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1
MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1c
dTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0QtXHUwQzQ0
XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBDNTlcdTBDNjAt
XHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkw
XHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MEND
Ni1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENF
Ni1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQx
MFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENEVcdTBE
NTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJcdTBEODNcdTBE
ODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUw
RENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERjJcdTBERjNcdTBFMDEtXHUw
RTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBF
ODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBF
QTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBF
QzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBG
MThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0
OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEw
MDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUx
MEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1
MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVc
dTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEw
XHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzgwLVx1MTM4Rlx1MTNB
MC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUx
NkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIwLVx1MTczNFx1
MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1c
dTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgwRFx1MTgxMC1c
dTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFD
XHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4
MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEOVx1MUEwMC1cdTFBMUJcdTFBMjAtXHUx
QTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjAwLVx1
MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdc
dTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxRDAw
LVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFG
NERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFG
QjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUx
RkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1
MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIw
RDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIx
MTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIx
MzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUy
QzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAwLVx1MkQyNVx1
MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEwLVx1MkRBNlx1
MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgt
XHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUyRTJGXHUzMDA1
LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMw
OTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMx
MDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1
NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENc
dUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVBNjk3XHVBNjlG
LVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3
OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVB
OEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1
QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QUEwMC1cdUFBMzZcdUFBNDAt
XHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0JcdUFBODAtXHVBQUMy
XHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIw
OS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVB
QkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVE
N0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1c
dUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBc
dUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZc
dUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTI2XHVGRTMz
XHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYx
OVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZG
QzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJykKKyAgICB9OworCisg
ICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVy
cm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFu
dGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAgIC8vIHRvIGNhdGNoIGEgbG9naWMgZXJy
b3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLgorICAg
IC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55
IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7
CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBpZiAoIWNvbmRpdGlv
bikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1Njc4
OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhPZihjaCkg
Pj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0ZSBTcGFjZQorCisgICAgZnVuY3Rpb24g
aXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9
PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhB
MCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIw
MDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAw
NywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZG
XS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9y
cworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAgICByZXR1cm4g
KGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2gg
PT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElk
ZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIp
IGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1
QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAw
eDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAg
ICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAw
eDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hh
ckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkg
eworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAk
IChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYg
Y2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAm
JiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA+PSAweDMw
ICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4uOQorICAgICAgICAgICAgKGNoID09PSAw
eDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAg
ICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJp
bmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJl
c2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29yZChpZCkgewor
ICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAgY2Fz
ZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2UgJ2V4dGVuZHMn
OgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2Vy
dmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2ltcGxl
bWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNlICdwYWNrYWdl
JzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6Cisg
ICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6CisgICAgICAgIGNh
c2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgeworICAgICAgICBy
ZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAgfQorCisgICAg
Ly8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlkKSB7CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29uc3QnIGlzIHNw
ZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcgYW5kICdsZXQn
IGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0LgorICAg
ICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29yZHMuCisKKyAg
ICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpOwor
ICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlk
ID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09
ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2Fz
ZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgn
KSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHJldHVy
biAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gn
KSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3Qn
KSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3Mn
KSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVs
ZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdl
eHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3OgorICAgICAgICAg
ICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlk
ID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gKGlk
ID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVn
Z2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5z
dGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBmdW5jdGlvbiBh
ZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKKyAgICAgICAgdmFyIGNv
bW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09ICdudW1i
ZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKworICAgICAgICAvLyBC
ZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRlbiB0aGUgY29t
bWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBs
ZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNraXAgYWRkaW5n
IGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAgICAgIC8vIGhhbmRs
ZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0KSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUubGFzdENvbW1lbnRT
dGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQgPSB7CisgICAgICAgICAgICB0eXBlOiB0
eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgICAgIGlmIChl
eHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICBjb21tZW50
LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBleHRyYS5jb21tZW50cy5wdXNoKGNvbW1l
bnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgZXh0
cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICBleHRyYS50cmFp
bGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAgIHZhciBzdGFydCwg
bG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0OworICAg
ICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAt
IG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHdoaWxlIChpbmRl
eCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7
CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3Io
Y2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4IC0g
MSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBp
bmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCAtIDEsIGxv
Yyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYg
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4dHJhLmNvbW1l
bnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0
LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgIGxpbmU6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBz
dGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBza2lw
TXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50
OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgc3RhcnQgPSBp
bmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAgc3RhcnQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAg
IGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
MHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
IGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVu
ZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21t
ZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShz
dGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0g
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0Js
b2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNoLCBzdGFydDsKKworICAgICAg
ICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAg
ICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIHN0YXJ0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8gVSswMDJGIGlz
ICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAgICAgICAgICAgICAgICAgICBzdGFydCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAgLy8gVSsw
MDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5lQ29tbWVudCgp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09
IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAgICAgICAgICAgIC8vIFUrMDAzRSBpcyAn
PicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09
IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnQKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmds
ZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8JworICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSAnIS0tJykgeworICAgICAgICAgICAg
ICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8g
YCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVD
b21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICB2YXIgaSwgbGVuLCBjaCwg
Y29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8
IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiAr
ICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBj
aCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTsKKyAgICAg
ICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAnXHUnIChVKzAw
NUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKGNo
ID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9
PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgaWYg
KCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgw
KSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZCA9IGNoOwor
ICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghaXNJZGVu
dGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMg
YW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAg
ICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
aWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFy
IHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGluZGV4Kys7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgICAgICAvLyBC
bGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAg
ICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldEVzY2Fw
ZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNJZGVudGlm
aWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBpZCwgdHlw
ZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgIC8vIEJhY2tzbGFzaCAoVSsw
MDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0gKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmllcigpIDogZ2V0
SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJh
bCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gVGh1cywgaXQgbXVzdCBiZSBh
biBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAg
ICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc0tleXdvcmQo
aWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAgICAgfSBlbHNl
IGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVy
YWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJykg
eworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgIHZh
bHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAg
ICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKworICAgIC8vIDcuNyBQdW5j
dHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7CisgICAgICAgIHZhciBz
dGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAgICAgY2gxID0gc291cmNlW2luZGV4XSwK
KyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNoMywKKyAgICAgICAgICAgIGNoNDsKKwor
ICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21t
b24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgY2FzZSAweDJFOiAgLy8g
LiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBvcGVuIGJyYWNrZXQKKyAgICAgICAgY2Fz
ZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAgICAgIGNhc2UgMHgzQjogIC8vIDsgc2Vt
aWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwgY29tbWEKKyAgICAgICAgY2FzZSAweDdC
OiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg3RDogIC8vIH0gY2xvc2Ug
Y3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAgLy8gWworICAgICAgICBjYXNlIDB4NUQ6
ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoKKyAgICAgICAgY2FzZSAweDNGOiAgLy8g
PworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09
IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRy
YS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHg3
QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRv
a2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAg
ICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLAorICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKworICAgICAgICAg
ICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFyaXNvbiBvcGVy
YXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gMHgzRCkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMHgyQjogIC8vICsKKyAgICAg
ICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAgICAgICAgICAgICAgY2FzZSAweDJGOiAg
Ly8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzogIC8vIDwKKyAgICAgICAgICAgICAgICBj
YXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSAweDVFOiAgLy8gXgorICAgICAg
ICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjU6ICAv
LyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAgLy8gJgorICAgICAgICAgICAgICAgIGNh
c2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2Vu
LlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6
IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2FzZSAweDIxOiAvLyAhCisgICAgICAgICAg
ICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xpY2Uoc3RhcnQs
IGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9y
OiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7CisKKyAgICAg
ICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0
b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAgICAgY2gzID0gY2g0LnN1YnN0cigwLCAz
KTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0nIHx8IGNoMyA9
PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAg
ICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsr
IC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNoMy5zdWJzdHIoMCwgMik7CisKKyAgICAg
ICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEpID49IDApKSB8
fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6IDwg
PiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlmICgnPD49ISstKiUmfF4vJy5pbmRleE9m
KGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAg
ICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8gNy44LjMgTnVtZXJpYyBMaXRlcmFscwor
CisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAgdmFyIG51bWJl
ciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
aWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1
ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAorICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAg
IH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAgdmFy
IG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVt
YmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERpZ2l0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAg
ICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLAorICAgICAgICAgICAgb2N0YWw6IHRy
dWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGlu
ZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nhbk51bWVy
aWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7CisKKyAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGlnaXQoY2guY2hh
ckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051bWVyaWMgbGl0ZXJh
bCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpOwor
CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcnOworICAgICAgICBp
ZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAvLyBIZXggbnVt
YmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRz
IHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3Rh
cnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChzdGFy
dCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZGVjaW1hbCBudW1i
ZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLgorICAgICAgICAgICAg
ICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAg
ICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAg
ICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkp
KSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgIG51bWJlciAr
PSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAg
ICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAg
ICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkg
eworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAgICAg
IHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQor
CisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2FuU3RyaW5n
TGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNoLCBjb2Rl
LCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2UsIHN0YXJ0TGluZU51bWJlciwgc3Rh
cnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAg
ICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIHF1b3RlID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyIn
KSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUn
KTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4OworCisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgr
K107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICBx
dW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVB
dCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdW5l
c2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQn
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0g
JzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
Y3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3Vy
Y2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcw
MTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3Rh
cnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49
IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxl
bmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT2N0YWxE
aWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVt
YmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNvdXJjZVtpbmRl
eF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9y
KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRl
cmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwK
KyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAorICAgICAgICAg
ICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAorICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHsKKyAgICAg
ICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFsdWUgPSBuZXcgUmVn
RXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBCb2R5KCkg
eworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJvZHk7CisK
KyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2ggPT09ICcvJywg
J1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7Cisg
ICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICBjbGFzc01hcmtlciA9IGZh
bHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAvLyBFQ01BLTI2MiA3
LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVy
bWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29k
ZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVy
bWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFya2VyKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xh
c3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xh
c3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAgIGJvZHkgPSBz
dHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAgICAgIH07Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAgICB2YXIgY2gs
IHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAgc3RyID0gJyc7CisgICAgICAgIGZsYWdz
ID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcgJiYgaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAg
ICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsrcmVzdG9yZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9yZV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xc
dSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXCc7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAgICAgICAgc3Ry
ICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0cgorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CisgICAgICAgIHZhciBz
dGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVlOworCisgICAgICAgIGxvb2thaGVhZCA9
IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisK
KyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CisgICAgICAgIGZsYWdzID0gc2NhblJl
Z0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFn
cy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsCisgICAgICAgICAgICB2YWx1
ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGlu
ZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkgewor
ICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjsKKworICAgICAgICBza2lwQ29tbWVu
dCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAg
ICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpOworICAgICAgICBsb2MuZW5kID0gewor
ICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4
dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAvLyBQb3Ag
dGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScKKyAgICAgICAg
ICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHRva2Vu
ID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAg
ICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRv
cicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycgfHwgdG9r
ZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vu
cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAg
ICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgdmFsdWU6IHJl
Z2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4XSwKKyAgICAg
ICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyTmFtZSh0
b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8
fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAorICAgICAgICAg
ICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAgICAgICAgIHRv
a2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFk
dmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAgICAgIGNoZWNr
VG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICAgICAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnbgorICAg
ICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOwor
ICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGluZyBiZWZvcmUg
dGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1cm4gY29sbGVj
dFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnUHVu
Y3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICddJykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJyknKSB7CisgICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tlbiAtIDFdOwor
ICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAgICAgICAgICAgICAvLyBEaXZpZGluZyBh
IGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKyAgICAgICAgICAgICAg
ICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICBpZiAo
ZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdLnR5cGUgPT09
ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24u
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3Bl
bkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEudG9rZW5z
W2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09ICdLZXl3b3JkJykg
eworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVd
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBjaGVj
a1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAg
ICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgaWYg
KEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxl
Y3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdl
eCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gJ0tleXdvcmQn
KSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWR2YW5j
ZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAg
ICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVmVyeSBj
b21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAw
eDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNp
bmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisgICAgICAgIGlm
IChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5T
dHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIERvdCAoLikgVSswMDJF
IGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZAor
ICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgIGlmIChjaCA9
PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0
ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9y
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAg
ICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguCisgICAgICAgIGlm
IChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikgeworICAgICAgICAgICAgcmV0dXJuIGFk
dmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9y
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkgeworICAgICAgICB2YXIg
bG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAg
ICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZhbmNlKCk7Cisg
ICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAgIGlm
ICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVlID0gc291cmNl
LnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZXh0cmEudG9rZW5z
LnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBlXSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFt0b2tl
bi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBsaW5lTnVtYmVy
ID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0
OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZp
bmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKKworICAgICAgICBpbmRleCA9IHRv
a2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAg
IGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICByZXR1cm4gdG9rZW47Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAgICAgICAgdmFyIHBvcywgbGluZSwgc3Rh
cnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwor
ICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBl
eHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgp
OworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7CisgICAg
ICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKworICAgIGZ1bmN0aW9uIFBvc2l0aW9uKGxp
bmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgICAgICB0aGlzLmNv
bHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihzdGFy
dExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5zdGFydCA9
IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgdGhpcy5lbmQg
PSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAgICB9CisKKyAgICBTeW50YXhUcmVlRGVs
ZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAorCisgICAgICAgIHByb2Nl
c3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCwg
dHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4
LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdl
WzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21t
ZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgICAgIGV4dHJh
LnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0
cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0g
MV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90
dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5n
Q29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAg
ICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0
b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisgICAgICAgICAg
ICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4dHJhLmJvdHRv
bVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5yYW5nZVswXSA+
PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0cmEuYm90
dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxh
c3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRz
ICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5s
ZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVu
dHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29tbWVudHNbZXh0cmEubGVhZGluZ0NvbW1l
bnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
ICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50czsKKyAgICAg
ICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKwor
CisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAgICAgICAgIG5v
ZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTsKKyAgICAgICAg
fSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAobm9kZSwgc3RhcnRUb2tlbikgeworICAg
ICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbm9kZS5yYW5nZSA9
IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBuZXcgU291cmNlTG9j
YXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnRMaW5lTnVtYmVyID09
PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVtYmVyIDogc3RhcnRUb2tlbi5zdGFydExp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnQgLSAoc3RhcnRU
b2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4ubGluZVN0YXJ0
IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisgICAgICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzKG5vZGUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAg
ICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBwb3N0UHJvY2Vzczog
ZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVB
cnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9y
LCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0
b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAg
ICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsK
KyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09
PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAgICAgICAgICAg
ICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0
b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICByaWdodDog
cmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQmxvY2tT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBi
b2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUJy
ZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3Vt
ZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
Q2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisgICAgICAgICAg
ICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9u
OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1
ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlCisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxh
YmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVE
ZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rp
b24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogYm9k
eSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0eVN0YXRlbWVu
dAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFeHByZXNzaW9u
U3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQsIHRlc3Qs
IHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQsCisg
ICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHVwZGF0
ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQs
IGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAg
ICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAg
ICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRl
ZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGlkOiBpZCwK
KyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBkZWZhdWx0
czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAg
ICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCisgICAgICAg
ICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywg
ZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBpZDogaWQs
CisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAgICAgZGVmYXVs
dHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICAg
ICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLAorICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZGVudGlmaWVyLAorICAg
ICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRl
cm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAg
ICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6
IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVM
YWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0ZXJhbDogZnVu
Y3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwK
KyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5k
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVNZW1iZXJFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1lbWJlckV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSAnWycsCisgICAgICAg
ICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgcHJvcGVydHk6IHByb3Bl
cnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU5ld0V4cHJl
c3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lv
bjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAg
cHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVu
dCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
VXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgIHByZWZp
eDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUHJv
Z3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAgICAgICAgICAgICAgYm9keTogYm9keQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9wZXJ0eTogZnVu
Y3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAgICAgIGtleToga2V5
LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBraW5kOiBr
aW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVJldHVyblN0
YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5TZXF1ZW5j
ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zCisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1
bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNlLAorICAgICAgICAgICAgICAgIHRlc3Q6
IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0
aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
ZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAgICAgICAgICAgICAgY2FzZXM6IGNhc2Vz
CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRoaXNFeHByZXNz
aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UaHJvd1N0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAo
YmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMsIGZpbmFsaXplcikgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHJ5U3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAgICAgICAgICAgICAgICBndWFyZGVkSGFu
ZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAgICAgICAgICBoYW5kbGVyczogaGFuZGxl
cnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBmaW5hbGl6ZXIKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAo
b3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICcrKycg
fHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3Bl
cmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAg
ICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9u
cywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6
IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rp
b24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAgaWQ6IGlkLAor
ICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBib2R5KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaGlsZVN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlV2l0
aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2l0aFN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAg
ICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4KKworICAgIGZ1
bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAgICAgICAgdmFyIHBvcywgbGluZSwgc3Rh
cnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5lID0gbGluZU51
bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIHNraXBDb21tZW50KCk7
CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKKyAgICAgICAgaW5kZXggPSBw
b3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3RhcnQgPSBzdGFy
dDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8gVGhyb3cgYW4gZXhj
ZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdlRm9ybWF0KSB7
CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1h
dC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGluZGV4
IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9
PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcgKyB0
b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJvci5pbmRleCA9
IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2VuLmxpbmVO
dW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxpbmVTdGFy
dCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcign
TGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAgZXJyb3IuaW5k
ZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwor
ICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxOworICAgICAg
ICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7CisgICAgICAgIHRocm93IGVy
cm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgpIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsK
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewor
ICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4u
CisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKKyAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
dG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Cisg
ICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVk
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
dG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lm
aWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJv
d24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFyIHRva2VuID0g
bGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRv
a2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2Vu
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBt
YXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24g
d2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHsK
KyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBU
b2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3Iu
CisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4gbG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTsK
KyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRo
ZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQp
IHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxv
b2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAgICBmdW5jdGlv
biBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAgICAgICByZXR1
cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAgICAgICAgICAg
IG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAgICAgICAgICAg
b3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAgICAgICAgICBv
cCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAgICAgICAgICAg
b3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAgICAgICAgICAg
IG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsKKworICAgICAg
ICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1p
Y29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09
IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAh
PT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlm
IHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorCisgICAgZnVu
Y3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1iZXJFeHByZXNz
aW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJheSBJbml0aWFsaXNlcgorCisgICAgZnVu
Y3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgZWxlbWVudHMgPSBb
XSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAg
ICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4
cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0K
KworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAgIGZ1bmN0aW9uIHBhcnNl
UHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzU3Ry
aWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0
OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBib2R5ID0gcGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChmaXJzdCAmJiBzdHJpY3QgJiYg
aXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkgeworICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAgICB9Cisg
ICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW0sIFtd
LCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAg
ICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0
UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBh
cmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwp
IHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJh
bCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVy
KHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VP
YmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBrZXksIGlkLCB2YWx1ZSwgcGFy
YW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHN0
YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2Vu
LklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRlciBhbmQgU2V0
dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICFtYXRjaCgn
OicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwor
ICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKScp
OworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKFtdKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9w
ZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhbWF0Y2goJzonKSkgeworICAg
ICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oW10p
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0g
WyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAgICAgICAgIGV4cGVj
dCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlv
bihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnc2V0Jywga2V5LCB2
YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc6
Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5
KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVh
dG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAg
ICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRl
LmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpIHsKKyAg
ICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVydHksIG5hbWUsIGtleSwga2luZCwgbWFw
ID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgd2hpbGUg
KCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2JqZWN0UHJvcGVy
dHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50YXguSWRl
bnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHRvU3RyaW5nKHByb3Bl
cnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBraW5kID0gKHByb3Bl
cnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9wZXJ0eS5raW5k
ID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNldDsKKworICAg
ICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdER1cGxpY2F0
ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kICE9PSBQcm9w
ZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAo
a2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtrZXldICYga2luZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3Nvckdl
dFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0b3IKKworICAg
IGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwcjsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQor
CisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwgZXhwciwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgcmV0dXJu
IHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2go
J1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICB0eXBlID0gbG9v
a2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAg
aWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGV4cHIgPSAgZGVs
ZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5OdW1lcmljTGl0
ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5TdHJp
Y3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRv
a2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMnKSkgeworICAg
ICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICB0b2tlbiA9
IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVl
Jyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7CisgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgeworICAgICAgICAgICAgaWYgKHR5
cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVjdFJlZ2V4KCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChz
Y2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVlaygpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwor
ICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMKKworICAgIGZ1
bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAgICB2YXIgYXJncyA9IFtdOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJncy5wdXNoKHBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcp
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9rZW4s
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7
CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tl
bi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29t
cHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgnLicpOworCisgICAgICAgIHJldHVybiBw
YXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUNv
bXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBleHBlY3QoJ1sn
KTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0
KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBzdGFydFRva2Vu
OworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24o
KTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDogW107CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTmV3RXhwcmVz
c2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAgIHZhciBwcmV2
aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3Rh
dGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAgICAgIGV4cHIg
PSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1h
cnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47
CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcuJykpIHsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignLicsIGV4
cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygnKSkgeworICAg
ICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAgICAgICAgIGV4
cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0g
cGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5j
cmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lk
ZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIHByb3Bl
cnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAg
ICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgZXhwciA9IG1h
dGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwor
ICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpKSB7CisgICAgICAgICAgICBp
ZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VDb21wdXRl
ZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJF
eHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignLicsIGV4
cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9u
IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCB0b2tlbiwgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVF
eHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNo
KCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAx
MS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RM
SFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlz
TGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgICAgICBl
eHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0
b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuNCBVbmFyeSBPcGVy
YXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5LZXl3b3Jk
KSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAgICAgICAgICBz
dGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgLy8gMTEu
NC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50
YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFs
aWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgnficpIHx8IG1h
dGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
ICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9u
KHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5k
KGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnZGVs
ZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBlb2YnKSkg
eworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFs
dWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3Rh
cnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdk
ZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERlbGV0
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHByID0g
cGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4
cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJ
bikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09
IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkgeworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRva2VuLnZh
bHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAxOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAgcHJlYyA9IDI7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIHBy
ZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6CisgICAgICAg
ICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyYnOgor
ICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
ICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoKKyAgICAgICAg
Y2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBjYXNlICc8PSc6
CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6CisgICAgICAg
ICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2luJzoK
KyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAgICAgY2FzZSAn
Pj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJlYyA9IDk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgY2FzZSAnLyc6
CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBNdWx0aXBsaWNh
dGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycworICAgIC8vIDEx
LjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0
b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMCBCaW5hcnkg
Qml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnMK
KworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIG1h
cmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwgb3BlcmF0b3Is
IGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9va2FoZWFkOworICAgICAgICBsZWZ0ID0g
cGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93SW4pOworICAg
ICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAg
IH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOworCisgICAgICAg
IG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOworICAgICAgICByaWdodCA9IHBhcnNlVW5h
cnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTsK
KworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2thaGVhZCwgc3Rh
dGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5h
cnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisgICAgICAgICAg
ICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0
aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTsKKyAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlOworICAgICAgICAgICAg
ICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbWFya2VyID0gbWFya2Vyc1tt
YXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhw
ciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0YWNrLnB1c2go
dG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2thaGVhZCk7CisgICAgICAgICAg
ICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YWNrLnB1c2go
ZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAg
dGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTsKKyAgICAgICAgZXhwciA9
IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICB3aGlsZSAoaSA+IDEp
IHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0
YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTsKKyAgICAgICAgICAgIGkgLT0g
MjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICBkZWxl
Z2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJhdG9yCisKKyAg
ICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4
cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwciA9IHBhcnNl
QmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnPycpKSB7CisgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47
CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnNlcXVl
bnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAg
ICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29u
c2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwg
c3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisK
KyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBsZWZ0LCByaWdodCwg
bm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBub2RlID0gbGVmdCA9IHBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoQXNzaWduKCkpIHsKKyAg
ICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAgIGlmICghaXNM
ZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxlZnQudHlw
ZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChsZWZ0Lm5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJp
Y3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQXNzaWdu
bWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAvLyAxMS4xNCBD
b21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkgeworICAgICAg
ICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Cisg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uKFsgZXhw
ciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBl
eHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2Vu
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDEy
LjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsKKyAgICAgICAg
dmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRlbWVudDsKKworICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBw
YXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09
PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkgeworICAgICAg
ICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVu
dExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4gZGVsZWdh
dGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jayksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50CisKKyAgICBmdW5j
dGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRv
a2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGluaXQgPSBudWxsLCBpZCwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZCA9
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gMTIuMi4xCisgICAgICAg
IGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAgICBleHBlY3Qo
Jz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVE
ZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZhciBsaXN0ID0g
W107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIGxpc3Q7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsKKyAgICAgICAg
dmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXInKTsKKworICAg
ICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CisKKyAg
ICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAgIH0KKworICAg
IC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFyZSBleHBlcmlt
ZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8gc2VlIGh0dHA6
Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QKKyAgICAvLyBh
bmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpsZXQKKyAg
ICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAgICAgICB2YXIg
ZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5kKTsKKworICAgICAgICBkZWNsYXJhdGlv
bnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpOworCisgICAgICAgIGNvbnN1
bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAgICBmdW5jdGlv
biBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQorCisgICAgLy8g
MTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVF
eHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUgSWYgc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdGVz
dCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7
CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lv
bigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVlbnQgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2UnKSkgeworICAg
ICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0YXRlbWVudCgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVudCh0ZXN0LCBj
b25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRlcmF0aW9uIFN0
YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRp
b247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBleHBlY3Qo
JygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhw
ZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxleCgp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURvV2hpbGVTdGF0
ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRl
bWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAg
ICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOwor
CisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIHN0
YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQo
KTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRl
Y2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGluaXQsIHRlc3QsIHVwZGF0
ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGluaXQgPSB0
ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdmb3InKTsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAg
ICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAgICAgICAgc3Rh
dGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUZvclZhcmlh
YmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYg
bWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBw
YXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0
ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRXhwcmVzc2lv
bigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0SGFu
ZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFu
dCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQg
PSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisKKyAg
ICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHBh
cnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhw
ZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRp
b247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpID8KKyAg
ICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBk
YXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9ySW5TdGF0ZW1l
bnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjcgVGhlIGNvbnRpbnVl
IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHsKKyAg
ICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nv
bnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06ICdj
b250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNC
KSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxD
b250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChw
ZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlv
bikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250
aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgbGFiZWwgPSBw
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJl
bC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIGlmIChs
YWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwpOworICAgIH0K
KworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VC
cmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkg
Y29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgorICAg
ICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7CisgICAgICAgICAg
ICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUu
aW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxs
ZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBl
ZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlv
biB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAgICAga2V5
ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKwor
ICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0
ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVn
YWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJl
YWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjkgVGhlIHJldHVybiBzdGF0
ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgeworICAgICAgICB2
YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3JldHVybicpOwor
CisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBpZGVudGlmaWVy
IGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0
b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVu
dChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsnKSkgeworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsK
KyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOworICAgIH0K
KworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VX
aXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OworCisgICAgICAgIGlm
IChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBTaG91bGQgd2Ug
dXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/CisgICAgICAgICAgICBza2lwQ29tbWVudCgp
OworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RNb2Rl
V2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7CisKKyAg
ICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50
KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1lbnQob2JqZWN0
LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVtZW50CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0LCBjb25zZXF1
ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51bGw7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7CisgICAgICAgICAgICB0ZXN0ID0g
cGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KCc6Jyk7CisKKyAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30n
KSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nhc2UnKSkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVt
ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaChzdGF0
ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSwgc3RhcnRUb2tlbik7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQ7
CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAgZXhwZWN0KCco
Jyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgY2FzZXMg
PSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1p
bmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5p
blN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOworICAgICAgICBkZWZhdWx0
Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsKKyAgICAgICAg
ICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChkZWZh
dWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
TXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLmluU3dpdGNoID0g
b2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsKKyAgICB9
CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQ7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkp
IHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8gMTIuMTQgVGhl
IHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2UoKSB7CisgICAg
ICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCisgICAgICAgIGV4
cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgdGhyb3dV
bmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbSA9IHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAgICAgaWYgKHN0
cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpOworICAgICAg
ICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUNhdGNoQ2xh
dXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMgPSBbXSwgZmlu
YWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsKKworICAgICAg
ICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdjYXRj
aCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1c2UoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9jaygpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAhZmluYWxpemVy
KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUcnlTdGF0ZW1l
bnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAgICAvLyAxMi4x
NSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3Rh
dGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOworCisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRGVi
dWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRzCisKKyAgICBm
dW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBsb29rYWhlYWQu
dHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9keSwKKyAgICAg
ICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKHR5cGUg
PT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBs
b29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2so
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAg
ICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVtcHR5U3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnYnJl
YWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlQnJlYWtT
dGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdjb250aW51ZSc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VDb250aW51ZVN0YXRl
bWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2VyJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURlYnVnZ2VyU3RhdGVtZW50
KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAg
ICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCksIHN0YXJ0VG9rZW4pOworICAgICAgICAg
ICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBh
cnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdyZXR1cm4n
OgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlUmV0dXJuU3Rh
dGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVN3aXRjaFN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRocm93U3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
cGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2Ug
J3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVdo
aWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnd2l0aCc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaXRoU3RhdGVtZW50
KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIgPSBwYXJzZUV4
cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzCisgICAg
ICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2goJzonKSkg
eworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGV4cHIubmFt
ZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
c3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAg
IGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0
ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSksIHN0YXJ0VG9r
ZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1l
bnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0aW9uIERlZmlu
aXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpIHsKKyAg
ICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJl
Y3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0
ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBzdGFydFRva2VuOworCisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgneycpOworCisg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAg
ICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAg
c291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzb3Vy
Y2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tl
bi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9
PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0
ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAg
ICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJlbFNldCA9IHN0YXRlLmxh
YmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOworICAg
ICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBvbGRJbkZ1bmN0aW9u
Qm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHN0YXRlLmxhYmVsU2V0ID0g
e307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmlu
U3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTsKKwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgn
fScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNv
dXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAg
ICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRp
b24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRj
aDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9uQm9keTsKKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRl
bWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgcGFyYW0sIHBhcmFt
cyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0LCBrZXksIG1lc3NhZ2U7CisgICAgICAg
IGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAg
cGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgIHBhcmFtID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBrZXkgPSAnJCcgKyB0
b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQg
PSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJp
Y3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVz
dHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJh
bVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0g
dG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0
UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICBwYXJhbVNl
dFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3Qo
JyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisg
ICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisgICAgICAgICAgICBmaXJzdFJlc3RyaWN0
ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7
CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJvZHksIHRva2VuLCBzdHJpY3RlZCwgdG1w
LCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29y
ZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlkID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAg
ICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzUmVz
dHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1
bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRX
b3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRv
a2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdv
cmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJzZVBhcmFt
cyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOworICAgICAg
ICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1w
LmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7CisgICAgICAgICAg
ICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1N0
cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0ID0gcHJl
dmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgewor
ICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVzdHJpY3RlZCwg
bWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0S2V5
d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRl
bnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgICAgIGlm
IChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVz
dHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgIHN0cmljdGVk
ID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0
cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2Ug
PSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3Ry
aWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vy
cm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0
cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHN0cmlj
dGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmlj
dDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5j
dGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9
CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQo
KSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAg
ICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgJ2Nv
bnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAgICAgICAgY2Fz
ZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
U3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJj
ZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMg
PSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkOworCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzb3VyY2VFbGVt
ZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5w
dXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVz
c2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIC8vIHRoaXMg
aXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9r
ZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcp
IHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChm
aXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmly
c3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0
UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
c291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAgLyogaXN0
YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQg
PT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBib2R5LCBzdGFydFRva2VuOworCisgICAg
ICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisKKyAgICAgICAgYm9keSA9IHBh
cnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAgICAgICAgdmFyIGksIGVudHJ5LCB0b2tl
biwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNbaV07CisgICAg
ICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLAorICAg
ICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIHRva2VuLnJhbmdlID0gZW50
cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgZXh0cmEu
dG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9w
dGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAorICAgICAgICAgICAgdG9rZW4sCisgICAg
ICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlm
ICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkg
eworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7
CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3Ro
ID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0g
c291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUg
PSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9
LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVy
YXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAg
bGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9Owor
CisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLgor
ICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRva2VucyA9IFtd
OworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4IHRva2Vucy4K
KyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0cmEub3BlbkN1
cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5y
YW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBleHRyYS5sb2Mg
PSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOworCisg
ICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9u
cy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICB9
CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9w
dGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOworICAgICAg
ICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWsoKTsKKyAgICAgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW4gPSBsZXgo
KTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7Cisg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
KyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgeworICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9y
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4RXJyb3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmly
c3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGluZmluaXRlIGxv
b3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJvcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgdG9rZW5zID0gZXh0
cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBleHRyYS5jb21t
ZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3Jz
ICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJvcnMgPSBleHRy
YS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBleHRyYSA9IHt9
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7
CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBlb2YgY29kZSAh
PT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgICAg
Y29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZWdhdGUgPSBT
eW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAgICAgIGluZGV4
ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDsK
KyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsK
KyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7CisgICAgICAgICAg
ICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAgICAgICAgICAg
aW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAor
ICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENvbW1lbnRTdGFy
dDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9OworICAgICAgICBpZiAodHlw
ZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBleHRyYS5yYW5nZSA9
ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOwor
ICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4n
KSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1lbnQgPSAodHlw
ZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmF0dGFj
aENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2Ug
IT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jvb2xlYW4n
ICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9
PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJh
LmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9w
dGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7CisgICAg
ICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJhLnJhbmdl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICAg
ICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKKyAgICAgICAgICAgICAgICBleHRy
YS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0Nv
bW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpOworICAgICAgICAgICAgaWYgKHR5
cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS50
b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlw
ZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBwcm9n
cmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJvZ3JhbTsK
KyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOwor
CisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBjb3B5LgorICAgLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBvcnRzLlN5bnRheCA9IChmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9OworCisgICAgICAgIGlmICh0eXBlb2Yg
T2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgdHlwZXMgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuYW1lIGluIFN5bnRh
eCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAg
ICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4W25hbWVdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09PSAnZnVuY3Rp
b24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOworCit9KSk7CisvKiB2aW06IHNldCBzdz00
IHRzPTQgZXQgdHc9ODAgOiAqLworCit9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQg
PGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi8KKy8qanNoaW50IGluZGVu
dDo0Ki8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRydWUqLworKGZ1bmN0aW9uIChy
b290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1v
ZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAor
ICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsCisgICAgaWYgKHR5cGVvZiBkZWZpbmUg
PT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICBkZWZpbmUoWydleHBvcnRz
J10sIGZhY3RvcnkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZmFjdG9yeSgocm9vdC5lc3RyYXZlcnNlID0ge30pKTsKKyAgICB9Cit9KHRoaXMsIGZ1bmN0aW9u
IChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFN5bnRheCwKKyAgICAg
ICAgaXNBcnJheSwKKyAgICAgICAgVmlzaXRvck9wdGlvbiwKKyAgICAgICAgVmlzaXRvcktleXMs
CisgICAgICAgIEJSRUFLLAorICAgICAgICBTS0lQOworCisgICAgU3ludGF4ID0geworICAgICAg
ICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKKyAgICAgICAg
QXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQXJyYXlQYXR0ZXJu
OiAnQXJyYXlQYXR0ZXJuJywKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0
ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisg
ICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAgICBDYWxsRXhw
cmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENs
YXVzZScsCisgICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsCisgICAgICAgIENsYXNzRGVj
bGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJywKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiAn
Q2xhc3NFeHByZXNzaW9uJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0
aW9uYWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0
YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQn
LAorICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1lbnQnLAorICAg
ICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAgICAgIEVtcHR5
U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50
OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0YXRl
bWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAorICAgICAg
ICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsCisgICAgICAgIEZ1
bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIElkZW50aWZp
ZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsCisg
ICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xh
YmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHBy
ZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAor
ICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsCisgICAgICAgIE5l
d0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjog
J09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVy
bicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAgUHJvcGVydHk6ICdQcm9w
ZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisgICAg
ICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCisgICAgICAgIFN3
aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAgIFN3aXRjaENhc2U6ICdT
d2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsCisg
ICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAgICBUcnlTdGF0
ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4
cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbics
CisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJywKKyAg
ICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywKKyAgICAgICAg
V2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6
ICdXaXRoU3RhdGVtZW50JywKKyAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNz
aW9uJworICAgIH07CisKKyAgICBmdW5jdGlvbiBpZ25vcmVKU0hpbnRFcnJvcigpIHsgfQorCisg
ICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgaWYgKCFpc0FycmF5KSB7CisgICAgICAg
IGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7CisgICAgICAgICAgICByZXR1cm4g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmplY3QgQXJyYXld
JzsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWVwQ29weShvYmopIHsKKyAg
ICAgICAgdmFyIHJldCA9IHt9LCBrZXksIHZhbDsKKyAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7
CisgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAg
ICAgICB2YWwgPSBvYmpba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0g
J29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFtrZXld
ID0gZGVlcENvcHkodmFsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICByZXRba2V5XSA9IHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
aGFsbG93Q29weShvYmopIHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7CisgICAgICAgIGZv
ciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7CisgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZ25vcmVKU0hpbnRF
cnJvcihzaGFsbG93Q29weSk7CisKKyAgICAvLyBiYXNlZCBvbiBMTFZNIGxpYmMrKyB1cHBlcl9i
b3VuZCAvIGxvd2VyX2JvdW5kCisgICAgLy8gTUlUIExpY2Vuc2UKKworICAgIGZ1bmN0aW9uIHVw
cGVyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVu
dDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGkgPSAwOworCisgICAg
ICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAg
ICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJy
ZW50XSkpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVu
IC09IGRpZmYgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAg
ICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5n
dGg7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAg
IGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAg
ICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAgICAgICBpID0g
Y3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICBpZ25vcmVKU0hpbnRFcnJv
cihsb3dlckJvdW5kKTsKKworICAgIFZpc2l0b3JLZXlzID0geworICAgICAgICBBc3NpZ25tZW50
RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIEFycmF5RXhwcmVzc2lvbjog
WydlbGVtZW50cyddLAorICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSwKKyAgICAg
ICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3Qn
LCAnYm9keSddLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sCisgICAgICAgIEJp
bmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBCcmVha1N0YXRlbWVu
dDogWydsYWJlbCddLAorICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1l
bnRzJ10sCisgICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSwKKyAgICAgICAg
Q2xhc3NCb2R5OiBbJ2JvZHknXSwKKyAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdi
b2R5JywgJ3N1cGVyQ2xhc3MnXSwKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ2Jv
ZHknLCAnc3VwZXJDbGFzcyddLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFsndGVz
dCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLAorICAgICAgICBDb250aW51ZVN0YXRlbWVu
dDogWydsYWJlbCddLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogW10sCisgICAgICAgIERp
cmVjdGl2ZVN0YXRlbWVudDogW10sCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFsnYm9keScs
ICd0ZXN0J10sCisgICAgICAgIEVtcHR5U3RhdGVtZW50OiBbXSwKKyAgICAgICAgRXhwcmVzc2lv
blN0YXRlbWVudDogWydleHByZXNzaW9uJ10sCisgICAgICAgIEZvclN0YXRlbWVudDogWydpbml0
JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSwKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6IFsn
bGVmdCcsICdyaWdodCcsICdib2R5J10sCisgICAgICAgIEZvck9mU3RhdGVtZW50OiBbJ2xlZnQn
LCAncmlnaHQnLCAnYm9keSddLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBbJ2lkJywg
J3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwKKyAgICAgICAgRnVuY3Rpb25F
eHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwK
KyAgICAgICAgSWRlbnRpZmllcjogW10sCisgICAgICAgIElmU3RhdGVtZW50OiBbJ3Rlc3QnLCAn
Y29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSwKKyAgICAgICAgTGl0ZXJhbDogW10sCisgICAgICAg
IExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLAorICAgICAgICBMb2dpY2FsRXhw
cmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsn
b2JqZWN0JywgJ3Byb3BlcnR5J10sCisgICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5Jywg
J3ZhbHVlJ10sCisgICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cydd
LAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSwKKyAgICAgICAgT2Jq
ZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgIFByb2dyYW06IFsnYm9keSddLAor
ICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSwKKyAgICAgICAgUmV0dXJuU3RhdGVt
ZW50OiBbJ2FyZ3VtZW50J10sCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogWydleHByZXNz
aW9ucyddLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFsnZGlzY3JpbWluYW50JywgJ2Nhc2Vz
J10sCisgICAgICAgIFN3aXRjaENhc2U6IFsndGVzdCcsICdjb25zZXF1ZW50J10sCisgICAgICAg
IFRoaXNFeHByZXNzaW9uOiBbXSwKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQn
XSwKKyAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXJzJywgJ2hhbmRsZXIn
LCAnZ3VhcmRlZEhhbmRsZXJzJywgJ2ZpbmFsaXplciddLAorICAgICAgICBVbmFyeUV4cHJlc3Np
b246IFsnYXJndW1lbnQnXSwKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydhcmd1bWVudCdd
LAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucyddLAorICAgICAg
ICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLAorICAgICAgICBXaGlsZVN0YXRl
bWVudDogWyd0ZXN0JywgJ2JvZHknXSwKKyAgICAgICAgV2l0aFN0YXRlbWVudDogWydvYmplY3Qn
LCAnYm9keSddLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQnXQorICAgIH07
CisKKyAgICAvLyB1bmlxdWUgaWQKKyAgICBCUkVBSyA9IHt9OworICAgIFNLSVAgPSB7fTsKKwor
ICAgIFZpc2l0b3JPcHRpb24gPSB7CisgICAgICAgIEJyZWFrOiBCUkVBSywKKyAgICAgICAgU2tp
cDogU0tJUAorICAgIH07CisKKyAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHsK
KyAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHRoaXMua2V5ID0ga2V5Owor
ICAgIH0KKworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxh
Y2Uobm9kZSkgeworICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlOworICAgIH07
CisKKyAgICBmdW5jdGlvbiBFbGVtZW50KG5vZGUsIHBhdGgsIHdyYXAsIHJlZikgeworICAgICAg
ICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICB0aGlzLnBhdGggPSBwYXRoOworICAgICAgICB0
aGlzLndyYXAgPSB3cmFwOworICAgICAgICB0aGlzLnJlZiA9IHJlZjsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBDb250cm9sbGVyKCkgeyB9CisKKyAgICAvLyBBUEk6CisgICAgLy8gcmV0dXJuIHBy
b3BlcnR5IHBhdGggYXJyYXkgZnJvbSByb290IHRvIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xs
ZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkgeworICAgICAgICB2YXIgaSwgaXos
IGosIGp6LCByZXN1bHQsIGVsZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkVG9QYXRoKHJl
c3VsdCwgcGF0aCkgeworICAgICAgICAgICAgaWYgKGlzQXJyYXkocGF0aCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGogPSAwLCBqeiA9IHBhdGgubGVuZ3RoOyBqIDwgano7ICsraikgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoW2pdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcm9vdCBub2RlCisgICAg
ICAgIGlmICghdGhpcy5fX2N1cnJlbnQucGF0aCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0KKworICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsLCBzZWNvbmQg
bm9kZSBpcyByb290IGVsZW1lbnQKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
aSA9IDIsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICBlbGVtZW50ID0gdGhpcy5fX2xlYXZlbGlzdFtpXTsKKyAgICAgICAgICAgIGFkZFRv
UGF0aChyZXN1bHQsIGVsZW1lbnQucGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgYWRkVG9QYXRo
KHJlc3VsdCwgdGhpcy5fX2N1cnJlbnQucGF0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyByZXR1cm4gYXJyYXkgb2YgcGFyZW50IGVsZW1l
bnRzCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUucGFyZW50cyA9IGZ1bmN0aW9uIHBhcmVudHMo
KSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVzdWx0OworCisgICAgICAgIC8vIGZpcnN0IG5vZGUg
aXMgc2VudGluZWwKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAoaSA9IDEsIGl6
ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICBy
ZXN1bHQucHVzaCh0aGlzLl9fbGVhdmVsaXN0W2ldLm5vZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIHJldHVybiBj
dXJyZW50IG5vZGUKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24g
Y3VycmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19jdXJyZW50Lm5vZGU7CisgICAgfTsK
KworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9fZXhlY3V0ZSA9IGZ1bmN0aW9uIF9fZXhlY3V0
ZShjYWxsYmFjaywgZWxlbWVudCkgeworICAgICAgICB2YXIgcHJldmlvdXMsIHJlc3VsdDsKKwor
ICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgcHJldmlvdXMgID0gdGhpcy5f
X2N1cnJlbnQ7CisgICAgICAgIHRoaXMuX19jdXJyZW50ID0gZWxlbWVudDsKKyAgICAgICAgdGhp
cy5fX3N0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBjYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQubm9kZSwgdGhpcy5fX2xlYXZlbGlz
dFt0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aCAtIDFdLm5vZGUpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX19jdXJyZW50ID0gcHJldmlvdXM7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIG5vdGlmeSBjb250cm9sIHNraXAgLyBicmVhawor
ICAgIENvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShmbGFnKSB7
CisgICAgICAgIHRoaXMuX19zdGF0ZSA9IGZsYWc7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAg
ICAvLyBza2lwIGNoaWxkIG5vZGVzIG9mIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xsZXIucHJv
dG90eXBlLnNraXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubm90aWZ5KFNLSVApOwor
ICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gYnJlYWsgdHJhdmVyc2FscworICAgIENvbnRy
b2xsZXIucHJvdG90eXBlWydicmVhayddID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm5v
dGlmeShCUkVBSyk7CisgICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlh
bGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdGhpcy52aXNpdG9yID0g
dmlzaXRvcjsKKyAgICAgICAgdGhpcy5yb290ID0gcm9vdDsKKyAgICAgICAgdGhpcy5fX3dvcmts
aXN0ID0gW107CisgICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5f
X2N1cnJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsOworICAgIH07CisK
KyAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJv
b3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVs
aXN0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICBub2RlVHlwZSwKKyAgICAgICAgICAgIHJldCwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAg
ICAgIGN1cnJlbnQsCisgICAgICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0
ZXMsCisgICAgICAgICAgICBjYW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5lbDsKKworICAg
ICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTsKKworICAgICAgICBzZW50aW5l
bCA9IHt9OworCisgICAgICAgIC8vIHJlZmVyZW5jZQorICAgICAgICB3b3JrbGlzdCA9IHRoaXMu
X193b3JrbGlzdDsKKyAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDsKKworICAg
ICAgICAvLyBpbml0aWFsaXplCisgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9v
dCwgbnVsbCwgbnVsbCwgbnVsbCkpOworICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVu
dChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxl
bmd0aCkgeworICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAg
ICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
ID0gbGVhdmVsaXN0LnBvcCgpOworCisgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1
dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
X3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHsKKworICAgICAg
ICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpOwor
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBC
UkVBSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAgICAgICAg
ICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
X3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkgeworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBub2RlID0gZWxl
bWVudC5ub2RlOworICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5v
ZGUudHlwZTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktleXNbbm9kZVR5
cGVdOworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOworICAg
ICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07CisgICAgICAgICAgICAgICAgICAgIGNh
bmRpZGF0ZSA9IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0ZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRl
LCBrZXksIG51bGwsIG51bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudDIgPSBj
YW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09
IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJl
bnQyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChub2RlVHlwZSA9
PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQ
YXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGNhbmRpZGF0ZXNbY3VycmVudF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1
cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVs
bCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIENv
bnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0
b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVsaXN0LAorICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIG5vZGVUeXBlLAorICAgICAgICAgICAgdGFyZ2V0
LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIGN1cnJlbnQsCisgICAgICAgICAg
ICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMsCisgICAgICAgICAgICBjYW5kaWRh
dGUsCisgICAgICAgICAgICBzZW50aW5lbCwKKyAgICAgICAgICAgIG91dGVyLAorICAgICAgICAg
ICAga2V5OworCisgICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpOworCisg
ICAgICAgIHNlbnRpbmVsID0ge307CisKKyAgICAgICAgLy8gcmVmZXJlbmNlCisgICAgICAgIHdv
cmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0OworICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVh
dmVsaXN0OworCisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgb3V0ZXIgPSB7CisgICAg
ICAgICAgICByb290OiByb290CisgICAgICAgIH07CisgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxl
bWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9vdCcpKTsKKyAg
ICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxl
bWVudCk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAg
ZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0g
c2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpOwor
CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwg
ZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRo
IG51bGwsCisgICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmlu
ZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09
IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQu
cmVmLnJlcGxhY2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFy
Z2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7CisKKyAgICAgICAg
ICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCwKKyAgICAgICAgICAgIC8vIHNv
IGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2UKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYm
IHRhcmdldCAhPT0gU0tJUCkgeworICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5ub2RlID0gdGFyZ2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhp
cy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG91dGVyLnJvb3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5v
ZGUgbWF5IGJlIG51bGwKKyAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7CisgICAgICAg
ICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAgICAgICBs
ZWF2ZWxpc3QucHVzaChlbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9
PT0gU0tJUCB8fCB0YXJnZXQgPT09IFNLSVApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAgfHwg
bm9kZS50eXBlOworICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JLZXlzW25vZGVUeXBl
XTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOworICAgICAgICAg
ICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBj
YW5kaWRhdGVzW2N1cnJlbnRdOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5
XTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlz
QXJyYXkoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5l
dyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBuZXcgUmVmZXJlbmNlKG5vZGUsIGtleSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAg
ICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
VHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gJiYgJ3Byb3BlcnRpZXMnID09PSBjYW5k
aWRhdGVzW2N1cnJlbnRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3
IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHkn
LCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVu
dChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5ldyBSZWZlcmVu
Y2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7Cisg
ICAgfTsKKworICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAg
dmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpOworICAgICAgICByZXR1cm4gY29udHJv
bGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBs
YWNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJv
bGxlcigpOworICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3Ip
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tl
bnMpIHsKKyAgICAgICAgdmFyIHRhcmdldDsKKworICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5k
KHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdG9r
ZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdOworICAgICAgICB9KTsKKworICAgICAgICBj
b21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsx
XV07CisKKyAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAg
ICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07Cisg
ICAgICAgIH0KKworICAgICAgICB0YXJnZXQgLT0gMTsKKyAgICAgICAgaWYgKHRhcmdldCA+PSAw
KSB7CisgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0
XS5yYW5nZVsxXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21tZW50OworICAgIH0K
KworICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRv
a2VucykgeworICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRl
ZCBjb21tZW50IHJhbmdlcy4KKyAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxl
biwgaSwgY3Vyc29yOworCisgICAgICAgIGlmICghdHJlZS5yYW5nZSkgeworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRh
Y2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJworICAgICAgICBpZiAoIXRv
a2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkg
eworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVu
Z3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRl
ZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICBjb21tZW50
LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07CisgICAgICAgICAgICAgICAgICAg
IGNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJlZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDAsIGxl
biA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAg
ICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29t
bWVudHNbaV0pLCB0b2tlbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgaXMgYmFz
ZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGN1cnNvciA9IDA7
CisgICAgICAgIHRyYXZlcnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAg
d2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBj
b21tZW50ID0gY29tbWVudHNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1l
bnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdD
b21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMu
c3BsaWNlKGN1cnNvciwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVk
IG5vZGUKKyAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5k
ZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFZpc2l0b3JPcHRpb24uU2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworCisgICAgICAgIGN1cnNvciA9IDA7CisgICAgICAgIHRyYXZlcnNlKHRyZWUs
IHsKKyAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgICAg
IHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRz
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29y
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVu
ZGVkUmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09
IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJz
b3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGUKKyAgICAgICAgICAgICAg
ICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFu
Z2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAg
IHJldHVybiB0cmVlOworICAgIH0KKworICAgIGV4cG9ydHMudmVyc2lvbiA9ICcxLjUuMS1kZXYn
OworICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4OworICAgIGV4cG9ydHMudHJhdmVyc2UgPSB0
cmF2ZXJzZTsKKyAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlOworICAgIGV4cG9ydHMuYXR0
YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50czsKKyAgICBleHBvcnRzLlZpc2l0b3JLZXlzID0g
VmlzaXRvcktleXM7CisgICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRvck9wdGlvbjsK
KyAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyOworfSkpOworLyogdmltOiBzZXQg
c3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIFRvT2JqZWN0KHZhbCkgewor
CWlmICh2YWwgPT0gbnVsbCkgeworCQl0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWdu
IGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpOworCX0KKworCXJldHVy
biBPYmplY3QodmFsKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1
bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworCXZhciBwZW5kaW5nRXhjZXB0aW9uOworCXZhciBm
cm9tOworCXZhciBrZXlzOworCXZhciB0byA9IFRvT2JqZWN0KHRhcmdldCk7CisKKwlmb3IgKHZh
ciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworCQlmcm9tID0gYXJndW1lbnRz
W3NdOworCQlrZXlzID0gT2JqZWN0LmtleXMoT2JqZWN0KGZyb20pKTsKKworCQlmb3IgKHZhciBp
ID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJdG9ba2V5c1tpXV0g
PSBmcm9tW2tleXNbaV1dOworCQkJfSBjYXRjaCAoZXJyKSB7CisJCQkJaWYgKHBlbmRpbmdFeGNl
cHRpb24gPT09IHVuZGVmaW5lZCkgeworCQkJCQlwZW5kaW5nRXhjZXB0aW9uID0gZXJyOworCQkJ
CX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwZW5kaW5nRXhjZXB0aW9uKSB7CisJCXRocm93IHBl
bmRpbmdFeGNlcHRpb247CisJfQorCisJcmV0dXJuIHRvOworfTsKKworfSx7fV0sOTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgTWFpbiBF
U0xpbnQgb2JqZWN0LgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmltYSIpLAor
ICAgIGVzdHJhdmVyc2UgPSByZXF1aXJlKCJlc3RyYXZlcnNlIiksCisgICAgZXNjb3BlID0gcmVx
dWlyZSgiZXNjb3BlIiksCisgICAgZW52aXJvbm1lbnRzID0gcmVxdWlyZSgiLi4vY29uZi9lbnZp
cm9ubWVudHMuanNvbiIpLAorICAgIGFzc2lnbiA9IHJlcXVpcmUoIm9iamVjdC1hc3NpZ24iKSwK
KyAgICBydWxlcyA9IHJlcXVpcmUoIi4vcnVsZXMiKSwKKyAgICB1dGlsID0gcmVxdWlyZSgiLi91
dGlsIiksCisgICAgUnVsZUNvbnRleHQgPSByZXF1aXJlKCIuL3J1bGUtY29udGV4dCIpLAorICAg
IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhlbHBlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Z1bmN0aW9uIGVzY2FwZVJlZ0V4cChyeCkgeworICAgIHJldHVybiByeC5yZXBsYWNlKC9bXC1c
W1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7Cit9CisKKy8qKgorICog
UGFyc2VzIGEgbGlzdCBvZiAibmFtZTpib29sZWFuX3ZhbHVlIiBvci9hbmQgIm5hbWUiIG9wdGlv
bnMgZGl2aWRlZCBieSBjb21tYSBvcgorICogd2hpdGVzcGFjZS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3Vs
dCBtYXAgb2JqZWN0IG9mIG5hbWVzIGFuZCBib29sZWFuIHZhbHVlcworICovCitmdW5jdGlvbiBw
YXJzZUJvb2xlYW5Db25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgLy8g
Q29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgOiB0byBtYWtlIHBhcnNpbmcgZWFzaWVyCisgICAg
c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKjpccyovZywgIjoiKTsKKyAgICAvLyBDb2xsYXBz
ZSB3aGl0ZXNwYWNlIGFyb3VuZCAsCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKixc
cyovZywgIiwiKTsKKyAgICBzdHJpbmcuc3BsaXQoL1xzfCwrLykuZm9yRWFjaChmdW5jdGlvbihu
YW1lKSB7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZhciBwb3MgPSBuYW1lLmluZGV4T2YoIjoiKSwKKyAgICAgICAgICAgIHZh
bHVlOworICAgICAgICBpZiAocG9zICE9PSAtMSkgeworICAgICAgICAgICAgdmFsdWUgPSBuYW1l
LnN1YnN0cmluZyhwb3MgKyAxLCBuYW1lLmxlbmd0aCk7CisgICAgICAgICAgICBuYW1lID0gbmFt
ZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1zW25hbWVdID0g
KHZhbHVlID09PSAidHJ1ZSIpOworCisgICAgfSk7CisgICAgcmV0dXJuIGl0ZW1zOworfQorCisv
KioKKyAqIFBhcnNlcyBhIEpTT04tbGlrZSBjb25maWcuCisgKiBAcGFyYW0ge3N0cmluZ30gc3Ry
aW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgbWFw
IG9iamVjdAorICovCitmdW5jdGlvbiBwYXJzZUpzb25Db25maWcoc3RyaW5nKSB7CisgICAgdmFy
IGl0ZW1zID0ge307CisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XC1cL10r
KTovZywgIlwiJDFcIjoiKS5yZXBsYWNlKC8oXF18WzAtOV0pXHMrKD89IikvLCAiJDEsIik7Cisg
ICAgdHJ5IHsKKyAgICAgICAgaXRlbXMgPSBKU09OLnBhcnNlKCJ7IiArIHN0cmluZyArICJ9Iik7
CisgICAgfSBjYXRjaChlKSB7IH0KKworICAgIHJldHVybiBpdGVtczsKK30KKworLyoqCisgKiBQ
YXJzZXMgYSBjb25maWcgb2YgdmFsdWVzIHNlcGFyYXRlZCBieSBjb21tYS4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9
IFJlc3VsdCBtYXAgb2YgdmFsdWVzIGFuZCB0cnVlIHZhbHVlcworICovCitmdW5jdGlvbiBwYXJz
ZUxpc3RDb25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgLy8gQ29sbGFw
c2Ugd2hpdGVzcGFjZSBhcm91bmQgLAorICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9ccyos
XHMqL2csICIsIik7CisgICAgc3RyaW5nLnNwbGl0KC8sKy8pLmZvckVhY2goZnVuY3Rpb24obmFt
ZSkgeworICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7CisgICAgICAgIGlmICghbmFtZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGl0ZW1zW25hbWVdID0gdHJ1
ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKKy8qKgorICogQHBhcmFtIHtTY29w
ZX0gc2NvcGUgVGhlIHNjb3BlIG9iamVjdCB0byBjaGVjay4KKyAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBsb29rIHVwLgorICogQHJldHVybnMge1Zh
cmlhYmxlfSBUaGUgdmFyaWFibGUgb2JqZWN0IGlmIGZvdW5kIG9yIG51bGwgaWYgbm90LgorICov
CitmdW5jdGlvbiBnZXRWYXJpYWJsZShzY29wZSwgbmFtZSkgeworICAgIHZhciB2YXJpYWJsZSA9
IG51bGw7CisgICAgc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odikgeworICAgICAgICBp
ZiAodi5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHY7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgfSk7CisgICAgcmV0dXJuIHZhcmlhYmxlOworfQorCisv
KioKKyAqIEVuc3VyZXMgdGhhdCB2YXJpYWJsZXMgcmVwcmVzZW50aW5nIGJ1aWx0LWluIHByb3Bl
cnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QsCisgKiBhbmQgYW55IGdsb2JhbHMgZGVjbGFyZWQg
Ynkgc3BlY2lhbCBibG9jayBjb21tZW50cywgYXJlIHByZXNlbnQgaW4gdGhlIGdsb2JhbAorICog
c2NvcGUuCisgKiBAcGFyYW0ge0FTVE5vZGV9IHByb2dyYW0gVGhlIHRvcCBub2RlIG9mIHRoZSBB
U1QuCisgKiBAcGFyYW0ge1Njb3BlfSBnbG9iYWxTY29wZSBUaGUgZ2xvYmFsIHNjb3BlLgorICog
QHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBkYXRhLgor
ICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGFkZERlY2xhcmVkR2xvYmFscyhwcm9n
cmFtLCBnbG9iYWxTY29wZSwgY29uZmlnKSB7CisgICAgdmFyIGRlY2xhcmVkR2xvYmFscyA9IHt9
LAorICAgICAgICBleHBsaWNpdEdsb2JhbHMgPSB7fSwKKyAgICAgICAgYnVpbHRpbiA9IGVudmly
b25tZW50cy5idWlsdGluOworCisgICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywgYnVpbHRpbik7
CisKKyAgICBPYmplY3Qua2V5cyhjb25maWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGlmIChjb25maWcuZW52W25hbWVdKSB7CisgICAgICAgICAgICB2YXIgZW52aXJv
bm1lbnRHbG9iYWxzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50c1tuYW1lXS5n
bG9iYWxzOworICAgICAgICAgICAgaWYgKGVudmlyb25tZW50R2xvYmFscykgeworICAgICAgICAg
ICAgICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMsIGVudmlyb25tZW50R2xvYmFscyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2lnbihkZWNsYXJlZEdsb2Jh
bHMsIGNvbmZpZy5nbG9iYWxzKTsKKyAgICBhc3NpZ24oZXhwbGljaXRHbG9iYWxzLCBjb25maWcu
YXN0R2xvYmFscyk7CisKKyAgICBPYmplY3Qua2V5cyhkZWNsYXJlZEdsb2JhbHMpLmZvckVhY2go
ZnVuY3Rpb24obmFtZSkgeworICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXRWYXJpYWJsZShnbG9i
YWxTY29wZSwgbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHZh
cmlhYmxlID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBnbG9iYWxTY29wZSk7CisgICAgICAg
ICAgICB2YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9IGZhbHNlOworICAgICAgICAgICAg
Z2xvYmFsU2NvcGUudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICB9CisgICAgICAg
IHZhcmlhYmxlLndyaXRlYWJsZSA9IGRlY2xhcmVkR2xvYmFsc1tuYW1lXTsKKyAgICB9KTsKKwor
ICAgIE9iamVjdC5rZXlzKGV4cGxpY2l0R2xvYmFscykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7
CisgICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxlKGdsb2JhbFNjb3BlLCBuYW1lKTsK
KyAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgZXNj
b3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLmVz
bGludEV4cGxpY2l0R2xvYmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlLnZhcmlh
Ymxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICB2YXJpYWJsZS53cml0ZWFi
bGUgPSBleHBsaWNpdEdsb2JhbHNbbmFtZV07CisgICAgfSk7Cit9CisKKy8qKgorICogQWRkIGRh
dGEgdG8gcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSByZXBvcnRpbmcgZm9yIGxp
c3Qgb2YgcnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAg
e09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlv
bgorICogQHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFt
ICB7c3RyaW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICov
CitmdW5jdGlvbiBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgc3RhcnQsIHJ1bGVz
KSB7CisKKyAgICBpZiAocnVsZXMubGVuZ3RoKSB7CisgICAgICAgIHJ1bGVzLmZvckVhY2goZnVu
Y3Rpb24ocnVsZSkgeworICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2goeworICAgICAg
ICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IG51bGwsCisgICAg
ICAgICAgICAgICAgcnVsZTogcnVsZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJlcG9ydGluZ0NvbmZpZy5wdXNoKHsKKyAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogbnVsbCwKKyAgICAgICAgICAgIHJ1bGU6IG51
bGwKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvKioKKyAqIEFkZCBkYXRhIHRvIHJlcG9ydGlu
ZyBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSByZXBvcnRpbmcgZm9yIGxpc3Qgb2YgcnVsZXMKKyAq
IHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAge09iamVjdFtdfSByZXBv
cnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlvbgorICogQHBhcmFtICB7
T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFtICB7c3RyaW5nW119IHJ1
bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBlbmFi
bGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwgcnVsZXMpIHsKKyAgICB2YXIgaTsK
KworICAgIGlmIChydWxlcy5sZW5ndGgpIHsKKyAgICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlv
bihydWxlKSB7CisgICAgICAgICAgICBmb3IgKGkgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZpZ1tp
XS5lbmQgJiYgcmVwb3J0aW5nQ29uZmlnW2ldLnJ1bGUgPT09IHJ1bGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBmaW5kIGFsbCBwcmV2aW91cyBkaXNhYmxlZCBs
b2NhdGlvbnMgaWYgdGhleSB3YXMgc3RhcnRlZCBhcyBsaXN0IG9mIHJ1bGVzCisgICAgICAgIHZh
ciBwcmV2U3RhcnQ7CisgICAgICAgIGZvciAoaSA9IHJlcG9ydGluZ0NvbmZpZy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHByZXZTdGFydCAmJiBwcmV2U3RhcnQg
IT09IHJlcG9ydGluZ0NvbmZpZ1tpXS5zdGFydCkgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQp
IHsKKyAgICAgICAgICAgICAgICByZXBvcnRpbmdDb25maWdbaV0uZW5kID0gc3RhcnQ7CisgICAg
ICAgICAgICAgICAgcHJldlN0YXJ0ID0gcmVwb3J0aW5nQ29uZmlnW2ldLnN0YXJ0OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKKy8qKgorICogUGFyc2VzIGNvbW1lbnRz
IGluIGZpbGUgdG8gZXh0cmFjdCBmaWxlLXNwZWNpZmljIGNvbmZpZyBvZiBydWxlcywgZ2xvYmFs
cworICogYW5kIGVudmlyb25tZW50cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBnbG9iYWwgY29uZmln
OyBhbHNvIGNvZGUgYmxvY2tzCisgKiB3aGVyZSByZXBvcnRpbmcgaXMgZGlzYWJsZWQgb3IgZW5h
YmxlZCBhbmQgbWVyZ2VzIHRoZW0gd2l0aCByZXBvcnRpbmcgY29uZmlnLgorICogQHBhcmFtIHtB
U1ROb2RlfSBhc3QgVGhlIHRvcCBub2RlIG9mIHRoZSBBU1QuCisgKiBAcGFyYW0ge09iamVjdH0g
Y29uZmlnIFRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIGRhdGEuCisgKiBAcGFyYW0ge09iamVj
dFtdfSByZXBvcnRpbmdDb25maWcgVGhlIGV4aXN0aW5nIHJlcG9ydGluZyBjb25maWd1cmF0aW9u
IGRhdGEuCisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gbW9kaWZ5Q29uZmlnc0Zy
b21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29uZmlnKSB7CisKKyAgICB2YXIgY29t
bWVudENvbmZpZyA9IHsKKyAgICAgICAgYXN0R2xvYmFsczoge30sCisgICAgICAgIHJ1bGVzOiB7
fSwKKyAgICAgICAgZW52OiB7fQorICAgIH07CisgICAgdmFyIGNvbW1lbnRSdWxlcyA9IHt9Owor
CisgICAgYXN0LmNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkgeworICAgICAgICBp
ZiAoY29tbWVudC50eXBlID09PSAiQmxvY2siKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9
IGNvbW1lbnQudmFsdWUudHJpbSgpOworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oZXNsaW50
LVx3K3xlc2xpbnR8Z2xvYmFscz8pKFxzfCQpLy5leGVjKHZhbHVlKTsKKworICAgICAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcobWF0
Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgc3dpdGNoICht
YXRjaFsxXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJnbG9iYWxzIjoKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiZ2xvYmFsIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwu
bWl4aW4oY29tbWVudENvbmZpZy5hc3RHbG9iYWxzLCBwYXJzZUJvb2xlYW5Db25maWcodmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgImVzbGludC1lbnYiOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5taXhpbihj
b21tZW50Q29uZmlnLmVudiwgcGFyc2VMaXN0Q29uZmlnKHZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJlc2xpbnQtZGlz
YWJsZSI6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGlu
Z0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQsIE9iamVjdC5rZXlzKHBhcnNlTGlzdENvbmZpZyh2
YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgImVzbGludC1lbmFibGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5h
YmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQsIE9iamVjdC5r
ZXlzKHBhcnNlTGlzdENvbmZpZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGludCI6CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaXRlbXMgPSBwYXJzZUpzb25Db25maWcodmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbXMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlVmFsdWUgPSBpdGVtc1tuYW1l
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVWYWx1ZSA9PT0g
Im51bWJlciIgfHwgKEFycmF5LmlzQXJyYXkocnVsZVZhbHVlKSAmJiB0eXBlb2YgcnVsZVZhbHVl
WzBdID09PSAibnVtYmVyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWVudFJ1bGVzW25hbWVdID0gcnVsZVZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgLy8gYXBwbHkg
ZW52aXJvbm1lbnQgcnVsZXMgYmVmb3JlIHVzZXIgcnVsZXMKKyAgICBPYmplY3Qua2V5cyhjb21t
ZW50Q29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgZW52
aXJvbm1lbnRSdWxlcyA9IGVudmlyb25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVudHNbbmFtZV0u
cnVsZXM7CisgICAgICAgIGlmIChjb21tZW50Q29uZmlnLmVudltuYW1lXSAmJiBlbnZpcm9ubWVu
dFJ1bGVzKSB7CisgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRDb25maWcucnVsZXMsIGVu
dmlyb25tZW50UnVsZXMpOworICAgICAgICB9CisgICAgfSk7CisgICAgdXRpbC5taXhpbihjb21t
ZW50Q29uZmlnLnJ1bGVzLCBjb21tZW50UnVsZXMpOworCisgICAgdXRpbC5tZXJnZUNvbmZpZ3Mo
Y29uZmlnLCBjb21tZW50Q29uZmlnKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBtZXNzYWdlIG9m
IHJ1bGUgd2l0aCBydWxlSWQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gbG9jYXRpb24KKyAqIEBwYXJh
bSAge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgIENvbGxlY3Rpb24gb2YgaWdub3JlIHJlY29y
ZHMKKyAqIEBwYXJhbSAge3N0cmluZ30gcnVsZUlkICAgSWQgb2YgcnVsZQorICogQHBhcmFtICB7
T2JqZWN0fSBsb2NhdGlvbiBMb2NhdGlvbiBvZiBtZXNzYWdlCisgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gICAgICAgICAgVHJ1ZSBpZiBtZXNzYWdlIHNob3VsZCBiZSBpZ25vcmVkLCBmYWxzZSBvdGhl
cndpc2UKKyAqLworZnVuY3Rpb24gaXNEaXNhYmxlZEJ5UmVwb3J0aW5nQ29uZmlnKHJlcG9ydGlu
Z0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikgeworCisgICAgZm9yICh2YXIgaSA9IDAsIGMgPSBy
ZXBvcnRpbmdDb25maWcubGVuZ3RoOyBpIDwgYzsgaSsrKSB7CisKKyAgICAgICAgdmFyIGlnbm9y
ZSA9IHJlcG9ydGluZ0NvbmZpZ1tpXTsKKyAgICAgICAgaWYgKCghaWdub3JlLnJ1bGUgfHwgaWdu
b3JlLnJ1bGUgPT09IHJ1bGVJZCkgJiYKKyAgICAgICAgICAgIChsb2NhdGlvbi5saW5lID4gaWdu
b3JlLnN0YXJ0LmxpbmUgfHwgKGxvY2F0aW9uLmxpbmUgPT09IGlnbm9yZS5zdGFydC5saW5lICYm
IGxvY2F0aW9uLmNvbHVtbiA+PSBpZ25vcmUuc3RhcnQuY29sdW1uKSkgJiYKKyAgICAgICAgICAg
ICghaWdub3JlLmVuZCB8fCAobG9jYXRpb24ubGluZSA8IGlnbm9yZS5lbmQubGluZSB8fCAobG9j
YXRpb24ubGluZSA9PT0gaWdub3JlLmVuZC5saW5lICYmIGxvY2F0aW9uLmNvbHVtbiA8PSBpZ25v
cmUuZW5kLmNvbHVtbikpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFByb2Nlc3MgaW5p
dGlhbCBjb25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZCBieSBmaWxlIGNvbW1lbnQgY29u
ZmlnCisgKiBAcGFyYW0gIHtPYmplY3R9IGNvbmZpZyBJbml0aWFsIGNvbmZpZworICogQHJldHVy
bnMge09iamVjdH0gICAgICAgIFByb2Nlc3NlZCBjb25maWcKKyAqLworZnVuY3Rpb24gcHJlcGFy
ZUNvbmZpZyhjb25maWcpIHsKKworICAgIGNvbmZpZy5nbG9iYWxzID0gY29uZmlnLmdsb2JhbHMg
fHwgY29uZmlnLmdsb2JhbCB8fCB7fTsKKyAgICBkZWxldGUgY29uZmlnLmdsb2JhbDsKKworICAg
IHZhciBjb3BpZWRSdWxlcyA9IHt9OworICAgIGlmICh0eXBlb2YgY29uZmlnLnJ1bGVzID09PSAi
b2JqZWN0IikgeworICAgICAgICBPYmplY3Qua2V5cyhjb25maWcucnVsZXMpLmZvckVhY2goZnVu
Y3Rpb24oaykgeworICAgICAgICAgICAgdmFyIHJ1bGUgPSBjb25maWcucnVsZXNba107CisgICAg
ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlKSkgeworICAgICAgICAgICAgICAgIGNvcGll
ZFJ1bGVzW2tdID0gcnVsZS5zbGljZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb3BpZWRSdWxlc1trXSA9IHJ1bGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIHJ1bGVzOiBjb3BpZWRSdWxlcywKKyAg
ICAgICAgZ2xvYmFsczogdXRpbC5tZXJnZUNvbmZpZ3Moe30sIGNvbmZpZy5nbG9iYWxzKSwKKyAg
ICAgICAgZW52OiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmVudiB8fCB7fSksCisgICAg
ICAgIHNldHRpbmdzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLnNldHRpbmdzIHx8IHt9
KQorICAgIH07Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQdWJsaWMgSW50ZXJm
YWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIE9iamVjdCB0aGF0IGlzIHJl
c3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgSmF2YVNjcmlwdCB0ZXh0CisgKiBAbmFtZSBlc2xpbnQK
KyAqLworbW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgYXBpID0gT2Jq
ZWN0LmNyZWF0ZShuZXcgRXZlbnRFbWl0dGVyKCkpLAorICAgICAgICBtZXNzYWdlcyA9IFtdLAor
ICAgICAgICBjdXJyZW50VGV4dCA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBb
XSwKKyAgICAgICAgY3VycmVudENvbmZpZyA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUb2tlbnMg
PSBudWxsLAorICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbCwKKyAgICAgICAgc2NvcGVNYXAg
PSBudWxsLAorICAgICAgICBjdXJyZW50RmlsZW5hbWUgPSBudWxsLAorICAgICAgICBjb250cm9s
bGVyID0gbnVsbCwKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW10sCisgICAgICAgIGNvbW1l
bnRMb2NzRW50ZXIgPSBbXSwKKyAgICAgICAgY29tbWVudExvY3NFeGl0ID0gW107CisKKyAgICAv
KioKKyAgICAgKiBQYXJzZXMgdGV4dCBpbnRvIGFuIEFTVC4gTW92ZWQgb3V0IGhlcmUgYmVjYXVz
ZSB0aGUgdHJ5LWNhdGNoIHByZXZlbnRzCisgICAgICogb3B0aW1pemF0aW9uIG9mIGZ1bmN0aW9u
cywgc28gaXQncyBiZXN0IHRvIGtlZXAgdGhlIHRyeS1jYXRjaCBhcyBpc29sYXRlZAorICAgICAq
IGFzIHBvc3NpYmxlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRleHQgdG8gcGFy
c2UuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBBU1QgaWYgc3VjY2Vzc2Z1bCBvciBu
dWxsIGlmIG5vdC4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHBhcnNl
KHRleHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIHBhcnNpbmcgZXJyb3Jz
IGZpcnN0LiBJZiB0aGVyZSdzIGEgcGFyc2luZyBlcnJvciwgbm90aGluZworICAgICAgICAgKiBl
bHNlIGNhbiBoYXBwZW4uIEhvd2V2ZXIsIGEgcGFyc2luZyBlcnJvciBkb2VzIG5vdCB0aHJvdyBh
biBlcnJvcgorICAgICAgICAgKiBmcm9tIHRoaXMgbWV0aG9kIC0gaXQncyBqdXN0IGNvbnNpZGVy
ZWQgYSBmYXRhbCBlcnJvciBtZXNzYWdlLCBhCisgICAgICAgICAqIHByb2JsZW0gdGhhdCBFU0xp
bnQgaWRlbnRpZmllZCBqdXN0IGxpa2UgYW55IG90aGVyLgorICAgICAgICAgKi8KKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBlc3ByaW1hLnBhcnNlKHRleHQsIHsKKyAgICAgICAg
ICAgICAgICBsb2M6IHRydWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IHRydWUsCisgICAgICAg
ICAgICAgICAgcmF3OiB0cnVlLAorICAgICAgICAgICAgICAgIHRva2VuczogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBjb21tZW50OiB0cnVlLAorICAgICAgICAgICAgICAgIGF0dGFjaENvbW1lbnQ6
IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChleCkgeworCisgICAgICAg
ICAgICBtZXNzYWdlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBzZXZlcml0eTogMiwKKworICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2VzIGNv
bWUgYXMgIkxpbmUgWDogVW5leHBlY3RlZCB0b2tlbiBmb28iLCBzbyBzdHJpcCBvZmYgbGVhZGlu
ZyBwYXJ0CisgICAgICAgICAgICAgICAgbWVzc2FnZTogZXgubWVzc2FnZS5zdWJzdHJpbmcoZXgu
bWVzc2FnZS5pbmRleE9mKCI6IikgKyAxKS50cmltKCksCisKKyAgICAgICAgICAgICAgICBsaW5l
OiBleC5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogZXguY29sdW1uCisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBjb2xsZWN0aW9uIG9mIGNvbW1lbnRzIHRvIHByZXZl
bnQgZG91YmxlIGV2ZW50IGZvciBjb21tZW50IGFzCisgICAgICogbGVhZGluZyBhbmQgdHJhaWxp
bmcsIHRoZW4gZW1pdCBldmVudCBpZiBwYXNzaW5nCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119
IGNvbW1lbnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEBwYXJhbSB7T2Jq
ZWN0W119IGxvY3MgTGlzdCBvZiBsb2NhdGlvbnMgb2YgcHJldmlvdXMgY29tbWVudCBub2Rlcwor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgRXZlbnQgbmFtZSBwb3N0Zml4CisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZW1pdENvbW1lbnRzKGNv
bW1lbnRzLCBsb2NzLCBldmVudE5hbWUpIHsKKworICAgICAgICBpZiAoY29tbWVudHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICBjb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobG9jcy5pbmRleE9mKG5vZGUubG9jKSA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxvY3Muc3BsaWNlKGxvY3MuaW5kZXhPZihub2RlLmxvYyksIDEpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvY3MucHVzaChub2RlLmxv
Yyk7CisgICAgICAgICAgICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSArIGV2ZW50TmFtZSwg
bm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBlbnRlciBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1lbnRzIENvbGxl
Y3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzKSB7CisgICAgICAgIGVtaXRD
b21tZW50cyhjb21tZW50cywgY29tbWVudExvY3NFbnRlciwgIkNvbW1lbnQiKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBleGl0IG9mIGNvbW1l
bnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29sbGVjdGlvbiBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gZW1pdENvbW1lbnRzRXhpdChjb21tZW50cykgeworICAgICAgICBlbWl0Q29tbWVudHMo
Y29tbWVudHMsIGNvbW1lbnRMb2NzRXhpdCwgIkNvbW1lbnQ6ZXhpdCIpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEdldCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgYSBydWxlICgwIC0gbm9uZSwg
MSAtIHdhcm5pbmcsIDIgLSBlcnJvcikKKyAgICAgKiBSZXR1cm5zIDAgaWYgdGhlIHJ1bGUgY29u
ZmlnIGlzIG5vdCB2YWxpZCAoYW4gQXJyYXkgb3IgYSBudW1iZXIpCisgICAgICogQHBhcmFtIHtB
cnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVy
bnMge251bWJlcn0gMCwgMSwgb3IgMiwgaW5kaWNhdGluZyBydWxlIHNldmVyaXR5CisgICAgICov
CisgICAgZnVuY3Rpb24gZ2V0UnVsZVNldmVyaXR5KHJ1bGVDb25maWcpIHsKKyAgICAgICAgaWYg
KHR5cGVvZiBydWxlQ29uZmlnID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgcmV0dXJuIHJ1
bGVDb25maWc7CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShydWxlQ29uZmlnKSkg
eworICAgICAgICAgICAgcmV0dXJuIHJ1bGVDb25maWdbMF07CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAq
IEdldCB0aGUgb3B0aW9ucyBmb3IgYSBydWxlIChub3QgaW5jbHVkaW5nIHNldmVyaXR5KSwgaWYg
YW55CisgICAgICogQHBhcmFtIHtBcnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1
cmF0aW9uCisgICAgICogQHJldHVybnMge0FycmF5fSBvZiBydWxlIG9wdGlvbnMsIGVtcHR5IEFy
cmF5IGlmIG5vbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSdWxlT3B0aW9ucyhydWxlQ29u
ZmlnKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7CisgICAgICAg
ICAgICByZXR1cm4gcnVsZUNvbmZpZy5zbGljZSgxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNldCB1bmxpbWl0
ZWQgbGlzdGVuZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVz
LzUyNCkKKyAgICBhcGkuc2V0TWF4TGlzdGVuZXJzKDApOworCisgICAgLyoqCisgICAgICogUmVz
ZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHt2
b2lkfQorICAgICAqLworICAgIGFwaS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LnJlbW92ZUFsbExpc3RlbmVycygpOworICAgICAgICBtZXNzYWdlcyA9IFtdOworICAgICAgICBj
dXJyZW50Q29uZmlnID0gbnVsbDsKKyAgICAgICAgY3VycmVudFRleHQgPSBudWxsOworICAgICAg
ICBjdXJyZW50VGV4dExpbmVzID0gW107CisgICAgICAgIGN1cnJlbnRUb2tlbnMgPSBudWxsOwor
ICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbDsKKyAgICAgICAgc2NvcGVNYXAgPSBudWxsOwor
ICAgICAgICBjb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW107
CisgICAgICAgIGNvbW1lbnRMb2NzRW50ZXIgPSBbXTsKKyAgICAgICAgY29tbWVudExvY3NFeGl0
ID0gW107CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFZlcmlmaWVzIHRoZSB0ZXh0IGFnYWlu
c3QgdGhlIHJ1bGVzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBKYXZhU2NyaXB0IHRleHQgdG8gdmVyaWZ5LgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBjb25maWcgQW4gb2JqZWN0IHdob3NlIGtleXMgc3BlY2lmeSB0aGUg
cnVsZXMgdG8gdXNlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gZmlsZW5hbWUgVGhlIG9wdGlv
bmFsIGZpbGVuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQuCisgICAgICogICAgICBJZiB0
aGlzIGlzIG5vdCBzZXQsIHRoZSBmaWxlbmFtZSB3aWxsIGRlZmF1bHQgdG8gJzxpbnB1dD4nIGlu
IHRoZSBydWxlIGNvbnRleHQuCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2F2ZVN0YXRlIElu
ZGljYXRlcyBpZiB0aGUgc3RhdGUgZnJvbSB0aGUgbGFzdCBydW4gc2hvdWxkIGJlIHNhdmVkLgor
ICAgICAqICAgICAgTW9zdGx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0W119IFRoZSByZXN1bHRzIGFzIGFuIGFycmF5IG9mIG1lc3NhZ2VzIG9y
IG51bGwgaWYgbm8gbWVzc2FnZXMuCisgICAgICovCisgICAgYXBpLnZlcmlmeSA9IGZ1bmN0aW9u
KHRleHQsIGNvbmZpZywgZmlsZW5hbWUsIHNhdmVTdGF0ZSkgeworCisgICAgICAgIHZhciBhc3Q7
CisKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IHBhcnNlZCBmaWxlbmFtZQorICAgICAgICBj
dXJyZW50RmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgICAgICBpZiAoIXNhdmVTdGF0ZSkgewor
ICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgYXN0ID0gcGFy
c2UodGV4dC5yZXBsYWNlKC9eIyEoW15cclxuXStbXHJcbl0rKS8sICIvLyQxIikpOworCisgICAg
ICAgIC8vIGlmIEVzcHJpbWEgZmFpbGVkIHRvIHBhcnNlIHRoZSBmaWxlLCB0aGVyZSdzIG5vIHNl
bnNlIGluIHNldHRpbmcgdXAgcnVsZXMKKyAgICAgICAgaWYgKGFzdCkgeworICAgICAgICAgICAg
Ly8gcHJvY2VzcyBpbml0aWFsIGNvbmZpZyB0byBtYWtlIGl0IHNhZmUgdG8gZXh0ZW5kCisgICAg
ICAgICAgICBjb25maWcgPSBwcmVwYXJlQ29uZmlnKGNvbmZpZyk7CisKKyAgICAgICAgICAgIC8v
IHBhcnNlIGdsb2JhbCBjb21tZW50cyBhbmQgbW9kaWZ5IGNvbmZpZworICAgICAgICAgICAgbW9k
aWZ5Q29uZmlnc0Zyb21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29uZmlnKTsKKwor
ICAgICAgICAgICAgLy8gZW5hYmxlIGFwcHJvcHJpYXRlIHJ1bGVzCisgICAgICAgICAgICBPYmpl
Y3Qua2V5cyhjb25maWcucnVsZXMpLmZpbHRlcihmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSA+IDA7CisgICAg
ICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworCisgICAgICAgICAgICAgICAgdmFy
IHJ1bGVDcmVhdG9yID0gcnVsZXMuZ2V0KGtleSksCisgICAgICAgICAgICAgICAgICAgIHNldmVy
aXR5ID0gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSwKKyAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucyA9IGdldFJ1bGVPcHRpb25zKGNvbmZpZy5ydWxlc1trZXldKSwKKyAgICAg
ICAgICAgICAgICAgICAgcnVsZTsKKworICAgICAgICAgICAgICAgIGlmIChydWxlQ3JlYXRvcikg
eworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgcnVs
ZSA9IHJ1bGVDcmVhdG9yKG5ldyBSdWxlQ29udGV4dChrZXksIGFwaSwgc2V2ZXJpdHksIG9wdGlv
bnMsIGNvbmZpZy5zZXR0aW5ncykpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQg
YWxsIHRoZSBub2RlIHR5cGVzIGFzIGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAgICAg
T2JqZWN0LmtleXMocnVsZSkuZm9yRWFjaChmdW5jdGlvbihub2RlVHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwaS5vbihub2RlVHlwZSwgcnVsZVtub2RlVHlwZV0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Lm1lc3NhZ2UgPSAiRXJyb3Igd2hpbGUgbG9h
ZGluZyBydWxlICciICsga2V5ICsgIic6ICIgKyBleC5tZXNzYWdlOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGVmaW5p
dGlvbiBmb3IgcnVsZSAnIiArIGtleSArICInIHdhcyBub3QgZm91bmQuIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIHNv
IHJ1bGVzIGNhbiBhY2Nlc3MgYXMgbmVjZXNzYXJ5CisgICAgICAgICAgICBjdXJyZW50Q29uZmln
ID0gY29uZmlnOworICAgICAgICAgICAgY3VycmVudFRleHQgPSB0ZXh0OworICAgICAgICAgICAg
Y29udHJvbGxlciA9IG5ldyBlc3RyYXZlcnNlLkNvbnRyb2xsZXIoKTsKKworICAgICAgICAgICAg
Ly8gZ2F0aGVyIGRhdGEgdGhhdCBtYXkgYmUgbmVlZGVkIGJ5IHRoZSBydWxlcworICAgICAgICAg
ICAgY3VycmVudFNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCwgeyBpZ25vcmVFdmFsOiB0cnVl
IH0pLnNjb3BlczsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEluZGV4IHRoZSBz
Y29wZXMgYnkgdGhlIHN0YXJ0IHJhbmdlIG9mIHRoZWlyIGJsb2NrIGZvciBlZmZpY2llbnQKKyAg
ICAgICAgICAgICAqIGxvb2t1cCBpbiBnZXRTY29wZS4KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgc2NvcGVNYXAgPSBbXTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZXMuZm9yRWFjaChm
dW5jdGlvbiAoc2NvcGUsIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Nv
cGUuYmxvY2sucmFuZ2VbMF07CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgdHdvIHNj
b3BlcyBhcmUgcmV0dXJuZWQgZm9yIGEgZ2l2ZW4gbm9kZS4gVGhpcyBpcworICAgICAgICAgICAg
ICAgIC8vIGhhbmRsZWQgbGF0ZXIgaW4gYSBrbm93biB3YXksIHNvIGp1c3QgZG9uJ3Qgb3Zlcndy
aXRlIGhlcmUuCisgICAgICAgICAgICAgICAgaWYgKCFzY29wZU1hcFtyYW5nZV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2NvcGVNYXBbcmFuZ2VdID0gaW5kZXg7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTcGxp
dCB0ZXh0IGhlcmUgaW50byBhcnJheSBvZiBsaW5lcyBzbworICAgICAgICAgICAgICogaXQncyBu
b3QgYmVpbmcgZG9uZSByZXBlYXRlZGx5CisgICAgICAgICAgICAgKiBieSBpbmRpdmlkdWFsIHJ1
bGVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjdXJyZW50VGV4dExpbmVzID0gY3Vy
cmVudFRleHQuc3BsaXQoL1xyP1xuL2cpOworCisgICAgICAgICAgICAvLyBGcmVlemluZyBzbyBh
cnJheSBpc24ndCBhY2NpZGVudGFsbHkgY2hhbmdlZCBieSBhIHJ1bGUuCisgICAgICAgICAgICBP
YmplY3QuZnJlZXplKGN1cnJlbnRUZXh0TGluZXMpOworCisgICAgICAgICAgICAvKiBnZXQgYWxs
IHRva2VucyBmcm9tIHRoZSBhc3QgYW5kIHN0b3JlIHRoZW0gYXMgYSBoYXNodGFibGUgdG8KKyAg
ICAgICAgICAgICAqIGltcHJvdmUgdHJhdmVyc2FsIHNwZWVkIHdoZW4gd2FudGluZyB0byBmaW5k
IHRva2VucyBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICogbm9kZQorICAgICAgICAgICAgICov
CisgICAgICAgICAgICBjdXJyZW50VG9rZW5zID0gW107CisgICAgICAgICAgICBhc3QudG9rZW5z
LmZvckVhY2goZnVuY3Rpb24odG9rZW4pIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW5z
W3Rva2VuLnJhbmdlWzBdXSA9IHRva2VuOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IC8vIGF1Z21lbnQgZ2xvYmFsIHNjb3BlIHdpdGggZGVjbGFyZWQgZ2xvYmFsIHZhcmlhYmxlcwor
ICAgICAgICAgICAgYWRkRGVjbGFyZWRHbG9iYWxzKGFzdCwgY3VycmVudFNjb3Blc1swXSwgY3Vy
cmVudENvbmZpZyk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFYWNoIG5vZGUg
aGFzIGEgdHlwZSBwcm9wZXJ0eS4gV2hlbmV2ZXIgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygbm9kZSBp
cyBmb3VuZCwKKyAgICAgICAgICAgICAqIGFuIGV2ZW50IGlzIGZpcmVkLiBUaGlzIGFsbG93cyBh
bnkgbGlzdGVuZXJzIHRvIGF1dG9tYXRpY2FsbHkgYmUgaW5mb3JtZWQKKyAgICAgICAgICAgICAq
IHRoYXQgdGhpcyB0eXBlIG9mIG5vZGUgaGFzIGJlZW4gZm91bmQgYW5kIHJlYWN0IGFjY29yZGlu
Z2x5LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjb250cm9sbGVyLnRyYXZlcnNlKGFz
dCwgeworICAgICAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHsKKwor
ICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudHMgPSBhcGkuZ2V0Q29tbWVudHMobm9kZSk7
CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRW50ZXIoY29tbWVudHMubGVhZGlu
Zyk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OworICAgICAgICAg
ICAgICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUsIG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy50cmFpbGluZyk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhub2RlKTsKKworICAgICAg
ICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzLnRyYWlsaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgIjpleGl0Iiwgbm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMubGVhZGluZyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtZXNzYWdlczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhIG1lc3Nh
Z2UgZnJvbSBvbmUgb2YgdGhlIHJ1bGVzLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQg
VGhlIElEIG9mIHRoZSBydWxlIGNhdXNpbmcgdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IHNldmVyaXR5IFRoZSBzZXZlcml0eSBsZXZlbCBvZiB0aGUgcnVsZSBhcyBjb25maWd1
cmVkLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdGhhdCB0aGUg
bWVzc2FnZSByZWxhdGVzIHRvLgorICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYXRpb24gQW4g
b2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9yIGxpbmUgYW5kIGNvbHVtbgorICAgICAqICAgICAg
bnVtYmVycy4gSWYgbG9jYXRpb24gaXMgbm90IHByb3ZpZGVkIHRoZSBub2RlJ3Mgc3RhcnQgbG9j
YXRpb24gd2lsbAorICAgICAqICAgICAgYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWVzc2FnZSBUaGUgYWN0dWFsIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMg
T3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGljaCBwcm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdl
CisgICAgICogICAgIHdpdGggc3ltYm9scyBiZWluZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdz
IHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBhcGkucmVwb3J0
ID0gZnVuY3Rpb24ocnVsZUlkLCBzZXZlcml0eSwgbm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9w
dHMpIHsKKworICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgb3B0cyA9IG1lc3NhZ2U7CisgICAgICAgICAgICBtZXNzYWdlID0gbG9jYXRpb247
CisgICAgICAgICAgICBsb2NhdGlvbiA9IG5vZGUubG9jLnN0YXJ0OworICAgICAgICB9CisKKyAg
ICAgICAgT2JqZWN0LmtleXMob3B0cyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7Cisg
ICAgICAgICAgICB2YXIgcnggPSBuZXcgUmVnRXhwKCJ7eyIgKyBlc2NhcGVSZWdFeHAoa2V5KSAr
ICJ9fSIsICJnIik7CisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKHJ4LCBv
cHRzW2tleV0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoaXNEaXNhYmxlZEJ5UmVwb3J0
aW5nQ29uZmlnKHJlcG9ydGluZ0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2VzLnB1c2goeworICAgICAg
ICAgICAgcnVsZUlkOiBydWxlSWQsCisgICAgICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksCisg
ICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSwKKyAg
ICAgICAgICAgIGxpbmU6IGxvY2F0aW9uLmxpbmUsCisgICAgICAgICAgICBjb2x1bW46IGxvY2F0
aW9uLmNvbHVtbiwKKyAgICAgICAgICAgIHNvdXJjZTogYXBpLmdldFNvdXJjZShub2RlKQorICAg
ICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc291cmNlIGNvZGUg
Zm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZT19IG5vZGUgVGhlIEFT
VCBub2RlIHRvIGdldCB0aGUgdGV4dCBmb3IuCisgICAgICogQHBhcmFtIHtpbnQ9fSBiZWZvcmVD
b3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBub2RlIHRvIHJldHJpZXZl
LgorICAgICAqIEBwYXJhbSB7aW50PX0gYWZ0ZXJDb3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge3N0cmluZ30g
VGhlIHRleHQgcmVwcmVzZW50aW5nIHRoZSBBU1Qgbm9kZS4KKyAgICAgKi8KKyAgICBhcGkuZ2V0
U291cmNlID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291bnQpIHsKKyAgICAg
ICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiAoY3VycmVudFRleHQgIT09IG51bGwp
ID8gY3VycmVudFRleHQuc2xpY2Uobm9kZS5yYW5nZVswXSAtIChiZWZvcmVDb3VudCB8fCAwKSwK
KyAgICAgICAgICAgICAgICBub2RlLnJhbmdlWzFdICsgKGFmdGVyQ291bnQgfHwgMCkpIDogbnVs
bDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50VGV4dDsKKyAg
ICAgICAgfQorCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVudGlyZSBzb3Vy
Y2UgdGV4dCBzcGxpdCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzLgorICAgICAqIEByZXR1cm5zIHtB
cnJheX0gVGhlIHNvdXJjZSB0ZXh0IGFzIGFuIGFycmF5IG9mIGxpbmVzLgorICAgICAqLworICAg
IGFwaS5nZXRTb3VyY2VMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gY3VycmVu
dFRleHRMaW5lczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhbGwgY29tbWVudHMg
Zm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUgdG8gZ2V0IHRoZSBjb21tZW50cyBmb3IuCisgICAgICogQHJldHVybnMge09iamVjdH0g
VGhlIGxpc3Qgb2YgY29tbWVudHMgaW5kZXhlZCBieSB0aGVpciBwb3NpdGlvbi4KKyAgICAgKi8K
KyAgICBhcGkuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGxl
YWRpbmdDb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzIHx8IFtdLAorICAgICAgICAgICAg
dHJhaWxpbmdDb21tZW50cyA9IG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXTsKKworICAgICAg
ICAvKgorICAgICAgICAgKiBFc3ByaW1hIGFkZHMgYSAiY29tbWVudHMiIGFycmF5IG9uIFByb2dy
YW0gbm9kZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICogbGVhZGluZ0NvbW1lbnRzL3RyYWlsaW5n
Q29tbWVudHMuIENvbW1lbnRzIGFyZSBvbmx5IGxlZnQgaW4gdGhlCisgICAgICAgICAqIFByb2dy
YW0gbm9kZSBjb21tZW50cyBhcnJheSBpZiB0aGVyZSBpcyBubyBleGVjdXRhYmxlIGNvZGUuCisg
ICAgICAgICAqLworICAgICAgICBpZiAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgbGVh
ZGluZ0NvbW1lbnRzID0gbm9kZS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBsZWFkaW5nOiBsZWFkaW5nQ29tbWVudHMs
CisgICAgICAgICAgICB0cmFpbGluZzogdHJhaWxpbmdDb21tZW50cworICAgICAgICB9OworICAg
IH07CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIEpTRG9jIGNvbW1lbnQgZm9yIGEg
Z2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRv
IGdldCB0aGUgY29tbWVudCBmb3IuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBCbG9j
a0NvbW1lbnQgbm9kZSBjb250YWluaW5nIHRoZSBKU0RvYyBmb3IgdGhlCisgICAgICogICAgICBn
aXZlbiBub2RlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqLworICAgIGFwaS5nZXRKU0Rv
Y0NvbW1lbnQgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUu
cGFyZW50LAorICAgICAgICAgICAgbGluZSA9IG5vZGUubG9jLnN0YXJ0LmxpbmU7CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEZpbmRzIGEgSlNEb2MgY29tbWVudCBub2RlIGluIGFuIGFycmF5
IG9mIGNvbW1lbnQgbm9kZXMuCisgICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50
cyBUaGUgYXJyYXkgb2YgY29tbWVudCBub2RlcyB0byBzZWFyY2guCisgICAgICAgICAqIEByZXR1
cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSBpZiBmb3VuZCwgbnVsbCBpZiBub3QuCisgICAgICAgICAq
IEBwcml2YXRlCisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBmaW5kSlNEb2NDb21tZW50
KGNvbW1lbnRzKSB7CisKKyAgICAgICAgICAgIGlmIChjb21tZW50cykgeworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSBjb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbaV0udHlwZSA9PT0gIkJsb2NrIiAmJiBjb21t
ZW50c1tpXS52YWx1ZS5jaGFyQXQoMCkgPT09ICIqIikgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGluZSAtIGNvbW1lbnRzW2ldLmxvYy5lbmQubGluZSA8PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAgICAgY2FzZSAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRKU0RvY0Nv
bW1lbnQobm9kZS5sZWFkaW5nQ29tbWVudHMpOworCisgICAgICAgICAgICBjYXNlICJGdW5jdGlv
bkV4cHJlc3Npb24iOgorCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlICE9PSAiQ2Fs
bEV4cHJlc3Npb24iIHx8IHBhcmVudC5jYWxsZWUgIT09IG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LmxlYWRpbmdDb21tZW50cyAmJiBwYXJlbnQu
dHlwZSAhPT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYgcGFyZW50LnR5cGUgIT09ICJGdW5jdGlv
bkRlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJlbnQgJiYgKHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIpID8g
ZmluZEpTRG9jQ29tbWVudChwYXJlbnQubGVhZGluZ0NvbW1lbnRzKSA6IG51bGw7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAorCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgcHJl
Y2VkZSBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBb
YmVmb3JlQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBub2RlIHRvIHJl
dHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJl
c2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRva2Vuc0JlZm9yZSA9IGZ1bmN0
aW9uKG5vZGUsIGJlZm9yZUNvdW50KSB7CisgICAgICAgIHZhciBiZWZvcmVUb2tlbnMgPSBbXSwg
Y3Vyc29yID0gbm9kZS5yYW5nZVswXSAtIDE7CisgICAgICAgIHdoaWxlIChiZWZvcmVDb3VudCA+
IDAgJiYgY3Vyc29yID49IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNv
cl0pIHsKKyAgICAgICAgICAgICAgICBiZWZvcmVUb2tlbnMudW5zaGlmdChjdXJyZW50VG9rZW5z
W2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tYmVmb3JlQ291bnQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAtLWN1cnNvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVmb3Jl
VG9rZW5zOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b2tlbiB0aGF0IHBy
ZWNlZGVzIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9
IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGJlZm9yZSB0aGUgZ2l2ZW4gbm9k
ZS4KKyAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRv
a2VuLgorICAgICAqLworICAgIGFwaS5nZXRUb2tlbkJlZm9yZSA9IGZ1bmN0aW9uKG5vZGUsIHNr
aXApIHsKKyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXSAtIDE7IGN1cnNv
ciA+PSAwOyAtLWN1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29y
XSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhIG51bWJl
ciBvZiB0b2tlbnMgdGhhdCBwcmVjZWRlIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9r
ZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisg
ICAgICogQHBhcmFtIHtpbnR9IFthZnRlckNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGFm
dGVyIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJh
eSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRv
a2Vuc0FmdGVyID0gZnVuY3Rpb24obm9kZSwgYWZ0ZXJDb3VudCkgeworICAgICAgICB2YXIgYWZ0
ZXJUb2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsKKyAgICAgICAgd2hpbGUgKGFm
dGVyQ291bnQgPiAwICYmIGN1cnNvciA8IGN1cnJlbnRUb2tlbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgYWZ0ZXJU
b2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tYWZ0
ZXJDb3VudDsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0u
cmFuZ2VbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhZnRlclRva2VuczsK
KyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9rZW4gdGhhdCBmb2xsb3dzIGEg
Z2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBd
IEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGFmdGVyIHRoZSBnaXZlbiBub2RlLgorICAgICAq
IEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4uCisgICAg
ICovCisgICAgYXBpLmdldFRva2VuQWZ0ZXIgPSBmdW5jdGlvbihub2RlLCBza2lwKSB7CisgICAg
ICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMV07IGN1cnNvciA8IGN1cnJlbnRUb2tl
bnMubGVuZ3RoOyArK2N1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vy
c29yXSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhbGwg
dG9rZW5zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2JlZm9y
ZUNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2
ZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tl
bnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19
IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGku
Z2V0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291bnQpIHsKKyAg
ICAgICAgdmFyIGJlZm9yZVRva2VucyA9IGFwaS5nZXRUb2tlbnNCZWZvcmUobm9kZSwgYmVmb3Jl
Q291bnQpLAorICAgICAgICAgICAgYWZ0ZXJUb2tlbnMgPSBhcGkuZ2V0VG9rZW5zQWZ0ZXIobm9k
ZSwgYWZ0ZXJDb3VudCksCisgICAgICAgICAgICB0b2tlbnMgPSBbXSwKKyAgICAgICAgICAgIGN1
cnNvciA9IG5vZGUucmFuZ2VbMF07CisgICAgICAgIHdoaWxlIChjdXJzb3IgPCBub2RlLnJhbmdl
WzFdKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAg
ICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0ucmFuZ2VbMV07CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29yOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBiZWZvcmVUb2tlbnMuY29uY2F0KHRva2VucywgYWZ0ZXJU
b2tlbnMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBmaXJzdCBgY291bnRg
IHRva2VucyBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KKyAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbY291bnQ9
MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICog
QHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0Rmlyc3RUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBjb3VudCkg
eworICAgICAgICB2YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07CisgICAg
ICAgIHdoaWxlIChjb3VudCA+IDAgJiYgY3Vyc29yIDwgbm9kZS5yYW5nZVsxXSkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIHRva2Vu
cy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1jb3VudDsK
KyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0ucmFuZ2VbMV07
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29yOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfTsKKworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9r
ZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisg
ICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwLgor
ICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4u
CisgICAgICovCisgICAgYXBpLmdldEZpcnN0VG9rZW4gPSBmdW5jdGlvbihub2RlLCBza2lwKSB7
CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07IGN1cnNvciA8IG5vZGUu
cmFuZ2VbMV07ICsrY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJz
b3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
YXN0IGBjb3VudGAgdG9rZW5zIG9mIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtjb3VudD0wXSBU
aGUgbnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0
dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgorICAg
ICAqLworICAgIGFwaS5nZXRMYXN0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgY291bnQpIHsKKyAg
ICAgICAgdmFyIHRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdIC0gMTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXSkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIHRva2Vu
cy51bnNoaWZ0KGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1jb3Vu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tY3Vyc29yOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b2tlbnM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxh
c3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9
MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAuCisgICAgICogQHJldHVybnMge1Rva2VufSBB
biBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KKyAgICAgKi8KKyAgICBhcGkuZ2V0TGFz
dFRva2VuID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgeworICAgICAgICBmb3IgKHZhciBjdXJzb3Ig
PSBub2RlLnJhbmdlWzFdIC0gMTsgY3Vyc29yID49IG5vZGUucmFuZ2VbMF07IC0tY3Vyc29yKSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC0tc2tpcDsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2Vu
c1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIG5vZGVzIHRoYXQgYXJlIGFuY2VzdG9ycyBv
ZiBjdXJyZW50IG5vZGUuCisgICAgICogQHJldHVybnMge0FTVE5vZGVbXX0gQXJyYXkgb2Ygb2Jq
ZWN0cyByZXByZXNlbnRpbmcgYW5jZXN0b3JzLgorICAgICAqLworICAgIGFwaS5nZXRBbmNlc3Rv
cnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucGFyZW50cygpOwor
ICAgIH07CisKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNjb3BlIGZvciB0aGUgY3VycmVu
dCBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCByZXByZXNlbnRpbmcg
dGhlIGN1cnJlbnQgbm9kZSdzIHNjb3BlLgorICAgICAqLworICAgIGFwaS5nZXRTY29wZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgcGFyZW50cyA9IGNvbnRyb2xsZXIucGFyZW50cygpLAor
ICAgICAgICAgICAgaW5uZXJCbG9jayA9IG51bGwsCisgICAgICAgICAgICBzZWxlY3RlZFNjb3Bl
SW5kZXg7CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcyBmb3IgUHJvZ3JhbSBub2RlcyAtIHRo
ZXkgaGF2ZSBubyBwYXJlbnRzCisgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCkgeworCisgICAg
ICAgICAgICAvLyBpZiBjdXJyZW50IG5vZGUgaXMgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFkZCBp
dCB0byB0aGUgbGlzdAorICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjb250cm9sbGVyLmN1cnJl
bnQoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0
aW9uIiB8fCBjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CisgICAgICAg
ICAgICAgICAgcGFyZW50cy5wdXNoKGN1cnJlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBBc2NlbmQgdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVudHMKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgZmlyc3Qgbm9kZSB0aGF0IHJlcXVpcmVzIGEgc2NvcGUgaXMgdGhlIG5v
ZGUgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gb3VyIGN1cnJlbnQgbm9kZSdzIGlu
bmVybW9zdCBzY29wZS4KKyAgICAgICAgICAgICAgICBpZiAoZXNjb3BlLlNjb3BlLmlzU2NvcGVS
ZXF1aXJlZChwYXJlbnRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBpbm5lckJsb2NrID0g
cGFyZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGaW5kIGFuZCByZXR1cm4gdGhlIGlu
bmVybW9zdCBzY29wZQorICAgICAgICAgICAgc2VsZWN0ZWRTY29wZUluZGV4ID0gc2NvcGVNYXBb
aW5uZXJCbG9jay5yYW5nZVswXV07CisKKyAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uIGV4
cHJlc3Npb25zIGNyZWF0ZSB0d28gbmVzdGVkIHNjb3BlIG9iamVjdHMuIFRoZQorICAgICAgICAg
ICAgLy8gb3V0ZXIgc2NvcGUgY29udGFpbnMgb25seSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiBu
YW1lLiBXZSByZXR1cm4KKyAgICAgICAgICAgIC8vIHRoZSBpbm5lciBzY29wZS4KKyAgICAgICAg
ICAgIGlmIChpbm5lckJsb2NrLnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iICYmIGlubmVy
QmxvY2suaWQgJiYgaW5uZXJCbG9jay5pZC5uYW1lKSB7CisgICAgICAgICAgICAgICAgKytzZWxl
Y3RlZFNjb3BlSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50U2NvcGVzW3NlbGVjdGVkU2NvcGVJbmRleF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFNjb3Blc1swXTsgICAgLy8gZ2xvYmFsIHNjb3BlCisgICAgICAg
IH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlsZW5hbWUgZm9yIHRoZSBj
dXJyZW50bHkgcGFyc2VkIHNvdXJjZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmls
ZW5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2UgYmVpbmcgcGFyc2VkLgorICAgICAqICAg
ICBEZWZhdWx0cyB0byAiPGlucHV0PiIgaWYgbm8gZmlsZW5hbWUgaW5mbyBpcyBwcmVzZW50Lgor
ICAgICAqLworICAgIGFwaS5nZXRGaWxlbmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
dHlwZW9mIGN1cnJlbnRGaWxlbmFtZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50RmlsZW5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
IjxpbnB1dD4iOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIERlZmluZXMg
YSBuZXcgbGludGluZyBydWxlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQgQSB1bmlx
dWUgcnVsZSBpZGVudGlmaWVyCisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBG
dW5jdGlvbiBmcm9tIGNvbnRleHQgdG8gb2JqZWN0IG1hcHBpbmcgQVNUIG5vZGUgdHlwZXMgdG8g
ZXZlbnQgaGFuZGxlcnMKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICB2YXIg
ZGVmaW5lUnVsZSA9IGFwaS5kZWZpbmVSdWxlID0gZnVuY3Rpb24ocnVsZUlkLCBydWxlTW9kdWxl
KSB7CisgICAgICAgIHJ1bGVzLmRlZmluZShydWxlSWQsIHJ1bGVNb2R1bGUpOworICAgIH07CisK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIG1hbnkgbmV3IGxpbnRpbmcgcnVsZXMuCisgICAgICog
QHBhcmFtIHtvYmplY3R9IHJ1bGVzIG1hcCBmcm9tIHVuaXF1ZSBydWxlIGlkZW50aWZpZXIgdG8g
cnVsZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5kZWZpbmVSdWxl
cyA9IGZ1bmN0aW9uKHJ1bGVzKSB7CisgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGVJZCkgeworICAgICAgICAgICAgZGVmaW5lUnVs
ZShydWxlSWQsIHJ1bGVzW3J1bGVJZF0pOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZGVmYXVsdCBlc2xpbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBPYmplY3QgbWFwcGluZyBydWxlIElEcyB0byB0aGVpciBkZWZhdWx0
IGNvbmZpZ3VyYXRpb25zCisgICAgICovCisgICAgYXBpLmRlZmF1bHRzID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiByZXF1aXJlKCIuLi9jb25mL2VzbGludC5qc29uIik7CisgICAgfTsK
KworICAgIHJldHVybiBhcGk7CisKK30oKSk7CisKK30seyIuLi9jb25mL2Vudmlyb25tZW50cy5q
c29uIjoxLCIuLi9jb25mL2VzbGludC5qc29uIjoyLCIuL3J1bGUtY29udGV4dCI6MTEsIi4vcnVs
ZXMiOjEyLCIuL3V0aWwiOjE1MCwiZXNjb3BlIjo1LCJlc3ByaW1hIjo2LCJlc3RyYXZlcnNlIjo3
LCJldmVudHMiOjMsIm9iamVjdC1hc3NpZ24iOjh9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBydWxl
cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgcnVsZXNbImJsb2NrLXNjb3BlZC12YXIiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciIpOworICAgIHJ1bGVzWyJicmFjZS1z
dHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9icmFjZS1zdHlsZSIpOworICAgIHJ1bGVzWyJjYW1l
bGNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY2FtZWxjYXNlIik7CisgICAgcnVsZXNbImNvbW1h
LXNwYWNpbmciXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tbWEtc3BhY2luZyIpOworICAgIHJ1bGVz
WyJjb21tYS1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zdHlsZSIpOworICAgIHJ1
bGVzWyJjb21wbGV4aXR5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbXBsZXhpdHkiKTsKKyAgICBy
dWxlc1siY29uc2lzdGVudC1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29uc2lzdGVudC1y
ZXR1cm4iKTsKKyAgICBydWxlc1siY29uc2lzdGVudC10aGlzIl0gPSByZXF1aXJlKCIuL3J1bGVz
L2NvbnNpc3RlbnQtdGhpcyIpOworICAgIHJ1bGVzWyJjdXJseSJdID0gcmVxdWlyZSgiLi9ydWxl
cy9jdXJseSIpOworICAgIHJ1bGVzWyJkZWZhdWx0LWNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
ZGVmYXVsdC1jYXNlIik7CisgICAgcnVsZXNbImRvdC1ub3RhdGlvbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9kb3Qtbm90YXRpb24iKTsKKyAgICBydWxlc1siZW9sLWxhc3QiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvZW9sLWxhc3QiKTsKKyAgICBydWxlc1siZXFlcWVxIl0gPSByZXF1aXJlKCIuL3J1bGVz
L2VxZXFlcSIpOworICAgIHJ1bGVzWyJmdW5jLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Z1
bmMtbmFtZXMiKTsKKyAgICBydWxlc1siZnVuYy1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9m
dW5jLXN0eWxlIik7CisgICAgcnVsZXNbImdsb2JhbC1zdHJpY3QiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvZ2xvYmFsLXN0cmljdCIpOworICAgIHJ1bGVzWyJndWFyZC1mb3ItaW4iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvZ3VhcmQtZm9yLWluIik7CisgICAgcnVsZXNbImhhbmRsZS1jYWxsYmFjay1lcnIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciIpOworICAgIHJ1bGVzWyJr
ZXktc3BhY2luZyJdID0gcmVxdWlyZSgiLi9ydWxlcy9rZXktc3BhY2luZyIpOworICAgIHJ1bGVz
WyJtYXgtZGVwdGgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWRlcHRoIik7CisgICAgcnVsZXNb
Im1heC1sZW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWxlbiIpOworICAgIHJ1bGVzWyJtYXgt
bmVzdGVkLWNhbGxiYWNrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbmVzdGVkLWNhbGxiYWNr
cyIpOworICAgIHJ1bGVzWyJtYXgtcGFyYW1zIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1wYXJh
bXMiKTsKKyAgICBydWxlc1sibWF4LXN0YXRlbWVudHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4
LXN0YXRlbWVudHMiKTsKKyAgICBydWxlc1sibmV3LWNhcCJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
ZXctY2FwIik7CisgICAgcnVsZXNbIm5ldy1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbmV3
LXBhcmVucyIpOworICAgIHJ1bGVzWyJuby1hbGVydCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1h
bGVydCIpOworICAgIHJ1bGVzWyJuby1hcnJheS1jb25zdHJ1Y3RvciJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1hcnJheS1jb25zdHJ1Y3RvciIpOworICAgIHJ1bGVzWyJuby1iaXR3aXNlIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWJpdHdpc2UiKTsKKyAgICBydWxlc1sibm8tY2FsbGVyIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWNhbGxlciIpOworICAgIHJ1bGVzWyJuby1jYXRjaC1zaGFkb3ci
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Iik7CisgICAgcnVsZXNbIm5vLWNv
bW1hLWRhbmdsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUiKTsKKyAgICBy
dWxlc1sibm8tY29uZC1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29uZC1hc3NpZ24i
KTsKKyAgICBydWxlc1sibm8tY29uc29sZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25zb2xl
Iik7CisgICAgcnVsZXNbIm5vLWNvbnN0YW50LWNvbmRpdGlvbiJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1jb25zdGFudC1jb25kaXRpb24iKTsKKyAgICBydWxlc1sibm8tY29udHJvbC1yZWdleCJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb250cm9sLXJlZ2V4Iik7CisgICAgcnVsZXNbIm5vLWRl
YnVnZ2VyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWRlYnVnZ2VyIik7CisgICAgcnVsZXNbIm5v
LWRlbGV0ZS12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVsZXRlLXZhciIpOworICAgIHJ1
bGVzWyJuby1kaXYtcmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGl2LXJlZ2V4Iik7Cisg
ICAgcnVsZXNbIm5vLWR1cGUta2V5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kdXBlLWtleXMi
KTsKKyAgICBydWxlc1sibm8tZWxzZS1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZWxz
ZS1yZXR1cm4iKTsKKyAgICBydWxlc1sibm8tZW1wdHktY2xhc3MiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tZW1wdHktY2xhc3MiKTsKKyAgICBydWxlc1sibm8tZW1wdHktbGFiZWwiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiKTsKKyAgICBydWxlc1sibm8tZW1wdHkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZW1wdHkiKTsKKyAgICBydWxlc1sibm8tZXEtbnVsbCJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1lcS1udWxsIik7CisgICAgcnVsZXNbIm5vLWV2YWwiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZXZhbCIpOworICAgIHJ1bGVzWyJuby1leC1hc3NpZ24iXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZXgtYXNzaWduIik7CisgICAgcnVsZXNbIm5vLWV4dGVuZC1uYXRpdmUi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSIpOworICAgIHJ1bGVzWyJuby1l
eHRyYS1iaW5kIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiKTsKKyAgICBydWxl
c1sibm8tZXh0cmEtYm9vbGVhbi1jYXN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJv
b2xlYW4tY2FzdCIpOworICAgIHJ1bGVzWyJuby1leHRyYS1wYXJlbnMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tZXh0cmEtcGFyZW5zIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXNlbWkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc2VtaSIpOworICAgIHJ1bGVzWyJuby1leHRyYS1zdHJp
Y3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc3RyaWN0Iik7CisgICAgcnVsZXNbIm5v
LWZhbGx0aHJvdWdoIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZhbGx0aHJvdWdoIik7CisgICAg
cnVsZXNbIm5vLWZsb2F0aW5nLWRlY2ltYWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmxvYXRp
bmctZGVjaW1hbCIpOworICAgIHJ1bGVzWyJuby1mdW5jLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1mdW5jLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1pbXBsaWVkLWV2YWwiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8taW1wbGllZC1ldmFsIik7CisgICAgcnVsZXNbIm5vLWlubmVyLWRl
Y2xhcmF0aW9ucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbm5lci1kZWNsYXJhdGlvbnMiKTsK
KyAgICBydWxlc1sibm8taW52YWxpZC1yZWdleHAiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8taW52
YWxpZC1yZWdleHAiKTsKKyAgICBydWxlc1sibm8taXRlcmF0b3IiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8taXRlcmF0b3IiKTsKKyAgICBydWxlc1sibm8tbGFiZWwtdmFyIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLWxhYmVsLXZhciIpOworICAgIHJ1bGVzWyJuby1sYWJlbHMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbGFiZWxzIik7CisgICAgcnVsZXNbIm5vLWxvbmUtYmxvY2tzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWxvbmUtYmxvY2tzIik7CisgICAgcnVsZXNbIm5vLWxvbmVseS1pZiJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sb25lbHktaWYiKTsKKyAgICBydWxlc1sibm8tbG9vcC1m
dW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxvb3AtZnVuYyIpOworICAgIHJ1bGVzWyJuby1t
aXhlZC1yZXF1aXJlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyIpOwor
ICAgIHJ1bGVzWyJuby1taXhlZC1zcGFjZXMtYW5kLXRhYnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIik7CisgICAgcnVsZXNbIm5vLW11bHRpLXNwYWNlcyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiKTsKKyAgICBydWxlc1sibm8tbXVs
dGktc3RyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRpLXN0ciIpOworICAgIHJ1bGVzWyJu
by1tdWx0aXBsZS1lbXB0eS1saW5lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1tdWx0aXBsZS1l
bXB0eS1saW5lcyIpOworICAgIHJ1bGVzWyJuby1uYXRpdmUtcmVhc3NpZ24iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbmF0aXZlLXJlYXNzaWduIik7CisgICAgcnVsZXNbIm5vLW5lZ2F0ZWQtaW4t
bGhzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lZ2F0ZWQtaW4tbGhzIik7CisgICAgcnVsZXNb
Im5vLW5lc3RlZC10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5
Iik7CisgICAgcnVsZXNbIm5vLW5ldy1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5ldy1m
dW5jIik7CisgICAgcnVsZXNbIm5vLW5ldy1vYmplY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bmV3LW9iamVjdCIpOworICAgIHJ1bGVzWyJuby1uZXctcmVxdWlyZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1uZXctcmVxdWlyZSIpOworICAgIHJ1bGVzWyJuby1uZXctd3JhcHBlcnMiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIik7CisgICAgcnVsZXNbIm5vLW5ldyJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1uZXciKTsKKyAgICBydWxlc1sibm8tb2JqLWNhbGxzIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLW9iai1jYWxscyIpOworICAgIHJ1bGVzWyJuby1vY3RhbC1lc2Nh
cGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIik7CisgICAgcnVsZXNbIm5v
LW9jdGFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9jdGFsIik7CisgICAgcnVsZXNbIm5vLXBh
dGgtY29uY2F0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Iik7CisgICAgcnVs
ZXNbIm5vLXBsdXNwbHVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBsdXNwbHVzIik7CisgICAg
cnVsZXNbIm5vLXByb2Nlc3MtZW52Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXByb2Nlc3MtZW52
Iik7CisgICAgcnVsZXNbIm5vLXByb2Nlc3MtZXhpdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1w
cm9jZXNzLWV4aXQiKTsKKyAgICBydWxlc1sibm8tcHJvdG8iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tcHJvdG8iKTsKKyAgICBydWxlc1sibm8tcmVkZWNsYXJlIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLXJlZGVjbGFyZSIpOworICAgIHJ1bGVzWyJuby1yZWdleC1zcGFjZXMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIik7CisgICAgcnVsZXNbIm5vLXJlc2VydmVkLWtleXMi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyIpOworICAgIHJ1bGVzWyJuby1y
ZXN0cmljdGVkLW1vZHVsZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzdHJpY3RlZC1tb2R1
bGVzIik7CisgICAgcnVsZXNbIm5vLXJldHVybi1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tcmV0dXJuLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1zY3JpcHQtdXJsIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXNjcmlwdC11cmwiKTsKKyAgICBydWxlc1sibm8tc2VsZi1jb21wYXJlIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLXNlbGYtY29tcGFyZSIpOworICAgIHJ1bGVzWyJuby1zZXF1
ZW5jZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2VxdWVuY2VzIik7CisgICAgcnVsZXNbIm5v
LXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNoYWRvdy1y
ZXN0cmljdGVkLW5hbWVzIik7CisgICAgcnVsZXNbIm5vLXNoYWRvdyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1zaGFkb3ciKTsKKyAgICBydWxlc1sibm8tc3BhY2UtYmVmb3JlLXNlbWkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tc3BhY2UtYmVmb3JlLXNlbWkiKTsKKyAgICBydWxlc1sibm8tc3Bh
Y2VkLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiKTsKKyAgICBydWxl
c1sibm8tc3BhcnNlLWFycmF5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFyc2UtYXJyYXlz
Iik7CisgICAgcnVsZXNbIm5vLXN5bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3luYyIpOwor
ICAgIHJ1bGVzWyJuby10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRlcm5hcnkiKTsK
KyAgICBydWxlc1sibm8tdHJhaWxpbmctc3BhY2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRy
YWlsaW5nLXNwYWNlcyIpOworICAgIHJ1bGVzWyJuby11bmRlZi1pbml0Il0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLXVuZGVmLWluaXQiKTsKKyAgICBydWxlc1sibm8tdW5kZWYiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tdW5kZWYiKTsKKyAgICBydWxlc1sibm8tdW5kZWZpbmVkIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXVuZGVmaW5lZCIpOworICAgIHJ1bGVzWyJuby11bmRlcnNjb3JlLWRhbmds
ZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSIpOworICAgIHJ1bGVz
WyJuby11bnJlYWNoYWJsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnJlYWNoYWJsZSIpOwor
ICAgIHJ1bGVzWyJuby11bnVzZWQtZXhwcmVzc2lvbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
dW51c2VkLWV4cHJlc3Npb25zIik7CisgICAgcnVsZXNbIm5vLXVudXNlZC12YXJzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLXVudXNlZC12YXJzIik7CisgICAgcnVsZXNbIm5vLXVzZS1iZWZvcmUt
ZGVmaW5lIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVzZS1iZWZvcmUtZGVmaW5lIik7CisgICAg
cnVsZXNbIm5vLXZvaWQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdm9pZCIpOworICAgIHJ1bGVz
WyJuby13YXJuaW5nLWNvbW1lbnRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdhcm5pbmctY29t
bWVudHMiKTsKKyAgICBydWxlc1sibm8td2l0aCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13aXRo
Iik7CisgICAgcnVsZXNbIm5vLXdyYXAtZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13cmFw
LWZ1bmMiKTsKKyAgICBydWxlc1sib25lLXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9vbmUtdmFy
Iik7CisgICAgcnVsZXNbInBhZGRlZC1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcGFkZGVk
LWJsb2NrcyIpOworICAgIHJ1bGVzWyJxdW90ZS1wcm9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9x
dW90ZS1wcm9wcyIpOworICAgIHJ1bGVzWyJxdW90ZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcXVv
dGVzIik7CisgICAgcnVsZXNbInJhZGl4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3JhZGl4Iik7Cisg
ICAgcnVsZXNbInNlbWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc2VtaSIpOworICAgIHJ1bGVzWyJz
b3J0LXZhcnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc29ydC12YXJzIik7CisgICAgcnVsZXNbInNw
YWNlLWFmdGVyLWtleXdvcmRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWFmdGVyLWtleXdv
cmRzIik7CisgICAgcnVsZXNbInNwYWNlLWJlZm9yZS1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvc3BhY2UtYmVmb3JlLWJsb2NrcyIpOworICAgIHJ1bGVzWyJzcGFjZS1pbi1icmFja2V0cyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1icmFja2V0cyIpOworICAgIHJ1bGVzWyJzcGFj
ZS1pbi1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5zIik7CisgICAg
cnVsZXNbInNwYWNlLWluZml4LW9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbmZpeC1v
cHMiKTsKKyAgICBydWxlc1sic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvc3BhY2UtcmV0dXJuLXRocm93LWNhc2UiKTsKKyAgICBydWxlc1sic3BhY2UtdW5hcnkt
d29yZC1vcHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiKTsKKyAg
ICBydWxlc1sic3BhY2VkLWxpbmUtY29tbWVudCJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZWQt
bGluZS1jb21tZW50Iik7CisgICAgcnVsZXNbInN0cmljdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9z
dHJpY3QiKTsKKyAgICBydWxlc1sidXNlLWlzbmFuIl0gPSByZXF1aXJlKCIuL3J1bGVzL3VzZS1p
c25hbiIpOworICAgIHJ1bGVzWyJ2YWxpZC1qc2RvYyJdID0gcmVxdWlyZSgiLi9ydWxlcy92YWxp
ZC1qc2RvYyIpOworICAgIHJ1bGVzWyJ2YWxpZC10eXBlb2YiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
dmFsaWQtdHlwZW9mIik7CisgICAgcnVsZXNbInZhcnMtb24tdG9wIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3ZhcnMtb24tdG9wIik7CisgICAgcnVsZXNbIndyYXAtaWlmZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy93cmFwLWlpZmUiKTsKKyAgICBydWxlc1sid3JhcC1yZWdleCJdID0gcmVxdWlyZSgiLi9y
dWxlcy93cmFwLXJlZ2V4Iik7CisgICAgcnVsZXNbInlvZGEiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
eW9kYSIpOworCisgICAgcmV0dXJuIHJ1bGVzOworfTsKK30seyIuL3J1bGVzL2Jsb2NrLXNjb3Bl
ZC12YXIiOjEzLCIuL3J1bGVzL2JyYWNlLXN0eWxlIjoxNCwiLi9ydWxlcy9jYW1lbGNhc2UiOjE1
LCIuL3J1bGVzL2NvbW1hLXNwYWNpbmciOjE2LCIuL3J1bGVzL2NvbW1hLXN0eWxlIjoxNywiLi9y
dWxlcy9jb21wbGV4aXR5IjoxOCwiLi9ydWxlcy9jb25zaXN0ZW50LXJldHVybiI6MTksIi4vcnVs
ZXMvY29uc2lzdGVudC10aGlzIjoyMCwiLi9ydWxlcy9jdXJseSI6MjEsIi4vcnVsZXMvZGVmYXVs
dC1jYXNlIjoyMiwiLi9ydWxlcy9kb3Qtbm90YXRpb24iOjIzLCIuL3J1bGVzL2VvbC1sYXN0Ijoy
NCwiLi9ydWxlcy9lcWVxZXEiOjI1LCIuL3J1bGVzL2Z1bmMtbmFtZXMiOjI2LCIuL3J1bGVzL2Z1
bmMtc3R5bGUiOjI3LCIuL3J1bGVzL2dsb2JhbC1zdHJpY3QiOjI4LCIuL3J1bGVzL2d1YXJkLWZv
ci1pbiI6MjksIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciI6MzAsIi4vcnVsZXMva2V5LXNw
YWNpbmciOjMxLCIuL3J1bGVzL21heC1kZXB0aCI6MzIsIi4vcnVsZXMvbWF4LWxlbiI6MzMsIi4v
cnVsZXMvbWF4LW5lc3RlZC1jYWxsYmFja3MiOjM0LCIuL3J1bGVzL21heC1wYXJhbXMiOjM1LCIu
L3J1bGVzL21heC1zdGF0ZW1lbnRzIjozNiwiLi9ydWxlcy9uZXctY2FwIjozNywiLi9ydWxlcy9u
ZXctcGFyZW5zIjozOCwiLi9ydWxlcy9uby1hbGVydCI6MzksIi4vcnVsZXMvbm8tYXJyYXktY29u
c3RydWN0b3IiOjQwLCIuL3J1bGVzL25vLWJpdHdpc2UiOjQxLCIuL3J1bGVzL25vLWNhbGxlciI6
NDIsIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Ijo0MywiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUi
OjQ0LCIuL3J1bGVzL25vLWNvbmQtYXNzaWduIjo0NSwiLi9ydWxlcy9uby1jb25zb2xlIjo0Niwi
Li9ydWxlcy9uby1jb25zdGFudC1jb25kaXRpb24iOjQ3LCIuL3J1bGVzL25vLWNvbnRyb2wtcmVn
ZXgiOjQ4LCIuL3J1bGVzL25vLWRlYnVnZ2VyIjo0OSwiLi9ydWxlcy9uby1kZWxldGUtdmFyIjo1
MCwiLi9ydWxlcy9uby1kaXYtcmVnZXgiOjUxLCIuL3J1bGVzL25vLWR1cGUta2V5cyI6NTIsIi4v
cnVsZXMvbm8tZWxzZS1yZXR1cm4iOjUzLCIuL3J1bGVzL25vLWVtcHR5Ijo1NiwiLi9ydWxlcy9u
by1lbXB0eS1jbGFzcyI6NTQsIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiOjU1LCIuL3J1bGVzL25v
LWVxLW51bGwiOjU3LCIuL3J1bGVzL25vLWV2YWwiOjU4LCIuL3J1bGVzL25vLWV4LWFzc2lnbiI6
NTksIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSI6NjAsIi4vcnVsZXMvbm8tZXh0cmEtYmluZCI6
NjEsIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1jYXN0Ijo2MiwiLi9ydWxlcy9uby1leHRyYS1w
YXJlbnMiOjYzLCIuL3J1bGVzL25vLWV4dHJhLXNlbWkiOjY0LCIuL3J1bGVzL25vLWV4dHJhLXN0
cmljdCI6NjUsIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giOjY2LCIuL3J1bGVzL25vLWZsb2F0aW5n
LWRlY2ltYWwiOjY3LCIuL3J1bGVzL25vLWZ1bmMtYXNzaWduIjo2OCwiLi9ydWxlcy9uby1pbXBs
aWVkLWV2YWwiOjY5LCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9ucyI6NzAsIi4vcnVsZXMv
bm8taW52YWxpZC1yZWdleHAiOjcxLCIuL3J1bGVzL25vLWl0ZXJhdG9yIjo3MiwiLi9ydWxlcy9u
by1sYWJlbC12YXIiOjczLCIuL3J1bGVzL25vLWxhYmVscyI6NzQsIi4vcnVsZXMvbm8tbG9uZS1i
bG9ja3MiOjc1LCIuL3J1bGVzL25vLWxvbmVseS1pZiI6NzYsIi4vcnVsZXMvbm8tbG9vcC1mdW5j
Ijo3NywiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyI6NzgsIi4vcnVsZXMvbm8tbWl4ZWQtc3Bh
Y2VzLWFuZC10YWJzIjo3OSwiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiOjgwLCIuL3J1bGVzL25v
LW11bHRpLXN0ciI6ODEsIi4vcnVsZXMvbm8tbXVsdGlwbGUtZW1wdHktbGluZXMiOjgyLCIuL3J1
bGVzL25vLW5hdGl2ZS1yZWFzc2lnbiI6ODMsIi4vcnVsZXMvbm8tbmVnYXRlZC1pbi1saHMiOjg0
LCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5Ijo4NSwiLi9ydWxlcy9uby1uZXciOjkwLCIuL3J1
bGVzL25vLW5ldy1mdW5jIjo4NiwiLi9ydWxlcy9uby1uZXctb2JqZWN0Ijo4NywiLi9ydWxlcy9u
by1uZXctcmVxdWlyZSI6ODgsIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIjo4OSwiLi9ydWxlcy9u
by1vYmotY2FsbHMiOjkxLCIuL3J1bGVzL25vLW9jdGFsIjo5MywiLi9ydWxlcy9uby1vY3RhbC1l
c2NhcGUiOjkyLCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Ijo5NCwiLi9ydWxlcy9uby1wbHVzcGx1
cyI6OTUsIi4vcnVsZXMvbm8tcHJvY2Vzcy1lbnYiOjk2LCIuL3J1bGVzL25vLXByb2Nlc3MtZXhp
dCI6OTcsIi4vcnVsZXMvbm8tcHJvdG8iOjk4LCIuL3J1bGVzL25vLXJlZGVjbGFyZSI6OTksIi4v
cnVsZXMvbm8tcmVnZXgtc3BhY2VzIjoxMDAsIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyI6MTAx
LCIuL3J1bGVzL25vLXJlc3RyaWN0ZWQtbW9kdWxlcyI6MTAyLCIuL3J1bGVzL25vLXJldHVybi1h
c3NpZ24iOjEwMywiLi9ydWxlcy9uby1zY3JpcHQtdXJsIjoxMDQsIi4vcnVsZXMvbm8tc2VsZi1j
b21wYXJlIjoxMDUsIi4vcnVsZXMvbm8tc2VxdWVuY2VzIjoxMDYsIi4vcnVsZXMvbm8tc2hhZG93
IjoxMDgsIi4vcnVsZXMvbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXMiOjEwNywiLi9ydWxlcy9u
by1zcGFjZS1iZWZvcmUtc2VtaSI6MTA5LCIuL3J1bGVzL25vLXNwYWNlZC1mdW5jIjoxMTAsIi4v
cnVsZXMvbm8tc3BhcnNlLWFycmF5cyI6MTExLCIuL3J1bGVzL25vLXN5bmMiOjExMiwiLi9ydWxl
cy9uby10ZXJuYXJ5IjoxMTMsIi4vcnVsZXMvbm8tdHJhaWxpbmctc3BhY2VzIjoxMTQsIi4vcnVs
ZXMvbm8tdW5kZWYiOjExNiwiLi9ydWxlcy9uby11bmRlZi1pbml0IjoxMTUsIi4vcnVsZXMvbm8t
dW5kZWZpbmVkIjoxMTcsIi4vcnVsZXMvbm8tdW5kZXJzY29yZS1kYW5nbGUiOjExOCwiLi9ydWxl
cy9uby11bnJlYWNoYWJsZSI6MTE5LCIuL3J1bGVzL25vLXVudXNlZC1leHByZXNzaW9ucyI6MTIw
LCIuL3J1bGVzL25vLXVudXNlZC12YXJzIjoxMjEsIi4vcnVsZXMvbm8tdXNlLWJlZm9yZS1kZWZp
bmUiOjEyMiwiLi9ydWxlcy9uby12b2lkIjoxMjMsIi4vcnVsZXMvbm8td2FybmluZy1jb21tZW50
cyI6MTI0LCIuL3J1bGVzL25vLXdpdGgiOjEyNSwiLi9ydWxlcy9uby13cmFwLWZ1bmMiOjEyNiwi
Li9ydWxlcy9vbmUtdmFyIjoxMjcsIi4vcnVsZXMvcGFkZGVkLWJsb2NrcyI6MTI4LCIuL3J1bGVz
L3F1b3RlLXByb3BzIjoxMjksIi4vcnVsZXMvcXVvdGVzIjoxMzAsIi4vcnVsZXMvcmFkaXgiOjEz
MSwiLi9ydWxlcy9zZW1pIjoxMzIsIi4vcnVsZXMvc29ydC12YXJzIjoxMzMsIi4vcnVsZXMvc3Bh
Y2UtYWZ0ZXIta2V5d29yZHMiOjEzNCwiLi9ydWxlcy9zcGFjZS1iZWZvcmUtYmxvY2tzIjoxMzUs
Ii4vcnVsZXMvc3BhY2UtaW4tYnJhY2tldHMiOjEzNiwiLi9ydWxlcy9zcGFjZS1pbi1wYXJlbnMi
OjEzNywiLi9ydWxlcy9zcGFjZS1pbmZpeC1vcHMiOjEzOCwiLi9ydWxlcy9zcGFjZS1yZXR1cm4t
dGhyb3ctY2FzZSI6MTM5LCIuL3J1bGVzL3NwYWNlLXVuYXJ5LXdvcmQtb3BzIjoxNDAsIi4vcnVs
ZXMvc3BhY2VkLWxpbmUtY29tbWVudCI6MTQxLCIuL3J1bGVzL3N0cmljdCI6MTQyLCIuL3J1bGVz
L3VzZS1pc25hbiI6MTQzLCIuL3J1bGVzL3ZhbGlkLWpzZG9jIjoxNDQsIi4vcnVsZXMvdmFsaWQt
dHlwZW9mIjoxNDUsIi4vcnVsZXMvdmFycy1vbi10b3AiOjE0NiwiLi9ydWxlcy93cmFwLWlpZmUi
OjE0NywiLi9ydWxlcy93cmFwLXJlZ2V4IjoxNDgsIi4vcnVsZXMveW9kYSI6MTQ5fV0sMTE6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGVDb250ZXh0IHV0aWxpdHkgZm9yIHJ1bGVzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2Fz
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnN0
YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFBBU1NUSFJPVUdIUyA9IFsKKyAg
ICAgICAgImdldFNvdXJjZSIsCisgICAgICAgICJnZXRTb3VyY2VMaW5lcyIsCisgICAgICAgICJn
ZXRUb2tlbnMiLAorICAgICAgICAiZ2V0VG9rZW5zQmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vu
QmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vuc0FmdGVyIiwKKyAgICAgICAgImdldFRva2VuQWZ0
ZXIiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbnMiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbiIs
CisgICAgICAgICJnZXRMYXN0VG9rZW5zIiwKKyAgICAgICAgImdldExhc3RUb2tlbiIsCisgICAg
ICAgICJnZXRDb21tZW50cyIsCisgICAgICAgICJnZXRBbmNlc3RvcnMiLAorICAgICAgICAiZ2V0
U2NvcGUiLAorICAgICAgICAiZ2V0SlNEb2NDb21tZW50IiwKKyAgICAgICAgImdldEZpbGVuYW1l
IgorICAgIF07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQWN0cyBhcyBhbiBhYnN0cmFjdGlv
biBsYXllciBiZXR3ZWVuIHJ1bGVzIGFuZCB0aGUgbWFpbiBlc2xpbnQgb2JqZWN0LgorICogQGNv
bnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJRCBvZiB0aGUgcnVsZSB1
c2luZyB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSB7ZXNsaW50fSBlc2xpbnQgVGhlIGVzbGludCBv
YmplY3QuCisgKiBAcGFyYW0ge251bWJlcn0gc2V2ZXJpdHkgVGhlIGNvbmZpZ3VyZWQgc2V2ZXJp
dHkgbGV2ZWwgb2YgdGhlIHJ1bGUuCisgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIFRoZSBjb25m
aWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBydWxlLgorICogQHBhcmFt
IHtvYmplY3R9IHNldHRpbmdzIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHBhc3NlZCBmcm9t
IHRoZSBjb25maWcgZmlsZS4KKyAqLworZnVuY3Rpb24gUnVsZUNvbnRleHQocnVsZUlkLCBlc2xp
bnQsIHNldmVyaXR5LCBvcHRpb25zLCBzZXR0aW5ncykgeworCisgICAgLyoqCisgICAgICogVGhl
IHJlYWQtb25seSBJRCBvZiB0aGUgcnVsZS4KKyAgICAgKi8KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkodGhpcywgImlkIiwgeworICAgICAgICB2YWx1ZTogcnVsZUlkCisgICAgfSk7CisKKyAg
ICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IG9wdGlvbnMgb2YgdGhlIHJ1bGUKKyAgICAgKi8K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm9wdGlvbnMiLCB7CisgICAgICAgIHZh
bHVlOiBvcHRpb25zCisgICAgfSk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IHNl
dHRpbmdzIHNoYXJlZCBiZXR3ZWVuIGFsbCBydWxlcworICAgICAqLworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0aGlzLCAic2V0dGluZ3MiLCB7CisgICAgICAgIHZhbHVlOiBzZXR0aW5ncwor
ICAgIH0pOworCisgICAgLy8gY29weSBvdmVyIHBhc3N0aHJvdWdoIG1ldGhvZHMKKyAgICBQQVNT
VEhST1VHSFMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHRoaXNbbmFtZV0gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBlc2xpbnRbbmFtZV0uYXBwbHkoZXNsaW50
LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0sIHRoaXMpOworCisgICAgLyoqCisgICAg
ICogUGFzc3Rocm91Z2ggdG8gZXNsaW50LnJlcG9ydCgpIHRoYXQgYXV0b21hdGljYWxseSBhc3Np
Z25zIHRoZSBydWxlIElEIGFuZCBzZXZlcml0eS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIEFTVCBub2RlIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtP
YmplY3Q9fSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGljaCBw
cm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdlCisgICAgICogICAgIHdpdGggc3ltYm9scyBiZWlu
ZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdzIHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKi8KKyAgICB0aGlzLnJlcG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGxvY2F0aW9uLCBt
ZXNzYWdlLCBvcHRzKSB7CisgICAgICAgIGVzbGludC5yZXBvcnQocnVsZUlkLCBzZXZlcml0eSwg
bm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9wdHMpOworICAgIH07CisKK30KKworUnVsZUNvbnRl
eHQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBSdWxlQ29udGV4dAorfTsKKworbW9k
dWxlLmV4cG9ydHMgPSBSdWxlQ29udGV4dDsKKworfSx7fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMgYSBzdG9yYWdl
IGZvciBydWxlcy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBsb2FkUnVsZXMgPSByZXF1aXJlKCIuL2xvYWQtcnVs
ZXMiKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByaXZhdGVzCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2YXIgcnVsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworLyoqCisgKiBSZWdpc3RlcnMgYSBydWxlIG1vZHVsZSBmb3IgcnVsZSBpZCBp
biBzdG9yYWdlLgorICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUp
LgorICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBSdWxlIGhhbmRsZXIuCisgKiBAcmV0
dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSkgewor
ICAgIHJ1bGVzW3J1bGVJZF0gPSBydWxlTW9kdWxlOworfQorCitleHBvcnRzLmRlZmluZSA9IGRl
ZmluZTsKKworLyoqCisgKiBMb2FkcyBhbmQgcmVnaXN0ZXJzIGFsbCBydWxlcyBmcm9tIHBhc3Nl
ZCBydWxlcyBkaXJlY3RvcnkuCisgKiBAcGFyYW0ge1N0cmluZ30gW3J1bGVzRGlyXSBQYXRoIHRv
IHJ1bGVzIGRpcmVjdG9yeSwgbWF5IGJlIHJlbGF0aXZlLiBEZWZhdWx0cyB0byBgbGliL3J1bGVz
YC4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBsb2FkKHJ1bGVzRGlyKSB7Cisg
ICAgdmFyIG5ld1J1bGVzID0gbG9hZFJ1bGVzKHJ1bGVzRGlyKTsKKyAgICBPYmplY3Qua2V5cyhu
ZXdSdWxlcykuZm9yRWFjaChmdW5jdGlvbihydWxlSWQpIHsKKyAgICAgICAgZGVmaW5lKHJ1bGVJ
ZCwgbmV3UnVsZXNbcnVsZUlkXSk7CisgICAgfSk7Cit9CisKK2V4cG9ydHMubG9hZCA9IGxvYWQ7
CisKKy8qKgorICogUmVnaXN0ZXJzIGFsbCBnaXZlbiBydWxlcyBvZiBhIHBsdWdpbi4KKyAqIEBw
YXJhbSB7T2JqZWN0fSBwbHVnaW5SdWxlcyBBIGtleS92YWx1ZSBtYXAgb2YgcnVsZSBkZWZpbml0
aW9ucy4KKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVn
aW4gd2l0aG91dCBwcmVmaXggKGBlc2xpbnQtcGx1Z2luLWApLgorICogQHJldHVybnMge3ZvaWR9
CisgKi8KK2V4cG9ydHMuaW1wb3J0ID0gZnVuY3Rpb24gKHBsdWdpblJ1bGVzLCBwbHVnaW5OYW1l
KSB7CisgICAgT2JqZWN0LmtleXMocGx1Z2luUnVsZXMpLmZvckVhY2goZnVuY3Rpb24gKHJ1bGVJ
ZCkgeworICAgICAgICB2YXIgcXVhbGlmaWVkUnVsZUlkID0gcGx1Z2luTmFtZSArICIvIiArIHJ1
bGVJZCwKKyAgICAgICAgICAgIHJ1bGUgPSBwbHVnaW5SdWxlc1tydWxlSWRdOworCisgICAgICAg
IGRlZmluZShxdWFsaWZpZWRSdWxlSWQsIHJ1bGUpOworICAgIH0pOworfTsKKworLyoqCisgKiBB
Y2Nlc3MgcnVsZSBoYW5kbGVyIGJ5IGlkIChmaWxlIG5hbWUpLgorICogQHBhcmFtIHtTdHJpbmd9
IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUpLgorICogQHJldHVybnMge0Z1bmN0aW9ufSBSdWxl
IGhhbmRsZXIuCisgKi8KK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24ocnVsZUlkKSB7CisgICAgcmV0
dXJuIHJ1bGVzW3J1bGVJZF07Cit9OworCisvKioKKyAqIFJlc2V0IHJ1bGVzIHN0b3JhZ2UuCisg
KiBTaG91bGQgYmUgdXNlZCBvbmx5IGluIHRlc3RzLgorICogQHJldHVybnMge3ZvaWR9CisgKi8K
K2V4cG9ydHMudGVzdENsZWFyID0gZnVuY3Rpb24oKSB7CisgICAgcnVsZXMgPSBPYmplY3QuY3Jl
YXRlKG51bGwpOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxpemF0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBsb2FkcyBidWlsdC1pbiBydWxlcwor
bG9hZCgpOworCit9LHsiLi9sb2FkLXJ1bGVzIjoxMH1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciAi
YmxvY2sgc2NvcGVkIiB2YXJpYWJsZXMgYnkgYmluZGluZyBjb250ZXh0CisgKiBAYXV0aG9yIE1h
dHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisidXNlIHN0cmljdCI7
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgdmFyIHNjb3BlU3RhY2sgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICog
RGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRpb24gcG9zaXRp
b24gb3IgaXMgYSBub24tZGVjbGFyYXRpb24gcmVmZXJlbmNlLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQg
VGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMge0Jvb2xl
YW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBwb3NpdGlvbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uKGlkLCBwYXJlbnQpIHsKKyAgICAg
ICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNs
YXJhdGlvbiI6CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQucGFyYW1zLmluZGV4T2YoaWQpID4gLTEgfHwgaWQgPT09
IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9yIjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2Fz
ZSAiQ2F0Y2hDbGF1c2UiOgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LnBh
cmFtOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhl
ciBhbiBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0aW9uLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJl
bnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMge0Jv
b2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBwcm9wZXJ0eSBwb3NpdGlvbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KGlkLCBwYXJlbnQpIHsKKyAgICAgICAg
c3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiTWVtYmVyRXhwcmVzc2lv
biI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQucHJvcGVydHkgJiYgIXBh
cmVudC5jb21wdXRlZDsKKworICAgICAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICAg
ICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmtleTsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBQdXNoZXMgYSBuZXcgc2NvcGUgb2JqZWN0IG9uIHRoZSBzY29wZSBzdGFjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBwdXNoU2NvcGUo
KSB7CisgICAgICAgIHNjb3BlU3RhY2sucHVzaChbXSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogUmVtb3ZlcyB0aGUgdG9wbW9zdCBzY29wZSBvYmplY3QgZnJvbSB0aGUgc2NvcGUgc3RhY2su
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcG9wU2NvcGUo
KSB7CisgICAgICAgIHNjb3BlU3RhY2sucG9wKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
RGVjbGFyZXMgdGhlIGdpdmVuIG5hbWVzIGluIHRoZSB0b3Btb3N0IHNjb3BlIG9iamVjdC4KKyAg
ICAgKiBAcGFyYW0ge1tTdHJpbmddfSBuYW1lcyBBIGxpc3Qgb2YgbmFtZXMgdG8gZGVjbGFyZS4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkZWNsYXJlKG5h
bWVzKSB7CisgICAgICAgIFtdLnB1c2guYXBwbHkoc2NvcGVTdGFja1tzY29wZVN0YWNrLmxlbmd0
aCAtIDFdLCBuYW1lcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBmdW5j
dGlvbkhhbmRsZXIobm9kZSkgeworICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAgICAgZGVjbGFy
ZShub2RlLnBhcmFtcy5tYXAoZnVuY3Rpb24oaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBpZC5u
YW1lOworICAgICAgICB9KSk7CisgICAgICAgIGRlY2xhcmUobm9kZS5pZCA/IFtub2RlLmlkLm5h
bWVdIDogW10pOworICAgICAgICBkZWNsYXJlKFsiYXJndW1lbnRzIl0pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5vZGUpIHsKKyAgICAgICAgZGVj
bGFyZShub2RlLmRlY2xhcmF0aW9ucy5tYXAoZnVuY3Rpb24oZGVjbCkgeworICAgICAgICAgICAg
cmV0dXJuIGRlY2wuaWQubmFtZTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAgIHJldHVybiB7
CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzY29wZVN0YWNr
ID0gW2NvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXMubWFwKGZ1bmN0aW9uKHYpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdi5uYW1lOworICAgICAgICAgICAgfSldOworICAgICAgICB9LAor
CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5OworICAgICAgICAgICAgcHVzaFNjb3BlKCk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oc3RtdCkgeworICAgICAgICAg
ICAgICAgIGlmIChzdG10LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihzdG10KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0bXQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSB7
CisgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUoW3N0bXQuaWQubmFtZV0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJCbG9ja1N0
YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAgICAgICBkZWNsYXJl
KFtub2RlLnBhcmFtLm5hbWVdKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkNhdGNoQ2xhdXNlOmV4
aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9u
SGFuZGxlciwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IHBvcFNjb3BlLAor
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbkhhbmRsZXIsCisgICAgICAg
ICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLmluaXQgJiYgbm9kZS5pbml0LnR5cGUgPT09ICJWYXJpYWJsZURlY2xh
cmF0aW9uIikgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5v
ZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1l
bnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICAgICAgaWYgKG5vZGUu
bGVmdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICB2
YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlLmxlZnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAg
ICAgICJJZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2Vz
dG9yID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgICAgIGlmIChpc0Rl
Y2xhcmF0aW9uKG5vZGUsIGFuY2VzdG9yKSB8fCBpc1Byb3BlcnR5KG5vZGUsIGFuY2VzdG9yKSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gc2NvcGVTdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2NvcGVTdGFja1tpXS5pbmRleE9mKG5vZGUubmFtZSkgPiAtMSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiXCIiICsgbm9kZS5uYW1l
ICsgIlwiIHVzZWQgb3V0c2lkZSBvZiBiaW5kaW5nIGNvbnRleHQuIik7CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrIHN0YXRlbWVudHMgdGhh
dCBkbyBub3QgdXNlIHRoZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZQorICogQGF1dGhvciBJYW4gQ2hy
aXN0aWFuIE15ZXJzCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICB2YXIgc3R5bGUgPSBjb250ZXh0
Lm9wdGlvbnNbMF0gfHwgIjF0YnMiOworICAgIHZhciBwYXJhbXMgPSBjb250ZXh0Lm9wdGlvbnNb
MV0gfHwge307CisKKyAgICB2YXIgT1BFTl9NRVNTQUdFID0gIk9wZW5pbmcgY3VybHkgYnJhY2Ug
ZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgY29udHJvbGxpbmcgc3RhdGVtZW50
LiIsCisgICAgICAgIEJPRFlfTUVTU0FHRSA9ICJTdGF0ZW1lbnQgaW5zaWRlIG9mIGN1cmx5IGJy
YWNlcyBzaG91bGQgYmUgb24gbmV4dCBsaW5lLiIsCisgICAgICAgIENMT1NFX01FU1NBR0UgPSAi
Q2xvc2luZyBjdXJseSBicmFjZSBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0
aGUgc3Vic2VxdWVudCBibG9jay4iLAorICAgICAgICBDTE9TRV9NRVNTQUdFX1NJTkdMRSA9ICJD
bG9zaW5nIGN1cmx5IGJyYWNlIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIG9wZW5pbmcg
Y3VybHkgYnJhY2Ugb3Igb24gdGhlIGxpbmUgYWZ0ZXIgdGhlIHByZXZpb3VzIGJsb2NrLiIsCisg
ICAgICAgIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCA9ICJDbG9zaW5nIGN1cmx5IGJyYWNlIGFw
cGVhcnMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgc3Vic2VxdWVudCBibG9jay4iOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBhIGZ1
bmN0aW9uIHRoYXQgdmVyaWZpZXMgdGhhdCB0aGUgb3BlbmluZworICAgICAqIGN1cmx5IGJyYWNl
IGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIGNvbnRyb2xsaW5nIHN0YXRlbWVudCBvZiBhIGdp
dmVuCisgICAgICogbm9kZS4KKyAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gVGhlIHByb3BlcnRp
ZXMgdG8gY2hlY2sgb24gdGhlIG5vZGUuCisgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1
bmN0aW9uIHRoYXQgd2lsbCBwZXJmb3JtIHRoZSBjaGVjayBvbiBhIG5vZGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBjaGVja0Jsb2NrKCkgeworICAgICAgICB2YXIgYmxvY2tQcm9wZXJ0aWVzID0g
YXJndW1lbnRzOworICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
W10uZm9yRWFjaC5jYWxsKGJsb2NrUHJvcGVydGllcywgZnVuY3Rpb24oYmxvY2tQcm9wKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbm9kZVtibG9ja1Byb3BdLCBwcmV2aW91c1Rva2Vu
LCBjdXJseVRva2VuLCBjdXJseVRva2VuRW5kLCBjdXJseVRva2Vuc09uU2FtZUxpbmU7CisgICAg
ICAgICAgICAgICAgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF07CisgICAgICAgICAgICAgICAgaWYg
KGJsb2NrICYmIGJsb2NrLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoYmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbkVuZCA9IGNvbnRleHQuZ2V0TGFz
dFRva2VuKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbnNPblNhbWVMaW5l
ID0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQu
bGluZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Muc3RhcnQu
bGluZSAhPT0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChibG9jay5ib2R5Lmxlbmd0aCAmJiBwYXJhbXMuYWxsb3dTaW5nbGVM
aW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VybHlUb2tlbi5sb2Muc3RhcnQu
bGluZSA9PT0gYmxvY2suYm9keVswXS5sb2Muc3RhcnQubGluZSAmJiAhY3VybHlUb2tlbnNPblNh
bWVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoYmxv
Y2suYm9keVswXSwgQk9EWV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9keVtibG9jay5i
b2R5Lmxlbmd0aCAtIDFdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vuc09uU2FtZUxpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChibG9jay5ib2R5
W2Jsb2NrLmJvZHkubGVuZ3RoIC0gMV0sIENMT1NFX01FU1NBR0VfU0lOR0xFKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChibG9jay5i
b2R5Lmxlbmd0aCAmJiBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09PSBibG9jay5ib2R5WzBd
LmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChibG9jay5ib2R5WzBdLCBCT0RZX01FU1NBR0UpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgfQorCisg
ICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gSWZT
dGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEFuIElmU3RhdGVtZW50IG5v
ZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tJ
ZlN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0b2tlbnM7CisKKyAgICAgICAgY2hlY2tC
bG9jaygiY29uc2VxdWVudCIsICJhbHRlcm5hdGUiKShub2RlKTsKKworICAgICAgICBpZiAobm9k
ZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50Iikg
eworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5hbHRl
cm5hdGUsIDIpOworICAgICAgICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0
YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5hbHRl
cm5hdGUsIENMT1NFX01FU1NBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgeworICAgICAgICAgICAgICAgIGlmICh0
b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmFsdGVybmF0ZSwgQ0xPU0Vf
TUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJl
ZCBicmFjZSBzdHlsZSBvbiBUcnlTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIEEgVHJ5U3RhdGVtZW50IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICov
CisgICAgZnVuY3Rpb24gY2hlY2tUcnlTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9r
ZW5zOworCisgICAgICAgIGNoZWNrQmxvY2soImJsb2NrIiwgImZpbmFsaXplciIpKG5vZGUpOwor
CisgICAgICAgIGlmIChub2RlLmZpbmFsaXplciAmJiBub2RlLmZpbmFsaXplci50eXBlID09PSAi
QmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vu
c0JlZm9yZShub2RlLmZpbmFsaXplciwgMik7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT09ICIx
dGJzIikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09
IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3RydXAiKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW5zWzFdLmxv
Yy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUu
ZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuZm9y
Y2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIENhdGNoQ2xhdXNlcworICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBBIENhdGNoQ2xhdXNlIG5vZGUuCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tDYXRjaENsYXVzZShub2RlKSB7Cisg
ICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwK
KyAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZSk7CisK
KyAgICAgICAgY2hlY2tCbG9jaygiYm9keSIpKG5vZGUpOworCisgICAgICAgIGlmIChub2RlLmJv
ZHkgJiYgbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
IGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9r
ZW4ubG9jLnN0YXJ0LmxpbmUgIT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3Ry
dXAiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9jLnN0YXJ0LmxpbmUg
PT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBTd2l0Y2hTdGF0ZW1lbnRz
CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgU3dpdGNoU3RhdGVtZW50IG5vZGUuCisg
ICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tTd2l0Y2hT
dGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICBpZiAobm9kZS5j
YXNlcyAmJiBub2RlLmNhc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4
dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5jYXNlc1swXSwgMik7CisgICAgICAgICAgICBpZiAodG9r
ZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5n
ZXRMYXN0VG9rZW5zKG5vZGUsIDMpOworICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3Rh
cnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJ
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJJZlN0YXRlbWVudCI6IGNo
ZWNrSWZTdGF0ZW1lbnQsCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBjaGVja1RyeVN0YXRlbWVu
dCwKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogY2hlY2tDYXRjaENsYXVzZSwKKyAgICAgICAgIkRv
V2hpbGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBjaGVj
a0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5
IiksCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAg
ICAgIlN3aXRjaFN0YXRlbWVudCI6IGNoZWNrU3dpdGNoU3RhdGVtZW50CisgICAgfTsKKworfTsK
KworfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tY2FtZWxjYXNlZCBpZGVudGlmaWVycworICog
QGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgY29udGFpbnMgYW4gdW5k
ZXJzY29yZSBhbmQgaXNuJ3QgYWxsIHVwcGVyLWNhc2UKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30g
bmFtZSBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiB0
aGUgc3RyaW5nIGlzIHVuZGVyc2NvcmVkCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBpc1VuZGVyc2NvcmVkKG5hbWUpIHsKKworICAgICAgICAvLyBpZiB0aGVyZSdzIGFu
IHVuZGVyc2NvcmUsIGl0IG1pZ2h0IGJlIEFfQ09OU1RBTlQsIHdoaWNoIGlzIG9rYXkKKyAgICAg
ICAgcmV0dXJuIG5hbWUuaW5kZXhPZigiXyIpID4gLTEgJiYgbmFtZSAhPT0gbmFtZS50b1VwcGVy
Q2FzZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydHMgYW4gQVNUIG5vZGUgYXMg
YSBydWxlIHZpb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUg
dG8gcmVwb3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAg
ICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIklkZW50aWZpZXIgJ3t7bmFtZX19JyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLCB7IG5h
bWU6IG5vZGUubmFtZSB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJJZGVu
dGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0
cmFpbGluZyB1bmRlcnNjb3JlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBmbGFnIHByaXZhdGUvcHJv
dGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpcCB0aGVtCisgICAgICAgICAgICB2YXIgbmFtZSA9IG5v
ZGUubmFtZS5yZXBsYWNlKC9eXyt8XyskL2csICIiKSwKKyAgICAgICAgICAgICAgICBlZmZlY3Rp
dmVQYXJlbnQgPSAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSA/IG5v
ZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50OworCisgICAgICAgICAgICAvLyBNZW1iZXJF
eHByZXNzaW9ucyBnZXQgc3BlY2lhbCBydWxlcworICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50
LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworCisgICAgICAgICAgICAgICAgLy8gQWx3
YXlzIHJlcG9ydCB1bmRlcnNjb3JlZCBvYmplY3QgbmFtZXMKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5wYXJlbnQub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS5wYXJlbnQub2JqZWN0Lm5hbWUgPT09IG5vZGUubmFtZSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNVbmRlcnNjb3JlZChuYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXBvcnQobm9kZSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZXBvcnQgQXNzaWdu
bWVudEV4cHJlc3Npb25zIG9ubHkgaWYgdGhleSBhcmUgdGhlIGxlZnQgc2lkZSBvZiB0aGUgYXNz
aWdubWVudAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWZmZWN0aXZlUGFyZW50LnR5cGUg
PT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
VW5kZXJzY29yZWQobmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChlZmZlY3RpdmVQ
YXJlbnQucmlnaHQudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVmdC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lv
biIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnByb3Bl
cnR5Lm5hbWUgPT09IG5vZGUubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVwb3J0IGFueXRoaW5n
IHRoYXQgaXMgdW5kZXJzY29yZWQgdGhhdCBpc24ndCBhIENhbGxFeHByZXNzaW9uCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzVW5kZXJzY29yZWQobmFtZSkgJiYgZWZmZWN0aXZlUGFyZW50LnR5
cGUgIT09ICJDYWxsRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQ29t
bWEgc3BhY2luZyAtIHZhbGlkYXRlcyBzcGFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgY29tbWEKKyAq
IEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNvcHlyaWdodCAy
MDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGJlZm9yZTogY29udGV4dC5vcHRpb25zWzBd
ID8gISFjb250ZXh0Lm9wdGlvbnNbMF0uYmVmb3JlIDogZmFsc2UsCisgICAgICAgIGFmdGVyOiBj
b250ZXh0Lm9wdGlvbnNbMF0gPyAhIWNvbnRleHQub3B0aW9uc1swXS5hZnRlciA6IHRydWUKKyAg
ICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdv
IGFkamFjZW50IHRva2VucyBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRv
a2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAg
ICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFJ1biByZXBvcnQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBtc2cgVGhlIGVycm9yIG1zZyB0byBzaG93LgorICAgICAqIEBwcml2YXRlCisgICAgICogQHJl
dHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUsIG1zZykgewor
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBtc2cpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIFNob3cgc3BhY2UgcmVxdWlyZWQgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
ZGlyIFRoZSBsb2NhdGlvbiBvZiBzcGFjaW5nLgorICAgICAqIEBwcml2YXRlCisgICAgICogQHJl
dHVybnMge3N0cmluZ30gVGhlIHNwYWNpbmcgZXJyb3IgbXNnLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGdldFNwYWNlUmVxTXNnKGRpcikgeworICAgICAgICByZXR1cm4gIkEgc3BhY2UgaXMgcmVx
dWlyZWQgIiArIGRpciArICIgJywnLiI7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hvdyBu
byBzcGFjZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgVGhlIGxvY2F0aW9u
IG9mIHNwYWNpbmcKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRo
ZSBzcGFjaW5nIGVycm9yIG1zZy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXROb1NwYWNlTXNn
KGRpcikgeworICAgICAgICByZXR1cm4gIlRoZXJlIHNob3VsZCBiZSBubyBzcGFjZSAiICsgZGly
ICsgIiAnLCcuIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZXMgdGhlIHNwYWNp
bmcgYmVmb3JlIGFuZCBhZnRlciBjb21tYXMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2YgdGhlIG5vZGUuCisgICAgICogQHByaXZhdGUK
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZUNv
bW1hU3BhY2luZyhub2RlLCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMgPSBub2RlW3By
b3BlcnR5XTsKKworICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAg
ICAgICAgIHZhciB0b2tlbkJlZm9yZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisg
ICAgICAgICAgICAgICAgICAgIGl0ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdLAorICAgICAg
ICAgICAgICAgICAgICB0b2tlbkVuZExpbmU7CisKKyAgICAgICAgICAgICAgICBpZiAodG9rZW5C
ZWZvcmUgJiYgdG9rZW5CZWZvcmUudmFsdWUgPT09ICIsIikgeworICAgICAgICAgICAgICAgICAg
ICB0b2tlbkVuZExpbmUgPSB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmU7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuRW5k
TGluZSA9PT0gaXRlbUJlZm9yZS5sb2MuZW5kLmxpbmUgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuRW5kTGluZSA9PT0gaXRlbS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICYmIG9wdGlvbnMuYWZ0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVm
b3JlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0
U3BhY2VSZXFNc2coImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRl
bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNw
YWNlUmVxTXNnKCJhZnRlciIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYmVmb3JlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9y
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNw
YWNlUmVxTXNnKCJiZWZvcmUiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRlbSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3Bh
Y2VNc2coImFmdGVyIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hZnRlcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0pKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFjZVJlcU1zZygi
YWZ0ZXIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3BhY2VNc2co
ImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Nw
YWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3BhY2VNc2coImJlZm9yZSIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
U3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYWZ0ZXIiKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFy
YXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2lu
Zyhub2RlLCAiZGVjbGFyYXRpb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJPYmplY3RFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNp
bmcobm9kZSwgInByb3BlcnRpZXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkFycmF5RXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5n
KG5vZGUsICJlbGVtZW50cyIpOworICAgICAgICB9LAorICAgICAgICAiU2VxdWVuY2VFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmco
bm9kZSwgImV4cHJlc3Npb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2lu
Zyhub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmco
bm9kZSwgInBhcmFtcyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTc6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IENv
bW1hIHN0eWxlIC0gZW5mb3JjZXMgY29tbWEgc3R5bGVzIG9mIHR3byB0eXBlczogbGFzdCBhbmQg
Zmlyc3QKKyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuCisgKiBAY29w
eXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAi
bGFzdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgY29tbWEgcGxh
Y2VtZW50IHdpdGggcmVnYXJkcyB0byBhIGRlY2xhcmF0aW9uL3Byb3BlcnR5L2VsZW1lbnQKKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8g
Y2hlY2sKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbWEobm9kZSkgeworICAgICAgICB2YXIgaXRlbXMgPSBu
b2RlLmRlY2xhcmF0aW9ucyB8fCBub2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVtZW50czsKKwor
ICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaXRlbXMuZm9yRWFj
aChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB0b2tlbkJlZm9y
ZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisgICAgICAgICAgICAgICAgICAgIGl0
ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdOworCisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
QmVmb3JlLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2luZ2xl
IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9
PT0gaXRlbS5sb2Muc3RhcnQubGluZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5C
ZWZvcmUubG9jLmVuZC5saW5lID09PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIC8vIGxvbmUgY29tbWEKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVtLmxvYy5zdGFydC5saW5lICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgIT09IGl0ZW1CZWZv
cmUubG9jLmVuZC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChpdGVtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdG9rZW5CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdG9rZW5C
ZWZvcmUubG9jLnN0YXJ0LmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIkJhZCBs
aW5lIGJyZWFraW5nIGJlZm9yZSBhbmQgYWZ0ZXIgJywnLiIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAiZmlyc3QiICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2Muc3RhcnQubGluZSAhPT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgIicsJyBzaG91bGQgYmUgcGxhY2VkIGZpcnN0LiIpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAibGFzdCIgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9PT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGl0ZW1CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlbUJl
Zm9yZS5sb2MuZW5kLmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIicsJyBzaG91
bGQgYmUgcGxhY2VkIGxhc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IHZhbGlkYXRlQ29tbWEs
CisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogdmFsaWRhdGVDb21tYSwKKyAgICAgICAgIkFy
cmF5RXhwcmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSwxODpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
Q291bnRzIHRoZSBjeWNsb21hdGljIGNvbXBsZXhpdHkgb2YgZWFjaCBmdW5jdGlvbiBvZiB0aGUg
c2NyaXB0LiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWNsb21hdGljX2NvbXBs
ZXhpdHkuCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBpZiwgY29uZGl0aW9uYWwsIGZvciwgd2hp
bHRlLCB0cnksIHN3aXRjaC9jYXNlLAorICogQGF1dGhvciBQYXRyaWNrIEJyb3NzZXQKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNb
MF07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFVzaW5nIGEgc3RhY2sgdG8gc3RvcmUgY29tcGxleGl0
eSAoaGFuZGxpbmcgbmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107CisKKyAgICAv
LyBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBmdW5jdGlvbiBz
dGFjaworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZucy5wdXNoKDEp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFy
IGNvbXBsZXhpdHkgPSBmbnMucG9wKCksIG5hbWUgPSAiYW5vbnltb3VzIjsKKworICAgICAgICBp
ZiAobm9kZS5pZCkgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUuaWQubmFtZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29tcGxleGl0eSA+IFRIUkVTSE9MRCkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkZ1bmN0aW9uICd7e25hbWV9fScgaGFzIGEgY29tcGxleGl0eSBv
ZiB7e2NvbXBsZXhpdHl9fS4iLCB7IG5hbWU6IG5hbWUsIGNvbXBsZXhpdHk6IGNvbXBsZXhpdHkg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFzZUNvbXBsZXhpdHko
KSB7CisgICAgICAgIGlmIChmbnMubGVuZ3RoKSB7CisgICAgICAgICAgICBmbnNbZm5zLmxlbmd0
aCAtIDFdICsrOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5KG5vZGUpIHsKKyAgICAgICAgLy8gQXZvaWRpbmcgYGRlZmF1bHRgCisgICAg
ICAgIGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgIGluY3JlYXNlQ29tcGxleGl0eShub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNlTG9naWNhbENvbXBs
ZXhpdHkobm9kZSkgeworICAgICAgICAvLyBBdm9pZGluZyAmJgorICAgICAgICBpZiAobm9kZS5v
cGVyYXRvciA9PT0gInx8IikgeworICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5KG5vZGUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
bjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6
IGVuZEZ1bmN0aW9uLAorCisgICAgICAgICJDYXRjaENsYXVzZSI6IGluY3JlYXNlQ29tcGxleGl0
eSwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGluY3JlYXNlQ29tcGxleGl0eSwK
KyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogaW5jcmVhc2VMb2dpY2FsQ29tcGxleGl0eSwK
KyAgICAgICAgIkZvclN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAgICAgICAgIkZv
ckluU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAgICAiSWZTdGF0ZW1lbnQi
OiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAgICJTd2l0Y2hDYXNlIjogaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5LAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhp
dHksCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5CisgICAg
fTsKKworfTsKKworfSx7fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb25zaXN0ZW50IHJldHVybiB2YWx1
ZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IHZhciBmdW5jdGlvbnMgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBI
ZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gZW50ZXJGdW5j
dGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnB1c2goe30pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGV4aXRGdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnBvcCgpOworICAgIH0KKwor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBlbnRlckZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZW50ZXJGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRGdW5jdGlvbiwK
KyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZXhpdEZ1bmN0aW9uLAorCisgICAg
ICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZh
ciByZXR1cm5JbmZvID0gZnVuY3Rpb25zW2Z1bmN0aW9ucy5sZW5ndGggLSAxXSwKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlRGVmaW5lZCA9ICJ0eXBlIiBpbiByZXR1cm5JbmZvOworCisgICAg
ICAgICAgICBpZiAocmV0dXJuVHlwZURlZmluZWQpIHsKKworICAgICAgICAgICAgICAgIGlmIChy
ZXR1cm5JbmZvLnR5cGUgIT09ICEhbm9kZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgIiArIChyZXR1cm5JbmZvLnR5cGUgPyAi
YSIgOiAibm8iKSArICIgcmV0dXJuIHZhbHVlLiIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm5JbmZvLnR5cGUgPSAhIW5v
ZGUuYXJndW1lbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisK
K30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgY29uc2lzdGVudCBuYW1pbmcgb2YgInRoaXMiIGNv
bnRleHQgdmFyaWFibGVzCisgKiBAYXV0aG9yIFJhcGhhZWwgUGlndWxsYQorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbGlhcyA9IGNvbnRleHQub3B0aW9uc1sw
XTsKKworICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihkZWNs
YXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZC5uYW1lID09PSBh
bGlhcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIShkZWNsYXJhdGlvbi5pbml0ICYmIGRl
Y2xhcmF0aW9uLmluaXQudHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIikpIHsKKworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAiRGVzaWduYXRlZCAndGhpcycgYWxpYXMgJ3t7YWxp
YXN9fScgaXMgbm90IGFzc2lnbmVkICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
byB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgeyBhbGlhczogZGVjbGFyYXRpb24uaWQubmFtZSB9CisgICAgICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlu
aXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmluaXQudHlwZSA9PT0g
IlRoaXNFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24u
aWQubmFtZSAhPT0gYWxpYXMpIHsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiVW5leHBlY3RlZCBhbGlhcyAne3thbGlhc319JyBmb3IgJ3RoaXMnLiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB7IGFsaWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVtZW50cyB3aXRo
b3V0IGN1cmx5IGJyYWNlcworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIG11bHRpT25seSA9IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJt
dWx0aSIpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIGJvZHkgb2Yg
YSBub2RlIHRvIHNlZSBpZiBpdCdzIGEgYmxvY2sgc3RhdGVtZW50LiBEZXBlbmRpbmcgb24KKyAg
ICAgKiB0aGUgcnVsZSBvcHRpb25zLCByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBwcm9ibGVtcy4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVwb3J0IGlmIHRoZXJl
J3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYm9keSBub2Rl
IHRvIGNoZWNrIGZvciBibG9ja3MuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5h
bWUgdG8gcmVwb3J0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzdWZmaXggQWRkaXRpb25hbCBzdHJpbmcgdG8gYWRkIHRvIHRoZSBlbmQgb2YgYSByZXBvcnQu
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tCb2R5
KG5vZGUsIGJvZHksIG5hbWUsIHN1ZmZpeCkgeworICAgICAgICB2YXIgaGFzQmxvY2sgPSAoYm9k
eS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKTsKKworICAgICAgICBpZiAobXVsdGlPbmx5KSB7
CisgICAgICAgICAgICBpZiAoaGFzQmxvY2sgJiYgYm9keS5ib2R5Lmxlbmd0aCA9PT0gMSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2FyeSB7IGFmdGVy
ICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWZm
aXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAiIikKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoIWhhc0Jsb2NrKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkV4cGVjdGVkIHsgYWZ0ZXIgJ3t7bmFtZX19J3t7c3VmZml4fX0uIiwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogKHN1ZmZpeCA/ICIgIiArIHN1ZmZpeCA6ICIiKQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJJ
ZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgY2hlY2tCb2R5KG5v
ZGUsIG5vZGUuY29uc2VxdWVudCwgImlmIiwgImNvbmRpdGlvbiIpOworCisgICAgICAgICAgICBp
ZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3RhdGVtZW50
IikgeworICAgICAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmFsdGVybmF0ZSwgImVs
c2UiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2Rl
LmJvZHksICJ3aGlsZSIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRG9X
aGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBjaGVja0JvZHko
bm9kZSwgbm9kZS5ib2R5LCAiZG8iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRm9yU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUu
Ym9keSwgImZvciIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyByZXF1aXJlIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2ggc3RhdGVtZW50cworICogQGF1
dGhvciBBbGlha3NlaSBTaHl0a2luCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENPTU1FTlRf
VkFMVUUgPSAibm8gZGVmYXVsdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhl
bHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1
dCB0byBnZXQgbGFzdCBlbGVtZW50IG9mIGFycmF5CisgICAgICogQHBhcmFtICB7KltdfSBjb2xs
ZWN0aW9uIEFycmF5CisgICAgICogQHJldHVybnMgeyp9IExhc3QgZWxlbWVudAorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGxhc3QoY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4gY29sbGVjdGlv
bltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIGlmICghbm9kZS5jYXNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lw
IGNoZWNrIG9mIGVtcHR5IHN3aXRjaCBiZWNhdXNlIHRoZXJlIGlzIG5vIGVhc3kgd2F5CisgICAg
ICAgICAgICAgICAgLy8gdG8gZXh0cmFjdCBjb21tZW50cyBpbnNpZGUgaXQgbm93CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgaGFzRGVm
YXVsdCA9IG5vZGUuY2FzZXMuc29tZShmdW5jdGlvbih2KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHYudGVzdCA9PT0gbnVsbDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAo
IWhhc0RlZmF1bHQpIHsKKworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworICAgICAgICAg
ICAgICAgIHZhciBjb21tZW50czsKKworICAgICAgICAgICAgICAgIHZhciBsYXN0Q2FzZSA9IGxh
c3Qobm9kZS5jYXNlcyk7CisgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGxhc3RDYXNlKS50cmFpbGluZzsKKworICAgICAgICAgICAgICAgIGlmIChjb21tZW50
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3QoY29tbWVudHMp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghY29tbWVudCB8fCBj
b21tZW50LnZhbHVlLnRyaW0oKSAhPT0gQ09NTUVOVF9WQUxVRSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBkZWZhdWx0IGNhc2UuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisK
K30se31dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIHdhcm4gYWJvdXQgdXNpbmcgZG90IG5vdGF0aW9uIGluc3RlYWQg
b2Ygc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd2hlbiBwb3NzaWJsZS4KKyAqIEBhdXRob3IgSm9z
aCBQZXJlegorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciB2YWxpZElk
ZW50aWZpZXIgPSAvXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQvOwordmFyIGtleXdvcmRzID0g
WworICAgICJ0aGlzIiwKKyAgICAiZnVuY3Rpb24iLAorICAgICJpZiIsCisgICAgInJldHVybiIs
CisgICAgInZhciIsCisgICAgImVsc2UiLAorICAgICJmb3IiLAorICAgICJuZXciLAorICAgICJh
cmd1bWVudHMiLAorICAgICJpbiIsCisgICAgInR5cGVvZiIsCisgICAgIndoaWxlIiwKKyAgICAi
Y2FzZSIsCisgICAgImJyZWFrIiwKKyAgICAidHJ5IiwKKyAgICAiY2F0Y2giLAorICAgICJkZWxl
dGUiLAorICAgICJ0aHJvdyIsCisgICAgInN3aXRjaCIsCisgICAgImNvbnRpbnVlIiwKKyAgICAi
ZGVmYXVsdCIsCisgICAgImluc3RhbmNlb2YiLAorICAgICJkbyIsCisgICAgInZvaWQiLAorICAg
ICJmaW5hbGx5IiwKKyAgICAid2l0aCIsCisgICAgImRlYnVnZ2VyIiwKKyAgICAiZXZhbCIsCisg
ICAgImltcGxlbWVudHMiLAorICAgICJpbnRlcmZhY2UiLAorICAgICJwYWNrYWdlIiwKKyAgICAi
cHJpdmF0ZSIsCisgICAgInByb3RlY3RlZCIsCisgICAgInB1YmxpYyIsCisgICAgInN0YXRpYyIs
CisgICAgInlpZWxkIiwKKyAgICAibGV0IiwKKyAgICAiY2xhc3MiLAorICAgICJlbnVtIiwKKyAg
ICAiZXhwb3J0IiwKKyAgICAiZXh0ZW5kcyIsCisgICAgImltcG9ydCIsCisgICAgInN1cGVyIiwK
KyAgICAidHJ1ZSIsCisgICAgImZhbHNlIiwKKyAgICAibnVsbCIsCisgICAgImFic3RyYWN0IiwK
KyAgICAiYm9vbGVhbiIsCisgICAgImJ5dGUiLAorICAgICJjaGFyIiwKKyAgICAiY29uc3QiLAor
ICAgICJkb3VibGUiLAorICAgICJmaW5hbCIsCisgICAgImZsb2F0IiwKKyAgICAiZ290byIsCisg
ICAgImludCIsCisgICAgImxvbmciLAorICAgICJuYXRpdmUiLAorICAgICJzaG9ydCIsCisgICAg
InN5bmNocm9uaXplZCIsCisgICAgInRocm93cyIsCisgICAgInRyYW5zaWVudCIsCisgICAgInZv
bGF0aWxlIgorXTsKKworZnVuY3Rpb24gY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlvbihub2RlKSB7
CisgICAgcmV0dXJuIG5vZGUuY29tcHV0ZWQgPT09IHRydWUgJiYKKyAgICAgICAgbm9kZS5wcm9w
ZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgdmFsaWRJZGVudGlmaWVyLnRlc3Qo
bm9kZS5wcm9wZXJ0eS52YWx1ZSkgJiYKKyAgICAgICAga2V5d29yZHMuaW5kZXhPZigiIiArIG5v
ZGUucHJvcGVydHkudmFsdWUpID09PSAtMTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlv
bihub2RlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJbJyIgKyBu
b2RlLnByb3BlcnR5LnZhbHVlICsgIiddIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlv
bi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwyNDpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UmVxdWlyZSBmaWxlIHRvIGVuZCB3aXRoIHNpbmdsZSBuZXdsaW5lLgorICogQGF1dGhvciBOb2Rl
Y2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hl
Y2tCYWRFT0Yobm9kZSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBzb3VyY2UgY29k
ZSwgbm90IGZvciBub2RlIG9ubHkuCisgICAgICAgICAgICB2YXIgc3JjID0gY29udGV4dC5nZXRT
b3VyY2UoKSwgbG9jYXRpb24gPSB7Y29sdW1uOiAxfTsKKworICAgICAgICAgICAgaWYgKHNyYy5s
ZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChzcmNbc3JjLmxlbmd0aCAtIDFdICE9PSAiXG4iKSB7CisgICAgICAg
ICAgICAgICAgLy8gZmlsZSBpcyBub3QgbmV3bGluZS10ZXJtaW5hdGVkCisgICAgICAgICAgICAg
ICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZykubGVuZ3RoOworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiTmV3bGluZSByZXF1aXJlZCBhdCBl
bmQgb2YgZmlsZSBidXQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmICgvXG5c
cypcbiQvLnRlc3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgbGluZSBpcyBlbXB0
eQorICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBzcmMuc3BsaXQoL1xuL2cpLmxlbmd0
aCAtIDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24sICJV
bmV4cGVjdGVkIGJsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGUuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDI1OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVt
ZW50cyB0aGF0IHVzZSAhPSBhbmQgPT0gaW5zdGVhZCBvZiAhPT0gYW5kID09PQorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIGVpdGhlciBvcGVyYW5kIG9mIGEgYmluYXJ5IGV4cHJlc3Npb24gaXMg
YSB0eXBlb2Ygb3BlcmF0aW9uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9uZSBvZiB0aGUgb3BlcmFu
ZHMgaXMgdHlwZW9mCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1R5
cGVPZihub2RlKSB7CisgICAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJpZ2h0XS5zb21l
KGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJVbmFy
eUV4cHJlc3Npb24iICYmIG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgb3BlcmFuZHMgYXJlIGxpdGVyYWxz
IG9mIHRoZSBzYW1lIHR5cGUgKHZpYSB0eXBlb2YpCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBvZiBzYW1lIHR5cGUKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIGFyZUxpdGVyYWxzQW5kU2FtZVR5cGUobm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5s
ZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAm
JgorICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxlZnQudmFsdWUgPT09IHR5cGVvZiBub2Rl
LnJpZ2h0LnZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBvbmUgb2Yg
dGhlIG9wZXJhbmRzIGlzIGEgbGl0ZXJhbCBudWxsCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBudWxsCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc051
bGxDaGVjayhub2RlKSB7CisgICAgICAgIHJldHVybiAobm9kZS5yaWdodC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgbm9kZS5yaWdodC52YWx1ZSA9PT0gbnVsbCkgfHwKKyAgICAgICAgICAgICAgICAo
bm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQudmFsdWUgPT09IG51bGwp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIChsaW5lIGFuZCBj
b2x1bW4pIG9mIHRoZSBiaW5hcnkgZXhwcmVzc2lvbidzIG9wZXJhdG9yCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrCisgICAg
ICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBmaW5kCisgICAgICog
QHJldHVybnMge09iamVjdH0geyBsaW5lLCBjb2x1bW4gfSBsb2NhdGlvbiBvZiBvcGVyYXRvcgor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0T3BlcmF0b3JMb2NhdGlv
bihub2RlKSB7CisgICAgICAgIHZhciBvcFRva2VuID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSlb
Y29udGV4dC5nZXRUb2tlbnMobm9kZS5sZWZ0KS5sZW5ndGhdOworICAgICAgICByZXR1cm4ge2xp
bmU6IG9wVG9rZW4ubG9jLnN0YXJ0LmxpbmUsIGNvbHVtbjogb3BUb2tlbi5sb2Muc3RhcnQuY29s
dW1ufTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yICE9PSAiPT0i
ICYmIG5vZGUub3BlcmF0b3IgIT09ICIhPSIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJz
bWFydCIgJiYgKGlzVHlwZU9mKG5vZGUpIHx8CisgICAgICAgICAgICAgICAgICAgIGFyZUxpdGVy
YWxzQW5kU2FtZVR5cGUobm9kZSkpIHx8IGlzTnVsbENoZWNrKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC5v
cHRpb25zWzBdID09PSAiYWxsb3ctbnVsbCIgJiYgaXNOdWxsQ2hlY2sobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KAorICAgICAgICAgICAgICAgIG5vZGUsIGdldE9wZXJhdG9yTG9jYXRpb24obm9kZSks
CisgICAgICAgICAgICAgICAgIkV4cGVjdGVkICd7e29wfX09JyBhbmQgaW5zdGVhZCBzYXcgJ3t7
b3B9fScuIiwKKyAgICAgICAgICAgICAgICB7b3A6IG5vZGUub3BlcmF0b3J9CisgICAgICAgICAg
ICApOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjY6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gd2FybiB3
aGVuIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KKyAqIEBhdXRo
b3IgS3lsZSBULiBOdW5lcnkKKyAqLworICJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
dmFyIG5hbWUgPSBub2RlLmlkICYmIG5vZGUuaWQubmFtZTsKKworICAgICAgICAgICAgaWYgKCFu
YW1lKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgZnVu
Y3Rpb24gZXhwcmVzc2lvbiBuYW1lLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKK307CisKK30se31dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9u
IHN0eWxlCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0sCisgICAgICAgIGVuZm9yY2VEZWNs
YXJhdGlvbnMgPSAoc3R5bGUgPT09ICJkZWNsYXJhdGlvbiIpOworCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICghZW5mb3JjZURlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCku
cG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbmZvcmNlRGVjbGFyYXRpb25zICYmIHBhcmVudC50
eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KHBhcmVudCwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24uIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyODpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIG9yIHJlcXVpcmUgZ2xvYmFsIHN0cmljdCBtb2RlLgorICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG1vZGUgPSBjb250ZXh0Lm9wdGlv
bnNbMF07CisKKyAgICBpZiAobW9kZSA9PT0gImFsd2F5cyIpIHsKKworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
dGF0ZW1lbnQgPSBub2RlLmJvZHlbMF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoc3Rh
dGVtZW50LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJiBzdGF0ZW1lbnQuZXhwcmVz
c2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZ2xvYmFsIGZvcm0gb2YgXCJ1c2Ugc3RyaWN0
XCIuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICB9IGVsc2UgeyAvLyBtb2RlID0gIm5ldmVyIgorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNl
c3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24udmFs
dWUgPT09ICJ1c2Ugc3RyaWN0IiAmJiBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGZ1bmN0aW9uIGZv
cm0gb2YgXCJ1c2Ugc3RyaWN0XCIuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHt9XSwyOTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGZv
ci1pbiBsb29wcyB3aXRob3V0IGlmIHN0YXRlbWVudHMgaW5zaWRlCisgKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAqIElmIHRoZSBmb3ItaW4gc3RhdGVtZW50IGhhcyB7fSwgdGhlbiB0
aGUgcmVhbCBib2R5IGlzIHRoZSBib2R5CisgICAgICAgICAgICAgKiBvZiB0aGUgQmxvY2tTdGF0
ZW1lbnQuIE90aGVyd2lzZSwganVzdCB1c2UgYm9keSBhcyBwcm92aWRlZC4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgdmFyIGJvZHkgPSBub2RlLmJvZHkudHlwZSA9PT0gIkJsb2NrU3Rh
dGVtZW50IiA/IG5vZGUuYm9keS5ib2R5WzBdIDogbm9kZS5ib2R5OworCisgICAgICAgICAgICBp
ZiAoYm9keSAmJiBib2R5LnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGJvZHkgb2YgYSBmb3ItaW4gc2hvdWxkIGJlIHdy
YXBwZWQgaW4gYW4gaWYgc3RhdGVtZW50IHRvIGZpbHRlciB1bndhbnRlZCBwcm9wZXJ0aWVzIGZy
b20gdGhlIHByb3RvdHlwZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBFbnN1cmUgaGFuZGxpbmcgb2YgZXJyb3JzIHdoZW4gd2Uga25vdyB0
aGV5IGV4aXN0LgorICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb24KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBlcnJvckFyZ3VtZW50ID0gY29udGV4dC5vcHRpb25zWzBdIHx8ICJl
cnIiOworICAgIHZhciBjYWxsYmFja3MgPSBbXTsKKyAgICB2YXIgc2NvcGVzID0gMDsKKworICAg
IC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgc2hvdWxkIGJlIGludGVy
cHJldGVkIGFzIGEgcmVnZXhwIHBhdHRlcm4uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmlu
Z1RvQ2hlY2sgVGhlIHN0cmluZyB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgKiBAcmV0
dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHN0cmluZyBzaG91bGQgYmUgaW50ZXJw
cmV0ZWQgYXMgYSBwYXR0ZXJuLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGF0dGVybihzdHJp
bmdUb0NoZWNrKSB7CisgICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHJpbmdUb0NoZWNrWzBdOwor
ICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09PSAiXiI7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgZXJyb3Ig
YXJndW1lbnQuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgd2hpY2ggc2hv
dWxkIGJlIGNvbXBhcmVkLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5v
dCB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVycm9yIHZhcmlhYmxlIG5h
bWUuCisgICAgICovCisgICAgZnVuY3Rpb24gbWF0Y2hlc0NvbmZpZ3VyZWRFcnJvck5hbWUobmFt
ZSkgeworICAgICAgICBpZiAoaXNQYXR0ZXJuKGVycm9yQXJndW1lbnQpKSB7CisgICAgICAgICAg
ICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChlcnJvckFyZ3VtZW50KTsKKyAgICAgICAgICAgIHJl
dHVybiByZWdleHAudGVzdChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZSA9
PT0gZXJyb3JBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayB0aGUgYXJn
dW1lbnRzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBlcnJvciBvYmpl
Y3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIG5lc3RlZCBzY29wZXMKKyAg
ICAgICAgc2NvcGVzKys7CisKKyAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZpcnN0IGFyZ3VtZW50
IG1hdGNoZXMgb3VyIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgdmFyIGZpcnN0QXJnID0gbm9kZS5w
YXJhbXMgJiYgbm9kZS5wYXJhbXNbMF07CisgICAgICAgIGlmIChmaXJzdEFyZyAmJiBtYXRjaGVz
Q29uZmlndXJlZEVycm9yTmFtZShmaXJzdEFyZy5uYW1lKSkgeworICAgICAgICAgICAgY2FsbGJh
Y2tzLnB1c2goe2hhbmRsZWQ6IGZhbHNlLCBkZXB0aDogc2NvcGVzLCBlcnJvclZhcmlhYmxlTmFt
ZTogZmlyc3RBcmcubmFtZX0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog
QXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNoZWNrIHRvIHNlZSBpZiB0aGUgZXJyb3Igd2FzIGhh
bmRsZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVj
ay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbmRGdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzW2NhbGxiYWNr
cy5sZW5ndGggLSAxXSB8fCB7fTsKKworICAgICAgICAvLyBjaGVjayBpZiBhIGNhbGxiYWNrIGlz
IGVuZGluZywgaWYgc28gcG9wIGl0IG9mZiB0aGUgc3RhY2sKKyAgICAgICAgaWYgKGNhbGxiYWNr
LmRlcHRoID09PSBzY29wZXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5wb3AoKTsKKworICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgd2VyZSBubyBoYW5kbGVkIGVycm9ycyBzaW5jZSB0
aGUgbGFzdCBjYWxsYmFjaworICAgICAgICAgICAgaWYgKCFjYWxsYmFjay5oYW5kbGVkKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGVycm9yIHRvIGJl
IGhhbmRsZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBsZXNz
IG5lc3RlZCBmdW5jdGlvbnMKKyAgICAgICAgc2NvcGVzLS07CisKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgaGFuZGxpbmcgdGhlIGVycm9yIG9iamVjdCBw
cm9wZXJseS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
Rm9yRXJyb3Iobm9kZSkgeworICAgICAgICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxsYmFja3MubGVuZ3RoIC0gMV0g
fHwge307CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbm9kZSdzIG5hbWUgbWF0Y2hl
cyBvdXIgZXJyb3IgYXJndW1lbnQgbmFtZQorICAgICAgICAgICAgdmFyIGlzQWJvdXRFcnJvciA9
IG5vZGUubmFtZSA9PT0gY2FsbGJhY2suZXJyb3JWYXJpYWJsZU5hbWU7CisKKyAgICAgICAgICAg
IC8vIHdlIGRvbid0IGNvbnNpZGVyIHRoZXNlIHVzZSBjYXNlcyBhcyAiaGFuZGxpbmciIHRoZSBl
cnJvcgorICAgICAgICAgICAgdmFyIGRvTm90Q291bnQgPSBbIkZ1bmN0aW9uRGVjbGFyYXRpb24i
LCAiRnVuY3Rpb25FeHByZXNzaW9uIiwgIkNhdGNoQ2xhdXNlIl07CisKKyAgICAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGlzIGlkZW50aWZpZXIgaXNuJ3QgdXNlZCBhcyBwYXJ0IG9mIG9uZSBvZiB0
aGVtCisgICAgICAgICAgICB2YXIgaXNIYW5kbGVkID0gZG9Ob3RDb3VudC5pbmRleE9mKG5vZGUu
cGFyZW50LnR5cGUpID09PSAtMTsKKworICAgICAgICAgICAgaWYgKGlzQWJvdXRFcnJvciAmJiBp
c0hhbmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyByZWNvcmQgdGhhdCB0aGlzIGNhbGxiYWNr
IGhhbmRsZWQgaXRzIGVycm9yCisgICAgICAgICAgICAgICAgY2FsbGJhY2suaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiSWRlbnRpZmllciI6IGNo
ZWNrRm9yRXJyb3IsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAg
ICB9OworCit9OworCit9LHt9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBzcGVjaWZ5IHNwYWNpbmcgb2Ygb2JqZWN0
IGxpdGVyYWwga2V5cyBhbmQgdmFsdWVzCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqIEBj
b3B5cmlnaHQgMjAxNCBCcmFuZG9uIE1pbGxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisi
dXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJzCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEdldHMgYW4gb2JqZWN0IGxpdGVyYWwgcHJv
cGVydHkncyBrZXkgYXMgdGhlIGlkZW50aWZpZXIgbmFtZSBvciBzdHJpbmcgdmFsdWUuCisgKiBA
cGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgd2hvc2Uga2V5IHRvIHJldHJp
ZXZlLgorICogQHJldHVybnMge3N0cmluZ30gVGhlIHByb3BlcnR5J3Mga2V5LgorICovCitmdW5j
dGlvbiBnZXRLZXkocHJvcGVydHkpIHsKKyAgICByZXR1cm4gcHJvcGVydHkua2V5Lm5hbWUgfHwg
cHJvcGVydHkua2V5LnZhbHVlOworfQorCisvKioKKyAqIEdldHMgdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGluIGEga2V5LCBpbmNsdWRpbmcgcXVvdGVzIGFyb3VuZCBzdHJpbmcga2V5cy4KKyAq
IEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgb2Ygb24gb2JqZWN0IGxpdGVyYWwu
CisgKiBAcmV0dXJucyB7aW50fSBXaWR0aCBvZiB0aGUga2V5LCBpbmNsdWRpbmcgc3RyaW5nIHF1
b3RlcyB3aGVyZSBwcmVzZW50LgorICovCitmdW5jdGlvbiBnZXRLZXlXaWR0aChwcm9wZXJ0eSkg
eworICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5rZXk7CisgICAgcmV0dXJuIChrZXkudHlwZSA9PT0g
IklkZW50aWZpZXIiID8ga2V5Lm5hbWUgOiBrZXkucmF3KS5sZW5ndGg7Cit9CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK3ZhciBtZXNzYWdlcyA9IHsKKyAgICBrZXk6ICJ7e2Vycm9yfX0gc3BhY2UgYWZ0ZXIg
a2V5IFwie3trZXl9fVwiLiIsCisgICAgdmFsdWU6ICJ7e2Vycm9yfX0gc3BhY2UgYmVmb3JlIHZh
bHVlIGZvciBrZXkgXCJ7e2tleX19XCIuIgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBPUFRJT05TCisgICAgICogImtleS1zcGFj
aW5nIjogWzIsIHsKKyAgICAgKiAgICAgYmVmb3JlQ29sb246IGZhbHNlLAorICAgICAqICAgICBh
ZnRlckNvbG9uOiB0cnVlLAorICAgICAqICAgICBhbGlnbjogImNvbG9uIiAvLyBPcHRpb25hbCwg
b3IgInZhbHVlIgorICAgICAqIH0KKyAgICAgKi8KKworICAgIHZhciBvcHRpb25zID0gY29udGV4
dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBhbGlnbiA9IG9wdGlvbnMuYWxpZ24sCisgICAg
ICAgIGJlZm9yZUNvbG9uID0gKyEhb3B0aW9ucy5iZWZvcmVDb2xvbiwgLy8gRGVmYXVsdHMgdG8g
ZmFsc2UKKyAgICAgICAgYWZ0ZXJDb2xvbiA9ICshKG9wdGlvbnMuYWZ0ZXJDb2xvbiA9PT0gZmFs
c2UpOyAvLyBEZWZhdWx0cyB0byB0cnVlCisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzcGFj
aW5nIGFyb3VuZCB0aGUgY29sb24gaW4gYW4gb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkKKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgZnJvbSBhbiBvYmplY3Qg
bGl0ZXJhbAorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFNwYWNpbmcgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgcHJvcGVydHkncyBjb2xvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5
U3BhY2luZyhwcm9wZXJ0eSkgeworICAgICAgICB2YXIgd2hpdGVzcGFjZSA9IC9eKFxzKik6KFxz
KikvLmV4ZWMoY29udGV4dC5nZXRTb3VyY2UoKS5zbGljZSgKKyAgICAgICAgICAgIHByb3BlcnR5
LmtleS5yYW5nZVsxXSwgcHJvcGVydHkudmFsdWUucmFuZ2VbMF0KKyAgICAgICAgKSk7CisKKyAg
ICAgICAgaWYgKHdoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgYmVmb3JlQ29sb246IHdoaXRlc3BhY2VbMV0ubGVuZ3RoLAorICAgICAgICAgICAgICAg
IGFmdGVyQ29sb246IHdoaXRlc3BhY2VbMl0ubGVuZ3RoCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhbiBhcHByb3ByaWF0ZWx5LWZv
cm1hdHRlZCBlcnJvciBpZiBzcGFjaW5nIGlzIGluY29ycmVjdCBvbiBvbmUKKyAgICAgKiBzaWRl
IG9mIHRoZSBjb2xvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IEtleS12YWx1
ZSBwYWlyIGluIGFuIG9iamVjdCBsaXRlcmFsLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWRl
IFNpZGUgYmVpbmcgdmVyaWZpZWQgLSBlaXRoZXIgImtleSIgb3IgInZhbHVlIi4KKyAgICAgKiBA
cGFyYW0ge2ludH0gZGlmZiBEaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsIGFuZCBleHBlY3RlZCBz
cGFjaW5nLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHJl
cG9ydChwcm9wZXJ0eSwgc2lkZSwgZGlmZikgeworICAgICAgICBpZiAoZGlmZikgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQocHJvcGVydHlbc2lkZV0sIG1lc3NhZ2VzW3NpZGVdLCB7Cisg
ICAgICAgICAgICAgICAgZXJyb3I6IGRpZmYgPiAwID8gIkV4dHJhIiA6ICJNaXNzaW5nIiwKKyAg
ICAgICAgICAgICAgICBrZXk6IGdldEtleShwcm9wZXJ0eSkKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGFsaWduKSB7IC8vIFZlcmlmeSB2ZXJ0aWNhbCBhbGln
bm1lbnQKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgIk9iamVjdEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBub2Rl
LnByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnRpZXMubGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICB3aWR0aHMgPSBwcm9wZXJ0aWVzLm1hcChnZXRLZXlX
aWR0aCksIC8vIFdpZHRoIG9mIGtleXMsIGluY2x1ZGluZyBxdW90ZXMKKyAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0V2lkdGggPSBNYXRoLm1heC5hcHBseShudWxsLCB3aWR0aHMpLAorICAgICAg
ICAgICAgICAgICAgICBpLCBwcm9wZXJ0eSwgc3BhY2luZywgd2lkdGg7CisKKyAgICAgICAgICAg
ICAgICAvLyBDb25kaXRpb25hbGx5IGluY2x1ZGUgb25lIHNwYWNlIGJlZm9yZSBvciBhZnRlciBj
b2xvbgorICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoICs9IChhbGlnbiA9PT0gImNvbG9uIiA/
IGJlZm9yZUNvbG9uIDogYWZ0ZXJDb2xvbik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9w
ZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgICAgICBzcGFjaW5nID0gZ2V0UHJvcGVydHlTcGFj
aW5nKHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYWNpbmcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBPYmplY3QgbGl0ZXJhbCBnZXR0ZXJz
L3NldHRlcnMgbGFjayBhIGNvbG9uCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICB3aWR0aCA9IHdpZHRoc1tpXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
YWxpZ24gPT09ICJ2YWx1ZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9w
ZXJ0eSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBiZWZvcmVDb2xvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2YWx1ZSIsICh3aWR0aCArIHNwYWNp
bmcuYWZ0ZXJDb2xvbikgLSB0YXJnZXRXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7IC8vIGFsaWduID0gImNvbG9uIgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHBy
b3BlcnR5LCAia2V5IiwgKHdpZHRoICsgc3BhY2luZy5iZWZvcmVDb2xvbikgLSB0YXJnZXRXaWR0
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2YWx1ZSIsIHNw
YWNpbmcuYWZ0ZXJDb2xvbiAtIGFmdGVyQ29sb24pOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgfSBlbHNl
IHsgLy8gU3RyaWN0bHkgb2JleSBiZWZvcmVDb2xvbiBhbmQgYWZ0ZXJDb2xvbiBpbiBlYWNoIHBy
b3BlcnR5CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJQcm9wZXJ0eSI6IGZ1bmN0
aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSBnZXRQcm9wZXJ0eVNw
YWNpbmcobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNpbmcpIHsgLy8gT2JqZWN0IGxp
dGVyYWwgZ2V0dGVycy9zZXR0ZXJzIGxhY2sgY29sb24gc3BhY2luZworICAgICAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBiZWZvcmVDb2xv
bik7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLCAidmFsdWUiLCBzcGFjaW5nLmFm
dGVyQ29sb24gLSBhZnRlckNvbG9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30se31dLDMyOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gc2V0IHRo
ZSBtYXhpbXVtIGRlcHRoIGJsb2NrIGNhbiBiZSBuZXN0ZWQgaW4gYSBmdW5jdGlvbi4KKyAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICB2YXIgZnVuY3Rpb25TdGFjayA9IFtdLAorICAgICAgICBtYXhEZXB0aCA9IGNv
bnRleHQub3B0aW9uc1swXSB8fCA0OworCisgICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsK
KyAgICAgICAgZnVuY3Rpb25TdGFjay5wdXNoKDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVu
ZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBvcCgpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHB1c2hCbG9jayhub2RlKSB7CisgICAgICAgIHZhciBsZW4gPSArK2Z1bmN0aW9u
U3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAobGVuID4gbWF4
RGVwdGgpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJCbG9ja3MgYXJlIG5l
c3RlZCB0b28gZGVlcGx5ICh7e2RlcHRofX0pLiIsCisgICAgICAgICAgICAgICAgICAgIHsgZGVw
dGg6IGxlbiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBvcEJsb2NrKCkg
eworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0tLTsKKyAg
ICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogc3Rh
cnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9u
LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKworICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBw
dXNoQmxvY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJE
b1doaWxlU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBw
dXNoQmxvY2ssCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAi
Rm9yU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBwdXNo
QmxvY2ssCisKKyAgICAgICAgIklmU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAg
IlN3aXRjaFN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQ6
ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudDpleGl0IjogcG9wQmxv
Y2ssCisgICAgICAgICJXaGlsZVN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJX
aXRoU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIkZvclN0YXRlbWVudDpleGl0
IjogcG9wQmxvY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAg
ICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIlByb2dy
YW06ZXhpdCI6IGVuZEZ1bmN0aW9uCisgICAgfTsKKworfTsKKworfSx7fV0sMzM6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
Y2hlY2sgZm9yIG1heCBsZW5ndGggb24gYSBsaW5lLgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8
aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqIEBjb3B5cmlnaHQgMjAxMyBNYXR0IER1VmFs
bC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIG1hZGUgdXAgb2YgcmVwZWF0aW5nIGEgZ2l2
ZW4gc3RyaW5nIGEgY2VydGFpbgorICAgICAqIG51bWJlciBvZiB0aW1lcy4gVGhpcyB1c2VzIGV4
cG9uZW50aWF0aW9uIG9mIHNxdWFyZXMgdG8gYWNoaWV2ZSBzaWduaWZpY2FudAorICAgICAqIHBl
cmZvcm1hbmNlIGdhaW5zIG92ZXIgdGhlIG1vcmUgdHJhZGl0aW9uYWwgaW1wbGVtZW50YXRpb24g
b2Ygc3VjaAorICAgICAqIGZ1bmN0aW9uYWxpdHkuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0
ciBUaGUgc3RyaW5nIHRvIHJlcGVhdC4KKyAgICAgKiBAcGFyYW0ge2ludH0gbnVtIFRoZSBudW1i
ZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuCisgICAgICogQHJldHVybnMge3N0cmlu
Z30gVGhlIGNyZWF0ZWQgc3RyaW5nLgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVu
Y3Rpb24gc3RyaW5nUmVwZWF0KHN0ciwgbnVtKSB7CisgICAgICAgIHZhciByZXN1bHQgPSAiIjsK
KyAgICAgICAgZm9yIChudW0gfD0gMDsgbnVtID4gMDsgbnVtID4+Pj0gMSwgc3RyICs9IHN0cikg
eworICAgICAgICAgICAgaWYgKG51bSAmIDEpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0g
c3RyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdmFyIHRhYldpZHRoID0gY29udGV4dC5vcHRpb25zWzFdOworCisgICAgdmFy
IG1heExlbmd0aCA9IGNvbnRleHQub3B0aW9uc1swXSwKKyAgICAgICAgdGFiU3RyaW5nID0gc3Ry
aW5nUmVwZWF0KCIgIiwgdGFiV2lkdGgpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnVuY3Rpb24gY2hlY2tQ
cm9ncmFtRm9yTWF4TGVuZ3RoKG5vZGUpIHsKKyAgICAgICAgdmFyIGxpbmVzID0gY29udGV4dC5n
ZXRTb3VyY2VMaW5lcygpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRhYnMKKyAgICAgICAg
Ly8gU3BsaXQgKGhvbm9ycyBsaW5lLWVuZGluZykKKyAgICAgICAgLy8gSXRlcmF0ZQorICAgICAg
ICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAgIGlmIChsaW5l
LnJlcGxhY2UoL1x0L2csIHRhYlN0cmluZykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29sOiAxIH0sICJM
aW5lICIgKyAoaSArIDEpICsgIiBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIG9mICIg
KyBtYXhMZW5ndGggKyAiLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBjaGVja1By
b2dyYW1Gb3JNYXhMZW5ndGgKKyAgICB9OworCit9OworCit9LHt9XSwzNDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZv
cmNlIGEgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIGNhbGxiYWNrcy4KKyAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIENvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBjYWxsYmFja1N0YWNrID0gW107CisKKyAgICByZXR1cm4geworCisgICAgICAgICJG
dW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBh
cmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChw
YXJlbnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNhbGxi
YWNrU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNh
bGxiYWNrU3RhY2subGVuZ3RoID4gVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAgICAgdmFyIG9w
dHMgPSB7bnVtOiBjYWxsYmFja1N0YWNrLmxlbmd0aCwgbWF4OiBUSFJFU0hPTER9OworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUb28gbWFueSBuZXN0ZWQgY2FsbGJhY2tz
ICh7e251bX19KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgb3B0cyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQi
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrU3RhY2sucG9wKCk7CisgICAgICAg
IH0KKworICAgIH07CisKK307CisKK30se31dLDM1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBhIGZ1bmN0
aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG51bVBhcmFtcyA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCAzOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGgg
PiBudW1QYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhp
cyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycyAoe3tjb3VudH19KS4gTWF4aW11bSBh
bGxvd2VkIGlzIHt7bWF4fX0uIiwgeworICAgICAgICAgICAgICAgICAgICBjb3VudDogbm9kZS5w
YXJhbXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBtYXg6IG51bVBhcmFtcworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5w
YXJhbXMubGVuZ3RoID4gbnVtUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMgKHt7Y291bnR9
fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsIHsKKyAgICAgICAgICAgICAgICAgICAg
Y291bnQ6IG5vZGUucGFyYW1zLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgbWF4OiBudW1Q
YXJhbXMKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBv
ZiBzdGF0ZW1lbnRzIGluIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXll
cnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFyIGZ1bmN0aW9u
U3RhY2sgPSBbXSwKKyAgICAgICAgbWF4U3RhdGVtZW50cyA9IGNvbnRleHQub3B0aW9uc1swXSB8
fCAxMDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9u
U3RhY2sucHVzaCgwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbihub2RlKSB7
CisgICAgICAgIHZhciBjb3VudCA9IGZ1bmN0aW9uU3RhY2sucG9wKCk7CisKKyAgICAgICAgaWYg
KGNvdW50ID4gbWF4U3RhdGVtZW50cykgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHN0YXRlbWVudHMgKHt7Y291bnR9fSkuIE1h
eGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsgY291bnQ6
IGNvdW50LCBtYXg6IG1heFN0YXRlbWVudHMgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjb3VudFN0YXRlbWVudHMobm9kZSkgeworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1
bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gKz0gbm9kZS5ib2R5Lmxlbmd0aDsKKyAgICB9CisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjog
c3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rp
b24sCisKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogY291bnRTdGF0ZW1lbnRzLAorCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1
bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9
XSwzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zdHJ1Y3RvcnMgd2l0aG91dCBjYXBpdGFsIGxl
dHRlcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqIEBjb3B5cmlnaHQgMjAxMy0y
MDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyJ1c2Ug
c3RyaWN0IjsKKwordmFyIENBUFNfQUxMT1dFRCA9IFsKKyAgICAiTnVtYmVyIiwKKyAgICAiU3Ry
aW5nIiwKKyAgICAiQm9vbGVhbiIsCisgICAgIkRhdGUiLAorICAgICJBcnJheSIsCisgICAgIlN5
bWJvbCIsCisgICAgIlJlZ0V4cCIKK107CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIGNvbmZpZyA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCB7fTsKKyAgICBjb25maWcubmV3SXNDYXAgPSBjb25maWcubmV3SXNDYXAgPT09IGZh
bHNlID8gZmFsc2UgOiB0cnVlOworICAgIGNvbmZpZy5jYXBJc05ldyA9IGNvbmZpZy5jYXBJc05l
dyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisKKyAgICB2YXIgbGlzdGVuZXJzID0ge307CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEdldCBleGFjdCBjYWxsZWUgbmFtZSBmcm9tIGV4
cHJlc3Npb24KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJlc3Npb24gb3Ig
TmV3RXhwcmVzc2lvbiBub2RlCisgICAgICogQHJldHVybnMge1N0cmluZ30gbmFtZQorICAgICAq
LworICAgIGZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSkgeworCisgICAg
ICAgIHZhciBuYW1lID0gIiIsCisgICAgICAgICAgICBwcm9wZXJ0eTsKKworICAgICAgICBpZiAo
bm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICBw
cm9wZXJ0eSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5OworCisgICAgICAgICAgICBpZiAocHJvcGVy
dHkudHlwZSA9PT0gIkxpdGVyYWwiICYmICh0eXBlb2YgcHJvcGVydHkudmFsdWUgPT09ICJzdHJp
bmciKSkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS52YWx1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAocHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmICFub2RlLmNh
bGxlZS5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUu
Y2FsbGVlLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisg
ICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2FwaXRhbGl6YXRpb24gc3RhdGUgb2YgdGhlIHN0
cmluZyAtCisgICAgICogV2hldGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHVwcGVyY2FzZSwg
bG93ZXJjYXNlLCBvciBub24tYWxwaGFiZXRpYworICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIg
U3RyaW5nCisgICAgICogQHJldHVybnMge1N0cmluZ30gY2FwaXRhbGl6YXRpb24gc3RhdGU6ICJu
b24tYWxwaGEiLCAibG93ZXIiLCBvciAidXBwZXIiCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0
Q2FwKHN0cikgeworICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKTsKKworICAg
ICAgICB2YXIgZmlyc3RDaGFyTG93ZXIgPSBmaXJzdENoYXIudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgdmFyIGZpcnN0Q2hhclVwcGVyID0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCk7CisKKyAgICAg
ICAgaWYgKGZpcnN0Q2hhckxvd2VyID09PSBmaXJzdENoYXJVcHBlcikgeworICAgICAgICAgICAg
Ly8gY2hhciBoYXMgbm8gdXBwZXJjYXNlIHZhcmlhbnQsIHNvIGl0J3Mgbm9uLWFscGhhYmV0aWMK
KyAgICAgICAgICAgIHJldHVybiAibm9uLWFscGhhIjsKKyAgICAgICAgfSBlbHNlIGlmIChmaXJz
dENoYXIgPT09IGZpcnN0Q2hhckxvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4gImxvd2VyIjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAidXBwZXIiOworICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgY2FwaXRhbGl6YXRpb24gaXMgYWxs
b3dlZCBmb3IgYSBDYWxsRXhwcmVzc2lvbgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBD
YWxsRXhwcmVzc2lvbiBub2RlCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxlZU5hbWUgQ2Fw
aXRhbGl6ZWQgY2FsbGVlIG5hbWUgZnJvbSBhIENhbGxFeHByZXNzaW9uCisgICAgICogQHJldHVy
bnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVlIG1heSBiZSBjYXBpdGFsaXpl
ZAorICAgICAqLworICAgIGZ1bmN0aW9uIGlzQ2FwQWxsb3dlZChub2RlLCBjYWxsZWVOYW1lKSB7
CisgICAgICAgIGlmIChDQVBTX0FMTE9XRUQuaW5kZXhPZihjYWxsZWVOYW1lKSA+PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FsbGVlTmFt
ZSA9PT0gIlVUQyIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7
CisgICAgICAgICAgICAvLyBhbGxvdyBpZiBjYWxsZWUgaXMgRGF0ZS5VVEMKKyAgICAgICAgICAg
IHJldHVybiBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAg
ICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJEYXRlIjsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGlmIChj
b25maWcubmV3SXNDYXApIHsKKyAgICAgICAgbGlzdGVuZXJzLk5ld0V4cHJlc3Npb24gPSBmdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBleHRyYWN0
TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTmFt
ZSAmJiBnZXRDYXAoY29uc3RydWN0b3JOYW1lKSA9PT0gImxvd2VyIikgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIGNvbnN0cnVjdG9yIG5hbWUgc2hvdWxkIG5vdCBz
dGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlci4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLmNhcElzTmV3KSB7CisgICAgICAgIGxpc3RlbmVy
cy5DYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNh
bGxlZU5hbWUgPSBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAg
aWYgKGNhbGxlZU5hbWUgJiYgZ2V0Q2FwKGNhbGxlZU5hbWUpID09PSAidXBwZXIiICYmICFpc0Nh
cEFsbG93ZWQobm9kZSwgY2FsbGVlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiQSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBzdGFydGluZyB3aXRoIGFuIHVwcGVy
Y2FzZSBsZXR0ZXIgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0cnVjdG9yLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHJldHVybiBsaXN0ZW5lcnM7Cit9
OworCit9LHt9XSwzODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3RydWN0b3Igd2l0aG91
dCBwYXJlbnRoZXNlcworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9k
ZSk7CisgICAgICAgICAgICB2YXIgcHJlbnRpY2VzVG9rZW5zID0gdG9rZW5zLmZpbHRlcihmdW5j
dGlvbih0b2tlbikgeworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gIigi
IHx8IHRva2VuLnZhbHVlID09PSAiKSI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlm
IChwcmVudGljZXNUb2tlbnMubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJNaXNzaW5nICcoKScgaW52b2tpbmcgYSBjb25zdHJ1Y3RvciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMzk6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgYWxlcnQsIGNvbmZpcm0sIHByb21wdAorICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBIZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBtYXRjaFByb2hp
Yml0ZWQobmFtZSkgeworICAgIHJldHVybiBuYW1lLm1hdGNoKC9eKGFsZXJ0fGNvbmZpcm18cHJv
bXB0KSQvKTsKK30KKworZnVuY3Rpb24gcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCkgewor
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHt7bmFtZX19LiIsIHsgbmFtZTog
cmVzdWx0WzFdIH0pOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2FsbEV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQ7CisKKyAgICAg
ICAgICAgIC8vIHdpdGhvdXQgd2luZG93LgorICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5
cGUgPT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQ
cm9oaWJpdGVkKG5vZGUuY2FsbGVlLm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jYWxsZWUu
dHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUg
PT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQcm9o
aWJpdGVkKG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gIndpbmRvdyIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBEaXNhbGxvdyBjb25zdHJ1Y3Rpb24gb2YgZGVuc2UgYXJyYXlzIHVzaW5nIHRoZSBB
cnJheSBjb25zdHJ1Y3RvcgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0
ZHV2YWxsLmNvbS8+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBjaGVj
ayhub2RlKSB7CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0
aCAhPT0gMSAmJgorICAgICAgICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIi
ICYmCisgICAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAiQXJyYXkiCisgICAgICAgICkg
eworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBhcnJheSBsaXRlcmFsIG5v
dGF0aW9uIFtdIGlzIHByZWZlcnJhYmxlLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJOZXdFeHBy
ZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSw0MTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJp
dHdpc2UgaWRlbnRpZmllcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiAne3tvcGVyYXRvcn19Jy4iLCB7
IG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yIH0pOworICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAv
LyB3YXJuIGZvciBeIHwgJiB+IDw8ID4+ID4+PgorICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0
b3IubWF0Y2goL14oPzpbXF4mXHx+XXw8PHw+Pj4/KSQvKSkgeworICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJVbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIHdhcm4gZm9y
IH4KKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAifiIpIHsKKyAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFyZ3VtZW50cy5jYWxsZWUgYW5k
IGFyZ3VtZW50cy5jYWxsZXIuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9iamVjdE5hbWUgPSBub2Rl
Lm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5vZGUucHJvcGVy
dHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09ICJhcmd1bWVudHMiICYm
ICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUubWF0Y2goL15j
YWxsZVtlcl0kLykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQXZv
aWQgYXJndW1lbnRzLnt7cHJvcGVydHl9fS4iLCB7IHByb3BlcnR5OiBwcm9wZXJ0eU5hbWUgfSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQzOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdmFyaWFibGUgbGVhayBpbiBDYXRjaENsYXVzZXMgaW4gSUUgOCBhbmQgZWFy
bGllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIHBhcmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5h
bWUpIHsKKyAgICAgICAgdmFyIGZvdW5kID0gc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24o
dmFyaWFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS5uYW1lID09PSBuYW1lOwor
ICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7CisgICAgICAgICAg
ICByZXR1cm4gcGFyYW1Jc1NoYWRvd2luZyhzY29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1
cm4geworCisgICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKworICAgICAgICAgICAgaWYgKHBh
cmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5vZGUucGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVmFsdWUgb2YgJ3t7bmFtZX19JyBtYXkgYmUgb3Zlcndy
aXR0ZW4gaW4gSUUgOCBhbmQgZWFybGllci4iLAorICAgICAgICAgICAgICAgICAgICAgICAgeyBu
YW1lOiBub2RlLnBhcmFtLm5hbWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCit9OworCit9LHt9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIGNvbW1hcyBpbiBvYmpl
Y3QgbGl0ZXJhbHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8gSGVscGVycwor
ICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdD
b21tYShub2RlKSB7CisgICAgICAgIHZhciBzZWNvbmRUb0xhc3RUb2tlbiA9IGNvbnRleHQuZ2V0
TGFzdFRva2Vucyhub2RlLCAyKVswXTsKKworICAgICAgICB2YXIgaXRlbXMgPSBub2RlLnByb3Bl
cnRpZXMgfHwgbm9kZS5lbGVtZW50cywKKyAgICAgICAgICAgIGxhc3RJdGVtID0gaXRlbXNbaXRl
bXMubGVuZ3RoIC0gMV07CisgICAgICAgIC8vIFRoZSBsYXN0IHRva2VuIGluIGFuIG9iamVjdC9h
cnJheSBsaXRlcmFsIHdpbGwgYWx3YXlzIGJlIGEgY2xvc2luZworICAgICAgICAvLyBjdXJseSwg
c28gd2UgY2hlY2sgdGhlIHNlY29uZCB0byBsYXN0IHRva2VuIGZvciBhIGNvbW1hLgorICAgICAg
ICBpZiAoc2Vjb25kVG9MYXN0VG9rZW4udmFsdWUgPT09ICIsIiAmJiBpdGVtcy5sZW5ndGggJiYg
bGFzdEl0ZW0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGxhc3RJdGVtLCBzZWNvbmRU
b0xhc3RUb2tlbi5sb2Muc3RhcnQsICJUcmFpbGluZyBjb21tYS4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIk9iamVjdEV4cHJlc3Np
b24iOiBjaGVja0ZvclRyYWlsaW5nQ29tbWEsCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBj
aGVja0ZvclRyYWlsaW5nQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSw0NTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIGFzc2lnbm1lbnQgaW4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uCisgKiBAYXV0aG9yIFN0
ZXBoZW4gTXVycmF5IDxzcG11cnJheXp6ej4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0
aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0g
Y29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNv
bnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tl
bi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVsw
XSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJh
bmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQu
Z2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0
LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAgICAgcmV0dXJuIGlzUGFyZW50aGVzaXNl
ZChub2RlKSAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHBy
ZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4
dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2Vb
MV07CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEZvckFzc2lnbihub2RlKSB7CisgICAgICAg
IGlmIChub2RlLnRlc3QgJiYgKG5vZGUudGVzdC50eXBlID09PSAiQXNzaWdubWVudEV4cHJlc3Np
b24iKSAmJiAhaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBh
bmQgaW5zdGVhZCBzYXcgYW4gYXNzaWdubWVudC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJJZlN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAg
ICJXaGlsZVN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAgICJEb1doaWxlU3RhdGVt
ZW50IjogdGVzdEZvckFzc2lnbiwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IHRlc3RGb3JBc3Np
Z24KKyAgICB9OworCit9OworCit9LHt9XSw0NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zb2xl
IG9iamVjdAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5vYmplY3QubmFtZSA9PT0gImNv
bnNvbGUiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgY29uc29sZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIGNvbnN0YW50IGNvbmRpdGlv
bnMKKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVseiA8aHR0cDovL3JuZG0uZGU+CisgKi8KKwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxw
ZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlm
IGEgbm9kZSBoYXMgYSBjb25zdGFudCB0cnV0aGluZXNzIHZhbHVlLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge0Jv
b2x9IHRydWUgd2hlbiBub2RlJ3MgdHJ1dGhpbmVzcyBpcyBjb25zdGFudAorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNDb25zdGFudChub2RlKSB7CisgICAgICAgIHN3
aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgIkxpdGVyYWwiOgorICAgICAgICBjYXNl
ICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoK
KyAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgIGNhc2UgIkJpbmFyeUV4cHJlc3Npb24i
OgorICAgICAgICBjYXNlICJMb2dpY2FsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1cm4g
aXNDb25zdGFudChub2RlLmxlZnQpICYmIGlzQ29uc3RhbnQobm9kZS5yaWdodCk7CisgICAgICAg
IGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KG5vZGUucmlnaHQpOworICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9kZS5leHByZXNzaW9uc1tub2RlLmV4cHJlc3Np
b25zLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIHdoZW4g
dGhlIGdpdmVuIG5vZGUgY29udGFpbnMgYSBjb25zdGFudCBjb25kaXRpb24uCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJu
cyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ29u
c3RhbnRDb25kaXRpb24obm9kZSkgeworICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlzQ29uc3Rh
bnQobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhw
ZWN0ZWQgY29uc3RhbnQgY29uZGl0aW9uLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIHJldHVybiB7CisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBjaGVja0Nv
bnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29u
ZGl0aW9uLAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9u
LAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24sCisg
ICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uCisgICAgfTsKKwor
fTsKKworfSx7fV0sNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZm9yYmlkIGNvbnRyb2wgY2hhcmFjdGVzIGZyb20gcmVn
dWxhciBleHByZXNzaW9ucy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworCisgICAgZnVuY3Rpb24gZ2V0UmVnRXhwKG5vZGUpIHsKKworICAg
ICAgICBpZiAobm9kZS52YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICAgICAgcmV0
dXJuIG5vZGUudmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09
ICJzdHJpbmciKSB7CisKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2Vz
dG9ycygpLnBvcCgpOworICAgICAgICAgICAgaWYgKChwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJl
c3Npb24iIHx8IHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSAmJgorICAgICAgICAg
ICAgcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgcGFyZW50LmNhbGxlZS5u
YW1lID09PSAiUmVnRXhwIikgeworCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgY291bGQgYmUg
YW4gaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nCisgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobm9kZS52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgfQorCisKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBjb21wdXRlZFZhbHVlLAorICAgICAgICAgICAgICAgIHJlZ2V4ID0gZ2V0
UmVnRXhwKG5vZGUpOworCisgICAgICAgICAgICBpZiAocmVnZXgpIHsKKyAgICAgICAgICAgICAg
ICBjb21wdXRlZFZhbHVlID0gcmVnZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAo
L1tceDAwLVx4MWZdLy50ZXN0KGNvbXB1dGVkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJl
Z3VsYXIgZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBh
IGRlYnVnZ2VyIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiRGVidWdnZXJTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5leHBlY3RlZCAnZGVidWdnZXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBkZWxldGluZyB2YXJpYWJsZXMK
KyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImRlbGV0ZSIgJiYgbm9kZS5hcmd1bWVu
dC50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVmFyaWFibGVzIHNob3VsZCBub3QgYmUgZGVsZXRlZC4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDUxOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZv
ciBhbWJpZ3VvdXMgZGl2IG9wZXJhdG9yIGluIHJlZ2V4ZXMKKyAqIEBhdXRob3IgTWF0dCBEdVZh
bGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVswXSwK
KyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCisgICAgICAgICAgICAgICAg
c291cmNlOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lv
biIpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5v
ZGUsIDEpWzBdLnZhbHVlOworCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVsxXSA9PT0gIj0i
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHJlZ3VsYXIg
ZXhwcmVzc2lvbiBsaXRlcmFsIGNhbiBiZSBjb25mdXNlZCB3aXRoICcvPScuIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sNTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZHVwbGljYXRlIGtleXMgaW4gYW4gb2JqZWN0Lgor
ICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworCisgICAgICAgICAgICAvLyBPYmplY3QgdGhhdCB3aWxsIGJlIGEgbWFwIG9mIHByb3Bl
cnRpZXMtLXNhZmUgYmVjYXVzZSB3ZSB3aWxsCisgICAgICAgICAgICAvLyBwcmVmaXggYWxsIG9m
IHRoZSBrZXlzLgorICAgICAgICAgICAgdmFyIG5vZGVQcm9wcyA9IHt9OworCisgICAgICAgICAg
ICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgeworICAgICAgICAg
ICAgICAgIHZhciBrZXlOYW1lID0gcHJvcGVydHkua2V5Lm5hbWUgfHwgcHJvcGVydHkua2V5LnZh
bHVlOworICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5raW5kICsgIi0iICsga2V5
TmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlUHJvcHNba2V5XSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRHVwbGljYXRlIGtleSAne3trZXl9fScu
IiwgeyBrZXk6IGtleU5hbWUgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZVByb3BzW2tleV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1MzpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIGBlbHNlYCBhZnRlciBhIGByZXR1cm5gIGluIGBpZmAKKyAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICBmdW5jdGlvbiBjaGVja0ZvclJldHVyblN0YXRlbWVudChub2RlLCBhbHRlcm5hdGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlJldHVyblN0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KGFsdGVybmF0ZSwgIlVuZXhwZWN0ZWQgJ2Vsc2UnIGFmdGVyICdyZXR1
cm4nLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
Ly8gRG9uJ3QgYm90aGVyIGZpbmRpbmcgYSBSZXR1cm5TdGF0ZW1lbnQsIGlmIHRoZXJlJ3Mgbm8g
YGVsc2VgCisgICAgICAgICAgICAvLyBvciBpZiB0aGUgYWx0ZXJuYXRlIGlzIGFsc28gYW4gaWYg
KGluZGljYXRpbmcgYW4gZWxzZSBpZikuCisgICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUg
JiYgbm9kZS5jb25zZXF1ZW50ICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVu
dCIpIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBCbG9ja1N0YXRlbWVudCwg
Y2hlY2sgZWFjaCBjb25zZXF1ZW50IGJvZHkgbm9kZS4KKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jb25zZXF1ZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5jb25zZXF1ZW50LmJvZHkuZm9yRWFjaChmdW5jdGlvbiAoYm9keU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KGJvZHlOb2Rl
LCBub2RlLmFsdGVybmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgLy8gSWYgbm90IGEgYmxvY2sgc3RhdGVtZW50LCBtYWtlIHN1cmUgdGhlIGNvbnNlcXVl
bnQgaXNuJ3QgYQorICAgICAgICAgICAgICAgIC8vIFJldHVyblN0YXRlbWVudAorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVt
ZW50KG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNTQ6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB0aGUgdXNlIG9mIGVtcHR5IGNoYXJhY3RlciBjbGFzc2VzIGluIHJlZ3VsYXIg
ZXhwcmVzc2lvbnMKKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2Rl
KTsKKyAgICAgICAgICAgIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikgeworICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgcGxhaW4tRW5nbGlzaCBkZXNjcmlwdGlvbiBv
ZiB0aGUgZm9sbG93aW5nIHJlZ2V4cDoKKyAgICAgICAgICAgICAgICAwLiBgXmAgZml4IHRoZSBt
YXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAxLiBg
XC9gOiB0aGUgYC9gIHRoYXQgYmVnaW5zIHRoZSByZWdleHAKKyAgICAgICAgICAgICAgICAyLiBg
KFteXFxbXXxcXC58XFsoW15cXFxdXXxcXC4pK1xdKSpgOiByZWdleHAgY29udGVudHM7IDAgb3Ig
bW9yZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAyLjAuIGBbXlxcW11gOiBh
bnkgY2hhcmFjdGVyIHRoYXQncyBub3QgYSBgXGAgb3IgYSBgW2AgKGFueXRoaW5nIGJ1dCBlc2Nh
cGUgc2VxdWVuY2VzIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcykKKyAgICAgICAgICAgICAgICAgIDIu
MS4gYFxcLmA6IGFuIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgMi4yLiBgXFso
W15cXFxdXXxcXC4pK1xdYDogYSBjaGFyYWN0ZXIgY2xhc3MgdGhhdCBpc24ndCBlbXB0eQorICAg
ICAgICAgICAgICAgIDMuIGBcL2AgdGhlIGAvYCB0aGF0IGVuZHMgdGhlIHJlZ2V4cAorICAgICAg
ICAgICAgICAgIDQuIGBbZ2lteV0qYDogb3B0aW9uYWwgcmVnZXhwIGZsYWdzCisgICAgICAgICAg
ICAgICAgNS4gYCRgOiBmaXggdGhlIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAg
ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJSZWd1
bGFyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAhL15cLyhbXlxcW118XFwufFxbKFte
XFxcXV18XFwuKStcXSkqXC9bZ2lteV0qJC8udGVzdCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkVtcHR5IGNsYXNzLiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9OworCit9Owor
Cit9LHt9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gbGFiZWwgaXMgbm90IHVzZWQgZm9yIGEgbG9v
cCBvciBzd2l0Y2gKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS50eXBlICE9PSAiRm9yU3RhdGVt
ZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIldoaWxlU3RhdGVtZW50IiAmJiBub2RlLmJvZHku
dHlwZSAhPT0gIkRvV2hpbGVTdGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiU3dpdGNo
U3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIkZvckluU3RhdGVtZW50IikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIHt7bH19
Iiwge2w6IG5vZGUubGFiZWwubmFtZX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gZW1wdHkgYmxvY2sg
c3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygp
LAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0g
MV0sCisgICAgICAgICAgICAgICAgcGFyZW50VHlwZSA9IHBhcmVudC50eXBlLAorICAgICAgICAg
ICAgICAgIGlzRmluYWxseUJsb2NrID0gKHBhcmVudFR5cGUgPT09ICJUcnlTdGF0ZW1lbnQiKSAm
JiAocGFyZW50LmZpbmFsaXplciA9PT0gbm9kZSk7CisKKyAgICAgICAgICAgIGlmICgvRnVuY3Rp
b25FeHByZXNzaW9ufEZ1bmN0aW9uRGVjbGFyYXRpb258Q2F0Y2hDbGF1c2UvLnRlc3QocGFyZW50
VHlwZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGlzRmluYWxseUJsb2NrICYmICFwYXJlbnQu
aGFuZGxlcnMubGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgYmxvY2sgc3RhdGVtZW50LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5jYXNlcyA9PT0g
InVuZGVmaW5lZCIgfHwgbm9kZS5jYXNlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgc3dpdGNoIHN0YXRlbWVudC4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDU3OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgY29tcGFyaXNvbnMgdG8gbnVsbCB3aXRob3V0IGEgdHlwZS1jaGVja2luZworICogb3BlcmF0
b3IuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIGJhZE9wZXJhdG9yID0gbm9kZS5vcGVyYXRvciA9PT0g
Ij09IiB8fCBub2RlLm9wZXJhdG9yID09PSAiIT0iOworCisgICAgICAgICAgICBpZiAobm9kZS5y
aWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC5yYXcgPT09ICJudWxsIiAmJiBi
YWRPcGVyYXRvciB8fAorICAgICAgICAgICAgICAgICAgICBub2RlLmxlZnQudHlwZSA9PT0gIkxp
dGVyYWwiICYmIG5vZGUubGVmdC5yYXcgPT09ICJudWxsIiAmJiBiYWRPcGVyYXRvcikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2Ug4oCYPT094oCZIHRvIGNvbXBh
cmUgd2l0aCDigJhudWxs4oCZLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworfTsKKworfSx7fV0sNTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZXZhbCgpIHN0YXRlbWVudAor
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgdmFyIElNUExJRURfRVZBTCA9IC9zZXQoPzpUaW1lb3V0fEludGVydmFsKS87CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgYSBub2RlIHJlcHJlc2VudHMgYSBj
YWxsIHRvIHNldFRpbWVvdXQvc2V0SW50ZXJ2YWwgd2l0aAorICAgICAqIGEgc3RyaW5nIGFyZ3Vt
ZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBtYXRjaGVzLCBmYWxzZSBp
ZiBub3QuCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0ltcGxpZWRF
dmFsKG5vZGUpIHsKKworICAgICAgICB2YXIgaXNNZW1iZXJFeHByZXNzaW9uID0gKG5vZGUuY2Fs
bGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiksCisgICAgICAgICAgICBpc0lkZW50aWZp
ZXIgPSAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSwKKyAgICAgICAgICAgIGlz
U2V0TWV0aG9kID0gKGlzSWRlbnRpZmllciAmJiBJTVBMSUVEX0VWQUwudGVzdChub2RlLmNhbGxl
ZS5uYW1lKSkgfHwKKyAgICAgICAgICAgICAgICAoaXNNZW1iZXJFeHByZXNzaW9uICYmIG5vZGUu
Y2FsbGVlLm9iamVjdC5uYW1lID09PSAid2luZG93IiAmJgorICAgICAgICAgICAgICAgIElNUExJ
RURfRVZBTC50ZXN0KG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpKSwKKyAgICAgICAgICAgIGhh
c1N0cmluZ0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMubGVuZ3RoICYmICh0eXBlb2Ygbm9kZS5h
cmd1bWVudHNbMF0udmFsdWUgPT09ICJzdHJpbmciKTsKKworICAgICAgICByZXR1cm4gaXNTZXRN
ZXRob2QgJiYgaGFzU3RyaW5nQXJndW1lbnQ7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJldmFsIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJldmFsIGNhbiBiZSBoYXJtZnVsLiIpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0ltcGxpZWRFdmFsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuYXJndW1lbnRzLmxlbmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVl
ID09PSAic3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkltcGxpZWQgZXZhbCBjYW4gYmUgaGFybWZ1bC4gUGFzcyBhIGZ1bmN0aW9uIGluc3RlYWQg
b2YgYSBzdHJpbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3NpZ25tZW50IG9m
IHRoZSBleGNlcHRpb24gcGFyYW1ldGVyCisgKiBAYXV0aG9yIFN0ZXBoZW4gTXVycmF5IDxzcG11
cnJheXp6ej4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBpbkNhdGNoID0gZmFs
c2UsCisgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBudWxsOworCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpbkNhdGNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBub2RlLnBhcmFtLm5hbWU7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlOmV4aXQiOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGluQ2F0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBu
dWxsOworICAgICAgICB9LAorCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGluQ2F0Y2gpIHsKKworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmxlZnQubmFtZSA9PT0gZXhjZXB0aW9uTmFtZSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IGFzc2lnbiB0byB0aGUgZXhjZXB0
aW9uIHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDYwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYWRkaW5nIHBy
b3BlcnRpZXMgdG8gbmF0aXZlIG9iamVjdCdzIHByb3RvdHlwZXMuCisgKiBAYXV0aG9yIERhdmlk
IE5lbHNvbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBCVUlMVElOUyA9IFsKKyAgICAiT2JqZWN0
IiwgIkZ1bmN0aW9uIiwgIkFycmF5IiwgIlN0cmluZyIsICJCb29sZWFuIiwgIk51bWJlciIsICJE
YXRlIiwKKyAgICAiUmVnRXhwIiwgIkVycm9yIiwgIkV2YWxFcnJvciIsICJSYW5nZUVycm9yIiwg
IlJlZmVyZW5jZUVycm9yIiwKKyAgICAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIlVSSUVy
cm9yIgorXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgIC8v
IGhhbmRsZSB0aGUgQXJyYXkucHJvdG90eXBlLmV4dHJhIHN0eWxlIGNhc2UKKyAgICAgICAgIkFz
c2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGxo
cyA9IG5vZGUubGVmdCwgYWZmZWN0c1Byb3RvOworCisgICAgICAgICAgICBpZiAobGhzLnR5cGUg
IT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBsaHMub2JqZWN0LnR5cGUgIT09ICJNZW1iZXJFeHBy
ZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYWZmZWN0c1Byb3RvID0gbGhzLm9iamVjdC5jb21wdXRlZCA/CisgICAgICAgICAg
ICAgICAgbGhzLm9iamVjdC5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbGhzLm9iamVj
dC5wcm9wZXJ0eS52YWx1ZSA9PT0gInByb3RvdHlwZSIgOgorICAgICAgICAgICAgICAgIGxocy5v
YmplY3QucHJvcGVydHkubmFtZSA9PT0gInByb3RvdHlwZSI7CisKKyAgICAgICAgICAgIGlmICgh
YWZmZWN0c1Byb3RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBCVUlMVElOUy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWx0aW4pIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGhzLm9iamVjdC5vYmplY3QubmFtZSA9PT0gYnVpbHRpbikgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBidWlsdGluICsgIiBwcm90b3R5
cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
aGFuZGxlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlKSBjYXNlCisg
ICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
dmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlLAorICAgICAgICAgICAgICAgIHN1YmplY3QsCisgICAg
ICAgICAgICAgICAgb2JqZWN0OworCisgICAgICAgICAgICAvLyBvbmx5IHdvcnJ5IGFib3V0IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eQorICAgICAgICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAiTWVt
YmVyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICBjYWxsZWUub2JqZWN0Lm5hbWUgPT09
ICJPYmplY3QiICYmCisgICAgICAgICAgICAgICAgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICJk
ZWZpbmVQcm9wZXJ0eSIpIHsKKworICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGUgb2JqZWN0
IGJlaW5nIGFkZGVkIHRvIGlzIGEgbmF0aXZlIHByb3RvdHlwZQorICAgICAgICAgICAgICAgIHN1
YmplY3QgPSBub2RlLmFyZ3VtZW50c1swXTsKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBzdWJq
ZWN0Lm9iamVjdDsKKworICAgICAgICAgICAgICAgIGlmIChvYmplY3QgJiYKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAg
ICAgICAoQlVJTFRJTlMuaW5kZXhPZihvYmplY3QubmFtZSkgPiAtMSkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgc3ViamVjdC5wcm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIikgeworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG9iamVjdC5uYW1lICsgIiBwcm90
b3R5cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSw2MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IGJpbmQgY2FsbHMKKyAqIEBh
dXRob3IgQmVuY2UgRMOhbnlpIDxiZW5jZUBkYW55aS5tZT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBC
ZW5jZSBEw6FueWkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgc2NvcGUgPSBbeworICAgICAgICBkZXB0aDogLTEsCisgICAgICAgIGZvdW5kOiAwCisg
ICAgfV07CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHRvcG1vc3Qgc2NvcGUKKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBUaGUgdG9wbW9zdCBzY29wZQorICAgICAqLworICAgIGZ1bmN0aW9u
IGdldFRvcFNjb3BlKCkgeworICAgICAgICByZXR1cm4gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07
CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRoZSBkZXB0aCBvZiB0aGUgdG9w
IHNjb3BlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gaW5j
cmVtZW50U2NvcGVEZXB0aCgpIHsKKyAgICAgICAgdmFyIHRvcCA9IGdldFRvcFNjb3BlKCk7Cisg
ICAgICAgIHRvcC5kZXB0aCsrOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY3JlbWVudCB0
aGUgZGVwdGggb2YgdGhlIHRvcCBzY29wZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAq
LworICAgIGZ1bmN0aW9uIGRlY3JlbWVudFNjb3BlRGVwdGgoKSB7CisgICAgICAgIHZhciB0b3Ag
PSBnZXRUb3BTY29wZSgpOworICAgICAgICB0b3AuZGVwdGgtLTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxICYmCisgICAgICAgICAgICAgICAg
bm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCisgICAgICAgICAgICAg
ICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PT0gImJpbmQiICYmCisgICAgICAgICAgICAg
ICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGUucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIGNhbGw6IG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIGRlcHRoOiAtMSwKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmQ6IDAKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkNhbGxFeHByZXNzaW9uOmV4aXQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICh0b3AuY2FsbCA9
PT0gbm9kZSAmJiB0b3AuZm91bmQgPT09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVGhlIGZ1bmN0aW9uIGJpbmRpbmcgaXMgdW5uZWNlc3NhcnkuIik7CisgICAg
ICAgICAgICAgICAgc2NvcGUucG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBpbmNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6IGluY3JlbWVudFNjb3BlRGVwdGgsCisgICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiVGhp
c0V4cHJlc3Npb24iOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0b3AgPSBnZXRUb3BT
Y29wZSgpOworICAgICAgICAgICAgaWYgKHRvcC5kZXB0aCA9PT0gMCkgeworICAgICAgICAgICAg
ICAgIHRvcC5mb3VuZCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1bm5lY2Vzc2FyeSBkb3VibGUgbmVnYXRpb24gaW4g
Qm9vbGVhbiBjb250ZXh0cworICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVu
Y3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFu
Y2VzdG9ycygpLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKSwKKyAg
ICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKworICAgICAgICAg
ICAgLy8gRXhpdCBlYXJseSBpZiBpdCdzIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoCisgICAgICAg
ICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0gIiEiIHx8CisgICAgICAgICAgICAgICAgICAgIHBh
cmVudC50eXBlICE9PSAiVW5hcnlFeHByZXNzaW9uIiB8fAorICAgICAgICAgICAgICAgICAgICBw
YXJlbnQub3BlcmF0b3IgIT09ICIhIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgKDxib29sPikgLi4uCisgICAgICAgICAgICBp
ZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIklmU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGFuIGlm
IHN0YXRlbWVudCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIGRvIC4uLiB3aGlsZSAo
PGJvb2w+KQorICAgICAgICAgICAgfSBlbHNlIGlmIChncmFuZHBhcmVudC50eXBlID09PSAiRG9X
aGlsZVN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
UmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIGRvIHdoaWxlIGxvb3AgY29uZGl0aW9uLiIp
OworCisgICAgICAgICAgICAvLyB3aGlsZSAoPGJvb2w+KSAuLi4KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIldoaWxlU3RhdGVtZW50IikgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGlu
IGEgd2hpbGUgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIDxib29sPiA/IC4u
LiA6IC4uLgorICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkNv
bmRpdGlvbmFsRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID09PSBn
cmFuZHBhcmVudC50ZXN0KSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgdGVybmFyeSBjb25kaXRpb24uIik7CisK
KyAgICAgICAgICAgIC8vIGZvciAoLi4uOyA8Ym9vbD47IC4uLikgLi4uCisgICAgICAgICAgICB9
IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiRm9yU3RhdGVtZW50IiAmJgorICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFyZW50LnRlc3QpKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4g
YSBmb3IgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vICE8Ym9vbD4KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24i
ICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Lm9wZXJhdG9yID09PSAiISIpKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBtdWx0aXBs
ZSBuZWdhdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gQm9vbGVhbig8Ym9vbD4pCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYm
CisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRp
ZmllciIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLm5hbWUgPT09
ICJCb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVk
dW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBjYWxsIHRvIEJvb2xlYW4oKS4iKTsKKworICAgICAg
ICAgICAgLy8gbmV3IEJvb2xlYW4oPGJvb2w+KQorICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3Jh
bmRwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAg
IGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAgICAgICAgICAg
ICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLm5hbWUgPT09ICJCb29sZWFuIikpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlv
biBpbiBCb29sZWFuIGNvbnN0cnVjdG9yIGNhbGwuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCit9OworCit9LHt9XSw2MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgcGFyZW50aGVzZXNpc25nIGhp
Z2hlciBwcmVjZWRlbmNlIHN1YmV4cHJlc3Npb25zLgorICogQGF1dGhvciBNaWNoYWVsIEZpY2Fy
cmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2Rl
KSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShu
b2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2Rl
KTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAg
ICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdl
WzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0g
IikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAgICAgICAgICAg
bmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisgICAgICAgIHJl
dHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHByZWNlZGVuY2Uobm9kZSkgeworCisgICAgICAgIHN3aXRjaCAo
bm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBjYXNlICJBc3NpZ25tZW50RXhw
cmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIGNhc2Ug
IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisKKyAg
ICAgICAgICAgIGNhc2UgIkxvZ2ljYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3BlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAifHwiOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
IiYmIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICAgICAgICAg
ICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
LyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVzc2lvbiI6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgInwiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIl4iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiYiOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDg7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj09IjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiIT0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI9PT0iOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlICIhPT0iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjwiOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICI8PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4iOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlICI+PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImluIjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMTA7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjw8IjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiPj4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI+Pj4iOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDExOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICIrIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiLSI6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMTI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIioiOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICIvIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJSI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTM7CisgICAgICAgICAgICAgICAgICAgIC8vIG5v
IGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhy
b3VnaCAqLworICAgICAgICAgICAgY2FzZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTQ7CisgICAgICAgICAgICBjYXNlICJVcGRhdGVFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMTU7CisgICAgICAgICAgICBjYXNlICJDYWxsRXhwcmVzc2lv
biI6CisgICAgICAgICAgICAgICAgLy8gSUlGRSBpcyBhbGxvd2VkIHRvIGhhdmUgcGFyZW5zIGlu
IGFueSBwb3NpdGlvbiAoIzY1NSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMTY7CisgICAg
ICAgICAgICBjYXNlICJOZXdFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTc7
CisgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE4
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJHcmF0dWl0b3VzIHBhcmVudGhlc2VzIGFyb3VuZCBleHByZXNzaW9uLiIp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeVVuYXJ5VXBkYXRlKG5vZGUpIHsKKyAgICAgICAg
aWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSAmJiBwcmVjZWRlbmNlKG5vZGUuYXJn
dW1lbnQpID49IHByZWNlZGVuY2Uobm9kZSkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlLmFy
Z3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeUNhbGxOZXcobm9k
ZSkgeworICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuY2FsbGVlKSAmJiBwcmVjZWRl
bmNlKG5vZGUuY2FsbGVlKSA+PSBwcmVjZWRlbmNlKG5vZGUpICYmCisgICAgICAgICEobm9kZS50
eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5jdGlv
bkV4cHJlc3Npb24iKSkgeworICAgICAgICAgICAgcmVwb3J0KG5vZGUuY2FsbGVlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAgICAg
ICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5hcmd1bWVudHNbMF0pICYmIHByZWNl
ZGVuY2Uobm9kZS5hcmd1bWVudHNbMF0pID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50
RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50c1sw
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbXS5mb3JF
YWNoLmNhbGwobm9kZS5hcmd1bWVudHMsIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAgICAg
IGlmIChpc1BhcmVudGhlc2lzZWQoYXJnKSAmJiBwcmVjZWRlbmNlKGFyZykgPj0gcHJlY2VkZW5j
ZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcG9ydChhcmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5QmluYXJ5TG9naWNhbChub2RlKSB7CisgICAg
ICAgIHZhciBwcmVjID0gcHJlY2VkZW5jZShub2RlKTsKKyAgICAgICAgaWYgKGlzUGFyZW50aGVz
aXNlZChub2RlLmxlZnQpICYmIHByZWNlZGVuY2Uobm9kZS5sZWZ0KSA+PSBwcmVjKSB7CisgICAg
ICAgICAgICByZXBvcnQobm9kZS5sZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUucmlnaHQpICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPiBwcmVjKSB7
CisgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKG5vZGUuZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZSAmJiBpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5j
ZShlKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9LAorICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUucmlnaHQp
ICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPj0gcHJlY2VkZW5jZShub2RlKSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2FsLAorICAgICAgICAi
Q2FsbEV4cHJlc3Npb24iOiBkcnlDYWxsTmV3LAorICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChu
b2RlLnRlc3QpICYmIHByZWNlZGVuY2Uobm9kZS50ZXN0KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAi
TG9naWNhbEV4cHJlc3Npb24iLCBvcGVyYXRvcjogInx8In0pKSB7CisgICAgICAgICAgICAgICAg
cmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUuY29uc2VxdWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmNvbnNlcXVlbnQp
ID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLmNvbnNlcXVlbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFsdGVybmF0ZSkgJiYgcHJlY2VkZW5jZShu
b2RlLmFsdGVybmF0ZSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9u
In0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkg
eworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBmaXJzdFRva2VuOworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVz
aXNlZChub2RlLmV4cHJlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgZmlyc3RUb2tlbiA9IGNv
bnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFRva2VuLnZhbHVlICE9PSAiZnVuY3Rpb24iICYmIGZpcnN0VG9rZW4udmFsdWUgIT09
ICJ7IikgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5leHByZXNzaW9uKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JJ
blN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhl
c2lzZWQobm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIGlzUGFyZW50aGVzaXNl
ZChub2RlLmluaXQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNQYXJlbnRoZXNpc2Vk
KG5vZGUudGVzdCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlICYmIGlzUGFyZW50aGVzaXNl
ZChub2RlLnVwZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS51cGRhdGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0
KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2Fs
LAorICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc1BhcmVudGhlc2lzZWQobm9kZS5vYmplY3QpICYm
CisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZShub2RlLm9iamVjdCkgPj0gcHJlY2VkZW5jZShu
b2RlKSAmJgorICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jb21w
dXRlZCB8fAorICAgICAgICAgICAgICAgICAgICAhKAorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5vYmplY3QudHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlb2Ygbm9kZS5vYmplY3QudmFsdWUgPT09ICJudW1iZXIiICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAvXlswLTldKyQvLnRlc3QoY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUub2Jq
ZWN0KS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAg
ICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZHJ5Q2FsbE5l
dywKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHYgPSBlLnZhbHVlOworICAgICAgICAgICAgICAgIGlmICh2ICYmIGlz
UGFyZW50aGVzaXNlZCh2KSAmJiBwcmVjZWRlbmNlKHYpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJB
c3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQodik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAg
ICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5hcmd1bWVudCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5hcmd1bWVudCkpIHsKKyAgICAgICAg
ICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5leHByZXNzaW9ucywgZnVuY3Rpb24oZSkgeworICAg
ICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5jZShlKSA+PSBw
cmVjZWRlbmNlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRj
aENhc2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlz
UGFyZW50aGVzaXNlZChub2RlLnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUu
dGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hTdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdp
Y2Uobm9kZS5kaXNjcmltaW5hbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuZGlz
Y3JpbWluYW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3Rh
dGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNl
ZChub2RlLmFyZ3VtZW50KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6
IGRyeVVuYXJ5VXBkYXRlLAorICAgICAgICAiVXBkYXRlRXhwcmVzc2lvbiI6IGRyeVVuYXJ5VXBk
YXRlLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5pbml0KSAmJiBw
cmVjZWRlbmNlKG5vZGUuaW5pdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHBy
ZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7
CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUub2JqZWN0KSkgeworICAgICAgICAg
ICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSw2NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB1bm5lY2Vzc2FyeSBz
ZW1pY29sb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJFbXB0eVN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2Fy
eSBzZW1pY29sb24uIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2NTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVubmVjZXNzYXJ5IHN0cmljdCBkaXJlY3RpdmVzLgorICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBkaXJlY3Rp
dmVzKGJsb2NrKSB7CisgICAgICAgIHZhciBkcyA9IFtdLCBib2R5ID0gYmxvY2suYm9keSwgZSwg
aSwgbDsKKworICAgICAgICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyArK2kp
IHsKKyAgICAgICAgICAgIGUgPSBib2R5W2ldOworCisgICAgICAgICAgICBpZiAoCisgICAgICAg
ICAgICAgICAgZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAg
ICAgICBlLmV4cHJlc3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAg
dHlwZW9mIGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyIKKyAgICAgICAgICAgICkgewor
ICAgICAgICAgICAgICAgIGRzLnB1c2goZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0KGRpcmVjdGl2
ZSkgeworICAgICAgICByZXR1cm4gZGlyZWN0aXZlLnZhbHVlID09PSAidXNlIHN0cmljdCI7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdChub2RlKSB7
CisgICAgICAgIHZhciB1c2VTdHJpY3REaXJlY3RpdmVzLCBzY29wZSwgdXBwZXI7CisgICAgICAg
IHVzZVN0cmljdERpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzKG5vZGUpLmZpbHRlcihpc1N0cmljdCk7
CisKKyAgICAgICAgc3dpdGNoICh1c2VTdHJpY3REaXJlY3RpdmVzLmxlbmd0aCkgeworICAgICAg
ICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IDE6CisgICAgICAgICAgICAgICAgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisgICAgICAg
ICAgICAgICAgdXBwZXIgPSBzY29wZS51cHBlcjsKKworICAgICAgICAgICAgICAgIGlmICh1cHBl
ciAmJiB1cHBlci5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAg
ICB1cHBlciA9IHVwcGVyLnVwcGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICh1cHBlciAmJiB1cHBlci5pc1N0cmljdCkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydCh1c2VTdHJpY3REaXJlY3RpdmVzWzBdLCAiVW5uZWNlc3NhcnkgJ3VzZSBz
dHJpY3QnLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh1c2VT
dHJpY3REaXJlY3RpdmVzWzFdLCAiTXVsdGlwbGUgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZXMuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjog
Y2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdCwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2FyeVVz
ZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9LAorCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2Fy
eVVzZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyBmYWxsLXRocm91Z2ggY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudHMu
CisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vbWF0dGR1dmFsbC5jb20vPgorICovCisi
dXNlIHN0cmljdCI7CisKKwordmFyIEZBTExUSFJPVUdIX0NPTU1FTlQgPSAvZmFsbHNcc3Rocm91
Z2gvOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHZhciBzd2l0Y2hlcyA9IFtdOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAi
U3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNvbnNlcXVl
bnQgPSBub2RlLmNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAgc3dpdGNoRGF0YSA9IHN3aXRj
aGVzW3N3aXRjaGVzLmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgICAgIGksCisgICAgICAgICAg
ICAgICAgY29tbWVudHMsCisgICAgICAgICAgICAgICAgY29tbWVudDsKKworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAqIFNvbWUgZGV2ZWxvcGVycyB3cmFwIGNhc2UgYm9kaWVzIGluIGJs
b2Nrcywgc28gaWYgdGhlcmUgaXMganVzdCBvbmUKKyAgICAgICAgICAgICAqIG5vZGUgYW5kIGl0
J3MgYSBibG9jayBzdGF0ZW1lbnQsIGNoZWNrIGluc2lkZS4KKyAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgaWYgKGNvbnNlcXVlbnQubGVuZ3RoID09PSAxICYmIGNvbnNlcXVlbnRbMF0udHlw
ZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBj
b25zZXF1ZW50WzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVja2luZyBv
biBwcmV2aW91cyBjYXNlCisgICAgICAgICAgICBpZiAoIXN3aXRjaERhdGEubGFzdENhc2VDbG9z
ZWQpIHsKKworICAgICAgICAgICAgICAgIC8vIGEgZmFsbCB0aHJvdWdoIGNvbW1lbnQgd2lsbCBi
ZSB0aGUgbGFzdCB0cmFpbGluZyBjb21tZW50IG9mIHRoZSBsYXN0IGNhc2UKKyAgICAgICAgICAg
ICAgICBjb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMoc3dpdGNoRGF0YS5sYXN0Q2FzZSku
dHJhaWxpbmc7CisgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2NvbW1lbnRzLmxl
bmd0aCAtIDFdOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGNvbW1lbnQKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbW1lbnQgfHwgIUZBTExUSFJPVUdIX0NPTU1FTlQudGVzdChjb21t
ZW50LnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChzd2l0Y2hE
YXRhLmxhc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgXCJicmVh
a1wiIHN0YXRlbWVudCBiZWZvcmUgXCJ7e2NvZGV9fVwiLiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICB7IGNvZGU6IG5vZGUudGVzdCA/ICJjYXNlIiA6ICJkZWZhdWx0IiB9KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdyBkZWFsaW5nIHdp
dGggdGhlIGN1cnJlbnQgY2FzZQorICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3Nl
ZCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZSA9IG5vZGU7CisKKyAg
ICAgICAgICAgIC8vIHRyeSB0byB2ZXJpZnkgdXNpbmcgc3RhdGVtZW50cyAtIGdvIGJhY2t3YXJk
cyBhcyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNlYXJjaAorICAgICAgICAgICAgaWYgKGNvbnNlcXVl
bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gY29uc2VxdWVudC5sZW5ndGgg
LSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoLyg/OkJyZWFrfENv
bnRpbnVlfFJldHVybnxUaHJvdylTdGF0ZW1lbnQvLnRlc3QoY29uc2VxdWVudFtpXS50eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gdGhlIGNhc2Ugc3RhdGVtZW50IGhhcyBubyBzdGF0ZW1lbnRzLCBzbyBpdCBtdXN0IGxv
Z2ljYWxseSBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNl
Q2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAqIEFueSB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG5leHQgU3dpdGNoQ2Fz
ZSBvY2N1cnMuCisgICAgICAgICAgICAgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdhcm4gb24gdGhl
IGxhc3QgU3dpdGNoQ2FzZSwgc2luY2UgaXQgY2FuJ3QKKyAgICAgICAgICAgICAqIGZhbGwgdGhy
b3VnaCB0byBhbnl0aGluZy4KKyAgICAgICAgICAgICAqLworICAgICAgICB9LAorCisgICAgICAg
ICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBzd2l0Y2hl
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgICAgIGxh
c3RDYXNlQ2xvc2VkOiB0cnVlLAorICAgICAgICAgICAgICAgIGxhc3RDYXNlOiBudWxsCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAiU3dpdGNoU3RhdGVtZW50OmV4aXQi
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHN3aXRjaGVzLnBvcCgpOworICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sNjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYSBsZWFkaW5nL3Ry
YWlsaW5nIGRlY2ltYWwgcG9pbnQgaW4gYSBudW1lcmljIGxpdGVyYWwKKyAqIEBhdXRob3IgSmFt
ZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAg
ICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBub2RlLnZhbHVlID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLnJh
dy5pbmRleE9mKCIuIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkEgbGVhZGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEg
ZG90LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yYXcu
aW5kZXhPZigiLiIpID09PSBub2RlLnJhdy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJl
IGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjg6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ug
b2YgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpZmllcnMgYXMgdmFyaWFibGVzLgorICogQGF1
dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8qCisgICAgICogV2FsayB0aGUgc2NvcGUgY2hhaW4gbG9va2luZyBmb3IgZWl0
aGVyIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBvciBhCisgICAgICogVmFyaWFibGVEZWNsYXJhdGlv
biB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgbGVmdC1oYW5kIHNpZGUgb2YgdGhlCisgICAgICogQXNz
aWdubWVudEV4cHJlc3Npb24uIElmIHdlIGZpbmQgdGhlIEZ1bmN0aW9uRGVjbGFyYXRpb24gZmly
c3QsIHRoZW4gd2UKKyAgICAgKiB3YXJuLCBiZWNhdXNlIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBp
cyB0cnlpbmcgdG8gYmVjb21lIGEgVmFyaWFibGUgb3IgYQorICAgICAqIEZ1bmN0aW9uRXhwcmVz
c2lvbi4gSWYgd2UgZmluZCBhIFZhcmlhYmxlRGVjbGFyYXRpb24gZmlyc3QsIHRoZW4gd2UgaGF2
ZQorICAgICAqIGEgbGVnaXRpbWF0ZSBzaGFkb3cgdmFyaWFibGUuCisgICAgICovCisgICAgZnVu
Y3Rpb24gY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLCBuYW1lKSB7CisgICAgICAg
IHZhciB2YXJpYWJsZSwKKyAgICAgICAgICAgIGRlZiwKKyAgICAgICAgICAgIGksCisgICAgICAg
ICAgICBqOworCisgICAgICAgIC8vIExvb3Agb3ZlciBhbGwgb2YgdGhlIGlkZW50aWZpZXJzIGF2
YWlsYWJsZSBpbiBzY29wZS4KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjb3BlLnZhcmlhYmxl
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyaWFibGUgPSBzY29wZS52YXJpYWJsZXNb
aV07CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGlkZW50aWZpZXIsIHNlZSBpZiBpdCB3YXMg
ZGVmaW5lZCBpbiBfdGhpc18gc2NvcGUuCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmFy
aWFibGUuZGVmcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGRlZiA9IHZhcmlhYmxl
LmRlZnNbal07CisKKyAgICAgICAgICAgICAgICAvLyBJZGVudGlmaWVyIGlzIGEgZnVuY3Rpb24g
YW5kIHdhcyBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgICAgICAgICAgICAgaWYgKGRlZi5u
YW1lLm5hbWUgPT09IG5hbWUgJiYgZGVmLnR5cGUgPT09ICJGdW5jdGlvbk5hbWUiKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSB2YXJpYWJsZSBhbmQgd2FzIGRlY2xhcmVkIGlu
IHRoaXMgc2NvcGUuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBpcyBhIGxlZ2l0aW1hdGUgc2hh
ZG93IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZS5uYW1lID09PSBuYW1l
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGUgdXBwZXIg
c2NvcGUuCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBnbG9iYWwgc2NvcGUgYW5kIGhhdmVuJ3Qg
Zm91bmQgYW55dGhpbmcuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgp
LAorICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmxlZnQubmFtZTsKKworICAgICAgICAgICAg
aWYgKGNoZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZSwgbmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bmFtZX19JyBpcyBhIGZ1bmN0aW9uLiIs
IHsgbmFtZTogbmFtZSB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICB9Owor
Cit9OworCit9LHt9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBpbXBsaWVkIGV2YWwgdmlhIHNl
dFRpbWVvdXQgYW5kIHNldEludGVydmFsCisgKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUu
Y2FsbGVlLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlID09PSAic2V0VGltZW91
dCIgfHwgY2FsbGVlID09PSAic2V0SW50ZXJ2YWwiKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzWzBdOworICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnQgJiYgYXJndW1lbnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBhcmd1bWVu
dC52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2YWwuIENvbnNpZGVyIHBhc3NpbmcgYSBmdW5jdGlvbiBp
bnN0ZWFkIG9mIGEgc3RyaW5nLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZW5mb3JjZSBkZWNsYXJhdGlvbnMgaW4gcHJvZ3JhbSBvciBmdW5jdGlvbiBi
b2R5IHJvb3QuCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIG5lYXJlc3QgUHJvZ3JhbSBvciBGdW5jdGlv
biBhbmNlc3RvciBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuY2VzdG9yJ3MgdHlw
ZSBhbmQgZGlzdGFuY2UgZnJvbSBub2RlLgorICAgICAqLworICAgIGZ1bmN0aW9uIG5lYXJlc3RC
b2R5KCkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpLAorICAgICAgICAgICAgZ2Vu
ZXJhdGlvbiA9IDE7CisKKyAgICAgICAgd2hpbGUgKGFuY2VzdG9yICYmIFsiUHJvZ3JhbSIsICJG
dW5jdGlvbkRlY2xhcmF0aW9uIiwKKyAgICAgICAgICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
Il0uaW5kZXhPZihhbmNlc3Rvci50eXBlKSA8IDApIHsKKyAgICAgICAgICAgIGdlbmVyYXRpb24g
Kz0gMTsKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vIFR5cGUgb2YgY29udGFpbmluZyBh
bmNlc3RvcgorICAgICAgICAgICAgdHlwZTogYW5jZXN0b3IudHlwZSwKKyAgICAgICAgICAgIC8v
IFNlcGFyYXRpb24gYmV0d2VlbiBhbmNlc3RvciBhbmQgbm9kZQorICAgICAgICAgICAgZGlzdGFu
Y2U6IGdlbmVyYXRpb24KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1
cmUgdGhhdCBhIGdpdmVuIG5vZGUgaXMgYXQgYSBwcm9ncmFtIG9yIGZ1bmN0aW9uIGJvZHkncyBy
b290LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBEZWNsYXJhdGlvbiBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
KG5vZGUpIHsKKyAgICAgICAgdmFyIGJvZHkgPSBuZWFyZXN0Qm9keShub2RlKSwKKyAgICAgICAg
ICAgIHZhbGlkID0gKChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiAmJiBib2R5LmRpc3RhbmNlID09
PSAxKSB8fAorICAgICAgICAgICAgICAgIGJvZHkuZGlzdGFuY2UgPT09IDIpOworCisgICAgICAg
IGlmICghdmFsaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNb3ZlIHt7
dHlwZX19IGRlY2xhcmF0aW9uIHRvIHt7Ym9keX19IHJvb3QuIiwKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IChub2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xh
cmF0aW9uIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24iIDogInZhcmlhYmxl
IiksCisgICAgICAgICAgICAgICAgICAgIGJvZHk6IChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiA/
CisgICAgICAgICAgICAgICAgICAgICAgICAicHJvZ3JhbSIgOiAiZnVuY3Rpb24gYm9keSIpCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVjaywKKyAgICAg
ICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYm90aCIpIHsKKyAgICAgICAgICAgICAgICBjaGVj
ayhub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sNzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFZhbGlkYXRlIHN0cmluZ3MgcGFzc2VkIHRvIHRoZSBSZWdFeHAgY29uc3RydWN0b3IK
KyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5j
dGlvbiBpc1N0cmluZyhub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSA9
PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5nIjsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBl
ID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gIlJlZ0V4cCIgJiYgaXNT
dHJpbmcobm9kZS5hcmd1bWVudHNbMF0pKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIGlmIChpc1N0cmluZyhub2RlLmFyZ3VtZW50c1sxXSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlLCBub2RlLmFyZ3Vt
ZW50c1sxXS52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCBlLm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisg
ICAgICAgICJOZXdFeHByZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSw3Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHVzYWdlIG9mIF9faXRlcmF0b3JfXyBwcm9wZXJ0eQorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAg
ICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgorICAgICAgICAgICAgICAgICAgICAobm9kZS5w
cm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09PSAi
X19pdGVyYXRvcl9fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
KG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJvcGVydHkudmFsdWUg
PT09ICJfX2l0ZXJhdG9yX18iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJSZXNlcnZlZCBuYW1lICdfX2l0ZXJhdG9yX18nLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNzM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBsYWJlbHMgdGhh
dCBhcmUgdGhlIHNhbWUgYXMgYW4gaWRlbnRpZmllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFu
IE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9u
IGZpbmRJZGVudGlmaWVyKHNjb3BlLCBpZGVudGlmaWVyKSB7CisgICAgICAgIHZhciBmb3VuZCA9
IGZhbHNlOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlh
YmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gaWRlbnRpZmllcikgewor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkg
eworICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgPT09IGlkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgbm90IGZvdW5kIHRoZSBpZGVudGlmaWVy
IGluIHRoaXMgc2NvcGUsIGNoZWNrIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gc2NvcGUuCisgICAg
ICAgIGlmIChzY29wZS51cHBlciAmJiAhZm91bmQpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
SWRlbnRpZmllcihzY29wZS51cHBlciwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICAvLyBGZXRjaCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgdmFyIHNjb3BlID0g
Y29udGV4dC5nZXRTY29wZSgpOworCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRo
ZSBpZGVudGlmaWVyIHdhbGtpbmcgdXAgdGhlIHNjb3BlLCBzdGFydGluZworICAgICAgICAgICAg
Ly8gd2l0aCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgaWYgKGZpbmRJZGVudGlm
aWVyKHNjb3BlLCBub2RlLmxhYmVsLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkZvdW5kIGlkZW50aWZpZXIgd2l0aCBzYW1lIG5hbWUgYXMgbGFiZWwuIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDc0Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBE
aXNhbGxvdyBMYWJlbGVkIFN0YXRlbWVudHMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJM
YWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWxlZCBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0s
CisKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICBpZiAobm9kZS5sYWJlbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGJyZWFrIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICB9LAorCisgICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUubGFiZWwpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbCBpbiBjb250aW51ZSBzdGF0
ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisKKyAgICB9OworCit9Owor
Cit9LHt9XSw3NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrcyB3aXRoIG5vIHJlYXNvbiB0byBleGlzdAor
ICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBvY2N1cnJlbmNlIG9mIEJsb2NrU3RhdGVtZW50ID4g
QmxvY2tTdGF0ZW1lbnQgb3IKKyAgICAgICAgICAgIC8vIFByb2dyYW0gPiBCbG9ja1N0YXRlbWVu
dAorICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7
CisgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgfHwgcGFy
ZW50LnR5cGUgPT09ICJQcm9ncmFtIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJCbG9jayBpcyBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgYmxvY2suIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw3NjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNh
bGxvdyBpZiBhcyB0aGUgb25seSBzdGF0bWVuZXQgaW4gYW4gZWxzZSBibG9jaworICogQGF1dGhv
ciBCcmFuZG9uIE1pbGxzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgYW5jZXN0
b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBh
bmNlc3RvcnMucG9wKCksCisgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnMu
cG9wKCk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9j
a1N0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LmJvZHkubGVuZ3RoID09
PSAxICYmIGdyYW5kcGFyZW50ICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LnR5
cGUgPT09ICJJZlN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID09PSBn
cmFuZHBhcmVudC5hbHRlcm5hdGUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVW5leHBlY3RlZCBpZiBhcyB0aGUgb25seSBzdGF0ZW1lbnQgaW4gYW4gZWxzZSBibG9j
ay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDc3
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgY3JlYXRpb24gb2YgZnVuY3Rpb24gaW5zaWRlIGEgbG9vcAorICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9u
IGNoZWNrRm9yTG9vcHMobm9kZSkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5n
ZXRBbmNlc3RvcnMoKTsKKworICAgICAgICBpZiAoYW5jZXN0b3JzLnNvbWUoZnVuY3Rpb24oYW5j
ZXN0b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci50eXBlID09PSAiRm9yU3RhdGVt
ZW50IiB8fCBhbmNlc3Rvci50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiIHx8IGFuY2VzdG9yLnR5
cGUgPT09ICJEb1doaWxlU3RhdGVtZW50IjsKKyAgICAgICAgfSkpIHsKKyAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJEb24ndCBtYWtlIGZ1bmN0aW9ucyB3aXRoaW4gYSBsb29wIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjogY2hlY2tGb3JMb29wcywKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBj
aGVja0Zvckxvb3BzCisgICAgfTsKK307CisKK30se31dLDc4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgZ3Jv
dXBlZCByZXF1aXJlIHN0YXRlbWVudHMgZm9yIE5vZGUuSlMKKyAqIEBhdXRob3IgUmFwaGFlbCBQ
aWd1bGxhCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgbGlzdCBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgICAqCisgICAgICogQHJldHVybnMge3N0
cmluZ1tdfSBBbiBhcnJheSBvZiBidWlsdC1pbiBOb2RlLmpzIG1vZHVsZXMuCisgICAgICovCisg
ICAgZnVuY3Rpb24gZ2V0QnVpbHRpbk1vZHVsZXMoKSB7CisgICAgICAgIC8vIFRoaXMgbGlzdCBp
cyBnZW5lcmF0ZWQgdXNpbmcgYHJlcXVpcmUoInJlcGwiKS5fYnVpbHRpbkxpYnMuY29uY2F0KCdy
ZXBsJykuc29ydCgpYAorICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgbGlzdCB3YXMgZ2VuZXJh
dGVkIHVzaW5nIG5vZGUgdjAuMTEuOQorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgImFz
c2VydCIsICJidWZmZXIiLCAiY2hpbGRfcHJvY2VzcyIsICJjbHVzdGVyIiwgImNyeXB0byIsCisg
ICAgICAgICAgICAiZGdyYW0iLCAiZG5zIiwgImRvbWFpbiIsICJldmVudHMiLCAiZnMiLCAiaHR0
cCIsICJodHRwcyIsCisgICAgICAgICAgICAibmV0IiwgIm9zIiwgInBhdGgiLCAicHVueWNvZGUi
LCAicXVlcnlzdHJpbmciLCAicmVhZGxpbmUiLAorICAgICAgICAgICAgInJlcGwiLCAic21hbGxv
YyIsICJzdHJlYW0iLCAic3RyaW5nX2RlY29kZXIiLCAidGxzIiwgInR0eSIsCisgICAgICAgICAg
ICAidXJsIiwgInV0aWwiLCAidm0iLCAiemxpYiIKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICB2
YXIgQlVJTFRJTl9NT0RVTEVTID0gZ2V0QnVpbHRpbk1vZHVsZXMoKTsKKworICAgIHZhciBERUNM
X1JFUVVJUkUgPSAicmVxdWlyZSIsCisgICAgICAgIERFQ0xfVU5JTklUSUFMSVpFRCA9ICJ1bmlu
aXRpYWxpemVkIiwKKyAgICAgICAgREVDTF9PVEhFUiA9ICJvdGhlciI7CisKKyAgICB2YXIgUkVR
X0NPUkUgPSAiY29yZSIsCisgICAgICAgIFJFUV9GSUxFID0gImZpbGUiLAorICAgICAgICBSRVFf
TU9EVUxFID0gIm1vZHVsZSIsCisgICAgICAgIFJFUV9DT01QVVRFRCA9ICJjb21wdXRlZCI7CisK
KyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGEgZGVjbGFyYXRpb24gc3Rh
dGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24gVGhlIGluaXQg
bm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9
IFRoZSB0eXBlIG9mIGRlY2xhcmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBleHByZXNzaW9uLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIGdldERlY2xhcmF0aW9uVHlwZShpbml0RXhwcmVzc2lvbikg
eworICAgICAgICBpZiAoIWluaXRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAvLyAidmFyIHg7
IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xfVU5JTklUSUFMSVpFRDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpbml0RXhwcmVzc2lvbi50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmCisg
ICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYm
CisgICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiCisg
ICAgICAgICkgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgndXRpbCcpOyIKKyAg
ICAgICAgICAgIHJldHVybiBERUNMX1JFUVVJUkU7CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdEV4
cHJlc3Npb24udHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAvLyAi
dmFyIHggPSByZXF1aXJlKCdnbG9iJykuR2xvYjsiCisgICAgICAgICAgICByZXR1cm4gZ2V0RGVj
bGFyYXRpb25UeXBlKGluaXRFeHByZXNzaW9uLm9iamVjdCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyAidmFyIHggPSA0MjsiCisgICAgICAgIHJldHVybiBERUNMX09USEVSOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgbW9kdWxlIHRoYXQgaXMgbG9h
ZGVkIHZpYSByZXF1aXJlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24g
VGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5z
IHtzdHJpbmd9IFRoZSBtb2R1bGUgdHlwZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpbmZlck1v
ZHVsZVR5cGUoaW5pdEV4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKGluaXRFeHByZXNzaW9uLnR5
cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVx
dWlyZSgnZ2xvYicpLkdsb2I7IgorICAgICAgICAgICAgcmV0dXJuIGluZmVyTW9kdWxlVHlwZShp
bml0RXhwcmVzc2lvbi5vYmplY3QpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRFeHByZXNzaW9u
WyJhcmd1bWVudHMiXS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIC8vICJ2YXIgeCA9IHJl
cXVpcmUoKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0NPTVBVVEVEOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGFyZyA9IGluaXRFeHByZXNzaW9uWyJhcmd1bWVudHMiXVswXTsKKworICAg
ICAgICBpZiAoYXJnLnR5cGUgIT09ICJMaXRlcmFsIiB8fCB0eXBlb2YgYXJnLnZhbHVlICE9PSAi
c3RyaW5nIikgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSg0Mik7IgorICAgICAg
ICAgICAgcmV0dXJuIFJFUV9DT01QVVRFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChCVUlM
VElOX01PRFVMRVMuaW5kZXhPZihhcmcudmFsdWUpICE9PSAtMSkgeworICAgICAgICAgICAgLy8g
InZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9DT1JFOwor
ICAgICAgICB9IGVsc2UgaWYgKC9eXC57MCwyfVwvLy50ZXN0KGFyZy52YWx1ZSkpIHsKKyAgICAg
ICAgICAgIC8vICJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7IgorICAgICAgICAgICAg
cmV0dXJuIFJFUV9GSUxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gInZhciBh
c3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9NT0RVTEU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgbGlzdCBv
ZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaXMgbWl4ZWQsIGkuZS4gd2hldGhlciBpdAorICAgICAq
IGNvbnRhaW5zIGJvdGggcmVxdWlyZSBhbmQgb3RoZXIgZGVjbGFyYXRpb25zLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25zIFRoZSBsaXN0IG9mIFZhcmlhYmxlRGVjbGFyYXRv
cnMuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlY2xhcmF0aW9ucyBh
cmUgbWl4ZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc01peGVkKGRl
Y2xhcmF0aW9ucykgeworICAgICAgICB2YXIgY29udGFpbnMgPSB7fTsKKworICAgICAgICBkZWNs
YXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIHZh
ciB0eXBlID0gZ2V0RGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uLmluaXQpOworICAgICAgICAg
ICAgY29udGFpbnNbdHlwZV0gPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4g
ISEoCisgICAgICAgICAgICBjb250YWluc1tERUNMX1JFUVVJUkVdICYmCisgICAgICAgICAgICAo
Y29udGFpbnNbREVDTF9VTklOSVRJQUxJWkVEXSB8fCBjb250YWluc1tERUNMX09USEVSXSkKKyAg
ICAgICAgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhbGwgcmVxdWlyZSBk
ZWNsYXJhdGlvbnMgaW4gdGhlIGdpdmVuIGxpc3QgYXJlIG9mIHRoZSBzYW1lCisgICAgICogdHlw
ZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGRlY2xhcmF0aW9ucyBUaGUgbGlzdCBvZiBWYXJp
YWJsZURlY2xhcmF0b3JzLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBk
ZWNsYXJhdGlvbnMgYXJlIGdyb3VwZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBpc0dyb3VwZWQoZGVjbGFyYXRpb25zKSB7CisgICAgICAgIHZhciBmb3VuZCA9IHt9Owor
CisgICAgICAgIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgewor
ICAgICAgICAgICAgaWYgKGdldERlY2xhcmF0aW9uVHlwZShkZWNsYXJhdGlvbi5pbml0KSA9PT0g
REVDTF9SRVFVSVJFKSB7CisgICAgICAgICAgICAgICAgZm91bmRbaW5mZXJNb2R1bGVUeXBlKGRl
Y2xhcmF0aW9uLmluaXQpXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3VuZCkubGVuZ3RoIDw9IDE7CisgICAgfQorCisK
KyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIGdyb3VwaW5nID0gISFjb250ZXh0Lm9wdGlvbnNbMF07
CisKKyAgICAgICAgICAgIGlmIChpc01peGVkKG5vZGUuZGVjbGFyYXRpb25zKSkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgICAgICAiRG8gbm90IG1peCAncmVxdWlyZScgYW5kIG90aGVyIGRlY2xhcmF0
aW9ucy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBp
bmcgJiYgIWlzR3JvdXBlZChub2RlLmRlY2xhcmF0aW9ucykpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgIkRvIG5vdCBtaXggY29yZSwgbW9kdWxlLCBmaWxlIGFuZCBjb21wdXRlZCByZXF1aXJl
cy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDc5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgZm9yIGlu
ZGVudGF0aW9uCisgKiBAYXV0aG9yIEphcnkgTmllYnVyCisgKiBAY29weXJpZ2h0IDIwMTQgTmlj
aG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQg
SmFyeSBOaWVidXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgc21hcnRUYWJzID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgdmFyIENPTU1FTlRf
U1RBUlQgPSAvXlxzKlwvXCovLAorICAgICAgICBNQVlCRV9DT01NRU5UID0gL15ccypcKi87CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBdCBsZWFzdCBvbmUgc3BhY2Ug
Zm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAgICAgICAqIG9yIHRoZSByZXZlcnNlIGJlZm9yZSBu
b24tdGFiLy1zcGFjZQorICAgICAgICAgICAgICogY2hhcmFjdGVycyBiZWdpbi4KKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgdmFyIHJlZ2V4ID0gL14oPz1bXHQgXSooXHQgfCBcdCkpLywK
KyAgICAgICAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGNvbnRleHQu
Z2V0U291cmNlTGluZXMoKTsKKworICAgICAgICAgICAgaWYgKHNtYXJ0VGFicykgeworICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQXQgbGVhc3Qgb25lIHNwYWNlIGZvbGxv
d2VkIGJ5IGEgdGFiCisgICAgICAgICAgICAgICAgICogYmVmb3JlIG5vbi10YWIvLXNwYWNlIGNo
YXJhY3RlcnMgYmVnaW4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmVn
ZXggPSAvXig/PVtcdCBdKiBcdCkvOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5l
cy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJl
Z2V4LmV4ZWMobGluZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIU1BWUJFX0NPTU1FTlQudGVzdChsaW5lKSAmJiAhQ09NTUVOVF9T
VEFSVC50ZXN0KGxpbmVzW2kgLSAxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsIHsgbGluZTogaSArIDEsIGNvbHVtbjogbWF0Y2guaW5kZXggKyAxIH0s
ICJNaXhlZCBzcGFjZXMgYW5kIHRhYnMuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9OworCit9
OworCit9LHt9XSw4MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdXNlIG9mIG11bHRpcGxlIHNwYWNlcy4KKyAqIEBhdXRo
b3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNvcHlyaWdodCAyMDE0IFZp
Z25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgT1BFUkFUT1JTID0gWworICAgICAgICAiKiIsICIvIiwgIiUiLCAiKyIsICItIiwgIjw8
IiwgIj4+IiwgIj4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiaW4iLAorICAgICAgICAiaW5z
dGFuY2VvZiIsICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwgIiYiLCAiXiIsICJ8IiwgIiYmIiwg
Inx8IiwgIj0iLAorICAgICAgICAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0iLCAiPDw9Iiwg
Ij4+PSIsICI+Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKKyAgICAgICAgIj8iLCAiOiIsICIsIgor
ICAgIF0sIGVyck9wcyA9IFtdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhl
bHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRz
IGFuIEFTVCBub2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAg
KiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNdWx0aXBsZSBzcGFjZXMgZm91bmQgYXJvdW5kICciICsg
ZXJyT3BzLnNoaWZ0KCkgKyAiJy4iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
d2hldGhlciB0aGUgb3BlcmF0b3IgaXMgaW4gc2FtZSBsaW5lIGFzIHR3byBhZGphY2VudCB0b2tl
bnMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBv
cGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0
byB0aGUgb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgb3Bl
cmF0b3IuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG9wZXJhdG9yIGlz
IGluIHNhbWUgbGluZSBhcyB0d28gYWRqYWNlbnQgdG9rZW5zLgorICAgICAqIEBwcml2YXRlCisg
ICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpIHsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmxvYy5lbmQubGluZSA9PT0gbGVmdC5sb2MuZW5kLmxp
bmUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmxvYy5lbmQubGluZSA9PT0g
cmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgd2hl
dGhlciB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCB0aGUgb3BlcmF0b3IuCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBvcGVyYXRvci4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0byB0aGUgb3Bl
cmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IuCisg
ICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNl
cy4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTXVsdGlTcGFjZWQo
bGVmdCwgcmlnaHQsIG9wZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBvcGVyYXRvci5yYW5nZVsw
XSAtIGxlZnQucmFuZ2VbMV0gPiAxIHx8CisgICAgICAgICAgICAgICAgcmlnaHQucmFuZ2VbMF0g
LSBvcGVyYXRvci5yYW5nZVsxXSA+IDE7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRv
a2VucyBhbmQgdmFsaWRhdGUgdGhlIHNwYWNpbmcuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBs
ZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0byB0aGUgb3BlcmF0b3IuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgbXVsdGlwbGUgc3BhY2VzIHdlcmUgZm91bmQuCisgICAgICog
QHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZVNwYWNpbmcobGVmdCwgcmln
aHQpIHsKKyAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xl
ZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpLAorICAgICAgICAgICAgb3BlcmF0
b3I7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA8
IGw7ICsraSkgeworICAgICAgICAgICAgbGVmdCA9IHRva2Vuc1tpIC0gMV07CisgICAgICAgICAg
ICBvcGVyYXRvciA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIHJpZ2h0ID0gdG9rZW5zW2kgKyAx
XTsKKworICAgICAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yLnR5cGUgPT09ICJQdW5j
dHVhdG9yIiAmJiBPUEVSQVRPUlMuaW5kZXhPZihvcGVyYXRvci52YWx1ZSkgPj0gMCAmJgorICAg
ICAgICAgICAgICAgIGlzU2FtZUxpbmUobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSAmJiBpc011bHRp
U3BhY2VkKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICBlcnJPcHMu
cHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisK
KyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNlcyBvbiB0
aGUgZXhwcmVzc2lvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8g
Y2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjaGVja0V4cHJlc3Npb24obm9kZSkgeworICAgICAgICBpZiAodmFsaWRh
dGVTcGFjaW5nKG5vZGUubGVmdCwgbm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChu
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydCBpZiB0aGVy
ZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCBjb25kaXRpb25hbCB0ZXJuYXJ5IG9wZXJhdG9y
cy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBjaGVja0NvbmRpdGlvbmFsKG5vZGUpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlU3BhY2luZyhu
b2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodmFsaWRhdGVTcGFjaW5nKG5vZGUuY29uc2VxdWVudCwg
bm9kZS5hbHRlcm5hdGUpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNw
YWNlcyBhcm91bmQgZXF1YWwgb3BlcmF0b3IgaW4gdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tW
YXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmIHZhbGlkYXRlU3BhY2luZyhub2Rl
LmlkLCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNw
YWNlcyBhcm91bmQgbGlzdCBvZiBpdGVtcyBpbiBvYmplY3RzLCBhcnJheXMsCisgICAgICogZnVu
Y3Rpb24gcGFyYW1ldGVycywgc2VxdWVuY2VzIGFuZCBkZWNsYXJhdGlvbnMuCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2Ygbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrTGlzdChub2Rl
LCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMgPSBub2RlW3Byb3BlcnR5XTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAg
ICAgICAgICAgdmFyIGxlZnQgPSBpdGVtc1tpIC0gMV0sCisgICAgICAgICAgICAgICAgcmlnaHQg
PSBpdGVtc1tpXSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGNvbnRleHQuZ2V0VG9rZW5C
ZWZvcmUocmlnaHQpOworCisgICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IudHlw
ZSA9PT0gIlB1bmN0dWF0b3IiICYmIG9wZXJhdG9yLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpICYmIGlzTXVsdGlT
cGFjZWQobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJP
cHMucHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChyaWdo
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGNoZWNrRXhwcmVzc2lvbiwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBjaGVja0V4cHJl
c3Npb24sCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGNoZWNrRXhwcmVzc2lvbiwKKyAg
ICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uZGl0aW9uYWwsCisgICAgICAg
ICJWYXJpYWJsZURlY2xhcmF0b3IiOiBjaGVja1ZhciwKKyAgICAgICAgIkFycmF5RXhwcmVzc2lv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZWxlbWVu
dHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgInByb3BlcnRpZXMiKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGNoZWNrTGlzdChub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tMaXN0KG5v
ZGUsICJwYXJhbXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgImRlY2xhcmF0
aW9ucyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODE6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyB3aGVuIHVzaW5nIG11bHRpbGluZSBzdHJpbmdzCisgKiBAYXV0aG9yIElseWEgVm9sb2Rpbgor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwi
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbGluZUJyZWFrID0gL1xuLzsKKyAg
ICAgICAgICAgIGlmIChsaW5lQnJlYWsudGVzdChub2RlLnJhdykpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiTXVsdGlsaW5lIHN1cHBvcnQgaXMgbGltaXRlZCB0byBi
cm93c2VycyBzdXBwb3J0aW5nIEVTNSBvbmx5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sODI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBtdWx0aXBsZSBibGFuayBsaW5l
cy4KKyAqIGltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSB0aGUgbm8tdHJhaWxpbmctc3BhY2Vz
IHJ1bGUuCisgKiBAYXV0aG9yIEdyZWcgQ29jaGFyZAorICogQGNvcHlyaWdodCAyMDE0IEdyZWcg
Q29jaGFyZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8v
IFVzZSBvcHRpb25zLm1heCBvciAyIGFzIGRlZmF1bHQKKyAgICB2YXIgbnVtTGluZXMgPSAyOwor
CisgICAgaWYgKGNvbnRleHQub3B0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgbnVtTGluZXMgPSBj
b250ZXh0Lm9wdGlvbnNbMF0ubWF4OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hlY2tCbGFua0xpbmVzKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKSwKKyAgICAgICAg
ICAgICAgICBjdXJyZW50TG9jYXRpb24gPSAtMSwKKyAgICAgICAgICAgICAgICBsYXN0TG9jYXRp
b24sCisgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyID0gMCwKKyAgICAgICAgICAgICAgICBs
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICB0cmltbWVkTGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rp
b24oc3RyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIudHJpbSgpOworICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBBZ2dyZWdhdGUgYW5kIGNvdW50IGJsYW5r
IGxpbmVzCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbGFzdExvY2F0aW9uID0g
Y3VycmVudExvY2F0aW9uOworICAgICAgICAgICAgICAgIGN1cnJlbnRMb2NhdGlvbiA9IHRyaW1t
ZWRMaW5lcy5pbmRleE9mKCIiLGN1cnJlbnRMb2NhdGlvbiArIDEpOworICAgICAgICAgICAgICAg
IGlmIChsYXN0TG9jYXRpb24gPT09IGN1cnJlbnRMb2NhdGlvbiAtIDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYmxhbmtDb3VudGVyKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGJsYW5rQ291bnRlciA+PSBudW1MaW5lcykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogbGFzdExvY2F0aW9uICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IGxpbmVzW2xhc3RMb2NhdGlvbl0ubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24s
ICJNdWx0aXBsZSBibGFuayBsaW5lcyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIHJlc2V0IHRoZSBibGFuayBj
b3VudGVyCisgICAgICAgICAgICAgICAgICAgIGJsYW5rQ291bnRlciA9IDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudExvY2F0aW9uICE9PSAtMSk7Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmUt
YXNzaWduaW5nIG5hdGl2ZSBvYmplY3RzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG5hdGl2ZU9iamVjdHMgPSBbIkFycmF5IiwgIkJv
b2xlYW4iLCAiRGF0ZSIsICJkZWNvZGVVUkkiLAorICAgICAgICAgICAgICAgICAgICAgICAgImRl
Y29kZVVSSUNvbXBvbmVudCIsICJlbmNvZGVVUkkiLCAiZW5jb2RlVVJJQ29tcG9uZW50IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJFcnJvciIsICJldmFsIiwgIkV2YWxFcnJvciIsICJGdW5j
dGlvbiIsICJpc0Zpbml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXNOYU4iLCAiSlNP
TiIsICJNYXRoIiwgIk51bWJlciIsICJPYmplY3QiLCAicGFyc2VJbnQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcnNlRmxvYXQiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIs
ICJSZWdFeHAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyIsICJTeW50YXhFcnJv
ciIsICJUeXBlRXJyb3IiLCAiVVJJRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIk1h
cCIsICJOYU4iLCAiU2V0IiwgIldlYWtNYXAiLCAiSW5maW5pdHkiLCAidW5kZWZpbmVkIl07CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChuYXRpdmVPYmplY3RzLmluZGV4T2Yobm9kZS5sZWZ0
Lm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBub2Rl
LmxlZnQubmFtZSArICIgaXMgYSByZWFkLW9ubHkgbmF0aXZlIG9iamVjdC4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2RlLmlk
Lm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVk
ZWZpbml0aW9uIG9mICd7e25hdGl2ZU9iamVjdH19Jy4iLCB7IG5hdGl2ZU9iamVjdDogbm9kZS5p
ZC5uYW1lIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sODQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IEEgcnVsZSB0byBkaXNhbGxvdyBuZWdhdGVkIGxlZnQgb3BlcmFuZHMgb2YgdGhlIGBp
bmAgb3BlcmF0b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJpbiIgJiYg
bm9kZS5sZWZ0LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24iICYmIG5vZGUubGVmdC5vcGVyYXRv
ciA9PT0gIiEiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBg
aW5gIGV4cHJlc3Npb24ncyBsZWZ0IG9wZXJhbmQgaXMgbmVnYXRlZCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODU6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBuZXN0
ZWQgdGVybmFyeSBleHByZXNzaW9ucworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQ29uZGl0aW9u
YWxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYWx0
ZXJuYXRlLnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUuY29uc2VxdWVudC50eXBlID09PSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIikg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgbmVzdCB0ZXJu
YXJ5IGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsK
KworfSx7fV0sODY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIG5ldyBGdW5jdGlvbgorICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gIkZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgRnVuY3Rpb24gY29uc3RydWN0b3IgaXMgZXZhbC4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg3Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBB
IHJ1bGUgdG8gZGlzYWxsb3cgY2FsbHMgdG8gdGhlIE9iamVjdCBjb25zdHJ1Y3RvcgorICogQGF1
dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJP
YmplY3QiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBvYmpl
Y3QgbGl0ZXJhbCBub3RhdGlvbiB7fSBpcyBwcmVmZXJyYWJsZS4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHVz
ZSBvZiBuZXcgb3BlcmF0b3Igd2l0aCB0aGUgYHJlcXVpcmVgIGZ1bmN0aW9uCisgKiBAYXV0aG9y
IFdpbCBNb29yZSBJSUkKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUuY2FsbGVlLm5hbWUg
PT09ICJyZXF1aXJlIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIHVzZSBvZiBuZXcgd2l0aCByZXF1aXJlLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5n
IGNvbnN0cnVjdG9yIGZvciB3cmFwcGVyIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGlu
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHdyYXBwZXJPYmpl
Y3RzID0gWyJTdHJpbmciLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiTWF0aCIsICJKU09OIl07Cisg
ICAgICAgICAgICBpZiAod3JhcHBlck9iamVjdHMuaW5kZXhPZihub2RlLmNhbGxlZS5uYW1lKSA+
IC0xKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCB1c2Ug
e3tmbn19IGFzIGEgY29uc3RydWN0b3IuIiwgeyBmbjogbm9kZS5jYWxsZWUubmFtZSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDkwOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgc3RhdGVtZW50cyB3aXRoIGZ1bmN0aW9uIGludm9jYXRpb24gcHJlY2VkZWQgYnkKKyAq
ICJuZXciIGFuZCBub3QgcGFydCBvZiBhc3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2Rp
bgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRXhw
cmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5v
ZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSAnbmV3JyBmb3Igc2lkZSBlZmZlY3Rz
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sOTE6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gb2JqZWN0IHByb3BlcnR5IG9mIHRoZSBnbG9iYWwgb2Jq
ZWN0IChNYXRoIGFuZCBKU09OKSBhcyBhIGZ1bmN0aW9uCisgKiBAYXV0aG9yIEphbWVzIEFsbGFy
ZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNh
bGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5j
YWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBub2RlLmNhbGxlZS5uYW1lOworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAiTWF0aCIg
fHwgbmFtZSA9PT0gIkpTT04iKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICIne3tuYW1lfX0nIGlzIG5vdCBhIGZ1bmN0aW9uLiIsIHsgbmFtZTogbmFtZSB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSw5MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgaW4gc3Ry
aW5nIGxpdGVyYWxzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9PSAic3RyaW5n
IikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBtYXRjaCA9IG5vZGUucmF3Lm1hdGNoKC9eKFteXFxdfFxcW14wLTddKSpcXChbMC03XSkv
KSwKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0OworCisgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0ID0gbWF0Y2hbMl07CisgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBvY3RhbDogJ1xce3tvY3RhbERpZ2l0
fX0nLiBVc2UgJ1xcdS4uLi4nIGluc3RlYWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsg
b2N0YWxEaWdpdDogb2N0YWxEaWdpdCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgfTsKKworfTsKKworfSx7fV0sOTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRpYWxpemluZyBv
Y3RhbCBsaXRlcmFsCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gIm51bWJlciIgJiYgL14w
WzAtN10vLnRlc3Qobm9kZS5yYXcpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIk9jdGFsIGxpdGVyYWxzIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDk0OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzdHJpbmcg
Y29uY2F0ZW5hdGlvbiB3aGVuIHVzaW5nIF9fZGlybmFtZSBhbmQgX19maWxlbmFtZQorICogQGF1
dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIE1BVENI
RVIgPSAvXl9fKD86ZGlyfGZpbGUpbmFtZSQvOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAg
ICAgIHZhciBsZWZ0ID0gbm9kZS5sZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0ID0gbm9kZS5y
aWdodDsKKworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICIrIiAmJgorICAgICAg
ICAgICAgICAgICAgICAoKGxlZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIE1BVENIRVIudGVz
dChsZWZ0Lm5hbWUpKSB8fAorICAgICAgICAgICAgICAgICAgICAocmlnaHQudHlwZSA9PT0gIklk
ZW50aWZpZXIiICYmIE1BVENIRVIudGVzdChyaWdodC5uYW1lKSkpCisgICAgICAgICAgICApIHsK
KworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgcGF0aC5qb2luKCkg
b3IgcGF0aC5yZXNvbHZlKCkgaW5zdGVhZCBvZiArIHRvIGNyZWF0ZSBwYXRocy4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgdW5hcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IG9wZXJhdG9yICciICsg
bm9kZS5vcGVyYXRvciArICInIHVzZWQuIik7CisgICAgICAgIH0KKworICAgIH07CisKK307CisK
K30se31dLDk2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZW52KCkKKyAqIEBhdXRob3Ig
VmlnbmVzaCBBbmFuZAorICogQGNvcHlyaWdodCAyMDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9i
amVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9IG5vZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09
ICJwcm9jZXNzIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlO
YW1lID09PSAiZW52IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIHVzZSBvZiBwcm9jZXNzLmVudi4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw5NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdGhlIHVzZSBvZiBwcm9j
ZXNzLmV4aXQoKQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlOwor
CisgICAgICAgICAgICBpZiAoY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBj
YWxsZWUub2JqZWN0Lm5hbWUgPT09ICJwcm9jZXNzIiAmJgorICAgICAgICAgICAgICAgIGNhbGxl
ZS5wcm9wZXJ0eS5uYW1lID09PSAiZXhpdCIKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEb24ndCB1c2UgcHJvY2Vzcy5leGl0KCk7IHRocm93
IGFuIGVycm9yIGluc3RlYWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07
CisKK307CisKK30se31dLDk4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19wcm90b19fIHByb3Bl
cnR5CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKworICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVydHkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUucHJvcGVydHku
bmFtZSA9PT0gIl9fcHJvdG9fXyIgJiYgIW5vZGUuY29tcHV0ZWQpIHx8CisgICAgICAgICAgICAg
ICAgICAgIChub2RlLnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnByb3BlcnR5
LnZhbHVlID09PSAiX19wcm90b19fIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVGhlICdfX3Byb3RvX18nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw5OTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHdoZW4gdGhlIHNhbWUgdmFyaWFibGUgaXMgZGVjbGFyZWQgbW9yZSB0aGVuIG9uY2UuCisg
KiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVu
Y3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRT
Y29wZSgpOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlh
YmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUuaWRlbnRpZmllcnMgJiYgdmFyaWFibGUu
aWRlbnRpZmllcnMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlkZW50
aWZpZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YS5yYW5nZVsxXSAtIGIucmFuZ2VbMV07CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHZhcmlhYmxlLmlkZW50aWZpZXJzLmxlbmd0aDsg
aSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh2YXJpYWJs
ZS5pZGVudGlmaWVyc1tpXSwgInt7YX19IGlzIGFscmVhZHkgZGVmaW5lZCIsIHthOiB2YXJpYWJs
ZS5uYW1lfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGZpbmRWYXJpYWJsZXMs
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmaW5kVmFyaWFibGVzLAorICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZpbmRWYXJpYWJsZXMKKyAgICB9OworfTsKKworfSx7fV0s
MTAwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGNvdW50IG11bHRpcGxlIHNwYWNlcyBpbiByZWd1bGFyIGV4cHJlc3Npb25z
CisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tLz4KKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwi
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmdldEZp
cnN0VG9rZW5zKG5vZGUsIDEpWzBdLAorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gdG9rZW4u
dHlwZSwKKyAgICAgICAgICAgICAgICBub2RlVmFsdWUgPSB0b2tlbi52YWx1ZSwKKyAgICAgICAg
ICAgICAgICBtdWx0aXBsZVNwYWNlc1JlZ2V4ID0gLyggezIsfSkrPy8sCisgICAgICAgICAgICAg
ICAgcmVnZXhSZXN1bHRzOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFy
RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZWdleFJlc3VsdHMgPSBtdWx0aXBsZVNw
YWNlc1JlZ2V4LmV4ZWMobm9kZVZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmIChyZWdleFJl
c3VsdHMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlNwYWNlcyBhcmUgaGFyZCB0byBjb3VudC4gVXNlIHsiICsgcmVnZXhSZXN1bHRzWzBdLmxl
bmd0aCArICJ9LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDEwMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyByZXNlcnZlZCB3
b3JkcyBiZWluZyB1c2VkIGFzIGtleXMKKyAqIEBhdXRob3IgRW1pbCBCYXkKKyAqIEBjb3B5cmln
aHQgMjAxNCBFbWlsIEJheS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBNRVNTQUdFID0gIlJlc2VydmVkIHdvcmQgJ3t7a2V5fX0nIHVzZWQg
YXMga2V5LiI7CisKKyAgICB2YXIgcmVzZXJ2ZWRXb3JkcyA9IFsKKyAgICAgICAgImFic3RyYWN0
IiwKKyAgICAgICAgImJvb2xlYW4iLCAiYnJlYWsiLCAiYnl0ZSIsCisgICAgICAgICJjYXNlIiwg
ImNhdGNoIiwgImNoYXIiLCAiY2xhc3MiLCAiY29uc3QiLCAiY29udGludWUiLAorICAgICAgICAi
ZGVidWdnZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZG91YmxlIiwKKyAgICAgICAg
ImVsc2UiLCAiZW51bSIsICJleHBvcnQiLCAiZXh0ZW5kcyIsCisgICAgICAgICJmaW5hbCIsICJm
aW5hbGx5IiwgImZsb2F0IiwgImZvciIsICJmdW5jdGlvbiIsCisgICAgICAgICJnb3RvIiwKKyAg
ICAgICAgImlmIiwgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgImluIiwgImluc3RhbmNlb2YiLCAi
aW50IiwgImludGVyZmFjZSIsCisgICAgICAgICJsb25nIiwKKyAgICAgICAgIm5hdGl2ZSIsICJu
ZXciLAorICAgICAgICAicGFja2FnZSIsICJwcml2YXRlIiwgInByb3RlY3RlZCIsICJwdWJsaWMi
LAorICAgICAgICAicmV0dXJuIiwKKyAgICAgICAgInNob3J0IiwgInN0YXRpYyIsICJzdXBlciIs
ICJzd2l0Y2giLCAic3luY2hyb25pemVkIiwKKyAgICAgICAgInRoaXMiLCAidGhyb3ciLCAidGhy
b3dzIiwgInRyYW5zaWVudCIsICJ0cnkiLCAidHlwZW9mIiwKKyAgICAgICAgInZhciIsICJ2b2lk
IiwgInZvbGF0aWxlIiwKKyAgICAgICAgIndoaWxlIiwgIndpdGgiCisgICAgXTsKKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgewor
CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSAiSWRlbnRpZmllciIp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKCIiICsga2V5
TmFtZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCBNRVNTQUdFLCB7IGtleToga2V5TmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDEwMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVzdHJpY3QgdXNhZ2Ugb2Ygc3BlY2lmaWVkIG5vZGUgbW9k
dWxlcy4KKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVsegorICovCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAg
ICAvLyB0cmltIHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWVzCisgICAgdmFyIHJlc3RyaWN0ZWRNb2R1
bGVzID0gY29udGV4dC5vcHRpb25zOworCisgICAgLy8gaWYgbm8gbW9kdWxlcyBhcmUgcmVzdHJp
Y3RlZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBDYWxsRXhwcmVzc2lvbnMKKyAgICBpZiAo
cmVzdHJpY3RlZE1vZHVsZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiB7fTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG5vZGUgaXMgYSBz
dHJpbmcgbGl0ZXJhbC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8g
Y2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IElmIHRoZSBub2RlIGlzIGEgc3RyaW5n
IGxpdGVyYWwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTdHJpbmcobm9kZSkgeworICAgICAg
ICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS52
YWx1ZSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gdG8g
Y2hlY2sgaWYgYSBub2RlIGlzIGEgcmVxdWlyZSBjYWxsLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYg
dGhlIG5vZGUgaXMgYSByZXF1aXJlIGNhbGwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNSZXF1
aXJlQ2FsbChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLmNhbGxlZS50eXBlID09PSAiSWRl
bnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBoYXMgYW4gYXJndW1lbnQg
dGhhdCBpcyBhbiByZXN0cmljdGVkIG1vZHVsZSBhbmQgcmV0dXJuIGl0cyBuYW1lLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5z
IHt1bmRlZmluZWR8U3RyaW5nfSByZXN0cmljdGVkIG1vZHVsZSBuYW1lIG9yIHVuZGVmaW5lZCBp
ZiBub2RlIGFyZ3VtZW50IGlzbid0IHJlc3RyaWN0ZWQuCisgICAgICovCisgICAgZnVuY3Rpb24g
Z2V0UmVzdHJpY3RlZE1vZHVsZU5hbWUobm9kZSkgeworICAgICAgICB2YXIgbW9kdWxlTmFtZTsK
KworICAgICAgICAvLyBub2RlIGhhcyBhcmd1bWVudHMgYW5kIGZpcnN0IGFyZ3VtZW50IGlzIHN0
cmluZworICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICYmIGlzU3RyaW5nKG5vZGUu
YXJndW1lbnRzWzBdKSkgeworICAgICAgICAgICAgdmFyIGFyZ3VtZW50VmFsdWUgPSBub2RlLmFy
Z3VtZW50c1swXS52YWx1ZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFyZ3Vt
ZW50IHZhbHVlIGlzIGluIHJlc3RyaWN0ZWQgbW9kdWxlcyBhcnJheQorICAgICAgICAgICAgaWYg
KHJlc3RyaWN0ZWRNb2R1bGVzLmluZGV4T2YoYXJndW1lbnRWYWx1ZSkgIT09IC0xKSB7CisgICAg
ICAgICAgICAgICAgbW9kdWxlTmFtZSA9IGFyZ3VtZW50VmFsdWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbW9kdWxlTmFtZTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICAgICAgaWYgKGlzUmVxdWlyZUNhbGwobm9kZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVz
dHJpY3RlZE1vZHVsZU5hbWUgPSBnZXRSZXN0cmljdGVkTW9kdWxlTmFtZShub2RlKTsKKworICAg
ICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bW9kdWxlTmFtZX19JyBtb2R1bGUgaXMgcmVz
dHJpY3RlZCBmcm9tIGJlaW5nIHVzZWQuIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgbW9k
dWxlTmFtZTogcmVzdHJpY3RlZE1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisK
K30se31dLDEwMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmV0dXJuIHN0YXRlbWVudCBjb250YWlucyBh
c3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnQgJiYgbm9kZS5hcmd1bWVudC50eXBlID09
PSAiQXNzaWdubWVudEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlJldHVybiBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBjb250YWluIGFzc2lnbm1lbnQu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMDQ6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIGphdmFzY3JpcHQ6IHVybHMKKyAqIEBhdXRob3IgSWx5
YSBWb2xvZGluCisgKi8KKy8qanNoaW50IHNjcmlwdHVybDogdHJ1ZSAqLworLyplc2xpbnQgbm8t
c2NyaXB0LXVybDogMCovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2YXIgdmFsdWU7CisK
KyAgICAgICAgICAgIGlmIChub2RlLnZhbHVlICYmIHR5cGVvZihub2RlLnZhbHVlKSA9PT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG5vZGUudmFsdWUudG9Mb3dlckNhc2Uo
KTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCJqYXZhc2NyaXB0OiIpID09
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTY3JpcHQg
VVJMIGlzIGEgZm9ybSBvZiBldmFsLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwNTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNv
bXBhcmlzb24gd2hlcmUgbGVmdCBwYXJ0IGlzIHRoZSBzYW1lIGFzIHRoZSByaWdodAorICogcGFy
dC4KKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBvcGVyYXRvcnMgPSBbIj09PSIsICI9PSIsICIhPT0iLCAiIT0iLCAi
PiIsICI8IiwgIj49IiwgIjw9Il07CisgICAgICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2Yo
bm9kZS5vcGVyYXRvcikgPiAtMSAmJgorICAgICAgICAgICAgICAgIChub2RlLmxlZnQudHlwZSA9
PT0gIklkZW50aWZpZXIiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5v
ZGUubGVmdC5uYW1lID09PSBub2RlLnJpZ2h0Lm5hbWUgfHwKKyAgICAgICAgICAgICAgICBub2Rl
LmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwi
ICYmIG5vZGUubGVmdC52YWx1ZSA9PT0gbm9kZS5yaWdodC52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQ29tcGFyaW5nIHRvIGl0c2VsZiBpcyBwb3RlbnRp
YWxseSBwb2ludGxlc3MuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSwxMDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgY29tbWEgb3BlcmF0b3IKKyAqIEBh
dXRob3IgQnJhbmRvbiBNaWxscworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisg
ICAgICogUGFydHMgb2YgdGhlIGdyYW1tYXIgdGhhdCBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBwYXJl
bnMuCisgICAgICovCisgICAgdmFyIHBhcmVudGhlc2l6ZWQgPSB7CisgICAgICAgICJEb1doaWxl
U3RhdGVtZW50IjogInRlc3QiLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiAidGVzdCIsCisgICAg
ICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiAiZGlzY3JpbWluYW50IiwKKyAgICAgICAgIldoaWxlU3Rh
dGVtZW50IjogInRlc3QiLAorICAgICAgICAiV2l0aFN0YXRlbWVudCI6ICJvYmplY3QiCisKKyAg
ICAgICAgLy8gT21pdHRpbmcgQ2FsbEV4cHJlc3Npb24gLSBjb21tYXMgYXJlIHBhcnNlZCBhcyBh
cmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0aW5nIE5ld0V4cHJlc3Npb24gLSBj
b21tYXMgYXJlIHBhcnNlZCBhcyBhcmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0
aW5nIEZvckluU3RhdGVtZW50IC0gcGFydHMgYXJlbid0IGluZGl2aWR1YWxseSBwYXJlbnRoZXNp
c2VkCisgICAgICAgIC8vIE9taXR0aW5nIEZvclN0YXRlbWVudCAtIHBhcnRzIGFyZW4ndCBpbmRp
dmlkdWFsbHkgcGFyZW50aGVzaXNlZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1p
bmVzIHdoZXRoZXIgYSBub2RlIGlzIHJlcXVpcmVkIGJ5IHRoZSBncmFtbWFyIHRvIGJlIHdyYXBw
ZWQgaW4KKyAgICAgKiBwYXJlbnMsIGUuZy4gdGhlIHRlc3Qgb2YgYW4gaWYgc3RhdGVtZW50Lgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIHBhcmVucyBhcm91bmQgbm9kZSBiZWxvbmcgdG8gcGFyZW50
IG5vZGUuCisgICAgICovCisgICAgZnVuY3Rpb24gcmVxdWlyZXNFeHRyYVBhcmVucyhub2RlKSB7
CisgICAgICAgIHJldHVybiBub2RlLnBhcmVudCAmJiBwYXJlbnRoZXNpemVkW25vZGUucGFyZW50
LnR5cGVdICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBub2RlID09PSBub2RlLnBhcmVudFtw
YXJlbnRoZXNpemVkW25vZGUucGFyZW50LnR5cGVdXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBDaGVjayBpZiBhIG5vZGUgaXMgd3JhcHBlZCBpbiBwYXJlbnMuCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRy
dWUgaWYgdGhlIG5vZGUgaGFzIGEgcGFyZW4gb24gZWFjaCBzaWRlLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2Vu
ID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9
IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNU
b2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09
ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAg
ICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBu
b2RlLnJhbmdlWzFdOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIGEgbm9kZSBp
cyB3cmFwcGVkIGluIHR3byBsZXZlbHMgb2YgcGFyZW5zLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlm
IHR3byBwYXJlbnMgc3Vycm91bmQgdGhlIG5vZGUgb24gZWFjaCBzaWRlLgorICAgICAqLworICAg
IGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAgICAgICAgICAg
bmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisgICAgICAgIHJl
dHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICAvLyBBbHdheXMgYWxsb3cgc2VxdWVuY2VzIGluIGZvciBz
dGF0ZW1lbnQgdXBkYXRlCisgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gIkZv
clN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUgPT09IG5vZGUucGFyZW50
LmluaXQgfHwgbm9kZSA9PT0gbm9kZS5wYXJlbnQudXBkYXRlKSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV3JhcHBpbmcgYSBzZXF1
ZW5jZSBpbiBleHRyYSBwYXJlbnMgaW5kaWNhdGVzIGludGVudAorICAgICAgICAgICAgaWYgKHJl
cXVpcmVzRXh0cmFQYXJlbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgY29tbWEgb3BlcmF0b3IuIik7CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSwxMDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHNoYWRvd2luZyBvZiBOYU4sIHVu
ZGVmaW5lZCwgYW5kIEluZmluaXR5IChFUzUgc2VjdGlvbiAxNS4xLjEpCisgKiBAYXV0aG9yIE1p
Y2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIFJFU1RSSUNURUQgPSBb
InVuZGVmaW5lZCIsICJOYU4iLCAiSW5maW5pdHkiLCAiYXJndW1lbnRzIiwgImV2YWwiXTsKKwor
ICAgIGZ1bmN0aW9uIGNoZWNrRm9yVmlvbGF0aW9uKGlkKSB7CisgICAgICAgIGlmIChSRVNUUklD
VEVELmluZGV4T2YoaWQubmFtZSkgPiAtMSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
aWQsICJTaGFkb3dpbmcgb2YgZ2xvYmFsIHByb3BlcnR5IFwiIiArIGlkLm5hbWUgKyAiXCIuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNs
YXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JWaW9sYXRpb24o
bm9kZS5pZCk7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pZCkgeworICAgICAgICAgICAgICAg
IGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
W10ubWFwLmNhbGwobm9kZS5wYXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKKyAgICAgICAgfSwK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLmlkKTsKKyAgICAgICAgICAgIFtdLm1hcC5jYWxs
KG5vZGUucGFyYW1zLCBjaGVja0ZvclZpb2xhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgICJD
YXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0
aW9uKG5vZGUucGFyYW0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTA4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgb24gZGVjbGFyaW5nIHZhcmlhYmxlcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRo
ZSBvdXRlciBzY29wZQorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHZhcmlhYmxlIGlzIGNvbnRhaW5l
ZCBpbiB0aGUgbGlzdCBvZiBnaXZlbiBzY29wZSB2YXJpYWJsZXMuCisgICAgICogQHBhcmFtIHtP
YmplY3R9IHZhcmlhYmxlIFRoZSB2YXJpYWJsZSB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBzY29wZVZhcnMgVGhlIHNjb3BlIHZhcmlhYmxlcyB0byBsb29rIGZvci4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHZhcmlhYmxlIGlzIGNvbnRhaW5z
IGluIHRoZSBsaXN0IG9mIHNjb3BlIHZhcmlhYmxlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c0NvbnRhaW5lZEluU2NvcGVWYXJzKHZhcmlhYmxlLCBzY29wZVZhcnMpIHsKKyAgICAgICAgcmV0
dXJuIHNjb3BlVmFycy5zb21lKGZ1bmN0aW9uIChzY29wZVZhcikgeworICAgICAgICAgICAgaWYg
KHNjb3BlVmFyLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFyaWFibGUubmFtZSA9PT0gc2NvcGVWYXIubmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIHNoYWRvd2VkIGluIHRoZSBnaXZl
biBzY29wZS4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZXMgVGhlIHZhcmlhYmxlcyB0
byBsb29rIGZvcgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBUaGUgc2NvcGUgdG8gYmUg
Y2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja1NoYWRvd3NJblNjb3BlKHZhcmlhYmxlcywgc2NvcGUpIHsKKyAgICAgICAgdmFyaWFibGVz
LmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAoaXNDb250YWlu
ZWRJblNjb3BlVmFycyh2YXJpYWJsZSwgc2NvcGUudmFyaWFibGVzKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KHZhcmlhYmxlLmlkZW50aWZpZXJzWzBdLCAie3thfX0gaXMgYWxy
ZWFkeSBkZWNsYXJlZCBpbiB0aGUgdXBwZXIgc2NvcGUuIiwge2E6IHZhcmlhYmxlLm5hbWV9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmls
dGVycyBhbGwgdmFyaWFibGVzIG9mIGEgbGlzdCB3aGljaCBhbHJlYWR5IG9jY3VyIGluIGFub3Ro
ZXIgbGlzdC4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZUxpc3RBIExpc3Qgb2YgdmFy
aWFibGVzIHdoaWNoIHNob3VsZCBiZSBmaWx0ZXJlZC4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2
YXJpYWJsZUxpc3RCIExpc3Qgb2YgdmFyaWFibGVzIHdoaWNoIHNob3VsZCBubyBvY2N1ciBpbiB2
YXJpYWJsZUxpc3RBLgorICAgICAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgbGlzdCBvZiB2
YXJpYWJsZXMuCisgICAgICovCisgICAgZnVuY3Rpb24gZmlsdGVyVmFyaWFibGVMaXN0KHZhcmlh
YmxlTGlzdEEsIHZhcmlhYmxlTGlzdEIpIHsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlTGlzdEEu
ZmlsdGVyKGZ1bmN0aW9uICh2YXJpYWJsZUEpIHsKKyAgICAgICAgICAgIHJldHVybiAhdmFyaWFi
bGVMaXN0Qi5zb21lKGZ1bmN0aW9uICh2YXJpYWJsZUIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFyaWFibGVBLm5hbWUgPT09IHZhcmlhYmxlQi5uYW1lOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgZ2l2ZW4gbm9k
ZSBmb3Igc2hhZG93ZWQgdmFyaWFibGVzLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgQVNUIG5vZGUgb2YgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIG9yIEZ1bmN0aW9uRXhwcmVzc2lv
bi4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0Zv
clNoYWRvd3Mobm9kZSkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCks
CisgICAgICAgICAgICBhcmdzID0gbm9kZS5wYXJhbXMsCisgICAgICAgICAgICB2YXJpYWJsZXMg
PSBmaWx0ZXJWYXJpYWJsZUxpc3Qoc2NvcGUudmFyaWFibGVzLCBhcmdzKTsKKworICAgICAgICAv
LyBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5IG9mIHZhcmlhYmxlcyBhbmQgZmluZCBkdXBsaWNh
dGVzIHdpdGggdGhlIHVwcGVyIHNjb3BlCisgICAgICAgIHZhciB1cHBlciA9IHNjb3BlLnVwcGVy
OworICAgICAgICB3aGlsZSAodXBwZXIpIHsKKyAgICAgICAgICAgIGNoZWNrU2hhZG93c0luU2Nv
cGUodmFyaWFibGVzLCB1cHBlcik7CisgICAgICAgICAgICB1cHBlciA9IHVwcGVyLnVwcGVyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBjaGVja0ZvclNoYWRvd3MsCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBj
aGVja0ZvclNoYWRvd3MKKyAgICB9OworCit9OworCit9LHt9XSwxMDk6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWly
ZSB2YXJpYWJsZXMgZGVjbGFyZWQgd2l0aG91dCB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgbGluZXMg
c2VtaWNvbG9uCisgKiBAYXV0aG9yIEpvbmF0aGFuIEtpbmdzdG9uCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICB2YXIgc2VtaWNvbG9uV2hpdGVzcGFjZSA9IC9cczskLzsKKworICAgIHJl
dHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUpOworICAgICAg
ICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlhYmxlIGRlY2xhcmVkIHdpdGggdHJhaWxp
bmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUpOworICAgICAgICAg
ICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cHJlc3Npb24gY2FsbGVkIHdpdGggdHJhaWxpbmcg
d2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworfTsKKworfSx7fV0sMTEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIHRoYXQgc3BhY2VkIGZ1bmN0
aW9uIGFwcGxpY2F0aW9uCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRk
dXZhbGwuY29tPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gZGV0ZWN0
T3BlblNwYWNlcyhub2RlKSB7CisgICAgICAgIHZhciBsYXN0Q2FsbGVlVG9rZW4gPSBjb250ZXh0
LmdldExhc3RUb2tlbihub2RlLmNhbGxlZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0
LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgdmFyIGkgPSB0b2tlbnMuaW5kZXhPZihsYXN0Q2Fs
bGVlVG9rZW4pLCBsID0gdG9rZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGkgPCBsICYmIHRv
a2Vuc1tpXS52YWx1ZSAhPT0gIigiKSB7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGkgPj0gbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIC8vIGxvb2sgZm9yIGEgc3BhY2UgYmV0d2VlbiB0aGUgY2FsbGVlIGFuZCB0aGUgb3BlbiBw
YXJlbgorICAgICAgICBpZiAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSAhPT0gdG9rZW5zW2ldLnJh
bmdlWzBdKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBz
cGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVuLiIpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZGV0ZWN0T3BlblNw
YWNlcywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkZXRlY3RPcGVuU3BhY2VzCisgICAgfTsK
KworfTsKKworfSx7fV0sMTExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzcGFyc2UgYXJyYXlzCisgKiBAYXV0aG9yIE5p
Y2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1
cm4geworCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBlbXB0eVNwb3QgPSBub2RlLmVsZW1lbnRzLmluZGV4T2YobnVsbCkgPiAt
MTsKKworICAgICAgICAgICAgaWYgKGVtcHR5U3BvdCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbW1hIGluIG1pZGRsZSBvZiBhcnJheS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTEyOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdob3NlIGlkZW50aWZpZXIgZW5kcyB3aXRoIHRo
ZSBzdHJpbmcgU3luYworICogQGF1dGhvciBNYXR0IER1VmFsbDxodHRwOi8vbWF0dGR1dmFsbC5j
b20vPgorICovCisKKy8qanNoaW50IG5vZGU6dHJ1ZSovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWUsCisg
ICAgICAgICAgICAgICAgc3luY1JlZ2V4ID0gLy4qU3luYyQvOworCisgICAgICAgICAgICBpZiAo
c3luY1JlZ2V4LmV4ZWMocHJvcGVydHlOYW1lKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHN5bmMgbWV0aG9kOiAnIiArIHByb3Bl
cnR5TmFtZSArICInLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMTEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHRlcm5hcnkgb3BlcmF0b3JzLgorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGVybmFyeSBvcGVyYXRv
ciB1c2VkLiIpOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwxMTQ6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2Fs
bG93IHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGxpbmVzLgorICogQGF1dGhvciBOb2Rl
Y2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIHZhciBUUkFJTEVSID0gIlsgXHRcdTAwYTBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIw
MDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJcdTIwMjhcdTIwMjlc
dTMwMDBdKyQiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0i
OiBmdW5jdGlvbiBjaGVja1RyYWlsaW5nU3BhY2VzKG5vZGUpIHsKKworICAgICAgICAgICAgLy8g
TGV0J3MgaGFjay4gU2luY2UgRXNwcmltYSBkb2VzIG5vdCByZXR1cm4gd2hpdGVzcGFjZSBub2Rl
cywKKyAgICAgICAgICAgIC8vIGZldGNoIHRoZSBzb3VyY2UgY29kZSBhbmQgZG8gYmxhY2sgbWFn
aWMgdmlhIHJlZ2V4cHMuCisKKyAgICAgICAgICAgIHZhciBzcmMgPSBjb250ZXh0LmdldFNvdXJj
ZSgpLAorICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ0V4cChUUkFJTEVSLCAibWciKSwKKyAg
ICAgICAgICAgICAgICBtYXRjaCwgbGluZXMsIGxvY2F0aW9uOworCisgICAgICAgICAgICB3aGls
ZSAoKG1hdGNoID0gcmUuZXhlYyhzcmMpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxp
bmVzID0gc3JjLnNsaWNlKDAsIHJlLmxhc3RJbmRleCkuc3BsaXQoL1xyP1xuL2cpOworCisgICAg
ICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVz
Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsaW5lc1tsaW5lcy5sZW5ndGgg
LSAxXS5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGggKyAxCisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIC8vIFBhc3Npbmcgbm9kZSBpcyBhIGJpdCBkaXJ0eSwgYmVjYXVzZSBt
ZXNzYWdlIGRhdGEgd2lsbCBjb250YWluCisgICAgICAgICAgICAgICAgLy8gYmlnIHRleHQgaW4g
YHNvdXJjZWAuIEJ1dC4uLiB3aG8gY2FyZXMgOikgPworICAgICAgICAgICAgICAgIC8vIE9uZSBt
b3JlIGtsdWRnZSB3aWxsIG5vdCBtYWtlIHdvcnNlIHRoZSBibG9vZHkgd2l6YXJkcnkgb2YgdGhp
cyBwbHVnaW4uCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24s
ICJUcmFpbGluZyBzcGFjZXMgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgIH07Cit9OworCit9LHt9XSwxMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRpYWxp
emluZyB0byB1bmRlZmluZWQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3Ii
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUuaWQubmFtZTsK
KyAgICAgICAgICAgIHZhciBpbml0ID0gbm9kZS5pbml0ICYmIG5vZGUuaW5pdC5uYW1lOworCisg
ICAgICAgICAgICBpZiAoaW5pdCA9PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiSXQncyBub3QgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgJ3t7
bmFtZX19JyB0byB1bmRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE2OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgcmVmZXJl
bmNlcyB0byB1bmRlY2xhcmVkIHZhcmlhYmxlcy4KKyAqIEBhdXRob3IgTWFyayBNYWNkb25hbGQK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVy
cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gaXNJbXBsaWNpdEdsb2JhbCh2
YXJpYWJsZSkgeworICAgIHJldHVybiB2YXJpYWJsZS5kZWZzLmV2ZXJ5KGZ1bmN0aW9uKGRlZikg
eworICAgICAgICByZXR1cm4gZGVmLnR5cGUgPT09ICJJbXBsaWNpdEdsb2JhbFZhcmlhYmxlIjsK
KyAgICB9KTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBkZWNsYXJlZCB2YXJpYWJsZSwgZGVmaW5l
ZCBpbiBgc2NvcGVgLCB0aGF0IGByZWZgIHJlZmVycyB0by4KKyAqIEBwYXJhbSB7U2NvcGV9IHNj
b3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBzZWFyY2guCisgKiBAcGFyYW0ge1JlZmVyZW5jZX0g
cmVmIFRoZSByZWZlcmVuY2UgdG8gZmluZCBpbiB0aGUgc2NvcGUuCisgKiBAcmV0dXJucyB7VmFy
aWFibGV9IFRoZSB2YXJpYWJsZSwgb3IgbnVsbCBpZiByZWYgcmVmZXJzIHRvIGFuIHVuZGVjbGFy
ZWQgdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIGdldERlY2xhcmVkR2xvYmFsVmFyaWFibGUoc2Nv
cGUsIHJlZikgeworICAgIHZhciBkZWNsYXJlZEdsb2JhbCA9IG51bGw7CisgICAgc2NvcGUudmFy
aWFibGVzLnNvbWUoZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAgICAgaWYgKHZhcmlhYmxlLm5h
bWUgPT09IHJlZi5pZGVudGlmaWVyLm5hbWUpIHsKKyAgICAgICAgICAgIC8vIElmIGl0J3MgYW4g
aW1wbGljaXQgZ2xvYmFsLCBpdCBtdXN0IGhhdmUgYSBgd3JpdGVhYmxlYCBmaWVsZCAoaW5kaWNh
dGluZyBpdCB3YXMgZGVjbGFyZWQpCisgICAgICAgICAgICBpZiAoIWlzSW1wbGljaXRHbG9iYWwo
dmFyaWFibGUpIHx8IHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICJ3cml0ZWFibGUi
KSkgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkR2xvYmFsID0gdmFyaWFibGU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBkZWNsYXJlZEdsb2JhbDsKK30KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oLypub2RlKi8pIHsKKwor
ICAgICAgICAgICAgdmFyIGdsb2JhbFNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworCisgICAg
ICAgICAgICBnbG9iYWxTY29wZS50aHJvdWdoLmZvckVhY2goZnVuY3Rpb24ocmVmKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0RGVjbGFyZWRHbG9iYWxWYXJpYWJsZShnbG9i
YWxTY29wZSwgcmVmKSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlZi5pZGVudGlmaWVy
Lm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChyZWYuaWRlbnRpZmllciwgIid7e25hbWV9fScgaXMgbm90IGRl
ZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVm
LmlzV3JpdGUoKSAmJiB2YXJpYWJsZS53cml0ZWFibGUgPT09IGZhbHNlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFtZX19JyBpcyBy
ZWFkIG9ubHkuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE3OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgcmVmZXJlbmNlcyB0byB0aGUgdW5kZWZpbmVkIHZhcmlhYmxlLgorICogQGF1dGhvciBNaWNo
YWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5uYW1l
ID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0
LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgICAgIGlmICghcGFyZW50IHx8IHBh
cmVudC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwgbm9kZSAhPT0gcGFyZW50LnByb3Bl
cnR5IHx8IHBhcmVudC5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgdW5kZWZpbmVkLiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEx
ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGluIHZhcmlhYmxlIGRlY2xhcmF0
aW9ucy4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBoYXNUcmFp
bGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgeworICAgICAgICB2YXIgbGVuID0gaWRlbnRpZmll
ci5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgIT09ICJfIiAmJiAoaWRlbnRp
ZmllclswXSA9PT0gIl8iIHx8IGlkZW50aWZpZXJbbGVuIC0gMV0gPT09ICJfIik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJGb3JNZW1iZXJFeHByZXNzaW9u
KGlkZW50aWZpZXIpIHsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT09ICJfX3Byb3RvX18i
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3BlY2lhbENhc2VJZGVudGlmaWVySW5WYXJpYWJs
ZUV4cHJlc3Npb24oaWRlbnRpZmllcikgeworICAgICAgICAvLyBDaGVja3MgZm9yIHRoZSB1bmRl
cnNjb3JlIGxpYnJhcnkgdXNhZ2UgaGVyZQorICAgICAgICByZXR1cm4gaWRlbnRpZmllciA9PT0g
Il8iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5G
dW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZpZXIgPSBub2Rl
LmlkLm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAidW5kZWZpbmVk
IiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50
aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9y
VHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJsZUV4cHJlc3Npb24obm9kZSkgeworICAgICAgICB2
YXIgaWRlbnRpZmllciA9IG5vZGUuaWQubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50
aWZpZXIgIT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVy
KSAmJgorICAgICAgICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlmaWVySW5WYXJpYWJsZUV4cHJl
c3Npb24oaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5N
ZW1iZXJFeHByZXNzaW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZpZXIgPSBub2RlLnBy
b3BlcnR5Lm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAidW5kZWZp
bmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgJiYKKyAgICAgICAgICAg
ICFpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJlc3Npb24oaWRlbnRpZmllcikp
IHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5n
ICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBj
aGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAg
IlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJs
ZUV4cHJlc3Npb24sCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogY2hlY2tGb3JUcmFpbGlu
Z1VuZGVyc2NvcmVJbk1lbWJlckV4cHJlc3Npb24KKyAgICB9OworCit9OworCit9LHt9XSwxMTk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IENoZWNrcyBmb3IgdW5yZWFjaGFibGUgY29kZSBkdWUgdG8gcmV0dXJuLCB0aHJvd3MsIGJyZWFr
LCBhbmQgY29udGludWUuCisgKiBAYXV0aG9yIEpvZWwgRmVlbnN0cmEKKyAqLworInVzZSBzdHJp
Y3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworCitmdW5jdGlvbiByZXBvcnQoY29udGV4dCwgbm9kZSwgdW5yZWFjaGFi
bGVUeXBlKSB7CisgICAgdmFyIGtleXdvcmQ7CisgICAgc3dpdGNoICh1bnJlYWNoYWJsZVR5cGUp
IHsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9
ICJicmVhayI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ29udGludWVTdGF0
ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9ICJjb250aW51ZSI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKKyAgICAgICAgICAgIGtleXdv
cmQgPSAicmV0dXJuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJUaHJvd1N0
YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gInRocm93IjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgdW5leHBlY3RlZCBzdGF0ZW1lbnQgYWZ0ZXIgYSB7
e3R5cGV9fS4iLCB7IHR5cGU6IGtleXdvcmQgfSk7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBDaGVj
a3MgaWYgYSBub2RlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igbm8tdW5yZWFjaGFibGUgYmVjYXVzZSBv
ZiB2YXJpYWJsZS9mdW5jdGlvbiBob2lzdGluZworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIHRo
ZSBub2RlIGRvZXNuJ3QgdHJpZ2dlciB1bnJlYWNoYWJsZQorICAgICAqIEBwcml2YXRlCisgICAg
ICovCisgICAgZnVuY3Rpb24gaXNVbnJlYWNoYWJsZUFsbG93ZWQobm9kZSkgeworICAgICAgICBy
ZXR1cm4gbm9kZS50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgfHwKKyAgICAgICAgICAg
IG5vZGUudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iICYmCisgICAgICAgICAgICBub2Rl
LmRlY2xhcmF0aW9ucy5ldmVyeShmdW5jdGlvbihkZWNsYXJhdGlvbikgeworICAgICAgICAgICAg
ICAgIHJldHVybiBkZWNsYXJhdGlvbi50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIiAmJiBk
ZWNsYXJhdGlvbi5pbml0ID09PSBudWxsOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyoKKyAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBub2RlIGlzIHRoZSBsYXN0IG5vZGUg
b3IgZm9sbG93ZWQgZXhjbHVzaXZlbHkgYnkKKyAgICAgKiBob2lzdGVkIGRlY2xhcmF0aW9ucwor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBOb2RlIHRoYXQgc2hvdWxkIGJlIHRoZSBsYXN0
IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGNoZWNrTm9kZShub2RlKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBjb250
ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICB2YXIgZmllbGQsIGksIHNpYmxpbmc7
CisKKyAgICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiU3dp
dGNoQ2FzZSI6CisgICAgICAgICAgICAgICAgZmllbGQgPSAiY29uc2VxdWVudCI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJQcm9ncmFtIjoKKyAgICAgICAgICAg
IGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKKyAgICAgICAgICAgICAgICBmaWVsZCA9ICJib2R5IjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gcGFyZW50W2ZpZWxk
XS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgc2libGluZyA9IHBhcmVu
dFtmaWVsZF1baV07CisgICAgICAgICAgICBpZiAoc2libGluZyA9PT0gbm9kZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gRm91bmQgdGhlIGxhc3QgcmVhY2hhYmxlIHN0YXRlbWVudCwg
YWxsIGRvbmUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc1VucmVhY2hhYmxl
QWxsb3dlZChzaWJsaW5nKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChjb250ZXh0LCBzaWJs
aW5nLCBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGNoZWNrTm9kZSwKKyAgICAgICAg
IlRocm93U3RhdGVtZW50IjogY2hlY2tOb2RlLAorICAgICAgICAiQ29udGludWVTdGF0ZW1lbnQi
OiBjaGVja05vZGUsCisgICAgICAgICJCcmVha1N0YXRlbWVudCI6IGNoZWNrTm9kZQorICAgIH07
CisKK307CisKK30se31dLDEyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgRmxhZyBleHByZXNzaW9ucyBpbiBzdGF0ZW1lbnQgcG9zaXRp
b24gdGhhdCBkbyBub3Qgc2lkZSBlZmZlY3QKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
LSBhbnkgbm9kZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiBu
b2RlIHN0cnVjdHVyYWxseSByZXByZXNlbnRzIGEgZGlyZWN0aXZlCisgICAgICovCisgICAgZnVu
Y3Rpb24gbG9va3NMaWtlRGlyZWN0aXZlKG5vZGUpIHsKKyAgICAgICByZXR1cm4gbm9kZS50eXBl
ID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgbm9kZS5leHByZXNzaW9u
LnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZhbHVlID09PSAi
c3RyaW5nIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVk
aWNhdGUgLSAoW2FdIC0+IEJvb2xlYW4pIHRoZSBmdW5jdGlvbiB1c2VkIHRvIG1ha2UgdGhlIGRl
dGVybWluYXRpb24KKyAgICAgKiBAcGFyYW0ge2FbXX0gbGlzdCAtIHRoZSBpbnB1dCBsaXN0Cisg
ICAgICogQHJldHVybnMge2FbXX0gdGhlIGxlYWRpbmcgc2VxdWVuY2Ugb2YgbWVtYmVycyBpbiB0
aGUgZ2l2ZW4gbGlzdCB0aGF0IHBhc3MgdGhlIGdpdmVuIHByZWRpY2F0ZQorICAgICAqLworICAg
IGZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUsIGxpc3QpIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgaWYgKCFw
cmVkaWNhdGUobGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChsaXN0LCAwLCBpKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBhIFByb2dy
YW0gb3IgQmxvY2tTdGF0ZW1lbnQgbm9kZQorICAgICAqIEByZXR1cm5zIHtBU1ROb2RlW119IHRo
ZSBsZWFkaW5nIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZSBub2RlcyBpbiB0aGUgZ2l2ZW4gbm9kZSdz
IGJvZHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkaXJlY3RpdmVzKG5vZGUpIHsKKyAgICAgICAg
cmV0dXJuIHRha2VXaGlsZShsb29rc0xpa2VEaXJlY3RpdmUsIG5vZGUuYm9keSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYW55IG5vZGUKKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGVbXX0gYW5jZXN0b3JzIC0gdGhlIGdpdmVuIG5vZGUncyBhbmNlc3Rv
cnMKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBpcyBj
b25zaWRlcmVkIGEgZGlyZWN0aXZlIGluIGl0cyBjdXJyZW50IHBvc2l0aW9uCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNEaXJlY3RpdmUobm9kZSwgYW5jZXN0b3JzKSB7CisgICAgICAgIHZhciBw
YXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgZ3Jh
bmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDJdOworICAgICAgICByZXR1
cm4gKHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIgfHwgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0
YXRlbWVudCIgJiYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iIHx8
IGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikpICYmCisgICAgICAg
ICAgICBkaXJlY3RpdmVzKHBhcmVudCkuaW5kZXhPZihub2RlKSA+PSAwOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworCisgICAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUuZXhwcmVzc2lvbi50eXBlLAorICAgICAg
ICAgICAgICAgIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisKKyAgICAgICAg
ICAgIGlmICgKKyAgICAgICAgICAgICAgICAhL14oPzpBc3NpZ25tZW50fENhbGx8TmV3fFVwZGF0
ZSlFeHByZXNzaW9uJC8udGVzdCh0eXBlKSAmJgorICAgICAgICAgICAgICAgICh0eXBlICE9PSAi
VW5hcnlFeHByZXNzaW9uIiB8fCBbImRlbGV0ZSIsICJ2b2lkIl0uaW5kZXhPZihub2RlLmV4cHJl
c3Npb24ub3BlcmF0b3IpIDwgMCkgJiYKKyAgICAgICAgICAgICAgICAhaXNEaXJlY3RpdmUobm9k
ZSwgYW5jZXN0b3JzKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgb3IgZnVuY3Rpb24gY2FsbCBhbmQg
aW5zdGVhZCBzYXcgYW4gZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK307CisKK30se31dLDEyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGRlY2xhcmVkIGJ1dCB1bnVz
ZWQgdmFyaWFibGVzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICB2YXIgY29uZmlnID0geworICAgICAgICB2YXJzOiAiYWxsIiwKKyAgICAgICAgYXJn
czogImFmdGVyLXVzZWQiCisgICAgfTsKKworICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0pIHsK
KyAgICAgICAgaWYgKHR5cGVvZihjb250ZXh0Lm9wdGlvbnNbMF0pID09PSAic3RyaW5nIikgewor
ICAgICAgICAgICAgY29uZmlnLnZhcnMgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9uc1swXS52YXJz
IHx8IGNvbmZpZy52YXJzOworICAgICAgICAgICAgY29uZmlnLmFyZ3MgPSBjb250ZXh0Lm9wdGlv
bnNbMF0uYXJncyB8fCBjb25maWcuYXJnczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBN
RVNTQUdFID0gInt7bmFtZX19IGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQiOworCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtSZWZlcmVuY2V9IHJlZiAtIGFuIGVzY29wZSBSZWZlcmVuY2UKKyAg
ICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gcmVmZXJlbmNlIHJlcHJl
c2VudHMgYSByZWFkIG9wZXJhdGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUmVhZFJlZihy
ZWYpIHsKKyAgICAgICAgcmV0dXJuIHJlZi5pc1JlYWQoKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1Njb3BlfSBzY29wZSAtIGFuIGVzY29wZSBTY29wZSBvYmplY3QKKyAgICAg
KiBAcmV0dXJucyB7VmFyaWFibGVbXX0gbW9zdCBvZiB0aGUgbG9jYWwgdmFyaWFibGVzIHdpdGgg
bm8gcmVhZCByZWZlcmVuY2VzCisgICAgICovCisgICAgZnVuY3Rpb24gdW51c2VkTG9jYWxzKHNj
b3BlKSB7CisgICAgICAgIHZhciB1bnVzZWQgPSBbXTsKKyAgICAgICAgdmFyIHZhcmlhYmxlcyA9
IHNjb3BlLnZhcmlhYmxlczsKKyAgICAgICAgaWYgKHNjb3BlLnR5cGUgIT09ICJnbG9iYWwiKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhcmlhYmxlcy5sZW5ndGg7IGkgPCBs
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFt
ZXMKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIHNraXAgaW1wbGljaXQgImFyZ3VtZW50cyIgdmFyaWFibGUKKyAgICAgICAg
ICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiB2YXJpYWJsZXNbaV0ubmFt
ZSA9PT0gImFyZ3VtZW50cyIgJiYgdmFyaWFibGVzW2ldLmlkZW50aWZpZXJzLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB2YXJpYWJsZXNbaV0uZGVmc1swXS50eXBlOworICAg
ICAgICAgICAgICAgIC8vIHNraXAgY2F0Y2ggdmFyaWFibGVzCisgICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT09ICJDYXRjaENsYXVzZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlmICJhcmdzIiBvcHRpb24g
aXMgIm5vbmUiLCBza2lwIGFueSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBpZiAoY29uZmln
LmFyZ3MgPT09ICJub25lIiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIikgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
aWYgImFyZ3MiIG9wdGlvbiBpcyAiYWZ0ZXItdXNlZCIsIHNraXAgYWxsIGJ1dCB0aGUgbGFzdCBw
YXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFyZ3MgPT09ICJhZnRlci11c2Vk
IiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIiAmJiB2YXJpYWJsZXNbaV0uZGVmc1swXS5pbmRleCA8
IHZhcmlhYmxlc1tpXS5kZWZzWzBdLm5vZGUucGFyYW1zLmxlbmd0aCAtIDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZXNbaV0ucmVmZXJlbmNlcy5maWx0ZXIoaXNSZWFkUmVmKS5sZW5ndGggPT09
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2godmFyaWFibGVzW2ldKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFtdLmNvbmNhdC5hcHBseSh1bnVzZWQsIFtdLm1hcC5jYWxsKHNjb3BlLmNoaWxkU2NvcGVzLCB1
bnVzZWRMb2NhbHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6
IGZ1bmN0aW9uKHByb2dyYW1Ob2RlKSB7CisgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBj
b250ZXh0LmdldFNjb3BlKCk7CisgICAgICAgICAgICB2YXIgdW51c2VkID0gdW51c2VkTG9jYWxz
KGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhciBpLCBsOworCisgICAgICAgICAgICAvLyBk
ZXRlcm1pbmUgdW51c2VkIGdsb2JhbHMKKyAgICAgICAgICAgIGlmIChjb25maWcudmFycyA9PT0g
ImFsbCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdW5yZXNvbHZlZFJlZnMgPSBnbG9iYWxTY29w
ZS50aHJvdWdoLmZpbHRlcihpc1JlYWRSZWYpLm1hcChmdW5jdGlvbihyZWYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlZi5pZGVudGlmaWVyLm5hbWU7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGdsb2JhbFNjb3BlLnZhcmlhYmxl
cy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVucmVzb2x2
ZWRSZWZzLmluZGV4T2YoZ2xvYmFsU2NvcGUudmFyaWFibGVzW2ldLm5hbWUpIDwgMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2goZ2xvYmFsU2NvcGUudmFyaWFibGVzW2ld
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHVudXNlZC5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodW51c2VkW2ldLmVzbGludEV4cGxpY2l0R2xvYmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHByb2dyYW1Ob2RlLCBNRVNT
QUdFLCB1bnVzZWRbaV0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW51c2VkW2ldLmRl
ZnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh1bnVz
ZWRbaV0uaWRlbnRpZmllcnNbMF0sIE1FU1NBR0UsIHVudXNlZFtpXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTIy
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgdXNlIG9mIHZhcmlhYmxlcyBiZWZvcmUgdGhleSBhcmUgZGVmaW5lZAor
ICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgTk9fRlVOQyA9ICJu
b2Z1bmMiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIGZpbmREZWNsYXJhdGlv
bihuYW1lLCBzY29wZSkgeworICAgICAgICAvLyB0cnkgc2VhcmNoaW5nIGluIHRoZSBjdXJyZW50
IHNjb3BlIGZpcnN0CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2NvcGUudmFyaWFibGVz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjb3BlLnZhcmlhYmxlc1tp
XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLnZhcmlhYmxl
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBjaGVjayBpZiB0aGVy
ZSdzIHVwcGVyIHNjb3BlIGFuZCBjYWxsIHJlY3Vyc2l2bHkgdGlsbCB3ZSBmaW5kIHRoZSB2YXJp
YWJsZQorICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
RGVjbGFyYXRpb24obmFtZSwgc2NvcGUudXBwZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5n
ZXRTY29wZSgpOworICAgICAgICB2YXIgdHlwZU9wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXTsK
KworICAgICAgICBmdW5jdGlvbiBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgZGVj
bGFyYXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0eXBlT3B0aW9uICE9PSBOT19GVU5DIHx8IGRl
Y2xhcmF0aW9uLmRlZnNbMF0udHlwZSAhPT0gIkZ1bmN0aW9uTmFtZSIpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZGVjbGFyYXRpb24uaWRlbnRpZmllcnNbMF0ucmFuZ2VbMV0gPiByZWZlcmVuY2Uu
aWRlbnRpZmllci5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChyZWZlcmVuY2UuaWRlbnRpZmllciwgInt7YX19IHdhcyB1c2VkIGJlZm9yZSBpdCB3YXMgZGVm
aW5lZCIsIHthOiByZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lfSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNlcy5m
b3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkgeworICAgICAgICAgICAgLy8gaWYgdGhlIHJlZmVy
ZW5jZSBpcyByZXNvbHZlZCBjaGVjayBmb3IgZGVjbGFyYXRpb24gbG9jYXRpb24KKyAgICAgICAg
ICAgIC8vIGlmIG5vdCwgaXQgY291bGQgYmUgZnVuY3Rpb24gaW52b2NhdGlvbiwgdHJ5IHRvIGZp
bmQgbWFudWFsbHkKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2UucmVzb2x2ZWQgJiYgcmVmZXJl
bmNlLnJlc29sdmVkLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBj
aGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgcmVmZXJlbmNlLnJlc29sdmVkKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gZmlu
ZERlY2xhcmF0aW9uKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICAvLyBpZiB0aGVyZSdyZSBubyBpZGVudGlmaWVycywgdGhpcyBpcyBhIGdsb2JhbCBl
bnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbiAmJiBk
ZWNsYXJhdGlvbi5pZGVudGlmaWVycy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIGRlY2xhcmF0aW9uKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKKyAgICAgICAgIkZ1bmN0
aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9LHt9XSwxMjM6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlz
YWxsb3cgdXNlIG9mIHZvaWQgb3BlcmF0b3IuCisgKiBAYXV0aG9yIE1pa2UgU2lkb3JvdgorICog
QGNvcHlyaWdodCAyMDE0IE1pa2UgU2lkb3Jvdi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiVW5hcnlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3Ig
PT09ICJ2b2lkIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBl
Y3RlZCAndW5kZWZpbmVkJyBhbmQgaW5zdGVhZCBzYXcgJ3ZvaWQnLiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTI0OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRoYXQgd2FybnMg
YWJvdXQgdXNlZCB3YXJuaW5nIGNvbW1lbnRzCisgKiBAYXV0aG9yIEFsZXhhbmRlciBTY2htaWR0
IDxodHRwczovL2dpdGh1Yi5jb20vbHhhbmRlcnM+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHZhciBjb25maWd1cmF0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAg
ICB3YXJuaW5nVGVybXMgPSBjb25maWd1cmF0aW9uLnRlcm1zIHx8IFsidG9kbyIsICJmaXhtZSIs
ICJ4eHgiXSwKKyAgICAgICAgbG9jYXRpb24gPSBjb25maWd1cmF0aW9uLmxvY2F0aW9uIHx8ICJz
dGFydCI7CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIHNwZWNpZmllZCBjb21tZW50IGZv
ciBiZWluZyBjaGVja2VkLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50IFRoZSBjb21t
ZW50IHRvIHByZXBhcmUuCisgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIHNwZWNpZmllZCBj
b21tZW50IHByZXBhcmVkIGZvciBiZWluZyBjaGVja2VkLgorICAgICAqLworICAgIGZ1bmN0aW9u
IHByZXBhcmVDb21tZW50Rm9yQ2hlY2tpbmcoY29tbWVudCkgeworICAgICAgICB2YXIgY29tbWVu
dFRvQ2hlY2s7CisKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50LnRvTG93ZXJDYXNl
KCk7CisgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gY29tbWVudFRvQ2hlY2sudHJpbSgpOworCisg
ICAgICAgIHJldHVybiBjb21tZW50VG9DaGVjazsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHNwZWNpZmllZCBjb21tZW50IHN0YXJ0cyB3aXRoIGEgc3BlY2lmaWVkIHRl
cm0uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnRUb0NoZWNrIFRoZSBjb21tZW50IHRv
IGNoZWNrLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsb3dlckNhc2VUZXJtIFRoZSB0ZXJtIHRv
IHNlYXJjaCBmb3IuCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbW1l
bnQgc3RhcnRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGVybSwgZWxzZSBmYWxzZS4KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2Vy
Q2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93ZXJD
YXNlVGVybSkgPT09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBz
cGVjaWZpZWQgY29tbWVudCBjb250YWlucyBhIHNwZWNpZmllZCB0ZXJtIGF0IGFueSBsb2NhdGlv
bi4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNvbW1lbnQgdG8g
Y2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhlIHRlcm0gdG8g
c2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGVybSB3
YXMgY29udGFpbmVkIGluIHRoZSBjb21tZW50LCBlbHNlIGZhbHNlLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGNvbW1lbnRDb250YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0p
IHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93ZXJDYXNlVGVybSkg
IT09IC0xOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBzcGVjaWZpZWQg
Y29tbWVudCBmb3IgbWF0Y2hlcyBvZiB0aGUgY29uZmlndXJlZCB3YXJuaW5nIHRlcm1zIGFuZCBy
ZXR1cm5zIHRoZSBtYXRjaGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50IFRoZSBj
b21tZW50IHdoaWNoIGlzIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge0FycmF5fSBBbGwgbWF0
Y2hlZCB3YXJuaW5nIHRlcm1zIGZvciB0aGlzIGNvbW1lbnQuCisgICAgICovCisgICAgZnVuY3Rp
b24gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0oY29tbWVudCkgeworICAgICAgICB2YXIgbWF0
Y2hlcyA9IFtdOworCisgICAgICAgIHdhcm5pbmdUZXJtcy5mb3JFYWNoKGZ1bmN0aW9uICh0ZXJt
KSB7CisgICAgICAgICAgICB2YXIgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKSwK
KyAgICAgICAgICAgICAgICBjb21tZW50VG9DaGVjayA9IHByZXBhcmVDb21tZW50Rm9yQ2hlY2tp
bmcoY29tbWVudCk7CisKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gInN0YXJ0Iikgewor
ICAgICAgICAgICAgICAgIGlmIChjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRvQ2hlY2ss
IGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCh0ZXJt
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0aW9uID09
PSAiYW55d2hlcmUiKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRDb250YWluc1Rlcm0o
Y29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMucHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENoZWNrcyB0aGUgc3BlY2lmaWVkIG5vZGUgZm9yIG1hdGNoaW5nIHdhcm5pbmcgY29tbWVu
dHMgYW5kIHJlcG9ydHMgdGhlbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFT
VCBub2RlIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5lZC4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NvbW1lbnQobm9kZSkgeworICAgICAgICB2YXIg
bWF0Y2hlcyA9IGNvbW1lbnRDb250YWluc1dhcm5pbmdUZXJtKG5vZGUudmFsdWUpOworCisgICAg
ICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlZFRlcm0pIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkICIgKyBtYXRjaGVkVGVybSArICIgY29t
bWVudC4iKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkJs
b2NrQ29tbWVudCI6IGNoZWNrQ29tbWVudCwKKyAgICAgICAgIkxpbmVDb21tZW50IjogY2hlY2tD
b21tZW50CisgICAgfTsKK307CisKK30se31dLDEyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB3aXRo
IHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVk
IHVzZSBvZiAnd2l0aCcgc3RhdGVtZW50LiIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKwor
fSx7fV0sMTI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd3JhcHBpbmcgbm9uZS1pZmZlIGluIHBhcmVucworICog
QGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAg
ICAgICAgICAgIHByZXZpb3VzVG9rZW4sIG5leHRUb2tlbjsKKworICAgICAgICAgICAgaWYgKCEv
Q2FsbEV4cHJlc3Npb258TmV3RXhwcmVzc2lvbi8udGVzdChhbmNlc3RvcnMucG9wKCkudHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9y
ZShub2RlKTsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0
ZXIobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIo
IiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIpIikgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24gbGl0ZXJhbHMgaW4g
cGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEyNzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3Vy
ZSB0aGUgdXNlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBmdW5jdGlvblN0YWNrID0gW107CisKKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goZmFsc2UpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGVuZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBvcCgpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGVjbGFyYXRpb25zKG5vZGUpIHsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkNvbWJpbmUgdGhpcyB3aXRoIHRoZSBwcmV2aW91cyAndmFy
JyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdW5jdGlvblN0
YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gPSB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IHN0YXJ0RnVu
Y3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisKKyAgICAgICAgIlZh
cmlhYmxlRGVjbGFyYXRpb24iOiBjaGVja0RlY2xhcmF0aW9ucywKKworICAgICAgICAiUHJvZ3Jh
bTpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQi
OiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVu
Y3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwxMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1cmUgYmxhbmsg
bGluZXMgd2l0aGluIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNrIDxodHRwczov
L2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFzIFNjaHJlY2su
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgdmFyIHJlcXVp
cmVQYWRkaW5nID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOworCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBoYXMgYSBibGFu
ayBsaW5lIGJlZm9yZSBpdHMgZmlyc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBzdGFydHMgd2l0aCBhIGJsYW5r
IGxpbmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5v
ZGUpIHsKKyAgICAgICAgdmFyIGJsb2NrU3RhcnQgPSBub2RlLmxvYy5zdGFydC5saW5lLAorICAg
ICAgICAgICAgZmlyc3QgPSBub2RlLmJvZHlbMF0sCisgICAgICAgICAgICBmaXJzdExpbmUgPSBm
aXJzdC5sb2Muc3RhcnQubGluZSwKKyAgICAgICAgICAgIGV4cGVjdGVkRmlyc3RMaW5lID0gYmxv
Y2tTdGFydCArIDIsCisgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGZpcnN0KS5sZWFkaW5nOworCisgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgZmlyc3RMaW5lID0gbGVhZGluZ0NvbW1lbnRzWzBdLmxv
Yy5zdGFydC5saW5lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cGVjdGVkRmlyc3RM
aW5lIDw9IGZpcnN0TGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhl
IGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBhIGJsYW5rIGxpbmUgYWZ0ZXIgaXRzIGxh
c3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2Rl
IG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIg
b3Igbm90IHRoZSBibG9jayBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzTm9uRW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKSB7CisgICAgICAgIHZhciBi
bG9ja0VuZCA9IG5vZGUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgbGFzdCA9IG5vZGUuYm9k
eVtub2RlLmJvZHkubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICBsYXN0TGluZSA9IGxhc3QubG9j
LmVuZC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRMYXN0TGluZSA9IGJsb2NrRW5kIC0gMiwK
KyAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENvbW1lbnRzKGxhc3Qp
LnRyYWlsaW5nOworCisgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgIGxhc3RMaW5lID0gdHJhaWxpbmdDb21tZW50c1t0cmFpbGluZ0NvbW1lbnRz
Lmxlbmd0aCAtIDFdLmxvYy5lbmQubGluZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBs
YXN0TGluZSA8PSBleHBlY3RlZExhc3RMaW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENo
ZWNrcyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIEFORCBlbmRzIHdp
dGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5v
ZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhl
ciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkgeworICAgICAg
ICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpICYmIGlzTm9uRW1wdHlCbG9j
a0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYg
dGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIHN0YXJ0cyBPUiBlbmRzIHdpdGggYSBibGFu
ayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBC
bG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qg
dGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBoYXNOb25FbXB0eUJsb2NrRXh0cmFQYWRkaW5nKG5vZGUpIHsKKyAgICAgICAg
cmV0dXJuIGlzTm9uRW1wdHlCbG9ja1RvcFBhZGRlZChub2RlKSB8fCBpc05vbkVtcHR5QmxvY2tC
b3R0b21QYWRkZWQobm9kZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBn
aXZlbiBCbG9ja1N0YXRlbWVudCBub2RlIHRvIGJlIHBhZGRlZCBpZiB0aGUgYmxvY2sgaXMgbm90
IGVtcHR5LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBC
bG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVkLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGNoZWNrUGFkZGluZyhub2RlKSB7CisgICAgICAgIGlmIChub2RlLmJv
ZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVQYWRkaW5nKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3QgYmUgcGFkZGVkIGJ5
IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRpbmcobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3Qg
bm90IGJlIHBhZGRlZCBieSBibGFuayBsaW5lcy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmxv
Y2tTdGF0ZW1lbnQiOiBjaGVja1BhZGRpbmcKKyAgICB9OworCit9OworCit9LHt9XSwxMjk6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyBub24tcXVvdGVkIHByb3BlcnR5IG5hbWVzIGluIG9iamVjdCBsaXRlcmFscy4K
KyAqIEBhdXRob3IgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4KKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCit2YXIgZXNwcmltYSA9IHJlcXVpcmUoImVzcHJpbWEiKTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICB2YXIgTU9ERSA9IGNvbnRleHQub3B0aW9uc1swXTsKKworICAgIHN3aXRjaCAoTU9E
RSkgeworCisgICAgICAgIGNhc2UgImFzLW5lZWRlZCI6CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIFByb3BlcnR5OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBrZXkgPSBub2RlLmtleTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYW55IHF1b3RlZCBwcm9wZXJ0eSBuYW1lcyByZXF1aXJlZCBxdW90aW5nCisgICAgICAg
ICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBrZXkudmFs
dWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBlc3ByaW1hLnRva2VuaXplKGtleS52
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggIT09
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9
IHRva2Vuc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09ICJJZGVudGlmaWVyIiB8fCB0
LnR5cGUgPT09ICJOdWxsIiB8fCB0LnR5cGUgPT09ICJCb29sZWFuIiB8fCB0LnR5cGUgPT09ICJO
dW1lcmljIiAmJiAiIiArICt0LnZhbHVlID09PSB0LnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJpbHkgcXVvdGVkIHBy
b3BlcnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYWxsIHByb3Bl
cnR5IG5hbWVzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50eXBlICE9
PSAiTGl0ZXJhbCIgfHwgdHlwZW9mIGtleS52YWx1ZSAhPT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbnF1b3RlZCBwcm9wZXJ0eSBg
e3tuYW1lfX1gIGZvdW5kLiIsIGtleSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHsiZXNwcmltYSI6
Nn1dLDEzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgQSBydWxlIHRvIGNob29zZSBiZXR3ZWVuIHNpbmdsZSBhbmQgZG91YmxlIHF1b3Rl
IG1hcmtzCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29t
Lz4sIEJyYW5kb24gUGF5dG9uCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENv
bnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFFVT1RFX1NFVFRJTkdTID0g
eworICAgICJkb3VibGUiOiB7CisgICAgICAgIHF1b3RlOiAiXCIiLAorICAgICAgICBhbHRlcm5h
dGVRdW90ZTogIiciLAorICAgICAgICBkZXNjcmlwdGlvbjogImRvdWJsZXF1b3RlIgorICAgIH0s
CisgICAgInNpbmdsZSI6IHsKKyAgICAgICAgcXVvdGU6ICInIiwKKyAgICAgICAgYWx0ZXJuYXRl
UXVvdGU6ICJcIiIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAic2luZ2xlcXVvdGUiCisgICAgfQor
fTsKKwordmFyIEFWT0lEX0VTQ0FQRSA9ICJhdm9pZC1lc2NhcGUiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoYXQgYSBzdHJpbmcgcGFzc2VkIGluIGlz
IHN1cnJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIKKyAgICAgKiBAcGFyYW0gIHtz
dHJpbmd9IHZhbCBUaGUgdGV4dCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNo
YXJhY3RlciBUaGUgY2hhcmFjdGVyIHRvIHNlZSBpZiBpdCdzIHN1cnJvdW5kZWQgYnkuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRleHQgaXMgc3Vycm91bmRlZCBieSB0
aGUgY2hhcmFjdGVyLCBmYWxzZSBpZiBub3QuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTdXJy
b3VuZGVkQnkodmFsLCBjaGFyYWN0ZXIpIHsKKyAgICAgICAgcmV0dXJuIHZhbFswXSA9PT0gY2hh
cmFjdGVyICYmIHZhbFt2YWwubGVuZ3RoIC0gMV0gPT09IGNoYXJhY3RlcjsKKyAgICB9CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgdmFyIHZhbCA9IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3VmFsID0gbm9k
ZS5yYXcsCisgICAgICAgICAgICAgICAgcXVvdGVPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0s
CisgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBRVU9URV9TRVRUSU5HU1txdW90ZU9wdGlvbl0s
CisgICAgICAgICAgICAgICAgYXZvaWRFc2NhcGUgPSBjb250ZXh0Lm9wdGlvbnNbMV0gPT09IEFW
T0lEX0VTQ0FQRSwKKyAgICAgICAgICAgICAgICBpc1ZhbGlkOworCisgICAgICAgICAgICBpZiAo
c2V0dGluZ3MgJiYgdHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICBp
c1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5xdW90ZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgYXZvaWRFc2NhcGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaXNWYWxpZCA9IGlzU3Vycm91bmRlZEJ5KHJhd1ZhbCwgc2V0dGluZ3MuYWx0ZXJuYXRl
UXVvdGUpICYmIHJhd1ZhbC5pbmRleE9mKHNldHRpbmdzLnF1b3RlKSA+PSAwOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU3RyaW5ncyBtdXN0IHVzZSAiICsgc2V0dGlu
Z3MuZGVzY3JpcHRpb24gKyAiLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEzMTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBv
ZiBwYXJzZUludCB3aXRob3V0IGEgcmFkaXggYXJndW1lbnQKKyAqIEBhdXRob3IgSmFtZXMgQWxs
YXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAi
Q2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciByYWRp
eDsKKworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJwYXJzZUludCIpIHsK
KworICAgICAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPCAyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHJhZGl4IHBhcmFt
ZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAg
IHJhZGl4ID0gbm9kZS5hcmd1bWVudHNbMV07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZG9u
J3QgYWxsb3cgbm9uLW51bWVyaWMgbGl0ZXJhbHMgb3IgdW5kZWZpbmVkCisgICAgICAgICAgICAg
ICAgICAgIGlmICgocmFkaXgudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiByYWRpeC52YWx1
ZSAhPT0gIm51bWJlciIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocmFkaXgudHlwZSA9
PT0gIklkZW50aWZpZXIiICYmIHJhZGl4Lm5hbWUgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAg
ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJJbnZhbGlkIHJhZGl4IHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sMTMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbWlzc2luZyBzZW1pY29sb25zLgorICogQGF1
dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBPUFRfT1VU
X1BBVFRFUk4gPSAvW1xbXChcL1wrXC1dLzsKKworICAgIHZhciBhbHdheXMgPSBjb250ZXh0Lm9w
dGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
SGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNr
cyBhIG5vZGUgdG8gc2VlIGlmIGl0J3MgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24uCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2VtaWNvbG9uKG5vZGUpIHsK
KyAgICAgICAgdmFyIGxhc3RUb2tlbiA9IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5vZGUpLAorICAg
ICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworCisgICAg
ICAgIGlmIChhbHdheXMpIHsKKyAgICAgICAgICAgIGlmIChsYXN0VG9rZW4udHlwZSAhPT0gIlB1
bmN0dWF0b3IiIHx8IGxhc3RUb2tlbi52YWx1ZSAhPT0gIjsiKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgbGFzdFRva2VuLmxvYy5lbmQsICJNaXNzaW5nIHNlbWljb2xv
bi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChs
YXN0VG9rZW4udHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmIGxhc3RUb2tlbi52YWx1ZSA9PT0gIjsi
KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIW5leHRUb2tlbiB8fCAhKE9QVF9PVVRfUEFUVEVS
Ti50ZXN0KG5leHRUb2tlbi52YWx1ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsIG5vZGUubG9jLmVuZCwgIkV4dHJhIHNlbWljb2xvbi4iKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlcmUncyBhIHNlbWljb2xvbiBhZnRlciBhIHZhcmlh
YmxlIGRlY2xhcmF0aW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0
byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkgeworCisgICAgICAg
IHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgcGFy
ZW50SW5kZXggPSBhbmNlc3RvcnMubGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIHBhcmVudCA9IGFu
Y2VzdG9yc1twYXJlbnRJbmRleF07CisKKyAgICAgICAgaWYgKChwYXJlbnQudHlwZSAhPT0gIkZv
clN0YXRlbWVudCIgfHwgcGFyZW50LmluaXQgIT09IG5vZGUpICYmCisgICAgICAgICAgICAocGFy
ZW50LnR5cGUgIT09ICJGb3JJblN0YXRlbWVudCIgfHwgcGFyZW50LmxlZnQgIT09IG5vZGUpCisg
ICAgICAgICkgeworICAgICAgICAgICAgY2hlY2tGb3JTZW1pY29sb24obm9kZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRpb24iOiBjaGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVjbGFyYXRpb24s
CisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAg
ICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkRlYnVn
Z2VyU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJCcmVha1N0YXRlbWVu
dCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiQ29udGludWVTdGF0ZW1lbnQiOiBjaGVj
a0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkVtcHR5U3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgICAgICAgIHZhciBuZXh0VG9rZW47CisKKyAgICAgICAgICAgIGlmICghYWx3YXlz
KSB7CisgICAgICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5v
ZGUpIHx8IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5vZGUpOworCisgICAgICAgICAgICAgICAgaWYg
KCEoT1BUX09VVF9QQVRURVJOLnRlc3QobmV4dFRva2VuLnZhbHVlKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4dHJhIHNlbWljb2xvbi4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMTMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIHJlcXVpcmUgc29ydGluZyBvZiB2YXJpYWJsZXMgd2l0aGlu
IGEgc2luZ2xlIFZhcmlhYmxlIERlY2xhcmF0aW9uIGJsb2NrCisgKiBAYXV0aG9yIElseWEgVm9s
b2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBj
b250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisgICAgICAgIGlnbm9yZUNhc2UgPSBjb25maWd1cmF0
aW9uLmlnbm9yZUNhc2UgfHwgZmFsc2U7CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFi
bGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIG5vZGUuZGVjbGFy
YXRpb25zLnJlZHVjZShmdW5jdGlvbihtZW1vLCBkZWNsKSB7CisgICAgICAgICAgICAgICAgdmFy
IGxhc3RWYXJpYWJsZU5hbWUgPSBtZW1vLmlkLm5hbWUsCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlblZhcmlhYmxlTmFtZSA9IGRlY2wuaWQubmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChp
Z25vcmVDYXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RWYXJpYWJsZU5hbWUgPSBsYXN0
VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlblZh
cmlhYmxlTmFtZSA9IGN1cnJlblZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW5WYXJpYWJsZU5hbWUgPCBsYXN0
VmFyaWFibGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGRlY2ws
ICJWYXJpYWJsZXMgd2l0aGluIHRoZSBzYW1lIGRlY2xhcmF0aW9uIGJsb2NrIHNob3VsZCBiZSBz
b3J0ZWQgYWxwaGFiZXRpY2FsbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW87
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRl
Y2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgbm9kZS5kZWNsYXJhdGlvbnNb
MF0pOworICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDEzNDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNl
IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAqIEBhdXRob3Ig
TmljayBGaXNoZXIKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vIHVubGVzcyB0aGUgZmlyc3Qg
b3B0aW9uIGlzIGAibmV2ZXIiYCwgdGhlbiBhIHNwYWNlIGlzIHJlcXVpcmVkCisgICAgdmFyIHJl
cXVpcmVzU3BhY2UgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciIsCisgICAgICAgIGNv
bmZpZyA9IGNvbnRleHQub3B0aW9uc1sxXSB8fCB7IGNoZWNrRnVuY3Rpb25LZXl3b3JkOiBmYWxz
ZSB9OworCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIHNlcGFyYXRpb24gb2YgdHdvIGFk
amFjZW50IHRva2VucyBtZWV0cyB0aGUgc3BhY2luZyBydWxlcywgYW5kIHJlcG9ydCBhIHByb2Js
ZW0gaWYgbm90LgorICAgICAqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlICBUaGUgbm9k
ZSB0byB3aGljaCB0aGUgcG90ZW50aWFsIHByb2JsZW0gYmVsb25ncy4KKyAgICAgKiBAcGFyYW0g
e1Rva2VufSBsZWZ0ICAgIFRoZSBmaXJzdCB0b2tlbi4KKyAgICAgKiBAcGFyYW0ge1Rva2VufSBy
aWdodCAgIFRoZSBzZWNvbmQgdG9rZW4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjaGVja1Rva2Vucyhub2RlLCBsZWZ0LCByaWdodCkgeworICAgICAgICB2
YXIgaGFzU3BhY2UgPSBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF0sCisgICAgICAgICAg
ICB2YWx1ZSA9IGxlZnQudmFsdWU7CisKKyAgICAgICAgaWYgKGhhc1NwYWNlICE9PSByZXF1aXJl
c1NwYWNlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiS2V5d29yZCBcInt7
dmFsdWV9fVwiIG11c3Qge3tub3R9fWJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIiwgeworICAg
ICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBub3Q6IHJlcXVpcmVz
U3BhY2UgPyAiIiA6ICJub3QgIgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gbm9kZSAoYGlmYCwgYGZvcmAsIGB3
aGlsZWAsIGV0YyksIGhhcyB0aGUgY29ycmVjdCBzcGFjaW5nIGFmdGVyIGl0LgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7
dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIHZhciB0
b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpOworICAgICAgICBjaGVja1Rv
a2Vucyhub2RlLCB0b2tlbnNbMF0sIHRva2Vuc1sxXSk7CisgICAgfQorCisgICAgcmV0dXJuIHsK
KyAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGNo
ZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGBlbHNlYAorICAgICAgICAgICAg
aWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVu
dCIpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLmFsdGVybmF0ZSwgY29udGV4
dC5nZXRUb2tlbkJlZm9yZShub2RlLmFsdGVybmF0ZSksIGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihu
b2RlLmFsdGVybmF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9y
U3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJGb3JPZlN0YXRlbWVudCI6IGNoZWNrLAorICAg
ICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIldoaWxlU3RhdGVtZW50Ijog
Y2hlY2ssCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGB3aGlsZWAK
KyAgICAgICAgICAgIHZhciB3aGlsZVRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5v
ZGUudGVzdCwgMik7CisgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLCB3aGlsZVRva2Vuc1sw
XSwgd2hpbGVUb2tlbnNbMV0pOworICAgICAgICB9LAorICAgICAgICAiU3dpdGNoU3RhdGVtZW50
IjogY2hlY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUgYGZpbmFsbHlg
CisgICAgICAgICAgICBpZiAobm9kZS5maW5hbGl6ZXIpIHsKKyAgICAgICAgICAgICAgICBjaGVj
a1Rva2Vucyhub2RlLmZpbmFsaXplciwgY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLmZpbmFs
aXplciksIGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmZpbmFsaXplcikpOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICAiQ2F0Y2hTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAg
ICAgIldpdGhTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6
IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoY29uZmlnLmNoZWNrRnVuY3Rpb25L
ZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTM1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZW5zdXJlIHdoaXRl
c3BhY2UgYmVmb3JlIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNrIDxodHRwczov
L2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFzIFNjaHJlY2su
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgdmFyIHJlcXVp
cmVTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAgIC8qKgorICAg
ICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRl
c3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxl
ZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdo
dCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90
IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8
IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hl
dGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxp
bmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAg
ICAgICByZXR1cm4gbGVmdC5sb2Muc3RhcnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7
CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBnaXZlbiBCbG9ja1N0YXRlbWVu
dCBub2RlIGhhcyBhIHByZWNlZGluZyBzcGFjZSBpZiBpdCBkb2VzbuKAmXQgc3RhcnQgb24gYSBu
ZXcgbGluZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEg
QmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5lZC4KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBjaGVja1ByZWNlZGluZ1NwYWNlKG5vZGUpIHsKKyAgICAgICAgdmFy
IHByZWNlZGluZ1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAg
ICAgIGhhc1NwYWNlOworCisgICAgICAgIGlmIChwcmVjZWRpbmdUb2tlbiAmJiBpc1NhbWVMaW5l
KHByZWNlZGluZ1Rva2VuLCBub2RlKSkgeworICAgICAgICAgICAgaGFzU3BhY2UgPSBpc1NwYWNl
ZChwcmVjZWRpbmdUb2tlbiwgbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChyZXF1aXJlU3BhY2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHNwYWNlIGJlZm9yZSBvcGVuaW5nIGJyYWNl
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGhhc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIHNwYWNlIGJlZm9yZSBvcGVuaW5nIGJyYWNlLiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB7CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGNoZWNrUHJlY2VkaW5nU3BhY2UKKyAgICB9
OworCit9OworCit9LHt9XSwxMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBvciBlbmZvcmNlcyBzcGFjZXMgaW5zaWRl
IG9mIGJyYWNrZXRzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKiBAY29weXJp
Z2h0IDIwMTQgQnJhbmR5biBCZW5uZXR0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQGNvcHly
aWdodCAyMDE0IE1pY2hhZWwgRmljYXJyYS4gTm8gcmlnaHRzIHJlc2VydmVkLgorICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNwYWNlZDogY29udGV4dC5v
cHRpb25zWzBdID09PSAiYWx3YXlzIiwKKyAgICAgICAgc2luZ2xlRWxlbWVudEV4Y2VwdGlvbjog
Y29udGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uc2luZ2xl
VmFsdWUsCisgICAgICAgIG9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4dC5vcHRpb25z
WzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0ub2JqZWN0c0luQXJyYXlzLAorICAg
ICAgICBhcnJheXNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFdICE9IG51bGwg
JiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uYXJyYXlzSW5BcnJheXMsCisgICAgICAgIHByb3BlcnR5
TmFtZTogY29udGV4dC5vcHRpb25zWzFdID09IG51bGwgfHwgY29udGV4dC5vcHRpb25zWzFdLnBy
b3BlcnR5TmFtZSA9PSBudWxsIHx8ICEhY29udGV4dC5vcHRpb25zWzFdLnByb3BlcnR5TmFtZQor
ICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0
d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICog
QHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4g
dGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkg
eworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAgIH0K
KworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5z
IGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhl
IGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSBy
aWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Ig
bm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgICovCisgICAgZnVuY3Rp
b24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5sb2Muc3Rh
cnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAg
KiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgc3BhY2UgYWZ0ZXIgdGhlIGZpcnN0
IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byByZXBvcnQg
aW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICogQHBhcmFtIHtPYmplY3RbXX0gdG9rZW5z
IC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5nLgorICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUs
IHRva2VucykgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNbMF0ubG9jLnN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlIGFmdGVy
ICciICsgdG9rZW5zWzBdLnZhbHVlICsgIiciKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJl
cG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzcGFjZSBiZWZvcmUgdGhlIGxhc3QgdG9r
ZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0
aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFyYW0ge09iamVjdFtdfSB0b2tlbnMgLSBU
aGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCisgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5z
KSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0g
MV0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNw
YWNlIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udmFsdWUgKyAiJyIpOwor
ICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIHNw
YWNlIGFmdGVyIHRoZSBmaXJzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0g
VGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJh
bSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2lu
Zy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0UmVx
dWlyZWRCZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgdG9rZW5zWzBdLmxvYy5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgIkEgc3Bh
Y2UgaXMgcmVxdWlyZWQgYWZ0ZXIgJyIgKyB0b2tlbnNbMF0udmFsdWUgKyAiJyIpOworICAgIH0K
KworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIHNwYWNlIGJl
Zm9yZSB0aGUgbGFzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5v
ZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJhbSB7T2Jq
ZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4KKyAg
ICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0UmVxdWlyZWRF
bmRpbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAg
ICJBIHNwYWNlIGlzIHJlcXVpcmVkIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0g
MV0udmFsdWUgKyAiJyIpOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgTWVtYmVyRXhwcmVzc2lvbjogb3B0aW9ucy5wcm9wZXJ0eU5hbWUgPyBmdW5jdGlvbiBj
aGVja01lbWJlcihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5jb21wdXRlZCkgeworICAg
ICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2RlLnByb3BlcnR5
LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB2YXIgdG9rZW5BID0gdG9rZW5zWzBdLCB0b2tlbkIg
PSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMu
bGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAg
ICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9r
ZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNwYWNlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikg
JiYgaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2Vk
KHRva2VuQywgdG9rZW5EKSAmJiBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9r
ZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkEsIHRva2Vu
QikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNl
KG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IDogZnVuY3Rpb24oKSB7fSwKKworICAgICAg
ICBBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2Rl
KTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9IHRva2Vuc1sx
XSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdLCB0
b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworCisgICAgICAgICAgICB2YXIgb3Bl
bmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgPQorICAgICAgICAgICAgICAgIG9wdGlvbnMub2JqZWN0
c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQi52YWx1ZSA9PT0gInsiIHx8CisgICAgICAgICAg
ICAgICAgb3B0aW9ucy5hcnJheXNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkIudmFsdWUgPT09
ICJbIiB8fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuc2luZ2xlRWxlbWVudEV4Y2VwdGlvbiAm
JiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMQorICAgICAgICAgICAgICAgID8gIW9wdGlvbnMu
c3BhY2VkIDogb3B0aW9ucy5zcGFjZWQ7CisKKyAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tl
dE11c3RCZVNwYWNlZCA9CisgICAgICAgICAgICAgICAgb3B0aW9ucy5vYmplY3RzSW5BcnJheXNF
eGNlcHRpb24gJiYgdG9rZW5DLnZhbHVlID09PSAifSIgfHwKKyAgICAgICAgICAgICAgICBvcHRp
b25zLmFycmF5c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQy52YWx1ZSA9PT0gIl0iIHx8Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucy5zaW5nbGVFbGVtZW50RXhjZXB0aW9uICYmIG5vZGUuZWxl
bWVudHMubGVuZ3RoID09PSAxCisgICAgICAgICAgICAgICAgPyAhb3B0aW9ucy5zcGFjZWQgOiBv
cHRpb25zLnNwYWNlZDsKKworICAgICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tl
bkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZW5pbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmICFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdTcGFjZShub2Rl
LCB0b2tlbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wZW5pbmdCcmFja2V0TXVz
dEJlU3BhY2VkICYmIGlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChjbG9zaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiAh
aXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJl
cXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCFjbG9zaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiBpc1NwYWNlZCh0b2tlbkMsIHRva2Vu
RCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tl
bnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAg
ICAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vu
cyhub2RlKTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9IHRv
a2Vuc1sxXSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAt
IDJdLCB0b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYg
KGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3BhY2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tl
bkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkRW5k
aW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkEs
IHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5nU3Bh
Y2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
IH07CisKK307CisKK30se31dLDEzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVuZm9yY2VzIHNwYWNlcyBpbnNp
ZGUgb2YgcGFyZW50aGVzZXMuCisgKiBAYXV0aG9yIEpvbmF0aGFuIFJhamF2dW9yaQorICogQGNv
cHlyaWdodCAyMDE0IEpvbmF0aGFuIFJhamF2dW9yaS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
LworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBSRSwgTUVTU0FHRTsKKworICAgIGlmIChjb250ZXh0
Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiKSB7CisgICAgICAgIFJFID0gL1woW14gXCldfFteIFwo
XVwpL21nOworICAgICAgICBNRVNTQUdFID0gIlRoZXJlIG11c3QgYmUgYSBzcGFjZSBpbnNpZGUg
dGhpcyBwYXJlbi4iOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFID0gL1woIHwgXCkvbWc7Cisg
ICAgICAgIE1FU1NBR0UgPSAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlcyBpbnNpZGUgdGhpcyBw
YXJlbi4iOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBl
cnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgc2tpcFJhbmdlcyA9IFtdOwor
CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgcmFuZ2Ugb2YgYSBub2RlIHRvIHRoZSBzZXQgdG8g
YmUgc2tpcHBlZCB3aGVuIGNoZWNraW5nIHBhcmVucworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSBUaGUgbm9kZSB0byBza2lwCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHBy
aXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhZGRTa2lwUmFuZ2Uobm9kZSkgeworICAgICAg
ICBza2lwUmFuZ2VzLnB1c2gobm9kZS5yYW5nZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
U29ydHMgdGhlIHNraXBSYW5nZXMgYXJyYXkuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzaG91bGRT
a2lwCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBzb3J0U2tpcFJhbmdlcygpIHsKKyAgICAgICAgc2tpcFJhbmdlcy5zb3J0KGZ1
bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF07CisgICAgICAg
IH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIGNlcnRhaW4gcG9zaXRp
b24gaW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc2tpcHBlZAorICAgICAqIEBwYXJhbSB7TnVtYmVy
fSBwb3MgVGhlIDAtYmFzZWQgaW5kZXggaW4gdGhlIHNvdXJjZQorICAgICAqIEByZXR1cm5zIHti
b29sZWFufSB3aGV0aGVyIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgc2tpcHBlZAorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gc2hvdWxkU2tpcChwb3MpIHsKKyAgICAgICAg
dmFyIGksIGxlbiwgcmFuZ2U7CisgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHNraXBSYW5nZXMu
bGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgIHJhbmdlID0gc2tpcFJhbmdl
c1tpXTsKKyAgICAgICAgICAgIGlmIChwb3MgPCByYW5nZVswXSkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPCByYW5nZVsxXSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
UHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAg
ICAiUHJvZ3JhbTpleGl0IjogZnVuY3Rpb24gY2hlY2tQYXJlblNwYWNlcyhub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBtYXRjaCwKKyAgICAgICAgICAgICAgICBuZXh0TGluZSwKKyAgICAgICAg
ICAgICAgICBjb2x1bW4sCisgICAgICAgICAgICAgICAgbGluZSA9IDEsCisgICAgICAgICAgICAg
ICAgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSwKKyAgICAgICAgICAgICAgICBwb3MgPSAw
OworCisgICAgICAgICAgICBzb3J0U2tpcFJhbmdlcygpOworCisgICAgICAgICAgICB3aGlsZSAo
KG1hdGNoID0gUkUuZXhlYyhzb3VyY2UpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UuY2hhckF0KG1hdGNoLmluZGV4KSAhPT0gIigiKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE1hdGNoZWQgYSBjbG9zaW5nIHBhcmVuIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2guaW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIXNob3VsZFNraXAobWF0Y2guaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlICgobmV4dExpbmUgPSBzb3VyY2UuaW5kZXhPZigiXG4iLCBwb3MpKSAhPT0gLTEgJiYgbmV4
dExpbmUgPCBtYXRjaC5pbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gbmV4
dExpbmUgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAxOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1hdGNoLmluZGV4IC0g
cG9zOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHsgbGluZTog
bGluZSwgY29sdW1uOiBjb2x1bW4gfSwgTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgIH0sCisKKworICAgICAgICAvLyBUaGVzZSBub2RlcyBjYW4g
Y29udGFpbiBwYXJlbnRoZXNlcyB0aGF0IHRoaXMgcnVsZSBkb2Vzbid0IGNhcmUgYWJvdXQKKwor
ICAgICAgICBMaW5lQ29tbWVudDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIEJsb2NrQ29tbWVu
dDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIExpdGVyYWw6IGFkZFNraXBSYW5nZQorCisgICAg
fTsKKworfTsKKworfSx7fV0sMTM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBhcm91bmQgaW5maXggb3BlcmF0
b3JzCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
dmFyIE9QRVJBVE9SUyA9IFsKKyAgICAgICAgIioiLCAiLyIsICIlIiwgIisiLCAiLSIsICI8PCIs
ICI+PiIsICI+Pj4iLCAiPCIsICI8PSIsICI+IiwgIj49IiwgImluIiwKKyAgICAgICAgImluc3Rh
bmNlb2YiLCAiPT0iLCAiIT0iLCAiPT09IiwgIiE9PSIsICImIiwgIl4iLCAifCIsICImJiIsICJ8
fCIsICI9IiwKKyAgICAgICAgIis9IiwgIi09IiwgIio9IiwgIi89IiwgIiU9IiwgIjw8PSIsICI+
Pj0iLCAiPj4+PSIsICImPSIsICJePSIsICJ8PSIsCisgICAgICAgICI/IiwgIjoiLCAiLCIKKyAg
ICBdOworCisgICAgZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFy
IG9wLCB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCBy
aWdodC5yYW5nZVswXV19LCAxLCAxKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tl
bnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgb3AgPSB0b2tlbnNbaV07
CisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgb3AudHlwZSA9PT0gIlB1bmN0dWF0
b3IiICYmCisgICAgICAgICAgICAgICAgT1BFUkFUT1JTLmluZGV4T2Yob3AudmFsdWUpID49IDAg
JiYKKyAgICAgICAgICAgICAgICAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSA+PSBvcC5yYW5nZVsw
XSB8fCBvcC5yYW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdKQorICAgICAgICAgICAg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmlnaHRT
cGFjZWQobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIG9wLCB0b2tlbnMgPSBjb250ZXh0Lmdl
dFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCByaWdodC5yYW5nZVswXV19LCAxLCAxKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsr
aSkgeworICAgICAgICAgICAgb3AgPSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAoCisgICAg
ICAgICAgICAgICAgb3AudHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmCisgICAgICAgICAgICAgICAg
T1BFUkFUT1JTLmluZGV4T2Yob3AudmFsdWUpID49IDAgJiYKKyAgICAgICAgICAgICAgICBvcC5y
YW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdCisgICAgICAgICAgICApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkluZml4IG9wZXJhdG9ycyBtdXN0IGJlIHNwYWNl
ZC4iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0JpbmFyeShub2RlKSB7CisgICAgICAg
IGlmICghaXNTcGFjZWQobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KSkgeworICAgICAgICAgICAgcmVw
b3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tTZXF1ZW5j
ZShub2RlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5leHByZXNzaW9ucy5s
ZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmlnaHRTcGFjZWQo
bm9kZS5leHByZXNzaW9uc1tpXSwgbm9kZS5leHByZXNzaW9uc1tpICsgMV0pKSB7CisgICAgICAg
ICAgICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tDb25kaXRpb25hbChu
b2RlKSB7CisgICAgICAgIGlmICghaXNTcGFjZWQobm9kZS50ZXN0LCBub2RlLmNvbnNlcXVlbnQp
IHx8ICFpc1NwYWNlZChub2RlLmNvbnNlcXVlbnQsIG5vZGUuYWx0ZXJuYXRlKSkgeworICAgICAg
ICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tWYXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmICFpc1NwYWNlZChub2RlLmlk
LCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBjaGVj
a0JpbmFyeSwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBjaGVja0JpbmFyeSwKKyAgICAg
ICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCisgICAgICAgICJDb25kaXRpb25h
bEV4cHJlc3Npb24iOiBjaGVja0NvbmRpdGlvbmFsLAorICAgICAgICAiU2VxdWVuY2VFeHByZXNz
aW9uIjogY2hlY2tTZXF1ZW5jZSwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNr
VmFyCisgICAgfTsKKworfTsKKworfSx7fV0sMTM5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBmb2xsb3dpbmcg
cmV0dXJuLCB0aHJvdywgYW5kIGNhc2UKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIHZhciB0
b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpLAorICAgICAgICAgICAgdmFs
dWUgPSB0b2tlbnNbMF0udmFsdWU7CisKKyAgICAgICAgaWYgKHRva2Vuc1swXS5yYW5nZVsxXSA+
PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJLZXl3b3JkIFwiIiArIHZhbHVlICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFj
ZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJSZXR1cm5T
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVu
dCkgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICAiU3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3RhdGVtZW50IjogY2hlY2sKKyAgICB9
OworCit9OworCit9LHt9XSwxNDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGZvbGxvd2luZyB1bmFyeSB3b3Jk
IG9wZXJhdG9ycworICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2VuczsKKyAgICAg
ICAgdG9rZW5zID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAyKTsKKyAgICAgICAgaWYg
KHRva2Vuc1swXS5yYW5nZVsxXSA+PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodG9rZW5zWzBdLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAiZGVsZXRl
IjoKKyAgICAgICAgICAgICAgICBjYXNlICJuZXciOgorICAgICAgICAgICAgICAgIGNhc2UgInR5
cGVvZiI6CisgICAgICAgICAgICAgICAgY2FzZSAidm9pZCI6CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmFyeSB3b3JkIG9wZXJhdG9yIFwiIiArIHRva2Vuc1sw
XS52YWx1ZSArICJcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJOZXdF
eHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBjaGVjaworICAg
IH07CisKK307CisKK30se31dLDE0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRW5mb3JjZXMgb3IgZGlzYWxsb3dzIGEgc3BhY2UgYmVn
aW5uaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4KKyAqIEBhdXRob3IgR3JlZyBDb2NoYXJkCisg
KiBAY29weXJpZ2h0IDIwMTQgR3JlZyBDb2NoYXJkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgLy8gVW5sZXNzIHRoZSBmaXJzdCBvcHRpb24gaXMgbmV2ZXIs
IHJlcXVpcmUgYSBzcGFjZQorICAgIHZhciByZXF1aXJlU3BhY2UgPSBjb250ZXh0Lm9wdGlvbnNb
MF0gIT09ICJuZXZlciI7CisKKyAgICAvLyBEZWZhdWx0IHRvIG1hdGNoIGFueXRoaW5nLCBzbyBh
bGwgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBubyBleGNlcHRpb25zCisgICAgdmFyIGV4Y2VwdGlv
bk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIgIik7CisKKyAgICAvLyBHcmFiIHRoZSBleGNlcHRpb25z
IGFycmF5IGFuZCBidWlsZCBhIFJlZ0V4cCBtYXRjaGVyIGZvciBpdAorICAgIHZhciBoYXNFeGNl
cHRpb25zID0gY29udGV4dC5vcHRpb25zLmxlbmd0aCA9PT0gMjsKKyAgICB2YXIgdW5lc2NhcGVk
RXhjZXB0aW9ucyA9IGhhc0V4Y2VwdGlvbnMgPyBjb250ZXh0Lm9wdGlvbnNbMV0uZXhjZXB0aW9u
cyA6IFtdOworICAgIHZhciBleGNlcHRpb25zOworCisgICAgaWYgKHVuZXNjYXBlZEV4Y2VwdGlv
bnMubGVuZ3RoKSB7CisgICAgICAgIGV4Y2VwdGlvbnMgPSB1bmVzY2FwZWRFeGNlcHRpb25zLm1h
cChmdW5jdGlvbihzKSB7CisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8oWy4qKz8ke30o
KXxcXlxbXF1cL1xcXSkvZywgIlxcJDEiKTsKKyAgICAgICAgfSk7CisgICAgICAgIGV4Y2VwdGlv
bk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIoXigiICsgZXhjZXB0aW9ucy5qb2luKCIpKyQpfCheKCIp
ICsgIikrJCkiKTsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJMaW5lQ29tbWVudCI6IGZ1bmN0aW9uIGNoZWNrQ29tbWVudEZvclNwYWNlKG5vZGUpIHsKKwor
ICAgICAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgPT09IDEgJiYgL14jIS8udGVzdChj
b250ZXh0LmdldFNvdXJjZUxpbmVzKClbMF0pKSB7CisKKyAgICAgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICAgICAqIEhBQ0s6IHJldHVybiBpZiB3ZSBhcmUgb24gdGhlIGZpcnN0IGxpbmUg
YW5kCisgICAgICAgICAgICAgICAgICogZW5jb3VudGVyIGEgc2hlYmFuZyBhdCB0aGUgYmVnaW5u
aW5nLgorICAgICAgICAgICAgICAgICAqIEl0IHNlZW1zIHRoZSBwYXJzZXIgd2lsbCByZXR1cm4g
dGhpcyBhcyBhCisgICAgICAgICAgICAgICAgICogY29tbWVudCBhbmQgZmlsdGVyIG91dCB0aGUg
IyBzbyB3ZSBtdXN0IGZldGNoCisgICAgICAgICAgICAgICAgICogdGhlIGFjdHVhbCBzb3VyY2Ug
bGluZS4gSXMgdGhpcyBiZWluZyBjYXVzZWQKKyAgICAgICAgICAgICAgICAgKiBieSBlc3ByaW1h
IG9yIGVzbGludD8gU29tZXRoaW5nIGVsc2U/CisgICAgICAgICAgICAgICAgICovCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVxdWly
ZVNwYWNlKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTcGFjZSBleHBlY3RlZCBhbmQgbm90IGZv
dW5kCisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUuaW5kZXhPZigiICIpICE9PSAwKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogRG8gdHdv
IHRlc3RzOyBvbmUgZm9yIHNwYWNlIHN0YXJ0aW5nIHRoZSBsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgKiBhbmQgb25lIGZvciBhIGNvbW1lbnQgY29tcHJpc2VkIG9ubHkgb2YgZXhjZXB0aW9u
cworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0V4
Y2VwdGlvbnMgJiYgIWV4Y2VwdGlvbk1hdGNoZXIudGVzdChub2RlLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGV4Y2VwdGlv
biBibG9jayBvciBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFoYXNFeGNlcHRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgLy8gaW4gY29tbWVu
dC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnZhbHVlLmluZGV4T2Yo
IiAiKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKK307CisKK30se31dLDE0Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBlbnN1cmUgY29kZSBpcyBydW5uaW5nIGluIHN0cmljdCBtb2RlLgorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICogQGNvcHlyaWdodCAyMDEzLTIwMTQgTmljaG9sYXMgQy4g
WmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
c2NvcGVzID0gW107CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gbm9k
ZSBpcyAidXNlIHN0cmljdCIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2RlIGlz
IGEgc3RyaWN0IHByYWdtYSwgZmFsc2UgaWYgbm90LgorICAgICAqIEB2b2lkCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNTdHJpY3RQcmFnbWEobm9kZSkgeworICAgICAgICByZXR1cm4gKG5vZGUg
JiYgbm9kZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAg
ICBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJ1c2Ugc3RyaWN0Iik7CisgICAgfQorCisgICAg
LyoqCisgICAgICogV2hlbiB5b3UgZW50ZXIgYSBzY29wZSwgcHVzaCB0aGUgc3RyaWN0IHZhbHVl
IGZyb20gdGhlIHByZXZpb3VzIHNjb3BlCisgICAgICogb250byB0aGUgc3RhY2suCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBiZWluZyBjaGVja2VkLgorICAgICAq
IEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24g
ZW50ZXJTY29wZShub2RlKSB7CisKKyAgICAgICAgdmFyIGlzU3RyaWN0ID0gZmFsc2UsCisgICAg
ICAgICAgICBpc1Byb2dyYW0gPSAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIpLAorICAgICAgICAg
ICAgaXNQYXJlbnRHbG9iYWwgPSBzY29wZXMubGVuZ3RoID09PSAxLAorICAgICAgICAgICAgaXNQ
YXJlbnRTdHJpY3QgPSBzY29wZXMubGVuZ3RoID8gc2NvcGVzW3Njb3Blcy5sZW5ndGggLSAxXSA6
IGZhbHNlOworCisgICAgICAgIC8vIGxvb2sgZm9yIHRoZSAidXNlIHN0cmljdCIgcHJhZ21hCisg
ICAgICAgIGlmIChpc1Byb2dyYW0pIHsKKyAgICAgICAgICAgIGlzU3RyaWN0ID0gaXNTdHJpY3RQ
cmFnbWEobm9kZS5ib2R5WzBdKSB8fCBpc1BhcmVudFN0cmljdDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlzU3RyaWN0ID0gaXNTdHJpY3RQcmFnbWEobm9kZS5ib2R5LmJvZHlbMF0p
IHx8IGlzUGFyZW50U3RyaWN0OworICAgICAgICB9CisKKyAgICAgICAgc2NvcGVzLnB1c2goaXNT
dHJpY3QpOworCisgICAgICAgIC8vIG5ldmVyIHdhcm4gaWYgdGhlIHBhcmVudCBpcyBzdHJpY3Qg
b3IgdGhlIGZ1bmN0aW9uIGlzIHN0cmljdAorICAgICAgICBpZiAoIWlzUGFyZW50U3RyaWN0ICYm
ICFpc1N0cmljdCAmJiBpc1BhcmVudEdsb2JhbCkgeworICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIk1pc3NpbmcgXCJ1c2Ugc3RyaWN0XCIgc3RhdGVtZW50LiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiB5b3UgZXhpdCBhIHNjb3BlLCBwb3Agb2Zm
IHRoZSB0b3Agc2NvcGUgYW5kIHNlZSBpZiBpdCdzIHRydWUgb3IKKyAgICAgKiBmYWxzZS4KKyAg
ICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIGV4aXRTY29wZSgpIHsKKyAgICAgICAgc2NvcGVzLnBvcCgpOworICAgIH0KKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBlbnRlclNjb3BlLAorICAgICAgICAiRnVuY3Rp
b25EZWNsYXJhdGlvbiI6IGVudGVyU2NvcGUsCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24i
OiBlbnRlclNjb3BlLAorCisgICAgICAgICJQcm9ncmFtOmV4aXQiOiBleGl0U2NvcGUsCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBleGl0U2NvcGUsCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb246ZXhpdCI6IGV4aXRTY29wZQorICAgIH07CisKK307CisKK30se31dLDE0
MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIGNvbXBhcmlzb25zIHRvIHRoZSB2YWx1ZSBOYU4KKyAqIEBhdXRob3Ig
SmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
ICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgaWYgKCEvXlt8Jl5dJC8udGVzdChub2RlLm9wZXJhdG9yKSAmJiBub2RlLmxlZnQubmFtZSA9
PT0gIk5hTiIgfHwgbm9kZS5yaWdodC5uYW1lID09PSAiTmFOIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGlzTmFOIGZ1bmN0aW9uIHRvIGNvbXBhcmUg
d2l0aCBOYU4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSwxNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFZhbGlkYXRlcyBKU0RvYyBjb21tZW50cyBhcmUgc3ludGFjdGljYWxseSBjb3Jy
ZWN0CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVtZW50cworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwordmFyIGRvY3RyaW5lID0gcmVxdWlyZSgiZG9jdHJpbmUiKTsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
b3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKKyAgICAgICAgcHJlZmVyID0gb3B0
aW9ucy5wcmVmZXIgfHwge30sCisKKyAgICAgICAgLy8gdGhlc2UgYm90aCBkZWZhdWx0IHRvIHRy
dWUsIHNvIHlvdSBoYXZlIHRvIGV4cGxpY2l0bHkgbWFrZSB0aGVtIGZhbHNlCisgICAgICAgIHJl
cXVpcmVSZXR1cm4gPSBvcHRpb25zLnJlcXVpcmVSZXR1cm4gPT09IGZhbHNlID8gZmFsc2UgOiB0
cnVlLAorICAgICAgICByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbiA9IG9wdGlvbnMucmVxdWlyZVBh
cmFtRGVzY3JpcHRpb24gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAvLyBVc2luZyBhIHN0YWNrIHRvIHN0b3JlIGlmIGEgZnVuY3Rpb24gcmV0dXJucyBvciBub3Qg
KGhhbmRsaW5nIG5lc3RlZCBmdW5jdGlvbnMpCisgICAgdmFyIGZucyA9IFtdOworCisgICAgLyoq
CisgICAgICogV2hlbiBwYXJzaW5nIGEgbmV3IGZ1bmN0aW9uLCBzdG9yZSBpdCBpbiBvdXIgZnVu
Y3Rpb24gc3RhY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmbnMucHVzaCh7
cmV0dXJuUHJlc2VudDogZmFsc2V9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0
ZSB0aGF0IHJldHVybiBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4KKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIHJldHVybiBub2RlLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gYWRkUmV0
dXJuKG5vZGUpIHsKKyAgICAgICAgdmFyIGZ1bmN0aW9uU3RhdGUgPSBmbnNbZm5zLmxlbmd0aCAt
IDFdOworCisgICAgICAgIGlmIChmdW5jdGlvblN0YXRlICYmIG5vZGUuYXJndW1lbnQgIT09IG51
bGwpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uU3RhdGUucmV0dXJuUHJlc2VudCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZSB0aGUgSlNEb2Mgbm9k
ZSBhbmQgb3V0cHV0IHdhcm5pbmdzIGlmIGFueXRoaW5nIGlzIHdyb25nLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0pTRG9j
KG5vZGUpIHsKKyAgICAgICAgdmFyIGpzZG9jTm9kZSA9IGNvbnRleHQuZ2V0SlNEb2NDb21tZW50
KG5vZGUpLAorICAgICAgICAgICAgZnVuY3Rpb25EYXRhID0gZm5zLnBvcCgpLAorICAgICAgICAg
ICAgaGFzUmV0dXJucyA9IGZhbHNlLAorICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSBmYWxz
ZSwKKyAgICAgICAgICAgIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCksCisgICAgICAgICAg
ICBqc2RvYzsKKworICAgICAgICAvLyBtYWtlIHN1cmUgb25seSB0byB2YWxpZGF0ZSBKU0RvYyBj
b21tZW50cworICAgICAgICBpZiAoanNkb2NOb2RlKSB7CisKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAganNkb2MgPSBkb2N0cmluZS5wYXJzZShqc2RvY05vZGUudmFsdWUsIHsK
KyAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICB1
bndyYXA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHNsb3BweTogdHJ1ZQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKworICAgICAgICAgICAgICAg
IGlmICgvYnJhY2VzL2kudGVzdChleC5tZXNzYWdlKSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJKU0RvYyB0eXBlIG1pc3NpbmcgYnJhY2UuIik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoanNkb2NOb2RlLCAiSlNEb2Mgc3ludGF4IGVycm9yLiIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
anNkb2MudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykgeworCisgICAgICAgICAgICAgICAgc3dp
dGNoICh0YWcudGl0bGUpIHsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJwYXJhbSI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZy50eXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyBwYXJh
bWV0ZXIgdHlwZSBmb3IgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1lIH0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZy5k
ZXNjcmlwdGlvbiAmJiByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcGFy
YW1ldGVyIGRlc2NyaXB0aW9uIGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJhbXNbdGFnLm5hbWVdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQoanNkb2NOb2RlLCAiRHVwbGljYXRlIEpTRG9jIHBhcmFtZXRlciAne3tuYW1lfX0n
LiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZy5uYW1lLmluZGV4T2YoIi4iKSA9PT0gLSAxKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW3RhZy5uYW1lXSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBj
YXNlICJyZXR1cm4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXR1cm5zIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc1JldHVybnMgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXJlcXVpcmVSZXR1cm4gJiYgIWZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVzZW50
ICYmIHRhZy50eXBlLm5hbWUgIT09ICJ2b2lkIiAmJiB0YWcudHlwZS5uYW1lICE9PSAidW5kZWZp
bmVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9j
Tm9kZSwgIlVuZXhwZWN0ZWQgQCIgKyB0YWcudGl0bGUgKyAiIHRhZzsgZnVuY3Rpb24gaGFzIG5v
IHJldHVybiBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBK
U0RvYyByZXR1cm4gdHlwZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnR5cGUubmFtZSAhPT0gInZvaWQiICYm
ICF0YWcuZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyByZXR1cm4gZGVzY3JpcHRpb24u
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICBjYXNlICJjb25zdHJ1Y3RvciI6CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25z
dHJ1Y3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgdGFnIHByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgaWYgKHBy
ZWZlci5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIlVzZSBAe3tuYW1lfX0gaW5zdGVhZC4iLCB7IG5hbWU6
IHByZWZlclt0YWcudGl0bGVdIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBmdW5jdGlvbnMgbWlzc2luZyBAcmV0dXJu
cworICAgICAgICAgICAgaWYgKCFoYXNSZXR1cm5zICYmICFoYXNDb25zdHJ1Y3RvcikgeworICAg
ICAgICAgICAgICAgIGlmIChyZXF1aXJlUmV0dXJuIHx8IGZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVz
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1p
c3NpbmcgSlNEb2MgQHJldHVybnMgZm9yIGZ1bmN0aW9uLiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtZXRlcnMKKyAg
ICAgICAgICAgIHZhciBqc2RvY1BhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7CisKKyAgICAg
ICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocGFyYW0sIGkpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbmFtZSA9IHBhcmFtLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoanNk
b2NQYXJhbXNbaV0gJiYgKG5hbWUgIT09IGpzZG9jUGFyYW1zW2ldKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJFeHBlY3RlZCBKU0RvYyBmb3IgJ3t7
bmFtZX19JyBidXQgZm91bmQgJ3t7anNkb2NOYW1lfX0nLiIsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBqc2RvY05hbWU6IGpz
ZG9jUGFyYW1zW2ldCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIXBhcmFtc1tuYW1lXSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIGZvciBwYXJhbWV0ZXIgJ3t7bmFtZX19Jy4i
LCB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0K
KworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBz
dGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBjaGVja0pT
RG9jLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogY2hlY2tKU0RvYywKKyAg
ICAgICAgIlJldHVyblN0YXRlbWVudCI6IGFkZFJldHVybgorICAgIH07CisKK307CisKK30seyJk
b2N0cmluZSI6NH1dLDE0NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgRW5zdXJlcyB0aGF0IHRoZSByZXN1bHRzIG9mIHR5cGVvZiBhcmUg
Y29tcGFyZWQgYWdhaW5zdCBhIHZhbGlkIHN0cmluZworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFu
IE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgVkFMSURfVFlQRVMgPSBbInN5bWJv
bCIsICJ1bmRlZmluZWQiLCAib2JqZWN0IiwgImJvb2xlYW4iLCAibnVtYmVyIiwgInN0cmluZyIs
ICJmdW5jdGlvbiJdLAorICAgICAgICBPUEVSQVRPUlMgPSBbIj09IiwgIj09PSIsICIhPSIsICIh
PT0iXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Np
b24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBhcmVudCwgc2libGluZzsK
KworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiKSB7CisgICAgICAg
ICAgICAgICAgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkJpbmFyeUV4cHJlc3Npb24iICYmIE9QRVJB
VE9SUy5pbmRleE9mKHBhcmVudC5vcGVyYXRvcikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNpYmxpbmcgPSBwYXJlbnQubGVmdCA9PT0gbm9kZSA/IHBhcmVudC5yaWdodCA6IHBhcmVu
dC5sZWZ0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICJMaXRl
cmFsIiAmJiBWQUxJRF9UWVBFUy5pbmRleE9mKHNpYmxpbmcudmFsdWUpID09PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoc2libGluZywgIkludmFsaWQgdHlw
ZW9mIGNvbXBhcmlzb24gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sMTQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGVuZm9yY2UgdmFyIGRlY2xhcmF0aW9ucyBhcmUgb25seSBhdCB0aGUg
dG9wIG9mIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIERhbm55IEZyaXR6CisgKiBAYXV0aG9yIEd5
YW5kZWVwIFNpbmdoCisgKiBAY29weXJpZ2h0IDIwMTQgRGFubnkgRnJpdHouIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQgR3lhbmRlZXAgU2luZ2guIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgIHZhciBlcnJvck1lc3NhZ2UgPSAiQWxs
IFwidmFyXCIgZGVjbGFyYXRpb25zIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24g
c2NvcGUuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIC0gYW55IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2
ZW4gbm9kZSBzdHJ1Y3R1cmFsbHkgcmVwcmVzZW50cyBhIGRpcmVjdGl2ZQorICAgICAqLworICAg
IGZ1bmN0aW9uIGxvb2tzTGlrZURpcmVjdGl2ZShub2RlKSB7CisgICAgICAgcmV0dXJuIG5vZGUu
dHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgIG5vZGUuZXhwcmVz
c2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9
PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhp
cyB2YXJpYWJsZSBpcyBvbiB0b3Agb2YgdGhlIGJsb2NrIGJvZHkKKyAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSB7QVNUTm9kZVtd
fSBzdGF0ZW1lbnRzIC0gY29sbGVjdGlvbiBvZiBBU1ROb2RlcyBmb3IgdGhlIHBhcmVudCBub2Rl
IGJsb2NrCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdmFyIGlzIG9uIHRvcCBv
dGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Zhck9uVG9wIChub2RlLCBz
dGF0ZW1lbnRzKSB7CisgICAgICAgIHZhciBpID0gMCwgbCA9IHN0YXRlbWVudHMubGVuZ3RoOwor
CisgICAgICAgIC8vIHNraXAgb3ZlciBkaXJlY3RpdmVzCisgICAgICAgIGZvciAoOyBpIDwgbDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIWxvb2tzTGlrZURpcmVjdGl2ZShzdGF0ZW1lbnRzW2ld
KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yICg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRz
W2ldLnR5cGUgIT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRzW2ld
ID09PSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJp
YWJsZSBpcyBvbiB0b3AgYXQgdGhlIGdsb2JhbCBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJl
bnQgLSBQYXJlbnQgb2YgdGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBnbG9iYWxWYXJDaGVjayAobm9kZSwgcGFyZW50KSB7CisgICAgICAgIGlm
ICghaXNWYXJPblRvcChub2RlLCBwYXJlbnQuYm9keSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJpYWJsZSBpcyBvbiB0b3AgYXQgZnVuY3Rpb25hbCBi
bG9jayBzY29wZSBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2Rl
IHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQgLSBQYXJlbnQgb2YgdGhl
IG5vZGUKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGdyYW5kUGFyZW50IC0gUGFyZW50IG9mIHRo
ZSBub2RlJ3MgcGFyZW50CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gYmxvY2tTY29wZVZhckNoZWNrIChub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KSB7Cisg
ICAgICAgIGlmICghKChncmFuZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIK
KyAgICAgICAgICAgIHx8IGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24i
KQorICAgICAgICAgICAgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIKKyAgICAg
ICAgICAgICYmIGlzVmFyT25Ub3Aobm9kZSwgcGFyZW50LmJvZHkpKSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24i
OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQu
Z2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgp
OworICAgICAgICAgICAgdmFyIGdyYW5kUGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworCisgICAg
ICAgICAgICBpZiAobm9kZS5raW5kID09PSAidmFyIikgey8vIGNoZWNrIHZhcmlhYmxlIGlzIGB2
YXJgIHR5cGUgYW5kIG5vdCBgbGV0YCBvciBgY29uc3RgCisgICAgICAgICAgICAgICAgaWYgKHBh
cmVudC50eXBlID09PSAiUHJvZ3JhbSIpIHsvLyBUaGF0IG1lYW5zIGl0cyBhIGdsb2JhbCB2YXJp
YWJsZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJDaGVjayhub2RlLCBwYXJlbnQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrU2NvcGVW
YXJDaGVjayhub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB3aGVuIElJRkUgaXMgbm90IHdyYXBwZWQgaW4gcGFyZW5zCisgKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciBzdHlsZSA9IGNvbnRl
eHQub3B0aW9uc1swXSB8fCAib3V0c2lkZSI7CisKKyAgICBmdW5jdGlvbiB3cmFwcGVkKG5vZGUp
IHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5v
ZGUpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUp
OworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBwcmV2aW91c1Rva2VuLnZhbHVlID09
PSAiKCIgJiYKKyAgICAgICAgICAgIG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIp
IjsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiRnVu
Y3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHZhciBjYWxsRXhwcmVzc2lvbldy
YXBwZWQgPSB3cmFwcGVkKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkV4cHJl
c3Npb25XcmFwcGVkID0gd3JhcHBlZChub2RlLmNhbGxlZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWNhbGxFeHByZXNzaW9uV3JhcHBlZCAmJiAhZnVuY3Rpb25FeHByZXNzaW9uV3JhcHBlZCkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcCBhbiBpbW1l
ZGlhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiBwYXJlbnRoZXNlcy4iKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAiaW5zaWRlIiAmJiAhZnVuY3Rpb25FeHByZXNzaW9u
V3JhcHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3Jh
cCBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIGluIHBhcmVucy4iKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAib3V0c2lkZSIgJiYgIWNhbGxFeHByZXNzaW9uV3Jh
cHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTW92ZSB0
aGUgaW52b2NhdGlvbiBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBmdW5jdGlvbi4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHJlZ2V4IGxpdGVyYWxzIGFyZSBu
b3Qgd3JhcHBlZCBpbiBwYXJlbnMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cu
bWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRv
a2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUpLAorICAgICAgICAgICAgICAgIG5vZGVU
eXBlID0gdG9rZW4udHlwZSwKKyAgICAgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICAg
ICAgZ3JhbmRwYXJlbnQsCisgICAgICAgICAgICAgICAgYW5jZXN0b3JzOworCisgICAgICAgICAg
ICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2UgPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpOworICAgICAgICAgICAgICAg
IGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICAgICAgZ3Jh
bmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdOworCisgICAgICAgICAg
ICAgICAgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBncmFu
ZHBhcmVudC5vYmplY3QgPT09IG5vZGUgJiYKKyAgICAgICAgICAgICAgICAgICAgKCFzb3VyY2Ug
fHwgc291cmNlLnZhbHVlICE9PSAiKCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJXcmFwIHRoZSByZWdleHAgbGl0ZXJhbCBpbiBwYXJlbnMgdG8gZGlzYW1i
aWd1YXRlIHRoZSBzbGFzaC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBvciBk
aXNhbGxvdyB5b2RhIGNvbXBhcmlzb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbiAoY29udGV4dCkgeworCisgICAgLy8gRGVmYXVsdCB0byAibmV2ZXIiICghYWx3YXlzKSBp
ZiBubyBvcHRpb24KKworICAgIHZhciBhbHdheXMgPSAoY29udGV4dC5vcHRpb25zWzBdID09PSAi
YWx3YXlzIik7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhl
ciBhbiBvcGVyYXRvciBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtT
dHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7
Qm9vbGVhbn0gV2hldGhlciBvciBub3QgaXQgaXMgYSBjb21wYXJpc29uIG9wZXJhdG9yLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGlzQ29tcGFyaXNvbk9wZXJhdG9yKG9wZXJhdG9yKSB7CisgICAg
ICAgIHJldHVybiAoL14oPT18PT09fCE9fCE9PXw8fD58PD18Pj0pJC8pLnRlc3Qob3BlcmF0b3Ip
OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGFsd2F5cykgewor
CisgICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBhbHdheXMgYmUgeW9kYS1zdHls
ZTogaWYgKCJibHVlIiA9PT0gY29sb3IpCisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yaWdo
dC50eXBlID09PSAiTGl0ZXJhbCIgJiYgaXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRv
cikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVk
IGxpdGVyYWwgdG8gYmUgb24gdGhlIGxlZnQgc2lkZSBvZiAiICsgbm9kZS5vcGVyYXRvciArICIu
Iik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAg
ICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBuZXZlciBiZSB5b2RhLXN0eWxlIChkZWZhdWx0
KQorCisgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYg
aXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGxpdGVyYWwgdG8gYmUgb24gdGhlIHJp
Z2h0IHNpZGUgb2YgIiArIG5vZGUub3BlcmF0b3IgKyAiLiIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDE1
MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgQ29tbW9uIHV0aWxpdGllcy4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8qKgorICogTWVyZ2VzIHR3byBvYmplY3RzIHRvZ2V0aGVyIGFuZCBhc3NpZ25zIHRoZSByZXN1
bHQgdG8gdGhlIGluaXRpYWwgb2JqZWN0LiBDYW4gYmUgdXNlZCBmb3Igc2hhbGxvdyBjbG9uaW5n
LgorICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBvZiB0aGUgY2xvbmluZyBvcGVyYXRpb24KKyAq
IEBwYXJhbSB7T2JqZWN0fSBzb3VyY2Ugb2JqZWN0CisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLwor
ZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7CisgICAgT2JqZWN0Lmtl
eXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICB0YXJnZXRba2V5XSA9
IHNvdXJjZVtrZXldOworICAgIH0pOworfTsKKworLyoqCisgKiBNZXJnZXMgdHdvIGNvbmZpZyBv
YmplY3RzLiBUaGlzIHdpbGwgbm90IG9ubHkgYWRkIG1pc3Npbmcga2V5cywgYnV0IHdpbGwgYWxz
byBtb2RpZnkgdmFsdWVzIHRvIG1hdGNoLgorICogQHBhcmFtIHtPYmplY3R9IGJhc2UgY29uZmln
IG9iamVjdAorICogQHBhcmFtIHtPYmplY3R9IGN1c3RvbSBjb25maWcgb2JqZWN0LiBPdmVycmlk
ZXMgaW4gdGhpcyBjb25maWcgb2JqZWN0IHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIGJhc2UuCisg
KiBAcmV0dXJucyB7T2JqZWN0fSBtZXJnZWQgY29uZmlnIG9iamVjdC4KKyAqLworZXhwb3J0cy5t
ZXJnZUNvbmZpZ3MgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoYmFzZSwgY3VzdG9tKSB7CisKKyAg
ICBPYmplY3Qua2V5cyhjdXN0b20pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2
YXIgcHJvcGVydHkgPSBjdXN0b21ba2V5XTsKKworICAgICAgICBpZiAoa2V5ID09PSAicGx1Z2lu
cyIpIHsKKyAgICAgICAgICAgIGlmICghYmFzZVtrZXldKSB7CisgICAgICAgICAgICAgICAgYmFz
ZVtrZXldID0gW107CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3BlcnR5LmZvckVh
Y2goZnVuY3Rpb24gKHBsdWdpbikgeworICAgICAgICAgICAgICAgIC8vIHNraXAgZHVwbGljYXRl
cworICAgICAgICAgICAgICAgIGlmIChiYXNlW2tleV0uaW5kZXhPZihwbHVnaW4pID09PSAtMSkg
eworICAgICAgICAgICAgICAgICAgICBiYXNlW2tleV0ucHVzaChwbHVnaW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZVtrZXldKSAmJiAhQXJyYXkuaXNBcnJh
eShwcm9wZXJ0eSkgJiYgdHlwZW9mIHByb3BlcnR5ID09PSAibnVtYmVyIikgeworICAgICAgICAg
ICAgLy8gYXNzdW1lIHRoYXQgd2UgYXJlIGp1c3Qgb3ZlcnJpZGluZyBmaXJzdCBhdHRyaWJ1dGUK
KyAgICAgICAgICAgIGJhc2Vba2V5XVswXSA9IGN1c3RvbVtrZXldOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gIm9iamVj
dCIgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7CisgICAgICAgICAgICAvLyBiYXNlW2tl
eV0gbWlnaHQgbm90IGV4aXN0LCBzbyBiZSBjYXJlZnVsIHdpdGggcmVjdXJzaW9uIGhlcmUKKyAg
ICAgICAgICAgIGJhc2Vba2V5XSA9IG1lcmdlQ29uZmlncyhiYXNlW2tleV0gfHwge30sIGN1c3Rv
bVtrZXldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2Vba2V5XSA9IGN1c3Rv
bVtrZXldOworICAgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gYmFzZTsKK307CisKK30s
e31dfSx7fSxbOV0pKDkpCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240051</attachid>
            <date>2014-10-17 16:32:22 -0700</date>
            <delta_ts>2014-11-13 16:16:19 -0800</delta_ts>
            <desc>[PATCH] eslint addition FIX and CHANGELOG.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>625624</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDdiODliOWEuLjkzOGJmMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTEwLTE3ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgRVNMaW50
IG9wZW4gc291cmNlIGxpYnJhcnkgdG8gdGhlIGluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NzE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGJhY2sgdGhlIGVzbGludC5q
cyBleHRlcm5hbCBsaWJyYXJ5IHdpdGggYSBjb3JyZWN0aW9uIHRvIFNjcmlwdHMvY29weS11c2Vy
LWludGVyZmFjZS1yZXNvdXJjZXMucGwKKyAgICAgICAgdG8gcHJldmVudCBhIGJ1aWxkIGZhaWx1
cmUuCisKKyAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBs
OiBBZGRlZCBjb3B5IGNvbW1hbmRzIGZvciBFU0xpbnQuanMuCisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50LmpzOiBBZGRlZC4KKwogMjAxNC0xMC0xNCAgSm9u
byBXZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
QWRkIEVTTGludCBvcGVuIHNvdXJjZSBsaWJyYXJ5IHRvIHRoZSBpbnNwZWN0b3IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVz
b3VyY2VzLnBsIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVy
ZmFjZS1yZXNvdXJjZXMucGwKaW5kZXggNGZhZGZjNy4uZDYwYzRjNyAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMu
cGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFj
ZS1yZXNvdXJjZXMucGwKQEAgLTEwMCw5ICsxMDAsMTEgQEAgbXkgJHRhcmdldFJlc291cmNlUGF0
aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkRU5WeydUQVJHRVRfQlVJTERfRElSJ30sICRFTlZ7J1VO
TE8KIG15ICRwcm90b2NvbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0UmVzb3VyY2VQ
YXRoLCAnUHJvdG9jb2wnKTsKIG15ICRjb2RlTWlycm9yUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRp
cigkdWlSb290LCAnRXh0ZXJuYWwnLCAnQ29kZU1pcnJvcicpOwogbXkgJGVzcHJpbWFQYXRoID0g
RmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRlcm5hbCcsICdFc3ByaW1hJyk7CitteSAk
ZXNsaW50UGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnRVNM
aW50Jyk7CiAKIG15ICRjb2RlTWlycm9yTGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpT
cGVjLT5jYXRmaWxlKCRjb2RlTWlycm9yUGF0aCwgJ0xJQ0VOU0UnKSk7Ci1teSAkZXNwcmltYU1p
cnJvckxpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNwcmlt
YVBhdGgsICdMSUNFTlNFJykpOworbXkgJGVzcHJpbWFMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxl
KEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzcHJpbWFQYXRoLCAnTElDRU5TRScpKTsKK215ICRlc2xp
bnRMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzbGludFBh
dGgsICdMSUNFTlNFJykpOwogCiBtYWtlX3BhdGgoJHByb3RvY29sRGlyLCAkdGFyZ2V0UmVzb3Vy
Y2VQYXRoKTsKIApAQCAtMTIzLDYgKzEyNSw5IEBAIGlmIChkZWZpbmVkICRFTlZ7J0NPTUJJTkVf
SU5TUEVDVE9SX1JFU09VUkNFUyd9ICYmICgkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9SRVNPCiAg
ICAgIyBDb21iaW5lIHRoZSBFc3ByaW1hIEphdmFTY3JpcHQgZmlsZXMgaW4gUHJvZHVjdGlvbiBi
dWlsZHMgaW50byBhIHNpbmdsZSBmaWxlIChFc3ByaW1hLmpzKS4KICAgICBzeXN0ZW0oJGNvbWJp
bmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9Fc3ByaW1hJywgJy0taW5w
dXQtaHRtbCcsICRkZXJpdmVkU291cmNlc01haW5IVE1MLCAnLS1pbnB1dC1odG1sLWRpcicsICR1
aVJvb3QsICctLWRlcml2ZWQtc291cmNlcy1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91
dHB1dC1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91dHB1dC1zY3JpcHQtbmFtZScsICdF
c3ByaW1hLmpzJyk7CiAKKyAgICAjIENvbWJpbmUgdGhlIEVTTGludCBKYXZhU2NyaXB0IGZpbGVz
IGluIFByb2R1Y3Rpb24gYnVpbGRzIGludG8gYSBzaW5nbGUgZmlsZSAoRVNMaW50LmpzKS4KKyAg
ICBzeXN0ZW0oJGNvbWJpbmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9F
U0xpbnQnLCAnLS1pbnB1dC1odG1sJywgJGRlcml2ZWRTb3VyY2VzTWFpbkhUTUwsICctLWlucHV0
LWh0bWwtZGlyJywgJHVpUm9vdCwgJy0tZGVyaXZlZC1zb3VyY2VzLWRpcicsICRkZXJpdmVkU291
cmNlc0RpciwgJy0tb3V0cHV0LWRpcicsICRkZXJpdmVkU291cmNlc0RpciwgJy0tb3V0cHV0LXNj
cmlwdC1uYW1lJywgJ0VTTGludC5qcycpOworCiAgICAgIyBSZW1vdmUgY29uc29sZS5hc3NlcnQg
Y2FsbHMgZnJvbSB0aGUgTWFpbi5qcyBmaWxlLgogICAgIG15ICRkZXJpdmVkU291cmNlc01haW5K
UyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnTWFpbi5qcycpOwog
ICAgIHN5c3RlbShGaWxlOjpTcGVjLT5jYXRmaWxlKCRzY3JpcHRzUm9vdCwgJ3JlbW92ZS1jb25z
b2xlLWFzc2VydHMucGwnKSwgJy0taW5wdXQtc2NyaXB0JywgJGRlcml2ZWRTb3VyY2VzTWFpbkpT
LCAnLS1vdXRwdXQtc2NyaXB0JywgJGRlcml2ZWRTb3VyY2VzTWFpbkpTKTsKQEAgLTE1NSw3ICsx
NjAsMTEgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTT1VSQ0VTJ30g
JiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KIAogICAgICMgRXhwb3J0IHRoZSBsaWNl
bnNlIGludG8gRXNwcmltYS5qcy4KICAgICBteSAkdGFyZ2V0RXNwcmltYUpTID0gRmlsZTo6U3Bl
Yy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnRXNwcmltYS5qcycpOwotICAgIHNlZWRG
aWxlKCR0YXJnZXRFc3ByaW1hSlMsICRlc3ByaW1hTWlycm9yTGljZW5zZSk7CisgICAgc2VlZEZp
bGUoJHRhcmdldEVzcHJpbWFKUywgJGVzcHJpbWFMaWNlbnNlKTsKKworICAgICMgRXhwb3J0IHRo
ZSBsaWNlbnNlIGludG8gRVNMaW50LmpzLgorICAgIG15ICR0YXJnZXRFU0xpbnRKUyA9IEZpbGU6
OlNwZWMtPmNhdGZpbGUoJHRhcmdldFJlc291cmNlUGF0aCwgJ0VTTGludC5qcycpOworICAgIHNl
ZWRGaWxlKCR0YXJnZXRFU0xpbnRKUywgJGVzbGludExpY2Vuc2UpOwogCiAgICAgIyBNaW5pZnkg
dGhlIE1haW4uanMgYW5kIE1haW4uY3NzIGZpbGVzLCB3aXRoIE1haW4uanMgYXBwZW5kaW5nIHRv
IHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgogICAgIG15ICRqc01pblNjcmlw
dCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHNjcmlwdHNSb290LCAnanNtaW4ucHknKTsKQEAgLTE3
Myw2ICsxODIsMTAgQEAgaWYgKGRlZmluZWQgJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTT1VS
Q0VTJ30gJiYgKCRFTlZ7J0NPTUJJTkVfSU5TUEVDVE9SX1JFU08KICAgICBteSAkZGVyaXZlZFNv
dXJlc3NFc3ByaW1hSlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291cmNlc0Rpciwg
J0VzcHJpbWEuanMnKTsKICAgICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5TY3JpcHQiIDwg
IiRkZXJpdmVkU291cmVzc0VzcHJpbWFKUyIgPj4gIiR0YXJnZXRFc3ByaW1hSlMiKSkgYW5kIGRp
ZSAiRmFpbGVkIHRvIG1pbmlmeSAkZGVyaXZlZFNvdXJlc3NFc3ByaW1hSlM6ICQhIjsKIAorICAg
ICMgTWluaWZ5IHRoZSBFU0xpbnQuanMgZmlsZSwgYXBwZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRo
YXQgd2FzIGV4cG9ydGVkIGFib3ZlLgorICAgIG15ICRkZXJpdmVkU291cmVzc0VTTGludEpTID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGVyaXZlZFNvdXJjZXNEaXIsICdFU0xpbnQuanMnKTsKKyAg
ICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5TY3JpcHQiIDwgIiRkZXJpdmVkU291cmVzc0VT
TGludEpTIiA+PiAiJHRhcmdldEVTTGludEpTIikpIGFuZCBkaWUgIkZhaWxlZCB0byBtaW5pZnkg
JGRlcml2ZWRTb3VyZXNzRVNMaW50SlM6ICQhIjsKKwogICAgICMgQ29weSBvdmVyIE1haW4uaHRt
bCBhbmQgdGhlIEltYWdlcyBkaXJlY3RvcnkuCiAgICAgY29weSgkZGVyaXZlZFNvdXJjZXNNYWlu
SFRNTCwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnTWFpbi5odG1s
JykpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9FU0xpbnQvTElDRU5TRSBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1ZjA0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRQpAQCAtMCwwICsxLDE5IEBACitD
b3B5cmlnaHQgKGMpIDIwMTQgVEogSG9sb3dheWNodWsgPHRqQHZpc2lvbi1tZWRpYS5jYT4KKwor
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMgdG8gCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitz
bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
KworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
CitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgor
VEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uM2IxMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKQEAgLTAs
MCArMSwxODIyMyBAQAorIWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYm
InVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vsc2UgaWYoImZ1
bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXt2YXIg
ZjsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz9mPXdpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9m
IGdsb2JhbD9mPWdsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJihmPXNlbGYpLGYuZXNs
aW50PWUoKX19KGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1
bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBh
PXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8s
ITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1
bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29d
PXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRb
b11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltv
XS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2
YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cz17CisgICAgImJ1aWx0aW4iOiB7
CisgICAgICAgICJOYU4iOiBmYWxzZSwKKyAgICAgICAgIkluZmluaXR5IjogZmFsc2UsCisgICAg
ICAgICJ1bmRlZmluZWQiOiBmYWxzZSwKKyAgICAgICAgImV2YWwiOiBmYWxzZSwKKworICAgICAg
ICAicGFyc2VGbG9hdCI6IGZhbHNlLAorICAgICAgICAicGFyc2VJbnQiOiBmYWxzZSwKKyAgICAg
ICAgImlzTmFOIjogZmFsc2UsCisgICAgICAgICJpc0Zpbml0ZSI6IGZhbHNlLAorCisgICAgICAg
ICJkZWNvZGVVUkkiOiBmYWxzZSwKKyAgICAgICAgImRlY29kZVVSSUNvbXBvbmVudCI6IGZhbHNl
LAorICAgICAgICAiZW5jb2RlVVJJIjogZmFsc2UsCisgICAgICAgICJlbmNvZGVVUklDb21wb25l
bnQiOiBmYWxzZSwKKworICAgICAgICAiT2JqZWN0IjogZmFsc2UsCisgICAgICAgICJGdW5jdGlv
biI6IGZhbHNlLAorICAgICAgICAiQXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlN0cmluZyI6IGZh
bHNlLAorICAgICAgICAiQm9vbGVhbiI6IGZhbHNlLAorICAgICAgICAiTWFwIjogZmFsc2UsCisg
ICAgICAgICJOdW1iZXIiOiBmYWxzZSwKKyAgICAgICAgIkRhdGUiOiBmYWxzZSwKKyAgICAgICAg
IlJlZ0V4cCI6IGZhbHNlLAorICAgICAgICAiRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIkV2YWxF
cnJvciI6IGZhbHNlLAorICAgICAgICAiUmFuZ2VFcnJvciI6IGZhbHNlLAorICAgICAgICAiUmVm
ZXJlbmNlRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlNldCI6IGZhbHNlLAorICAgICAgICAiU3lu
dGF4RXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlR5cGVFcnJvciI6IGZhbHNlLAorICAgICAgICAi
VVJJRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIldlYWtNYXAiOiBmYWxzZSwKKyAgICAgICAgIldl
YWtTZXQiOiBmYWxzZSwKKworICAgICAgICAiQXJyYXlCdWZmZXIiOiBmYWxzZSwKKyAgICAgICAg
IkZsb2F0MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiRmxvYXQ2NEFycmF5IjogZmFsc2UsCisg
ICAgICAgICJJbnQxNkFycmF5IjogZmFsc2UsCisgICAgICAgICJJbnQzMkFycmF5IjogZmFsc2Us
CisgICAgICAgICJJbnQ4QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlVpbnQxNkFycmF5IjogZmFs
c2UsCisgICAgICAgICJVaW50MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWludDhBcnJheSI6
IGZhbHNlLAorICAgICAgICAiVWludDhDbGFtcGVkQXJyYXkiOiBmYWxzZSwKKworICAgICAgICAi
TWF0aCI6IGZhbHNlLAorICAgICAgICAiSlNPTiI6IGZhbHNlLAorCisgICAgICAgICJ0b1N0cmlu
ZyI6IGZhbHNlLAorICAgICAgICAiaGFzT3duUHJvcGVydHkiOiBmYWxzZSwKKyAgICAgICAgInZh
bHVlT2YiOiBmYWxzZSwKKyAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIjogZmFsc2UsCisg
ICAgICAgICJjb25zdHJ1Y3RvciI6IGZhbHNlLAorICAgICAgICAiaXNQcm90b3R5cGVPZiI6IGZh
bHNlLAorICAgICAgICAidG9Mb2NhbGVTdHJpbmciOiBmYWxzZQorICAgIH0sCisKKyAgICAiYnJv
d3NlciI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAiYWRkRXZlbnRMaXN0
ZW5lciI6IGZhbHNlLAorICAgICAgICAgICAgImFwcGxpY2F0aW9uQ2FjaGUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJhdG9iIjogZmFsc2UsCisgICAgICAgICAgICAiQXVkaW8iOiBmYWxzZSwKKyAg
ICAgICAgICAgICJCbG9iIjogZmFsc2UsCisgICAgICAgICAgICAiYmx1ciI6IGZhbHNlLAorICAg
ICAgICAgICAgImJ0b2EiOiBmYWxzZSwKKyAgICAgICAgICAgICJjYW5jZWxBbmltYXRpb25GcmFt
ZSI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbG9zZSI6IGZhbHNlLAor
ICAgICAgICAgICAgImNsb3NlZCI6IGZhbHNlLAorICAgICAgICAgICAgImNyeXB0byI6IGZhbHNl
LAorICAgICAgICAgICAgIkRhdGFWaWV3IjogZmFsc2UsCisgICAgICAgICAgICAiZGVmYXVsdFN0
YXR1cyI6IGZhbHNlLAorICAgICAgICAgICAgImRldmljZVBpeGVsUmF0aW8iOiBmYWxzZSwKKyAg
ICAgICAgICAgICJkaXNwYXRjaEV2ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiZG9jdW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJET01QYXJzZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiRmlsZVJlYWRlciI6IGZhbHNlLAorICAgICAg
ICAgICAgImZpbmQiOiBmYWxzZSwKKyAgICAgICAgICAgICJmb2N1cyI6IGZhbHNlLAorICAgICAg
ICAgICAgIkZvcm1EYXRhIjogZmFsc2UsCisgICAgICAgICAgICAiZnJhbWVFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiZnJhbWVzIjogZmFsc2UsCisgICAgICAgICAgICAiZ2V0Q29tcHV0
ZWRTdHlsZSI6IGZhbHNlLAorICAgICAgICAgICAgImdldFNlbGVjdGlvbiI6IGZhbHNlLAorICAg
ICAgICAgICAgImhpc3RvcnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCYXNlRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxCb2R5RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxCUkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxDYW52YXNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTERp
cmVjdG9yeUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRGl2RWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIkhUTUxETGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRm9udEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJIVE1MRm9ybUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZyYW1lU2V0RWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxIZWFkRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxI
ZWFkaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIUkVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MSHRtbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MSUZyYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTExhYmVsRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxMZWdlbmRF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTExJRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxMaW5rRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxNYXBF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1lbnVFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE1v
ZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxPTGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MT3B0R3JvdXBFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MUGFyYWdyYXBoRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1M
UHJlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxRdW90ZUVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkhUTUxTZWxlY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFN0eWxlRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MVGFibGVDb2xFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGl0bGVF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFVMaXN0RWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJJbWFn
ZSI6IGZhbHNlLAorICAgICAgICAgICAgImluZGV4ZWREQiI6IGZhbHNlLAorICAgICAgICAgICAg
ImlubmVySGVpZ2h0IjogZmFsc2UsCisgICAgICAgICAgICAiaW5uZXJXaWR0aCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkludGwiOiBmYWxzZSwKKyAgICAgICAgICAgICJsZW5ndGgiOiBmYWxzZSwK
KyAgICAgICAgICAgICJsb2NhbFN0b3JhZ2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJsb2NhdGlv
biI6IGZhbHNlLAorICAgICAgICAgICAgIm1hdGNoTWVkaWEiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJNZXNzYWdlQ2hhbm5lbCI6IGZhbHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VFdmVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VQb3J0IjogZmFsc2UsCisgICAgICAgICAgICAibW92
ZUJ5IjogZmFsc2UsCisgICAgICAgICAgICAibW92ZVRvIjogZmFsc2UsCisgICAgICAgICAgICAi
TXV0YXRpb25PYnNlcnZlciI6IGZhbHNlLAorICAgICAgICAgICAgIm5hbWUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJuYXZpZ2F0b3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJOb2RlIjogZmFsc2Us
CisgICAgICAgICAgICAiTm9kZUZpbHRlciI6IGZhbHNlLAorICAgICAgICAgICAgIm9uYmVmb3Jl
dW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmJsdXIiOiB0cnVlLAorICAgICAgICAgICAg
Im9uZXJyb3IiOiB0cnVlLAorICAgICAgICAgICAgIm9uZm9jdXMiOiB0cnVlLAorICAgICAgICAg
ICAgIm9ubG9hZCI6IHRydWUsCisgICAgICAgICAgICAib25yZXNpemUiOiB0cnVlLAorICAgICAg
ICAgICAgIm9udW5sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAgICJvcGVuIjogZmFsc2UsCisgICAg
ICAgICAgICAib3BlbkRhdGFiYXNlIjogZmFsc2UsCisgICAgICAgICAgICAib3BlbmVyIjogZmFs
c2UsCisgICAgICAgICAgICAiT3B0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAib3V0ZXJIZWln
aHQiOiBmYWxzZSwKKyAgICAgICAgICAgICJvdXRlcldpZHRoIjogZmFsc2UsCisgICAgICAgICAg
ICAicGFnZVhPZmZzZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJwYWdlWU9mZnNldCI6IGZhbHNl
LAorICAgICAgICAgICAgInBhcmVudCI6IGZhbHNlLAorICAgICAgICAgICAgInBvc3RNZXNzYWdl
IjogZmFsc2UsCisgICAgICAgICAgICAicHJpbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZW1v
dmVFdmVudExpc3RlbmVyIjogZmFsc2UsCisgICAgICAgICAgICAicmVxdWVzdEFuaW1hdGlvbkZy
YW1lIjogZmFsc2UsCisgICAgICAgICAgICAicmVzaXplQnkiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJyZXNpemVUbyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcmVlbiI6IGZhbHNlLAorICAgICAg
ICAgICAgInNjcmVlblgiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JlZW5ZIjogZmFsc2UsCisg
ICAgICAgICAgICAic2Nyb2xsIjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsYmFycyI6IGZh
bHNlLAorICAgICAgICAgICAgInNjcm9sbEJ5IjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xs
VG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxYIjogZmFsc2UsCisgICAgICAgICAgICAi
c2Nyb2xsWSI6IGZhbHNlLAorICAgICAgICAgICAgInNlbGYiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJzZXNzaW9uU3RvcmFnZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldEludGVydmFsIjogZmFs
c2UsCisgICAgICAgICAgICAic2V0VGltZW91dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNoYXJl
ZFdvcmtlciI6IGZhbHNlLAorICAgICAgICAgICAgInNob3dNb2RhbERpYWxvZyI6IGZhbHNlLAor
ICAgICAgICAgICAgInN0b3AiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0FsdEdseXBoRGVmRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FsdEdseXBoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FsdEds
eXBoSXRlbUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmdsZSI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRlZEFuZ2xlIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRCb29s
ZWFuIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkSW50ZWdlciI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR0FuaW1hdGVkTGVuZ3RoIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWROdW1iZXIiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdBbmltYXRlZE51bWJlckxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8iOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdBbmltYXRlZFJlY3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZFN0cmluZyI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0FuaW1hdGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGlvbkVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDaXJjbGVFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQ2xpcFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ29sb3Ii
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0N1cnNvckVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdEZWZzRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0Rlc2NFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRG9jdW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudEluc3RhbmNl
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudEluc3RhbmNlTGlzdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0VsbGlwc2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
RkVCbGVuZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNvbG9yTWF0cml4RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVDb21wb3NpdGVFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZsb29kRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY0FFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHRkVGdW5jQkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZ1
bmNHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY1JFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHRkVJbWFnZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRU1l
cmdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdGRU9mZnNldEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdG
RVBvaW50TGlnaHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFU3BvdExpZ2h0RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFVGlsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
RmlsdGVyRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRm9udEZhY2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9u
dEZhY2VOYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlU3JjRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlVXJpRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlwaEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHbHlwaFJlZkVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdHcmFkaWVudEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdIS2Vy
bkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdJbWFnZUVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdMZW5ndGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMZW5ndGhM
aXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHTGluZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdNYXJrZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTWFza0VsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdNYXRyaXgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdN
ZXRhZGF0YUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdNaXNzaW5nR2x5cGhFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTVBhdGhFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHTnVtYmVyIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTnVtYmVyTGlzdCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhaW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0FyY0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bh
dGhTZWdBcmNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ2xvc2VQYXRoIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzIjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aFNlZ0xpbmV0b0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvUmVsIjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0xpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTW92
ZXRvQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ01vdmV0b1JlbCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR1BhdHRlcm5FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUG9pbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQb2ludExpc3QiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdQb2x5Z29uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bv
bHlsaW5lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW8iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdSZWN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUmVjdEVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdSZW5kZXJpbmdJbnRlbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdTY3JpcHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
U2V0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0b3BFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHU3RyaW5nTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0
eWxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1NWR0VsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdTd2l0Y2hFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
U3ltYm9sRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRDb250ZW50RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVGV4dFBhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RpdGxlRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RyYW5zZm9ybSI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1RyYW5zZm9ybUxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUUmVmRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RTcGFuRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1VuaXRUeXBlcyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1VzZUVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdWaWV3RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1ZpZXdTcGVjIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVktlcm5FbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAidG9wIjogZmFsc2UsCisgICAgICAgICAgICAiV2ViU29ja2V0Ijog
ZmFsc2UsCisgICAgICAgICAgICAid2luZG93IjogZmFsc2UsCisgICAgICAgICAgICAiV29ya2Vy
IjogZmFsc2UsCisgICAgICAgICAgICAiWE1MSHR0cFJlcXVlc3QiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJYTUxTZXJpYWxpemVyIjogZmFsc2UsCisgICAgICAgICAgICAiWFBhdGhFdmFsdWF0b3Ii
OiBmYWxzZSwKKyAgICAgICAgICAgICJYUGF0aEV4cHJlc3Npb24iOiBmYWxzZSwKKyAgICAgICAg
ICAgICJYUGF0aFJlc3VsdCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorCisgICAgIm5vZGUi
OiB7CisgICAgICAgICJnbG9iYWxzIjogeworICAgICAgICAgICAgIl9fZmlsZW5hbWUiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJfX2Rpcm5hbWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJCdWZmZXIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJEYXRhVmlldyI6IGZhbHNlLAorICAgICAgICAgICAgImNv
bnNvbGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJleHBvcnRzIjogdHJ1ZSwKKyAgICAgICAgICAg
ICJHTE9CQUwiOiBmYWxzZSwKKyAgICAgICAgICAgICJnbG9iYWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJtb2R1bGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJwcm9jZXNzIjogZmFsc2UsCisgICAg
ICAgICAgICAicmVxdWlyZSI6IGZhbHNlLAorICAgICAgICAgICAgInNldFRpbWVvdXQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJjbGVhclRpbWVvdXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJzZXRJ
bnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFySW50ZXJ2YWwiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJzZXRJbW1lZGlhdGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbGVhckltbWVk
aWF0ZSI6IGZhbHNlCisgICAgICAgIH0sCisKKyAgICAgICAgInJ1bGVzIjogeworICAgICAgICAg
ICAgIm5vLWNhdGNoLXNoYWRvdyI6IDAsCisgICAgICAgICAgICAibm8tY29uc29sZSI6IDAsCisg
ICAgICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiAyLAorICAgICAgICAgICAgIm5vLW5ldy1y
ZXF1aXJlIjogMiwKKyAgICAgICAgICAgICJuby1wYXRoLWNvbmNhdCI6IDIsCisgICAgICAgICAg
ICAibm8tcHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgICAgICJnbG9iYWwtc3RyaWN0IjogWzAs
ICJhbHdheXMiXSwKKyAgICAgICAgICAgICJoYW5kbGUtY2FsbGJhY2stZXJyIjogWzIsICJlcnIi
XQorICAgICAgICB9CisgICAgfSwKKworICAgICJhbWQiOiB7CisgICAgICAgICJnbG9iYWxzIjog
eworICAgICAgICAgICAgInJlcXVpcmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJkZWZpbmUiOiBm
YWxzZQorICAgICAgICB9CisgICAgfSwKKworICAgICJtb2NoYSI6IHsKKyAgICAgICAgImdsb2Jh
bHMiOiB7CisgICAgICAgICAgICAiZGVzY3JpYmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJpdCI6
IGZhbHNlLAorICAgICAgICAgICAgImJlZm9yZSI6IGZhbHNlLAorICAgICAgICAgICAgImFmdGVy
IjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICAgICAgICAgICAg
ImFmdGVyRWFjaCI6IGZhbHNlLAorCisgICAgICAgICAgICAic3VpdGUiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJ0ZXN0IjogZmFsc2UsCisgICAgICAgICAgICAic2V0dXAiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJ0ZWFyZG93biI6IGZhbHNlLAorICAgICAgICAgICAgInN1aXRlU2V0dXAiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJzdWl0ZVRlYXJkb3duIjogZmFsc2UKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICAiamFzbWluZSI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAi
YWZ0ZXJFYWNoIjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICAg
ICAgICAgICAgImRlc2NyaWJlIjogZmFsc2UsCisgICAgICAgICAgICAiZXhwZWN0IjogZmFsc2Us
CisgICAgICAgICAgICAiaXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJqYXNtaW5lIjogZmFsc2Us
CisgICAgICAgICAgICAicGVuZGluZyI6IGZhbHNlLAorICAgICAgICAgICAgInNweU9uIjogZmFs
c2UsCisgICAgICAgICAgICAid2FpdHMiOiBmYWxzZSwKKyAgICAgICAgICAgICJ3YWl0c0ZvciI6
IGZhbHNlLAorICAgICAgICAgICAgInhkZXNjcmliZSI6IGZhbHNlLAorICAgICAgICAgICAgInhp
dCI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CisKK30se31dLDI6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworbW9kdWxlLmV4cG9ydHM9eworICAgICJlbnYiOiB7CisgICAg
ICAgICJicm93c2VyIjogZmFsc2UsCisgICAgICAgICJub2RlIjogZmFsc2UsCisgICAgICAgICJh
bWQiOiBmYWxzZSwKKyAgICAgICAgIm1vY2hhIjogZmFsc2UsCisgICAgICAgICJqYXNtaW5lIjog
ZmFsc2UKKyAgICB9LAorCisgICAgInJ1bGVzIjogeworICAgICAgICAibm8tYWxlcnQiOiAyLAor
ICAgICAgICAibm8tYXJyYXktY29uc3RydWN0b3IiOiAyLAorICAgICAgICAibm8tYml0d2lzZSI6
IDAsCisgICAgICAgICJuby1jYWxsZXIiOiAyLAorICAgICAgICAibm8tY2F0Y2gtc2hhZG93Ijog
MiwKKyAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDIsCisgICAgICAgICJuby1jb25kLWFzc2ln
biI6IDIsCisgICAgICAgICJuby1jb25zb2xlIjogMiwKKyAgICAgICAgIm5vLWNvbnN0YW50LWNv
bmRpdGlvbiI6IDIsCisgICAgICAgICJuby1jb250cm9sLXJlZ2V4IjogMiwKKyAgICAgICAgIm5v
LWRlYnVnZ2VyIjogMiwKKyAgICAgICAgIm5vLWRlbGV0ZS12YXIiOiAyLAorICAgICAgICAibm8t
ZGl2LXJlZ2V4IjogMCwKKyAgICAgICAgIm5vLWR1cGUta2V5cyI6IDIsCisgICAgICAgICJuby1l
bHNlLXJldHVybiI6IDAsCisgICAgICAgICJuby1lbXB0eSI6IDIsCisgICAgICAgICJuby1lbXB0
eS1jbGFzcyI6IDIsCisgICAgICAgICJuby1lbXB0eS1sYWJlbCI6IDIsCisgICAgICAgICJuby1l
cS1udWxsIjogMCwKKyAgICAgICAgIm5vLWV2YWwiOiAyLAorICAgICAgICAibm8tZXgtYXNzaWdu
IjogMiwKKyAgICAgICAgIm5vLWV4dGVuZC1uYXRpdmUiOiAyLAorICAgICAgICAibm8tZXh0cmEt
YmluZCI6IDIsCisgICAgICAgICJuby1leHRyYS1ib29sZWFuLWNhc3QiOiAyLAorICAgICAgICAi
bm8tZXh0cmEtcGFyZW5zIjogMCwKKyAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAgICAg
ICAibm8tZXh0cmEtc3RyaWN0IjogMiwKKyAgICAgICAgIm5vLWZhbGx0aHJvdWdoIjogMiwKKyAg
ICAgICAgIm5vLWZsb2F0aW5nLWRlY2ltYWwiOiAwLAorICAgICAgICAibm8tZnVuYy1hc3NpZ24i
OiAyLAorICAgICAgICAibm8taW1wbGllZC1ldmFsIjogMiwKKyAgICAgICAgIm5vLWlubmVyLWRl
Y2xhcmF0aW9ucyI6IFsyLCAiZnVuY3Rpb25zIl0sCisgICAgICAgICJuby1pbnZhbGlkLXJlZ2V4
cCI6IDIsCisgICAgICAgICJuby1pdGVyYXRvciI6IDIsCisgICAgICAgICJuby1sYWJlbC12YXIi
OiAyLAorICAgICAgICAibm8tbGFiZWxzIjogMiwKKyAgICAgICAgIm5vLWxvbmUtYmxvY2tzIjog
MiwKKyAgICAgICAgIm5vLWxvbmVseS1pZiI6IDAsCisgICAgICAgICJuby1sb29wLWZ1bmMiOiAy
LAorICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiBbMCwgZmFsc2VdLAorICAgICAgICAibm8t
bWl4ZWQtc3BhY2VzLWFuZC10YWJzIjogWzIsIGZhbHNlXSwKKyAgICAgICAgIm5vLW11bHRpLXNw
YWNlcyI6IDIsCisgICAgICAgICJuby1tdWx0aS1zdHIiOiAyLAorICAgICAgICAibm8tbXVsdGlw
bGUtZW1wdHktbGluZXMiOiBbMCwgeyJtYXgiOiAyfV0sCisgICAgICAgICJuby1uYXRpdmUtcmVh
c3NpZ24iOiAyLAorICAgICAgICAibm8tbmVnYXRlZC1pbi1saHMiOiAyLAorICAgICAgICAibm8t
bmVzdGVkLXRlcm5hcnkiOiAwLAorICAgICAgICAibm8tbmV3IjogMiwKKyAgICAgICAgIm5vLW5l
dy1mdW5jIjogMiwKKyAgICAgICAgIm5vLW5ldy1vYmplY3QiOiAyLAorICAgICAgICAibm8tbmV3
LXJlcXVpcmUiOiAwLAorICAgICAgICAibm8tbmV3LXdyYXBwZXJzIjogMiwKKyAgICAgICAgIm5v
LW9iai1jYWxscyI6IDIsCisgICAgICAgICJuby1vY3RhbCI6IDIsCisgICAgICAgICJuby1vY3Rh
bC1lc2NhcGUiOiAyLAorICAgICAgICAibm8tcGF0aC1jb25jYXQiOiAwLAorICAgICAgICAibm8t
cGx1c3BsdXMiOiAwLAorICAgICAgICAibm8tcHJvY2Vzcy1lbnYiOiAwLAorICAgICAgICAibm8t
cHJvY2Vzcy1leGl0IjogMiwKKyAgICAgICAgIm5vLXByb3RvIjogMiwKKyAgICAgICAgIm5vLXJl
ZGVjbGFyZSI6IDIsCisgICAgICAgICJuby1yZWdleC1zcGFjZXMiOiAyLAorICAgICAgICAibm8t
cmVzZXJ2ZWQta2V5cyI6IDAsCisgICAgICAgICJuby1yZXN0cmljdGVkLW1vZHVsZXMiOiAwLAor
ICAgICAgICAibm8tcmV0dXJuLWFzc2lnbiI6IDIsCisgICAgICAgICJuby1zY3JpcHQtdXJsIjog
MiwKKyAgICAgICAgIm5vLXNlbGYtY29tcGFyZSI6IDAsCisgICAgICAgICJuby1zZXF1ZW5jZXMi
OiAyLAorICAgICAgICAibm8tc2hhZG93IjogMiwKKyAgICAgICAgIm5vLXNoYWRvdy1yZXN0cmlj
dGVkLW5hbWVzIjogMiwKKyAgICAgICAgIm5vLXNwYWNlLWJlZm9yZS1zZW1pIjogMiwKKyAgICAg
ICAgIm5vLXNwYWNlZC1mdW5jIjogMiwKKyAgICAgICAgIm5vLXNwYXJzZS1hcnJheXMiOiAyLAor
ICAgICAgICAibm8tc3luYyI6IDAsCisgICAgICAgICJuby10ZXJuYXJ5IjogMCwKKyAgICAgICAg
Im5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICJuby11bmRlZiI6IDIsCisgICAgICAg
ICJuby11bmRlZi1pbml0IjogMiwKKyAgICAgICAgIm5vLXVuZGVmaW5lZCI6IDAsCisgICAgICAg
ICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDIsCisgICAgICAgICJuby11bnJlYWNoYWJsZSI6IDIs
CisgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAorICAgICAgICAibm8tdW51c2Vk
LXZhcnMiOiBbMiwgeyJ2YXJzIjogImFsbCIsICJhcmdzIjogImFmdGVyLXVzZWQifV0sCisgICAg
ICAgICJuby11c2UtYmVmb3JlLWRlZmluZSI6IDIsCisgICAgICAgICJuby12b2lkIjogMCwKKyAg
ICAgICAgIm5vLXdhcm5pbmctY29tbWVudHMiOiBbMCwgeyAidGVybXMiOiBbInRvZG8iLCAiZml4
bWUiLCAieHh4Il0sICJsb2NhdGlvbiI6ICJzdGFydCIgfV0sCisgICAgICAgICJuby13aXRoIjog
MiwKKyAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisKKyAgICAgICAgImJsb2NrLXNjb3BlZC12
YXIiOiAwLAorICAgICAgICAiYnJhY2Utc3R5bGUiOiBbMCwgIjF0YnMiXSwKKyAgICAgICAgImNh
bWVsY2FzZSI6IDIsCisgICAgICAgICJjb21tYS1zcGFjaW5nIjogMiwKKyAgICAgICAgImNvbW1h
LXN0eWxlIjogMCwKKyAgICAgICAgImNvbXBsZXhpdHkiOiBbMCwgMTFdLAorICAgICAgICAiY29u
c2lzdGVudC1yZXR1cm4iOiAyLAorICAgICAgICAiY29uc2lzdGVudC10aGlzIjogWzAsICJ0aGF0
Il0sCisgICAgICAgICJjdXJseSI6IFsyLCAiYWxsIl0sCisgICAgICAgICJkZWZhdWx0LWNhc2Ui
OiAwLAorICAgICAgICAiZG90LW5vdGF0aW9uIjogMiwKKyAgICAgICAgImVvbC1sYXN0IjogMiwK
KyAgICAgICAgImVxZXFlcSI6IDIsCisgICAgICAgICJmdW5jLW5hbWVzIjogMCwKKyAgICAgICAg
ImZ1bmMtc3R5bGUiOiBbMCwgImRlY2xhcmF0aW9uIl0sCisgICAgICAgICJnbG9iYWwtc3RyaWN0
IjogWzIsICJuZXZlciJdLAorICAgICAgICAiZ3VhcmQtZm9yLWluIjogMCwKKyAgICAgICAgImhh
bmRsZS1jYWxsYmFjay1lcnIiOiAwLAorICAgICAgICAia2V5LXNwYWNpbmciOiBbMiwgeyAiYmVm
b3JlQ29sb24iOiBmYWxzZSwgImFmdGVyQ29sb24iOiB0cnVlIH1dLAorICAgICAgICAibWF4LWRl
cHRoIjogWzAsIDRdLAorICAgICAgICAibWF4LWxlbiI6IFswLCA4MCwgNF0sCisgICAgICAgICJt
YXgtbmVzdGVkLWNhbGxiYWNrcyI6IFswLCAyXSwKKyAgICAgICAgIm1heC1wYXJhbXMiOiBbMCwg
M10sCisgICAgICAgICJtYXgtc3RhdGVtZW50cyI6IFswLCAxMF0sCisgICAgICAgICJuZXctY2Fw
IjogMiwKKyAgICAgICAgIm5ldy1wYXJlbnMiOiAyLAorICAgICAgICAib25lLXZhciI6IDAsCisg
ICAgICAgICJwYWRkZWQtYmxvY2tzIjogMCwKKyAgICAgICAgInF1b3RlLXByb3BzIjogMCwKKyAg
ICAgICAgInF1b3RlcyI6IFsyLCAiZG91YmxlIl0sCisgICAgICAgICJyYWRpeCI6IDAsCisgICAg
ICAgICJzZW1pIjogMiwKKyAgICAgICAgInNvcnQtdmFycyI6IDAsCisgICAgICAgICJzcGFjZS1h
ZnRlci1rZXl3b3JkcyI6IFswLCAiYWx3YXlzIl0sCisgICAgICAgICJzcGFjZS1iZWZvcmUtYmxv
Y2tzIjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgInNwYWNlLWluLWJyYWNrZXRzIjogWzAsICJu
ZXZlciJdLAorICAgICAgICAic3BhY2UtaW4tcGFyZW5zIjogWzAsICJuZXZlciJdLAorICAgICAg
ICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNl
IjogMiwKKyAgICAgICAgInNwYWNlLXVuYXJ5LXdvcmQtb3BzIjogMCwKKyAgICAgICAgInNwYWNl
ZC1saW5lLWNvbW1lbnQiOiBbMCwgImFsd2F5cyJdLAorICAgICAgICAic3RyaWN0IjogMiwKKyAg
ICAgICAgInVzZS1pc25hbiI6IDIsCisgICAgICAgICJ2YWxpZC1qc2RvYyI6IDAsCisgICAgICAg
ICJ2YWxpZC10eXBlb2YiOiAyLAorICAgICAgICAidmFycy1vbi10b3AiOiAwLAorICAgICAgICAi
d3JhcC1paWZlIjogMCwKKyAgICAgICAgIndyYXAtcmVnZXgiOiAwLAorICAgICAgICAieW9kYSI6
IFsyLCAibmV2ZXIiXQorICAgIH0KK30KKworfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNv
bnRyaWJ1dG9ycy4KKy8vCisvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorLy8gY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorLy8gIlNvZnR3YXJl
IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZworLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLAorLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdAorLy8gcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlCisvLyBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKy8vCisvLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorLy8gaW4gYWxsIGNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisvLworLy8gVEhF
IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ
TkQsIEVYUFJFU1MKKy8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4KKy8vIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN
LAorLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G
IENPTlRSQUNULCBUT1JUIE9SCisvLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisvLyBVU0UgT1IgT1RIRVIg
REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7Cisg
IHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTsKKyAgdGhpcy5fbWF4TGlzdGVuZXJz
ID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDsKK30KK21vZHVsZS5leHBvcnRzID0g
RXZlbnRFbWl0dGVyOworCisvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLngKK0V2
ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CisKK0V2ZW50RW1pdHRlci5w
cm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDsKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuX21h
eExpc3RlbmVycyA9IHVuZGVmaW5lZDsKKworLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdp
bGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlCisvLyBhZGRl
ZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVt
b3J5IGxlYWtzLgorRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDsKKworLy8g
T2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMg
ZnVuY3Rpb24gYWxsb3dzCisvLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9y
IHVubGltaXRlZC4KK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVu
Y3Rpb24obikgeworICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKQorICAg
IHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7CisgIHRoaXMu
X21heExpc3RlbmVycyA9IG47CisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRFbWl0dGVyLnBy
b3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwg
YXJncywgaSwgbGlzdGVuZXJzOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2
ZW50cyA9IHt9OworCisgIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIg
dGhlbiB0aHJvdy4KKyAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKKyAgICBpZiAoIXRoaXMuX2V2
ZW50cy5lcnJvciB8fAorICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAh
dGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHsKKyAgICAgIGVyID0gYXJndW1lbnRzWzFdOwor
ICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgdGhyb3cgZXI7IC8vIFVu
aGFuZGxlZCAnZXJyb3InIGV2ZW50CisgICAgICB9CisgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1Vu
Y2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpOworICAgIH0KKyAgfQorCisgIGhh
bmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIp
KQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkgeworICAg
IHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgLy8gZmFzdCBjYXNlcworICAgICAg
Y2FzZSAxOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSAyOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBh
cmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CisgICAgICAgIGJyZWFrOworICAgICAgLy8gc2xv
d2VyCisgICAgICBkZWZhdWx0OgorICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAg
ICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgICAgICBmb3IgKGkgPSAxOyBpIDwg
bGVuOyBpKyspCisgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisgICAgICAg
IGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CisgICAgfQorICB9IGVsc2UgaWYgKGlzT2JqZWN0
KGhhbmRsZXIpKSB7CisgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICBhcmdzID0gbmV3
IEFycmF5KGxlbiAtIDEpOworICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKKyAgICAgIGFy
Z3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworCisgICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGlj
ZSgpOworICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CisgICAgZm9yIChpID0gMDsgaSA8IGxl
bjsgaSsrKQorICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpOworICB9CisKKyAg
cmV0dXJuIHRydWU7Cit9OworCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0g
ZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKKyAgdmFyIG07CisKKyAgaWYgKCFpc0Z1bmN0aW9u
KGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5j
dGlvbicpOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2ZW50cyA9IHt9Owor
CisgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09ICJuZXdM
aXN0ZW5lciIhIEJlZm9yZQorICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3Qg
ZW1pdCAibmV3TGlzdGVuZXIiLgorICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKQorICAg
IHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLAorICAgICAgICAgICAgICBpc0Z1bmN0aW9u
KGxpc3RlbmVyLmxpc3RlbmVyKSA/CisgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDog
bGlzdGVuZXIpOworCisgIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIC8vIE9wdGltaXpl
IHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2Jq
ZWN0LgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyOworICBlbHNlIGlmIChpc09i
amVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKQorICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFu
IGFycmF5LCBqdXN0IGFwcGVuZC4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5l
cik7CisgIGVsc2UKKyAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNo
YW5nZSB0byBhcnJheS4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5
cGVdLCBsaXN0ZW5lcl07CisKKyAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWsKKyAgaWYgKGlz
T2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQp
IHsKKyAgICB2YXIgbTsKKyAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykp
IHsKKyAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CisgICAgfSBlbHNlIHsKKyAgICAgIG0g
PSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczsKKyAgICB9CisKKyAgICBpZiAobSAm
JiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkgeworICAgICAgdGhpcy5f
ZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CisgICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkg
d2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICsKKyAgICAgICAgICAgICAg
ICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArCisgICAgICAgICAg
ICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1p
dC4nLAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTsKKyAg
ICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAv
LyBub3Qgc3VwcG9ydGVkIGluIElFIDEwCisgICAgICAgIGNvbnNvbGUudHJhY2UoKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1pdHRlci5wcm90
b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyOworCitFdmVudEVt
aXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgeworICBpZiAo
IWlzRnVuY3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVz
dCBiZSBhIGZ1bmN0aW9uJyk7CisKKyAgdmFyIGZpcmVkID0gZmFsc2U7CisKKyAgZnVuY3Rpb24g
ZygpIHsKKyAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpOworCisgICAgaWYgKCFmaXJl
ZCkgeworICAgICAgZmlyZWQgPSB0cnVlOworICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICB9CisgIH0KKworICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgIHRoaXMu
b24odHlwZSwgZyk7CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvLyBlbWl0cyBhICdyZW1vdmVM
aXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZAorRXZlbnRFbWl0dGVy
LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7Cisg
IHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpOworCisgIGlmICghaXNGdW5jdGlvbihsaXN0
ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24n
KTsKKworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIHJl
dHVybiB0aGlzOworCisgIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07CisgIGxlbmd0aCA9IGxp
c3QubGVuZ3RoOworICBwb3NpdGlvbiA9IC0xOworCisgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8
fAorICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0g
bGlzdGVuZXIpKSB7CisgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICBpZiAodGhp
cy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQorICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5l
cicsIHR5cGUsIGxpc3RlbmVyKTsKKworICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7Cisg
ICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykgeworICAgICAgaWYgKGxpc3RbaV0gPT09IGxp
c3RlbmVyIHx8CisgICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5l
ciA9PT0gbGlzdGVuZXIpKSB7CisgICAgICAgIHBvc2l0aW9uID0gaTsKKyAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAgIHJldHVybiB0
aGlzOworCisgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7CisgICAgICBsaXN0Lmxlbmd0aCA9
IDA7CisgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworICAgIH0gZWxzZSB7CisgICAg
ICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7CisgICAgfQorCisgICAgaWYgKHRoaXMuX2V2ZW50
cy5yZW1vdmVMaXN0ZW5lcikKKyAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBl
LCBsaXN0ZW5lcik7CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1pdHRlci5w
cm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIga2V5
LCBsaXN0ZW5lcnM7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgcmV0dXJuIHRoaXM7CisK
KyAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdAor
ICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikgeworICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID09PSAwKQorICAgICAgdGhpcy5fZXZlbnRzID0ge307CisgICAgZWxzZSBpZiAodGhp
cy5fZXZlbnRzW3R5cGVdKQorICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0
ZW5lcnMgb24gYWxsIGV2ZW50cworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAg
IGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykgeworICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxp
c3RlbmVyJykgY29udGludWU7CisgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpOwor
ICAgIH0KKyAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTsKKyAg
ICB0aGlzLl9ldmVudHMgPSB7fTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGxpc3RlbmVy
cyA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7
CisgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpOworICB9IGVsc2Ugewor
ICAgIC8vIExJRk8gb3JkZXIKKyAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCkKKyAgICAgIHRo
aXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7
CisgIH0KKyAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICByZXR1cm4gdGhpczsKK307
CisKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgewor
ICB2YXIgcmV0OworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKQor
ICAgIHJldCA9IFtdOworICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkp
CisgICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07CisgIGVsc2UKKyAgICByZXQgPSB0aGlz
Ll9ldmVudHNbdHlwZV0uc2xpY2UoKTsKKyAgcmV0dXJuIHJldDsKK307CisKK0V2ZW50RW1pdHRl
ci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkgeworICB2YXIgcmV0Owor
ICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKQorICAgIHJl
dCA9IDA7CisgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSkKKyAg
ICByZXQgPSAxOworICBlbHNlCisgICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0
aDsKKyAgcmV0dXJuIHJldDsKK307CisKK2Z1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7CisgIHJl
dHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nOworfQorCitmdW5jdGlvbiBpc051bWJlcihh
cmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInOworfQorCitmdW5jdGlvbiBp
c09iamVjdChhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAh
PT0gbnVsbDsKK30KKworZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7CisgIHJldHVybiBhcmcg
PT09IHZvaWQgMDsKK30KKworfSx7fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxNCBEYW4gVGFvIDxkYW5pZWwudGFv
QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBFaXNlbmJlcmcgPGFuZHJl
d0BlaXNlbmJlcmcuYXM+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8q
anNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlIGVxZXE6dHJ1ZSBub21lbjp0cnVlKi8K
Ky8qZ2xvYmFsIGRvY3RyaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgcGFyc2VUeXBlRXhwcmVzc2lv
bjp0cnVlLCBwYXJzZVRvcDp0cnVlKi8KKworKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgdmFyIFZFUlNJT04sCisgICAgICAgIFJlZ2V4LAorICAgICAgICBD
YW5BY2Nlc3NTdHJpbmdCeUluZGV4LAorICAgICAgICB0eXBlZCwKKyAgICAgICAganNkb2MsCisg
ICAgICAgIGlzQXJyYXksCisgICAgICAgIGhhc093blByb3BlcnR5OworCisgICAgLy8gU3luYyB3
aXRoIHBhY2thZ2UuanNvbi4KKyAgICBWRVJTSU9OID0gJzAuNS4yLWRldic7CisKKyAgICAvLyBT
ZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJlZ2V4ID0gewor
ICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4YWFceGI1XHhi
YVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRc
dTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM4Nlx1
MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFc
dTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1ZDAtXHUwNWVh
XHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQzXHUwNmQ1
XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVmXHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1MDcxMi1c
dTA3MmZcdTA3NGQtXHUwN2E1XHUwN2IxXHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1MDdmYVx1
MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOGEwXHUwOGEyLVx1
MDhhY1x1MDkwNC1cdTA5MzlcdTA5M2RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N1x1
MDk3OS1cdTA5N2ZcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlhYS1c
dTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJkXHUwOWNlXHUwOWRjXHUwOWRkXHUwOWRmLVx1
MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUw
YTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGE1OS1cdTBh
NWNcdTBhNWVcdTBhNzItXHUwYTc0XHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUw
YWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmRcdTBhZDBcdTBh
ZTBcdTBhZTFcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBi
MzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2
MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5
OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUt
XHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJh
LVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2RcdTBjNThcdTBjNTlcdTBjNjBcdTBjNjFcdTBjODUt
XHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNi
OVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNlMVx1MGNmMVx1MGNmMlx1MGQwNS1cdTBkMGNcdTBkMGUt
XHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0ZVx1MGQ2MFx1MGQ2MVx1MGQ3YS1cdTBkN2Zc
dTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2
XHUwZTAxLVx1MGUzMFx1MGUzMlx1MGUzM1x1MGU0MC1cdTBlNDZcdTBlODFcdTBlODJcdTBlODRc
dTBlODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1c
dTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWIwXHUwZWIyXHUwZWIzXHUw
ZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmNDAtXHUwZjQ3XHUw
ZjQ5LVx1MGY2Y1x1MGY4OC1cdTBmOGNcdTEwMDAtXHUxMDJhXHUxMDNmXHUxMDUwLVx1MTA1NVx1
MTA1YS1cdTEwNWRcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNmUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1
MTA4ZVx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZjLVx1MTI0OFx1
MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2MC1cdTEyODhc
dTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUxMmJlXHUxMmMw
XHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMx
OC1cdTEzNWFcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2NmYtXHUx
NjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1MTcwY1x1
MTcwZS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NmNcdTE3NmUt
XHUxNzcwXHUxNzgwLVx1MTdiM1x1MTdkN1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOGE4
XHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5NTAtXHUxOTZkXHUxOTcwLVx1MTk3
NFx1MTk4MC1cdTE5YWJcdTE5YzEtXHUxOWM3XHUxYTAwLVx1MWExNlx1MWEyMC1cdTFhNTRcdTFh
YTdcdTFiMDUtXHUxYjMzXHUxYjQ1LVx1MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVcdTFiYWZcdTFi
YmEtXHUxYmU1XHUxYzAwLVx1MWMyM1x1MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdkXHUxY2U5LVx1
MWNlY1x1MWNlZS1cdTFjZjFcdTFjZjVcdTFjZjZcdTFkMDAtXHUxZGJmXHUxZTAwLVx1MWYxNVx1
MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFmNTdcdTFmNTlc
dTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFmYmNcdTFmYmVc
dTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUxZmRiXHUxZmUw
LVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5
Y1x1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2
XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0
OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJj
ZTRcdTJjZWItXHUyY2VlXHUyY2YyXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQyZFx1MmQz
MC1cdTJkNjdcdTJkNmZcdTJkODAtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJkYWVcdTJk
YjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUyZGQwLVx1
MmRkNlx1MmRkOC1cdTJkZGVcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1c
dTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZh
XHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFm
MC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVh
NGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVhNjZlXHVh
NjdmLVx1YTY5N1x1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1c
dWE3OGVcdWE3OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MDFcdWE4MDMtXHVhODA1
XHVhODA3LVx1YTgwYVx1YTgwYy1cdWE4MjJcdWE4NDAtXHVhODczXHVhODgyLVx1YThiM1x1YThm
Mi1cdWE4ZjdcdWE4ZmJcdWE5MGEtXHVhOTI1XHVhOTMwLVx1YTk0Nlx1YTk2MC1cdWE5N2NcdWE5
ODQtXHVhOWIyXHVhOWNmXHVhYTAwLVx1YWEyOFx1YWE0MC1cdWFhNDJcdWFhNDQtXHVhYTRiXHVh
YTYwLVx1YWE3Nlx1YWE3YVx1YWE4MC1cdWFhYWZcdWFhYjFcdWFhYjVcdWFhYjZcdWFhYjktXHVh
YWJkXHVhYWMwXHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWFcdWFhZjItXHVhYWY0XHVh
YjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1c
dWFiMmVcdWFiYzAtXHVhYmUyXHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2Zi
XHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIx
ZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0
MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5
Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMjEtXHVm
ZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1
ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpLAorICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQ
YXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAy
YzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJlZVx1MDMwMC1cdTAzNzRcdTAz
NzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1cdTAz
YTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OGEtXHUwNTI3XHUw
NTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUw
NWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MTAtXHUw
NjFhXHUwNjIwLVx1MDY2OVx1MDY2ZS1cdTA2ZDNcdTA2ZDUtXHUwNmRjXHUwNmRmLVx1MDZlOFx1
MDZlYS1cdTA2ZmNcdTA2ZmZcdTA3MTAtXHUwNzRhXHUwNzRkLVx1MDdiMVx1MDdjMC1cdTA3ZjVc
dTA3ZmFcdTA4MDAtXHUwODJkXHUwODQwLVx1MDg1Ylx1MDhhMFx1MDhhMi1cdTA4YWNcdTA4ZTQt
XHUwOGZlXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NmZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3
Zlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1MDlh
YS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJjLVx1MDljNFx1MDljN1x1MDljOFx1MDlj
Yi1cdTA5Y2VcdTA5ZDdcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUzXHUwOWU2LVx1MDlmMVx1MGEw
MS1cdTBhMDNcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1MGEyYS1cdTBh
MzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhM2NcdTBhM2UtXHUwYTQy
XHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE1OS1cdTBhNWNcdTBhNWVcdTBhNjYt
XHUwYTc1XHUwYTgxLVx1MGE4M1x1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkzLVx1MGFh
OFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJjLVx1MGFjNVx1MGFj
Ny1cdTBhYzlcdTBhY2ItXHUwYWNkXHUwYWQwXHUwYWUwLVx1MGFlM1x1MGFlNi1cdTBhZWZcdTBi
MDEtXHUwYjAzXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBiMmEtXHUw
YjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzYy1cdTBiNDRcdTBiNDdcdTBiNDhcdTBi
NGItXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2M1x1MGI2Ni1cdTBi
NmZcdTBiNzFcdTBiODJcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1cdTBi
OTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUwYmFh
XHUwYmFlLVx1MGJiOVx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJjZFx1MGJk
MFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDEtXHUwYzAzXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBj
MTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2QtXHUwYzQ0XHUw
YzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNThcdTBjNTlcdTBjNjAtXHUw
YzYzXHUwYzY2LVx1MGM2Zlx1MGM4Mlx1MGM4M1x1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUw
YzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JjLVx1MGNjNFx1MGNjNi1c
dTBjYzhcdTBjY2EtXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2RlXHUwY2UwLVx1MGNlM1x1MGNlNi1c
dTBjZWZcdTBjZjFcdTBjZjJcdTBkMDJcdTBkMDNcdTBkMDUtXHUwZDBjXHUwZDBlLVx1MGQxMFx1
MGQxMi1cdTBkM2FcdTBkM2QtXHUwZDQ0XHUwZDQ2LVx1MGQ0OFx1MGQ0YS1cdTBkNGVcdTBkNTdc
dTBkNjAtXHUwZDYzXHUwZDY2LVx1MGQ2Zlx1MGQ3YS1cdTBkN2ZcdTBkODJcdTBkODNcdTBkODUt
XHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2XHUwZGNh
XHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRkOC1cdTBkZGZcdTBkZjJcdTBkZjNcdTBlMDEtXHUwZTNh
XHUwZTQwLVx1MGU0ZVx1MGU1MC1cdTBlNTlcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhc
dTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBlYTNcdTBlYTVc
dTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWI5XHUwZWJiLVx1MGViZFx1MGVjMC1cdTBlYzRc
dTBlYzZcdTBlYzgtXHUwZWNkXHUwZWQwLVx1MGVkOVx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmMThc
dTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjNlLVx1MGY0N1x1MGY0OS1c
dTBmNmNcdTBmNzEtXHUwZjg0XHUwZjg2LVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZcdTEwMDAt
XHUxMDQ5XHUxMDUwLVx1MTA5ZFx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZh
XHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1
ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEy
YjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUx
MzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFcdTEzNWQtXHUxMzVmXHUxMzgwLVx1MTM4Zlx1MTNhMC1c
dTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAtXHUxNmVh
XHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3MGNcdTE3MGUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0
MC1cdTE3NTNcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3
ZDNcdTE3ZDdcdTE3ZGNcdTE3ZGRcdTE3ZTAtXHUxN2U5XHUxODBiLVx1MTgwZFx1MTgxMC1cdTE4
MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFjXHUx
OTIwLVx1MTkyYlx1MTkzMC1cdTE5M2JcdTE5NDYtXHUxOTZkXHUxOTcwLVx1MTk3NFx1MTk4MC1c
dTE5YWJcdTE5YjAtXHUxOWM5XHUxOWQwLVx1MTlkOVx1MWEwMC1cdTFhMWJcdTFhMjAtXHUxYTVl
XHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFhODlcdTFhOTAtXHUxYTk5XHUxYWE3XHUxYjAwLVx1MWI0
Ylx1MWI1MC1cdTFiNTlcdTFiNmItXHUxYjczXHUxYjgwLVx1MWJmM1x1MWMwMC1cdTFjMzdcdTFj
NDAtXHUxYzQ5XHUxYzRkLVx1MWM3ZFx1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2Y2XHUxZDAwLVx1
MWRlNlx1MWRmYy1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRc
dTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRc
dTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQz
XHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjAw
Y1x1MjAwZFx1MjAzZlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNcdTIwZDAt
XHUyMGRjXHUyMGUxXHUyMGU1LVx1MjBmMFx1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVc
dTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlc
dTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJl
XHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRcdTJjZWItXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQy
N1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkN2YtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRh
OC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUy
ZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJkZTAtXHUyZGZmXHUyZTJmXHUzMDA1LVx1
MzAwN1x1MzAyMS1cdTMwMmZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZc
dTMwOTlcdTMwOWFcdTMwOWQtXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUt
XHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRi
NVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2
MTAtXHVhNjJiXHVhNjQwLVx1YTY2Zlx1YTY3NC1cdWE2N2RcdWE2N2YtXHVhNjk3XHVhNjlmLVx1
YTZmMVx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5MC1cdWE3OTNc
dWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgyN1x1YTg0MC1cdWE4NzNcdWE4ODAtXHVhOGM0XHVhOGQw
LVx1YThkOVx1YThlMC1cdWE4ZjdcdWE4ZmJcdWE5MDAtXHVhOTJkXHVhOTMwLVx1YTk1M1x1YTk2
MC1cdWE5N2NcdWE5ODAtXHVhOWMwXHVhOWNmLVx1YTlkOVx1YWEwMC1cdWFhMzZcdWFhNDAtXHVh
YTRkXHVhYTUwLVx1YWE1OVx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhN2JcdWFhODAtXHVhYWMyXHVh
YWRiLVx1YWFkZFx1YWFlMC1cdWFhZWZcdWFhZjItXHVhYWY2XHVhYjAxLVx1YWIwNlx1YWIwOS1c
dWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmVh
XHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2Ni
LVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZi
MTdcdWZiMWQtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBcdWZi
NDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZcdWZk
OTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVmZTMzXHVm
ZTM0XHVmZTRkLVx1ZmU0Zlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjEwLVx1ZmYxOVx1
ZmYyMS1cdWZmM2FcdWZmM2ZcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdc
dWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJykKKyAgICB9OworCisgICAg
Q2FuQWNjZXNzU3RyaW5nQnlJbmRleCA9IHR5cGVvZiAnZG9jdHJpbmUnWzBdICE9PSB1bmRlZmlu
ZWQ7CisKKyAgICBmdW5jdGlvbiBzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCBsYXN0KSB7Cisg
ICAgICAgIHZhciBvdXRwdXQ7CisgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCkg
eworICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKGluZGV4LCBsYXN0KS5qb2luKCcn
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZShp
bmRleCwgbGFzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9CisK
KyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgICBpZiAoIWlzQXJyYXkpIHsKKyAgICAg
ICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJ5KSB7CisgICAgICAgICAgICByZXR1cm4g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyeSkgPT09ICdbb2JqZWN0IEFycmF5XSc7
CisgICAgICAgIH07CisgICAgfQorCisgICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkg
eworICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTsKKyAgICAgICAgfTsKKyAgICB9KCkp
OworCisgICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7CisgICAgICAgIHZhciByZXQgPSB7
fSwga2V5OworICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChvYmou
aGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tl
eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAgIHJldHVybiBj
aCA9PT0gJ1xuJyB8fCBjaCA9PT0gJ1xyJyB8fCBjaCA9PT0gJ1x1MjAyOCcgfHwgY2ggPT09ICdc
dTIwMjknOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAnICcpIHx8IChjaCA9PT0gJ1x1MDAwOScpIHx8IChjaCA9PT0gJ1x1
MDAwQicpIHx8CisgICAgICAgICAgICAoY2ggPT09ICdcdTAwMEMnKSB8fCAoY2ggPT09ICdcdTAw
QTAnKSB8fAorICAgICAgICAgICAgKGNoLmNoYXJDb2RlQXQoMCkgPj0gMHgxNjgwICYmCisgICAg
ICAgICAgICAgJ1x1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAw
NVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1RkVGRicu
aW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQo
Y2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5Jy5pbmRleE9mKGNoKSA+PSAwOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIz
NDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9m
KGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVyaWMoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0En
ICYmIGNoIDw9ICdaJykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09
ICckJykgfHwgKGNoID09PSAnXycpIHx8IChjaCA9PT0gJ1xcJykgfHwKKyAgICAgICAgICAgIChj
aCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKKyAg
ICAgICAgICAgICgoY2guY2hhckNvZGVBdCgwKSA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlk
ZW50aWZpZXJTdGFydC50ZXN0KGNoKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlm
aWVyUGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAnJCcpIHx8IChjaCA9PT0gJ18n
KSB8fCAoY2ggPT09ICdcXCcpIHx8CisgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6
JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAoKGNoID49ICcw
JykgJiYgKGNoIDw9ICc5JykpIHx8CisgICAgICAgICAgICAoKGNoLmNoYXJDb2RlQXQoMCkgPj0g
MHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGNoKSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkgeworICAgICAgICByZXR1cm4gJz48KCl7fVtd
LDoqfD8hPScuaW5kZXhPZihjaCkgPT09IC0xICYmICFpc1doaXRlU3BhY2UoY2gpICYmICFpc0xp
bmVUZXJtaW5hdG9yKGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1BhcmFtVGl0bGUodGl0
bGUpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncGFyYW0nIHx8IHRpdGxlID09PSAnYXJn
dW1lbnQnIHx8IHRpdGxlID09PSAnYXJnJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1Byb3Bl
cnR5KHRpdGxlKSB7CisgICAgICAgIHJldHVybiB0aXRsZSA9PT0gJ3Byb3BlcnR5JyB8fCB0aXRs
ZSA9PT0gJ3Byb3AnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzTmFtZVBhcmFtZXRlclJlcXVp
cmVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0bGUpIHx8IGlzUHJv
cGVydHkodGl0bGUpIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2FsaWFzJyB8fCB0aXRsZSA9
PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAnbWl4ZXMnIHx8IHRpdGxlID09PSAncmVxdWlyZXMnOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5hbWUodGl0bGUpIHsKKyAgICAgICAgcmV0
dXJuIGlzTmFtZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8
fCB0aXRsZSA9PT0gJ2NvbnN0YW50JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FsbG93ZWRO
ZXN0ZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkodGl0bGUpIHx8IGlzUGFy
YW1UaXRsZSh0aXRsZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlUGFyYW1ldGVyUmVx
dWlyZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgdGl0
bGUgPT09ICdkZWZpbmUnIHx8IHRpdGxlID09PSAnZW51bScgfHwKKyAgICAgICAgICAgIHRpdGxl
ID09PSAnaW1wbGVtZW50cycgfHwgdGl0bGUgPT09ICdyZXR1cm4nIHx8CisgICAgICAgICAgICB0
aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAndHlwZScgfHwgdGl0bGUgPT09ICd0eXBlZGVm
JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdyZXR1cm5zJyB8fCBpc1Byb3BlcnR5KHRpdGxl
KTsKKyAgICB9CisKKyAgICAvLyBDb25zaWRlciBkZXByZWNhdGlvbiBpbnN0ZWFkIHVzaW5nICdp
c1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCcgYW5kICdSdWxlcycgZGVjbGFyYXRpb24gdG8gcGljayB3
aGVuIGEgdHlwZSBpcyBvcHRpb25hbC9yZXF1aXJlZAorICAgIC8vIFRoaXMgd291bGQgcmVxdWly
ZSBjaGFuZ2VzIHRvICdwYXJzZVR5cGUnCisgICAgZnVuY3Rpb24gaXNBbGxvd2VkVHlwZSh0aXRs
ZSkgeworICAgICAgICByZXR1cm4gaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRp
dGxlID09PSAndGhyb3dzJyB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8fCB0aXRsZSA9PT0gJ2NvbnN0
YW50JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICduYW1lc3BhY2UnIHx8IHRpdGxlID09PSAn
bWVtYmVyJyB8fCB0aXRsZSA9PT0gJ3ZhcicgfHwgdGl0bGUgPT09ICdtb2R1bGUnIHx8CisgICAg
ICAgICAgICB0aXRsZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0aXRsZSA9PT0gJ2NsYXNzJyB8fCB0
aXRsZSA9PT0gJ2V4dGVuZHMnIHx8IHRpdGxlID09PSAnYXVnbWVudHMnIHx8CisgICAgICAgICAg
ICB0aXRsZSA9PT0gJ3B1YmxpYycgfHwgdGl0bGUgPT09ICdwcml2YXRlJyB8fCB0aXRsZSA9PT0g
J3Byb3RlY3RlZCc7CisgICAgfQorCisgICAgZnVuY3Rpb24gRG9jdHJpbmVFcnJvcihtZXNzYWdl
KSB7CisgICAgICAgIHRoaXMubmFtZSA9ICdEb2N0cmluZUVycm9yJzsKKyAgICAgICAgdGhpcy5t
ZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CisgICAgRG9jdHJpbmVFcnJvci5wcm90b3R5cGUgPSBu
ZXcgRXJyb3IoKTsKKyAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERv
Y3RyaW5lRXJyb3I7CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IERvY3RyaW5lRXJyb3IobWVzc2FnZSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gYXNzZXJ0KGNvbmQsIHRleHQpIHsKKyAgICAgICAgaWYgKFZFUlNJT04uc2xpY2UoLTMpID09
PSAnZGV2JykgeworICAgICAgICAgICAgaWYgKCFjb25kKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih0ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIHRyaW0oc3RyKSB7CisgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxzKy8sICcn
KS5yZXBsYWNlKC9ccyskLywgJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVud3JhcENvbW1l
bnQoZG9jKSB7CisgICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm0KKyAg
ICAgICAgLy8gICAvKioKKyAgICAgICAgLy8gICAgKiAuLi4uLi4uCisgICAgICAgIC8vICAgICov
CisgICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqCisgICAgICAgIHZhciBCRUZPUkVfU1RB
UiA9IDAsCisgICAgICAgICAgICBTVEFSID0gMSwKKyAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAy
LAorICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICBsZW4sCisgICAgICAgICAgICBtb2Rl
LAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgY2g7CisKKyAgICAgICAgZG9jID0g
ZG9jLnJlcGxhY2UoL15cL1wqXCo/LywgJycpLnJlcGxhY2UoL1wqXC8kLywgJycpOworICAgICAg
ICBpbmRleCA9IDA7CisgICAgICAgIGxlbiA9IGRvYy5sZW5ndGg7CisgICAgICAgIG1vZGUgPSBC
RUZPUkVfU1RBUjsKKyAgICAgICAgcmVzdWx0ID0gJyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuKSB7CisgICAgICAgICAgICBjaCA9IGRvY1tpbmRleF07CisgICAgICAgICAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQkVGT1JFX1NUQVI6CisgICAgICAgICAgICAg
ICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBjaDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKicpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbW9kZSA9IFNUQVI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh
aXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7Cisg
ICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTVEFSOgorICAgICAg
ICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1vZGUgPSBp
c0xpbmVUZXJtaW5hdG9yKGNoKSA/IEJFRk9SRV9TVEFSIDogQUZURVJfU1RBUjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBRlRFUl9TVEFSOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRv
cihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIC8vIFR5cGUgRXhwcmVzc2lvbiBQYXJzZXIKKworICAgIChmdW5jdGlvbiAo
ZXhwb3J0cykgeworICAgICAgICB2YXIgU3ludGF4LAorICAgICAgICAgICAgVG9rZW4sCisgICAg
ICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBpbmRleCwK
KyAgICAgICAgICAgIHByZXZpb3VzLAorICAgICAgICAgICAgdG9rZW4sCisgICAgICAgICAgICB2
YWx1ZTsKKworICAgICAgICBTeW50YXggPSB7CisgICAgICAgICAgICBOdWxsYWJsZUxpdGVyYWw6
ICdOdWxsYWJsZUxpdGVyYWwnLAorICAgICAgICAgICAgQWxsTGl0ZXJhbDogJ0FsbExpdGVyYWwn
LAorICAgICAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsCisgICAgICAgICAgICBV
bmRlZmluZWRMaXRlcmFsOiAnVW5kZWZpbmVkTGl0ZXJhbCcsCisgICAgICAgICAgICBWb2lkTGl0
ZXJhbDogJ1ZvaWRMaXRlcmFsJywKKyAgICAgICAgICAgIFVuaW9uVHlwZTogJ1VuaW9uVHlwZScs
CisgICAgICAgICAgICBBcnJheVR5cGU6ICdBcnJheVR5cGUnLAorICAgICAgICAgICAgUmVjb3Jk
VHlwZTogJ1JlY29yZFR5cGUnLAorICAgICAgICAgICAgRmllbGRUeXBlOiAnRmllbGRUeXBlJywK
KyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZTogJ0Z1bmN0aW9uVHlwZScsCisgICAgICAgICAgICBQ
YXJhbWV0ZXJUeXBlOiAnUGFyYW1ldGVyVHlwZScsCisgICAgICAgICAgICBSZXN0VHlwZTogJ1Jl
c3RUeXBlJywKKyAgICAgICAgICAgIE5vbk51bGxhYmxlVHlwZTogJ05vbk51bGxhYmxlVHlwZScs
CisgICAgICAgICAgICBPcHRpb25hbFR5cGU6ICdPcHRpb25hbFR5cGUnLAorICAgICAgICAgICAg
TnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJywKKyAgICAgICAgICAgIE5hbWVFeHByZXNzaW9u
OiAnTmFtZUV4cHJlc3Npb24nLAorICAgICAgICAgICAgVHlwZUFwcGxpY2F0aW9uOiAnVHlwZUFw
cGxpY2F0aW9uJworICAgICAgICB9OworCisgICAgICAgIFRva2VuID0geworICAgICAgICAgICAg
SUxMRUdBTDogMCwgICAgLy8gSUxMRUdBTAorICAgICAgICAgICAgRE9UOiAxLCAgICAgICAgLy8g
LgorICAgICAgICAgICAgRE9UX0xUOiAyLCAgICAgLy8gLjwKKyAgICAgICAgICAgIFJFU1Q6IDMs
ICAgICAgIC8vIC4uLgorICAgICAgICAgICAgTFQ6IDQsICAgICAgICAgLy8gPAorICAgICAgICAg
ICAgR1Q6IDUsICAgICAgICAgLy8gPgorICAgICAgICAgICAgTFBBUkVOOiA2LCAgICAgLy8gKAor
ICAgICAgICAgICAgUlBBUkVOOiA3LCAgICAgLy8gKQorICAgICAgICAgICAgTEJSQUNFOiA4LCAg
ICAgLy8geworICAgICAgICAgICAgUkJSQUNFOiA5LCAgICAgLy8gfQorICAgICAgICAgICAgTEJS
QUNLOiAxMCwgICAgLy8gWworICAgICAgICAgICAgUkJSQUNLOiAxMSwgICAgLy8gXQorICAgICAg
ICAgICAgQ09NTUE6IDEyLCAgICAgLy8gLAorICAgICAgICAgICAgQ09MT046IDEzLCAgICAgLy8g
OgorICAgICAgICAgICAgU1RBUjogMTQsICAgICAgLy8gKgorICAgICAgICAgICAgUElQRTogMTUs
ICAgICAgLy8gfAorICAgICAgICAgICAgUVVFU1RJT046IDE2LCAgLy8gPworICAgICAgICAgICAg
QkFORzogMTcsICAgICAgLy8gIQorICAgICAgICAgICAgRVFVQUw6IDE4LCAgICAgLy8gPQorICAg
ICAgICAgICAgTkFNRTogMTksICAgICAgLy8gbmFtZSB0b2tlbgorICAgICAgICAgICAgU1RSSU5H
OiAyMCwgICAgLy8gc3RyaW5nCisgICAgICAgICAgICBOVU1CRVI6IDIxLCAgICAvLyBudW1iZXIK
KyAgICAgICAgICAgIEVPRjogMjIKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBDb250
ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl9w
cmV2aW91cyA9IHByZXZpb3VzOworICAgICAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAg
ICAgICAgICAgIHRoaXMuX3Rva2VuID0gdG9rZW47CisgICAgICAgICAgICB0aGlzLl92YWx1ZSA9
IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgQ29udGV4dC5wcm90b3R5cGUucmVzdG9yZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHByZXZpb3VzID0gdGhpcy5fcHJldmlvdXM7Cisg
ICAgICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4OworICAgICAgICAgICAgdG9rZW4gPSB0aGlz
Ll90b2tlbjsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWU7CisgICAgICAgIH07CisK
KyAgICAgICAgQ29udGV4dC5zYXZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKTsKKyAgICAgICAgfTsK
KworICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkgeworICAgICAgICAgICAgdmFyIGNoID0gc291
cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICByZXR1cm4g
Y2g7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkg
eworICAgICAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAgICAgICAgICBs
ZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNI
ZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9IGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5
YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7CisgICAgICAg
ICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlOyAv
L1RPRE8gcmV2aWV3IHJlbW92YWwgb2N0YWwgPSBmYWxzZQorICAgICAgICAgICAgcXVvdGUgPSBz
b3VyY2VbaW5kZXhdOworICAgICAgICAgICAgKytpbmRleDsKKworICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAgICAgIHF1
b3RlID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x0JzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcdic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyByZXZpZXcg
cmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChjb2RlICE9PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIG9jdGFsID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UT0RPIFJl
dmlldyBSZW1vdmFsIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25s
eSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0gJ1xuJykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChxdW90
ZSAhPT0gJycpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHF1b3Rl
Jyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlID0gc3RyOworICAgICAgICAg
ICAgcmV0dXJuIFRva2VuLlNUUklORzsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNj
YW5OdW1iZXIoKSB7CisgICAgICAgICAgICB2YXIgbnVtYmVyLCBjaDsKKworICAgICAgICAgICAg
bnVtYmVyID0gJyc7CisgICAgICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAg
ICAgIG51bWJlciA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07CisKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGV4RGln
aXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gb25seSAweAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCAxNik7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxEaWdpdChjaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3Rl
ZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVt
YmVyLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVj
dGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVj
aW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9
PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVjaW1hbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8
IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworCisg
ICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9
IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7CisgICAg
ICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICB9CisKKworICAgICAgICBmdW5j
dGlvbiBzY2FuVHlwZU5hbWUoKSB7CisgICAgICAgICAgICB2YXIgY2gsIGNoMjsKKworICAgICAg
ICAgICAgdmFsdWUgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGggJiYgaXNUeXBlTmFtZShzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoKGluZGV4ICsgMSkgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoMiA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5BTUU7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAgICAgdmFyIGNoOworCisgICAgICAgICAg
ICBwcmV2aW91cyA9IGluZGV4OworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgg
JiYgaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRU9GOworICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhd
OworICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSAnIic6CisgICAg
ICAgICAgICAgICAgdG9rZW4gPSBzY2FuU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT0xPTjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgICAg
IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BOworICAgICAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFBBUkVO
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKSc6
CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uUlBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAg
Y2FzZSAnWyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRv
a2VuID0gVG9rZW4uTEJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAg
ICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNFOworICAgICAgICAgICAgICAgIHJl
dHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVF9MVDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nICYmIGluZGV4ICsgMSA8IGxlbmd0aCAm
JiBzb3VyY2VbaW5kZXggKyAxXSA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IHNjYW5OdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IFRva2VuLkRPVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisK
KyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxUOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKworICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uR1Q7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSOworICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUElQRTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlFVRVNUSU9O
OworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnISc6
CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uQkFORzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNh
c2UgJz0nOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLkVRVUFMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7
CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Nhbk51bWJlcigpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gdHlwZSBzdHJpbmcgcGVybWl0cyBmb2xsb3dpbmcgY2FzZSwKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzcworICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gdGhpcyByZWR1Y2VkIDEgdG9rZW4gVEtf
TkFNRQorICAgICAgICAgICAgICAgIGlmIChpc1R5cGVOYW1lKGNoKSkgeworICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IHNjYW5UeXBlTmFtZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBU
b2tlbi5JTExFR0FMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbnN1bWUodGFyZ2V0LCB0ZXh0KSB7
CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IHRhcmdldCwgdGV4dCB8fCAnY29uc3VtZWQg
dG9rZW4gbm90IG1hdGNoZWQnKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGV4cGVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbiAh
PT0gdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tl
bicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJworICAgICAgICAvLwor
ICAgICAgICAvLyBUeXBlVW5pb25MaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAg
ICAgICAgLy8gICB8IE5vbmVtcHR5VHlwZVVuaW9uTGlzdAorICAgICAgICAvLworICAgICAgICAv
LyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj0KKyAgICAgICAgLy8gICAgIFR5cGVFeHByZXNzaW9u
CisgICAgICAgIC8vICAgfCBUeXBlRXhwcmVzc2lvbiAnfCcgTm9uZW1wdHlUeXBlVW5pb25MaXN0
CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkgeworICAgICAgICAgICAgdmFyIGVs
ZW1lbnRzOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MUEFSRU4sICdVbmlvblR5cGUgc2hv
dWxkIHN0YXJ0IHdpdGggKCcpOworICAgICAgICAgICAgZWxlbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAgICAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHBy
ZXNzaW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJQQVJF
TikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLlBJUEUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUlBBUkVOLCAn
VW5pb25UeXBlIHNob3VsZCBlbmQgd2l0aCApJyk7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsCisgICAgICAgICAgICAgICAgZWxl
bWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8g
QXJyYXlUeXBlIDo9ICdbJyBFbGVtZW50VHlwZUxpc3QgJ10nCisgICAgICAgIC8vCisgICAgICAg
IC8vIEVsZW1lbnRUeXBlTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+CisgICAgICAg
IC8vICB8IFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICB8ICcuLi4nIFR5cGVFeHByZXNzaW9u
CisgICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uICcsJyBFbGVtZW50VHlwZUxpc3QKKyAgICAg
ICAgZnVuY3Rpb24gcGFyc2VBcnJheVR5cGUoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHM7
CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSywgJ0FycmF5VHlwZSBzaG91bGQgc3Rh
cnQgd2l0aCBbJyk7CisgICAgICAgICAgICBlbGVtZW50cyA9IFtdOworICAgICAgICAgICAgd2hp
bGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4g
PT09IFRva2VuLlJFU1QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNU
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBl
eHByZXNzaW9uOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5S
QlJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUkJS
QUNLKTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LkFycmF5VHlwZSwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFtZSgpIHsK
KyAgICAgICAgICAgIHZhciB2ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLk5BTUUgfHwgdG9rZW4gPT09IFRva2VuLlNUUklORykgeworICAgICAgICAgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICBjb25z
dW1lKFRva2VuLk5VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRmllbGRUeXBlIDo9CisgICAgICAgIC8vICAgICBG
aWVsZE5hbWUKKyAgICAgICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Npb24KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRmllbGROYW1lIDo9CisgICAgICAgIC8vICAgICBOYW1lRXhw
cmVzc2lvbgorICAgICAgICAvLyAgIHwgU3RyaW5nTGl0ZXJhbAorICAgICAgICAvLyAgIHwgTnVt
YmVyTGl0ZXJhbAorICAgICAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyCisgICAgICAgIGZ1
bmN0aW9uIHBhcnNlRmllbGRUeXBlKCkgeworICAgICAgICAgICAgdmFyIGtleTsKKworICAgICAg
ICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
RmllbGRUeXBlLAorICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5GaWVsZFR5cGUsCisgICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAgICAgICAg
ICAgICAgdmFsdWU6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9JworICAgICAgICAvLworICAgICAg
ICAvLyBGaWVsZFR5cGVMaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAgICAgICAg
Ly8gICB8IEZpZWxkVHlwZQorICAgICAgICAvLyAgIHwgRmllbGRUeXBlICcsJyBGaWVsZFR5cGVM
aXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHsKKyAgICAgICAgICAgIHZh
ciBmaWVsZHM7CisKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNFLCAnUmVjb3JkVHlw
ZSBzaG91bGQgc3RhcnQgd2l0aCB7Jyk7CisgICAgICAgICAgICBmaWVsZHMgPSBbXTsKKyAgICAg
ICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25z
dW1lKFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgZmll
bGRzLnB1c2gocGFyc2VGaWVsZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tl
biAhPT0gVG9rZW4uUkJSQUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9r
ZW4uQ09NTUEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDRSk7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZWNvcmRUeXBlLAorICAg
ICAgICAgICAgICAgIGZpZWxkczogZmllbGRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZh
ciBuYW1lID0gdmFsdWU7CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9OworICAgICAgICB9
CisKKyAgICAgICAgLy8gVHlwZUV4cHJlc3Npb25MaXN0IDo9CisgICAgICAgIC8vICAgICBUb3BM
ZXZlbFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCBUb3BMZXZlbFR5cGVFeHByZXNzaW9u
ICcsJyBUeXBlRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhwcmVz
c2lvbkxpc3QoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKworICAgICAgICAg
ICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTsKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiA9
PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTsK
KyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VHlwZU5hbWUgOj0KKyAgICAgICAgLy8gICAgIE5hbWVFeHByZXNzaW9uCisgICAgICAgIC8vICAg
fCBOYW1lRXhwcmVzc2lvbiBUeXBlQXBwbGljYXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VHlwZUFwcGxpY2F0aW9uIDo9CisgICAgICAgIC8vICAgICAnLjwnIFR5cGVFeHByZXNzaW9uTGlz
dCAnPicKKyAgICAgICAgLy8gICB8ICc8JyBUeXBlRXhwcmVzc2lvbkxpc3QgJz4nICAgLy8gdGhp
cyBpcyBleHRlbnNpb24gb2YgZG9jdHJpbmUKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlTmFt
ZSgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBhcHBsaWNhdGlvbnM7CisKKyAgICAgICAgICAg
IGV4cHIgPSBwYXJzZU5hbWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09
IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHsKKyAgICAgICAgICAgICAgICBu
ZXh0KCk7CisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zID0gcGFyc2VUeXBlRXhwcmVzc2lv
bkxpc3QoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UeXBlQXBwbGlj
YXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAg
ICAgICAgICAgIGFwcGxpY2F0aW9uczogYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmVzdWx0VHlwZSA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+CisgICAgICAg
IC8vICAgfCAnOicgdm9pZAorICAgICAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9uCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEJORiBpcyBhYm92ZQorICAgICAgICAvLyBidXQsIHdlIHJlbW92
ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6Q09MT04K
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VSZXN1bHRUeXBlKCkgeworICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5DT0xPTiwgJ1Jlc3VsdFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggOicpOworICAgICAg
ICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbAorICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBl
RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgOj0K
KyAgICAgICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBOb25SZXN0
UGFyYW1ldGVyc1R5cGUKKyAgICAgICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlwZSAnLCcg
UmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5
cGUgOj0KKyAgICAgICAgLy8gICAgICcuLi4nCisgICAgICAgIC8vICAgICAnLi4uJyBJZGVudGlm
aWVyCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vblJlc3RQYXJhbWV0ZXJzVHlwZSA6PQorICAg
ICAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBlCisgICAg
ICAgIC8vICAgfCBQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBPcHRpb25hbFBhcmFtZXRl
cnNUeXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUgOj0K
KyAgICAgICAgLy8gICAgIE9wdGlvbmFsUGFyYW1ldGVyVHlwZQorICAgICAgICAvLyAgIHwgT3B0
aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlCisgICAgICAgIC8vCisg
ICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyVHlwZSA6PSBQYXJhbWV0ZXJUeXBlPQorICAgICAg
ICAvLworICAgICAgICAvLyBQYXJhbWV0ZXJUeXBlIDo9IFR5cGVFeHByZXNzaW9uIHwgSWRlbnRp
ZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWRlbnRpZmll
ciBpcyAibmV3IiBvciAidGhpcyIKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzVHlw
ZSgpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwgbm9ybWFsID0gdHJ1ZSwgZXhwciwg
cmVzdCA9IGZhbHNlOworCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJQQVJF
TikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKFRva2VuLlJFU1QpOworICAgICAgICAgICAgICAgICAgICByZXN0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5OYW1lRXhw
cmVzc2lvbiAmJiB0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgY29u
c3VtZShUb2tlbi5DT0xPTik7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUGFyYW1ldGVyVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVR
VUFMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwpOworICAgICAg
ICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4Lk9wdGlvbmFsVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4
cHIKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0
ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocmVzdCkgeworICAgICAgICAgICAgICAgICAgICBleHByID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChleHByKTsKKyAg
ICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAgICAgICAgICAg
ICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICAv
LyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGUKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb25TaWduYXR1cmVUeXBlIDo9CisgICAgICAgIC8vICAg
fCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGUKKyAgICAgICAgLy8gICB8IFR5cGVQ
YXJhbWV0ZXJzICcoJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICAvLyAg
IHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5hbWUgJyknIFJlc3VsdFR5cGUK
KyAgICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcs
JyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUZ1
bmN0aW9uVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBpc05ldywgdGhpc0JpbmRpbmcsIHBhcmFt
cywgcmVzdWx0LCBmblR5cGU7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IFRva2VuLk5B
TUUgJiYgdmFsdWUgPT09ICdmdW5jdGlvbicsICdGdW5jdGlvblR5cGUgc2hvdWxkIHN0YXJ0IHdp
dGggXCdmdW5jdGlvblwnJyk7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworCisg
ICAgICAgICAgICAvLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBpcyBub3QgaW1wbGVtZW50aW5n
IFR5cGVQYXJhbWV0ZXJzLgorICAgICAgICAgICAgLy8gU28gd2UgZG8gbm90LiBpZiB3ZSBkb24n
dCBnZXQgJygnLCB3ZSBzZWUgaXQgYXMgZXJyb3IuCisgICAgICAgICAgICBleHBlY3QoVG9rZW4u
TFBBUkVOKTsKKworICAgICAgICAgICAgaXNOZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHBhcmFt
cyA9IFtdOworICAgICAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsOworICAgICAgICAgICAgaWYg
KHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICAvLyBQYXJhbWV0ZXJz
VHlwZSBvciAndGhpcycKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJ3RoaXMnIHx8IHZhbHVlID09
PSAnbmV3JykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoaXMnIG9yICduZXcnCisgICAg
ICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uCisg
ICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gdmFsdWUgPT09ICduZXcnOworICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
VG9rZW4uQ09MT04pOworICAgICAgICAgICAgICAgICAgICB0aGlzQmluZGluZyA9IHBhcnNlVHlw
ZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUlBBUkVOKTsKKworICAg
ICAgICAgICAgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
Q09MT04pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJlc3VsdFR5cGUoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm5UeXBlID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5GdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMs
CisgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBpZiAodGhpc0JpbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcg
bnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBmblR5cGVb
J3RoaXMnXSA9IHRoaXNCaW5kaW5nOworICAgICAgICAgICAgICAgIGlmIChpc05ldykgeworICAg
ICAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm5UeXBlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQmFzaWNUeXBlRXhwcmVzc2lvbiA6PQorICAgICAgICAvLyAgICAgJyonCisg
ICAgICAgIC8vICAgfCAnbnVsbCcKKyAgICAgICAgLy8gICB8ICd1bmRlZmluZWQnCisgICAgICAg
IC8vICAgfCBUeXBlTmFtZQorICAgICAgICAvLyAgIHwgRnVuY3Rpb25UeXBlCisgICAgICAgIC8v
ICAgfCBVbmlvblR5cGUKKyAgICAgICAgLy8gICB8IFJlY29yZFR5cGUKKyAgICAgICAgLy8gICB8
IEFycmF5VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSB7
CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgICAgIGNhc2UgVG9rZW4uU1RBUjoKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRv
a2VuLlNUQVIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5BbGxMaXRlcmFsCisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgY2FzZSBUb2tlbi5MUEFSRU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVW5pb25U
eXBlKCk7CisKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOgorICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUFycmF5VHlwZSgpOworCisgICAgICAgICAgICBjYXNlIFRva2VuLkxCUkFD
RToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7CisKKyAgICAgICAg
ICAgIGNhc2UgVG9rZW4uTkFNRToKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdudWxs
JykgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
Lk51bGxMaXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuZGVmaW5lZExpdGVy
YWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0ID0gQ29udGV4dC5zYXZlKCk7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlTmFtZSgpOworCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFR5cGVFeHByZXNzaW9uIDo9Cisg
ICAgICAgIC8vICAgICBCYXNpY1R5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCAnPycgQmFz
aWNUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgJyEnIEJhc2ljVHlwZUV4cHJlc3Npb24K
KyAgICAgICAgLy8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJz8nCisgICAgICAgIC8vICAgfCBC
YXNpY1R5cGVFeHByZXNzaW9uICchJworICAgICAgICAvLyAgIHwgJz8nCisgICAgICAgIC8vICAg
fCBCYXNpY1R5cGVFeHByZXNzaW9uICdbXScKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhw
cmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZhciBleHByOworCisgICAgICAgICAgICBpZiAodG9r
ZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5R
VUVTVElPTik7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSB8fCB0
b2tlbiA9PT0gVG9rZW4uRVFVQUwgfHwgdG9rZW4gPT09IFRva2VuLlJCUkFDRSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJQQVJFTiB8fCB0b2tlbiA9PT0gVG9r
ZW4uUElQRSB8fCB0b2tlbiA9PT0gVG9rZW4uRU9GIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVMaXRlcmFsCisg
ICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZVR5cGUs
CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lv
bigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcp
IHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5
cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVz
c2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0gcGFyc2VCYXNpY1R5cGVF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5cGUsCisg
ICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAgICAgICAgICAg
IHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBmYWxz
ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uTEJSQUNLKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5M
QlJBQ0spOworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkJSQUNLLCAnZXhwZWN0ZWQg
YW4gYXJyYXktc3R5bGUgdHlwZSBkZWNsYXJhdGlvbiAoJyArIHZhbHVlICsgJ1tdKScpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5U
eXBlQXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6ICdBcnJheScKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl0KKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRvcExldmVsVHlwZUV4cHJlc3Npb24gOj0KKyAgICAgICAgLy8gICAgICBU
eXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgICB8IFR5cGVVbmlvbkxpc3QKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lv
biwgbm90IEVTNAorICAgICAgICAvLyBsaWtlLAorICAgICAgICAvLyAgIHsgbnVtYmVyIHwgc3Ry
aW5nIH0KKyAgICAgICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRlIGl0IGFz
CisgICAgICAgIC8vICAgeyAobnVtYmVyfHN0cmluZykgfQorICAgICAgICBmdW5jdGlvbiBwYXJz
ZVRvcCgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBlbGVtZW50czsKKworICAgICAgICAgICAg
ZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0g
VG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBlbGVtZW50cyA9IFsgZXhwciBdOworICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5QSVBFKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguVW5pb25UeXBlLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50
cworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVG9w
UGFyYW1UeXBlKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgICAgIGlmICh0
b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVT
VCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlJlc3RUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZVRv
cCgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXhw
ciA9IHBhcnNlVG9wKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVRVUFMKSB7
CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9wdGlvbmFsVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIg
ZXhwcjsKKworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0g
c291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZp
b3VzID0gMDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7CisK
KyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1UeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIgZXhwcjsKKworICAg
ICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0
aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZpb3VzID0gMDsKKwor
ICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wUGFyYW1UeXBlKCk7CisKKyAg
ICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAg
ICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN0
cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHsKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQsIGksIGl6OworCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICc/JzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50
YXguQWxsTGl0ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnKic7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFsOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9ICdudWxsJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDoKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
J3ZvaWQnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRh
eC5VbmlvblR5cGU6CisgICAgICAgICAgICAgICAgaWYgKCF0b3BMZXZlbCkgeworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSAnKCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5l
bGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9
PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgh
dG9wTGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3lu
dGF4LkFycmF5VHlwZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnWyc7CisgICAgICAgICAg
ICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5lbGVt
ZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBp
eikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAn
LCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAnXSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgU3ludGF4LlJlY29yZFR5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ3sn
OworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5maWVsZHMubGVuZ3RoOyBp
IDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1w
bChub2RlLmZpZWxkc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3Qg
PyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZToKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlLmtleSArIChj
b21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUudmFsdWUsIGNvbXBhY3Qp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG5vZGUua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25UeXBlOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXBhY3QgPyAnZnVuY3Rpb24oJyA6ICdmdW5jdGlvbiAoJzsKKworICAgICAgICAg
ICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVb
J25ldyddKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAn
bmV3OicgOiAnbmV3OiAnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICd0aGlzOicgOiAndGhpczogJyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
c3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0g
bm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsKKwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5yZXN1
bHQsIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSBTeW50YXguUGFyYW1ldGVyVHlwZToKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBub2RlLm5hbWUgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5
SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXN0VHlwZToKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSAnLi4uJzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwg
Y29tcGFjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5Ob25OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUucHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICchJyArIHN0
cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUu
ZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnISc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5PcHRpb25hbFR5cGU6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNv
bXBhY3QpICsgJz0nOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFN5bnRheC5OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICc/JyArIHN0cmluZ2lmeUltcGwobm9kZS5l
eHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFj
dCkgKyAnPyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBub2RlLm5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBz
dHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnLjwnOworICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5hcHBsaWNhdGlvbnMubGVuZ3RoOyBpIDwgaXo7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2Rl
LmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3Qg
PyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPic7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignVW5rbm93
biB0eXBlICcgKyBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUs
IG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICBvcHRpb25zID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
c3RyaW5naWZ5SW1wbChub2RlLCBvcHRpb25zLmNvbXBhY3QsIG9wdGlvbnMudG9wTGV2ZWwpOwor
ICAgICAgICB9CisKKyAgICAgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSBwYXJzZVR5cGU7CisgICAg
ICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSBwYXJzZVBhcmFtVHlwZTsKKyAgICAgICAgZXhw
b3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7CisgICAgICAgIGV4cG9ydHMuU3ludGF4ID0gU3lu
dGF4OworICAgIH0odHlwZWQgPSB7fSkpOworCisgICAgLy8gSlNEb2MgVGFnIFBhcnNlcgorCisg
ICAgKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgICAgIHZhciBSdWxlcywKKyAgICAgICAgICAg
IGluZGV4LAorICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgIGxlbmd0aCwKKyAg
ICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIHJlY292ZXJhYmxlLAorICAgICAgICAgICAg
c2xvcHB5LAorICAgICAgICAgICAgc3RyaWN0OworCisgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2Uo
KSB7CisgICAgICAgICAgICB2YXIgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaW5k
ZXggKz0gMTsKKyAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5UaXRsZSgpIHsKKyAg
ICAgICAgICAgIHZhciB0aXRsZSA9ICcnOworICAgICAgICAgICAgLy8gd2FzdGUgJ0AnCisgICAg
ICAgICAgICBhZHZhbmNlKCk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAm
JiBpc0FTQ0lJQWxwaGFudW1lcmljKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
dGl0bGUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
dGl0bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHsKKyAg
ICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4OworCisgICAgICAgICAgICB3
YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIGNoID0gc291cmNlW2xhc3RdOworICAgICAgICAgICAgICAgIGlmIChpc0xp
bmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7
CisgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAod2FpdGluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdAJykg
eworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCArPSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyB0eXBl
IGV4cHJlc3Npb24gbWF5IGhhdmUgbmVzdCBicmFjZSwgc3VjaCBhcywKKyAgICAgICAgLy8geyB7
IG9rOiBzdHJpbmcgfSB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHRoZXJlZm9yZSwgc2Nhbm5p
bmcgdHlwZSBleHByZXNzaW9uIHdpdGggYmFsYW5jaW5nIGJyYWNlcy4KKyAgICAgICAgZnVuY3Rp
b24gcGFyc2VUeXBlKHRpdGxlLCBsYXN0KSB7CisgICAgICAgICAgICB2YXIgY2gsIGJyYWNlLCB0
eXBlLCBkaXJlY3QgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gc2VhcmNoICd7JworICAgICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Qg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGlyZWN0KSB7CisgICAgICAgICAgICAg
ICAgLy8gdHlwZSBleHByZXNzaW9uIHsgaXMgZm91bmQKKyAgICAgICAgICAgICAgICBicmFjZSA9
IDE7CisgICAgICAgICAgICAgICAgdHlwZSA9ICcnOworICAgICAgICAgICAgICAgIHdoaWxlIChp
bmRleCA8IGxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhY2UgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYnJhY2UgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
ID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZSArPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
YnJhY2VzIGlzIG5vdCBiYWxhbmNlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxl
KHRpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVkLnBhcnNlUGFy
YW1UeXBlKHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlZC5wYXJzZVR5cGUodHlwZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAo
ZTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZmFpbGVkCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcihsYXN0KSB7CisgICAgICAgICAg
ICB2YXIgaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBsYXN0ICYmIGlzSWRlbnRpZmllclBhcnQoc291cmNlW2luZGV4XSkpIHsKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc2tpcFdoaXRlU3BhY2UobGFzdCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFz
dCAmJiAoaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pIHx8IGlzTGluZVRlcm1pbmF0b3Ioc291
cmNlW2luZGV4XSkpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lKGxhc3QsIGFsbG93QnJh
Y2tldHMsIGFsbG93TmVzdGVkUGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9ICcnLCB1
c2VCcmFja2V0czsKKworICAgICAgICAgICAgc2tpcFdoaXRlU3BhY2UobGFzdCk7CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhbGxvd0JyYWNrZXRzICYmIHNvdXJj
ZVtpbmRleF0gPT09ICdbJykgeworICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5hbWUg
Kz0gc2NhbklkZW50aWZpZXIobGFzdCk7CisKKyAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBh
cmFtcykgeworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VbaW5kZXhdID09PSAnLicpIHsK
KyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnLic7CisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFz
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dXNlQnJhY2tldHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGEgZGVmYXVsdCB2
YWx1ZSBmb3IgdGhpcz8KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJz0n
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1ib2wKKyAg
ICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
IC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGFzdCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxhc3QgIHx8IHNv
dXJjZVtpbmRleF0gIT09ICddJykgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZXZlciBm
b3VuZCBhIGNsb3NpbmcgJ10nCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhlIGxhc3QgJ10n
CisgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2tp
cFRvVGFnKCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHNvdXJjZVtp
bmRleF0gIT09ICdAJykgeworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoc291cmNlW2lu
ZGV4XSA9PT0gJ0AnKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gVGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKSB7CisgICAgICAgICAgICB0
aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7
CisgICAgICAgICAgICB0aGlzLl90YWcgPSB7CisgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxl
LAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubGluZU51bWJlcnMpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl90YWcubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9sYXN0ID0gMDsKKyAgICAgICAgICAgIC8vIHNwYWNlIHRvIHNhdmUgc3Bl
Y2lhbCBpbmZvcm1hdGlvbiBmb3IgdGl0bGUgcGFyc2Vycy4KKyAgICAgICAgICAgIHRoaXMuX2V4
dHJhID0geyB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkRXJyb3IoZXJyLCAuLi4pCisg
ICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuYWRkRXJyb3IgPSBmdW5jdGlvbiBhZGRFcnJvcihl
cnJvclRleHQpIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKSwKKyAgICAgICAgICAgICAgICBtc2cgPSBlcnJvclRleHQucmVw
bGFjZSgKKyAgICAgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5n
ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgaWYgKCF0
aGlzLl90YWcuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGFnLmVycm9ycyA9IFtd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IobXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX3Rh
Zy5lcnJvcnMucHVzaChtc2cpOworICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxlOworICAg
ICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0gZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXMKKyAgICAgICAgICAg
IGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlw
ZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJhbVRpdGxl
KHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5h
ZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3RhZy50eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVy
cm9yKGVycm9yLm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgLy8gb3B0aW9uYWwgdHlwZXMKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFz
dCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAv
L0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hlbiB3ZSBo
aXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNl
ci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0
LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7CisgICAgICAgICAg
ICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBu
YW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aCA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKGZhbHNl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBh
dGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJz
ZU5hbWVQYXRoKHRydWUpOworICAgICAgICB9OworCisKKyAgICAgICAgVGFnUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYXNzaWduLCBu
YW1lOworCisgICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFtZQorICAg
ICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFy
YW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkpOworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVu
IHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlCisgICAgICAgICAgICAgICAgICAgIC8v
IGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBpbiB3aGlj
aCBjYXNlIGl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQgdGhlIGVu
ZAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiB0
aGlzLl90YWcudHlwZS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHRy
YS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90
YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl90YWcudHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxp
ZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3Rh
Zy5uYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdbJyAm
JiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgb25lCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30gW3NvbWVi
b2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdu
ID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBhc3Np
Z25bMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb3B0aW9u
YWwgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBlLnR5cGUg
IT09ICdPcHRpb25hbFR5cGUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
dGFnLnR5cGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRp
b25hbFR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0
aGlzLl90YWcudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Owor
CisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1bmN0aW9u
IHBhcnNlRGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0cmlt
KHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAgICAgIGlm
IChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgIGlmICgoL14tXHMrLykudGVzdChkZXNj
cmlwdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bi5zdWJzdHJpbmcoMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMu
X3RhZy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUtpbmQgPSBmdW5jdGlvbiBwYXJzZUtpbmQoKSB7CisgICAgICAgICAgICB2YXIga2lu
ZCwga2luZHM7CisgICAgICAgICAgICBraW5kcyA9IHsKKyAgICAgICAgICAgICAgICAnY2xhc3Mn
OiB0cnVlLAorICAgICAgICAgICAgICAgICdjb25zdGFudCc6IHRydWUsCisgICAgICAgICAgICAg
ICAgJ2V2ZW50JzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZXh0ZXJuYWwnOiB0cnVlLAorICAg
ICAgICAgICAgICAgICdmaWxlJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZnVuY3Rpb24nOiB0
cnVlLAorICAgICAgICAgICAgICAgICdtZW1iZXInOiB0cnVlLAorICAgICAgICAgICAgICAgICdt
aXhpbic6IHRydWUsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6IHRydWUsCisgICAgICAgICAg
ICAgICAgJ25hbWVzcGFjZSc6IHRydWUsCisgICAgICAgICAgICAgICAgJ3R5cGVkZWYnOiB0cnVl
CisgICAgICAgICAgICB9OworICAgICAgICAgICAga2luZCA9IHRyaW0oc2xpY2VTb3VyY2Uoc291
cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdGhpcy5fdGFnLmtpbmQgPSBr
aW5kOworICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShraW5kcywga2luZCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQga2luZCBuYW1lIFwnJTBc
JycsIGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0gZnVuY3Rp
b24gcGFyc2VBY2Nlc3MoKSB7CisgICAgICAgICAgICB2YXIgYWNjZXNzOworICAgICAgICAgICAg
YWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7Cisg
ICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzOworICAgICAgICAgICAgaWYgKGFj
Y2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNjZXNzICE9
PSAncHVibGljJykgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxp
ZCBhY2Nlc3MgbmFtZSBcJyUwXCcnLCBhY2Nlc3MpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBl
LnBhcnNlVmFyaWF0aW9uID0gZnVuY3Rpb24gcGFyc2VWYXJpYXRpb24oKSB7CisgICAgICAgICAg
ICB2YXIgdmFyaWF0aW9uLCB0ZXh0OworICAgICAgICAgICAgdGV4dCA9IHRyaW0oc2xpY2VTb3Vy
Y2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdmFyaWF0aW9uID0g
cGFyc2VGbG9hdCh0ZXh0LCAxMCk7CisgICAgICAgICAgICB0aGlzLl90YWcudmFyaWF0aW9uID0g
dmFyaWF0aW9uOworICAgICAgICAgICAgaWYgKGlzTmFOKHZhcmlhdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgdmFyaWF0aW9uIFwnJTBcJycsIHRl
eHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVuc3VyZUVuZCA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciBzaG91bGRCZUVtcHR5ID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2Us
IGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQmVFbXB0eSkgewor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignVW5rbm93biBjb250ZW50IFwnJTBc
JycsIHNob3VsZEJlRW1wdHkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxvZ3VlID0g
ZnVuY3Rpb24gZXBpbG9ndWUoKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247CisKKyAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uOworICAgICAgICAg
ICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvbgorICAgICAgICAgICAg
aWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYmIGRlc2Ny
aXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lOworICAgICAgICAgICAgICAgIHRo
aXMuX3RhZy5uYW1lID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgaWYgKCFzbG9wcHkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGlu
dmFsaWQgdGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBSdWxl
cyA9IHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nlc3MuaHRt
bAorICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSwKKyAgICAgICAgICAgIC8v
IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sCisgICAgICAgICAgICAnYWxpYXMn
OiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8v
dXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbAorICAgICAgICAgICAgJ2F1Z21lbnRzJzog
WydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAg
ICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWwKKyAg
ICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRp
b25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAnY2xhc3MnOiBbJ3Bh
cnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAg
ICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5odG1sCisg
ICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25h
bCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFn
cy1kZXByZWNhdGVkLmh0bWwKKyAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJzZURlc2Ny
aXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZ2xvYmFs
Lmh0bWwKKyAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAg
Ly8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWwKKyAgICAgICAgICAgICdpbm5l
cic6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3Rh
Z3MtaW5zdGFuY2UuaHRtbAorICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVFbmQnXSwK
KyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWwKKyAgICAg
ICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1taXhlcy5odG1sCisgICAgICAgICAgICAnbWl4ZXMnOiBbJ3BhcnNlTmFt
ZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3MtbWl4aW4uaHRtbAorICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQYXRoT3B0
aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlwZScsICdw
YXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdtZXRob2QnOiBb
J3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbAorICAgICAgICAgICAgJ21vZHVsZSc6
IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAg
ICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRt
bAorICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVF
bmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1t
ZXRob2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRoT3B0aW9u
YWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICd2YXInOiBbJ3BhcnNlVHlwZScs
ICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sCisgICAgICAgICAgICAnbmFtZSc6IFsn
cGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbAorICAgICAgICAgICAgJ25hbWVzcGFjZSc6IFsn
cGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWwKKyAgICAgICAg
ICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sCisgICAgICAg
ICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAg
ICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sCisgICAgICAg
ICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWwKKyAgICAgICAg
ICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbAorICAgICAgICAgICAgJ3JlcXVpcmVzJzogWydw
YXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpz
ZG9jLm9yZy90YWdzLXNpbmNlLmh0bWwKKyAgICAgICAgICAgICdzaW5jZSc6IFsncGFyc2VEZXNj
cmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN0YXRp
Yy5odG1sCisgICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSwKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWwKKyAgICAgICAgICAgICdz
dW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sCisgICAgICAgICAgICAndGhpcyc6IFsncGFyc2VOYW1l
UGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcv
dGFncy10b2RvLmh0bWwKKyAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0aW9uJ10s
CisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmFyaWF0aW9uLmh0bWwK
KyAgICAgICAgICAgICd2YXJpYXRpb24nOiBbJ3BhcnNlVmFyaWF0aW9uJ10sCisgICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmVyc2lvbi5odG1sCisgICAgICAgICAgICAn
dmVyc2lvbic6IFsncGFyc2VEZXNjcmlwdGlvbiddCisgICAgICAgIH07CisKKyAgICAgICAgVGFn
UGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkgeworICAgICAgICAgICAg
dmFyIGksIGl6LCBzZXF1ZW5jZXMsIG1ldGhvZDsKKworICAgICAgICAgICAgLy8gZW1wdHkgdGl0
bGUKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGl0bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0aXRsZScpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU2VlayB0byBjb250ZW50IGxhc3QgaW5kZXguCisgICAgICAgICAg
ICB0aGlzLl9sYXN0ID0gc2Vla0NvbnRlbnQodGhpcy5fdGl0bGUpOworCisgICAgICAgICAgICBp
ZiAoaGFzT3duUHJvcGVydHkoUnVsZXMsIHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAg
IHNlcXVlbmNlcyA9IFJ1bGVzW3RoaXMuX3RpdGxlXTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBzZXF1ZW5jZXMKKyAgICAgICAgICAgICAgICBzZXF1
ZW5jZXMgPSBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWUnLCAncGFyc2VEZXNjcmlwdGlvbicsICdl
cGlsb2d1ZSddOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9
IHNlcXVlbmNlcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgbWV0aG9k
ID0gc2VxdWVuY2VzW2ldOworICAgICAgICAgICAgICAgIGlmICghdGhpc1ttZXRob2RdKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIGdsb2JhbCBpbmRleCB0byBlbmQgb2Yg
dGhpcyB0YWcuCisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2xhc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fdGFnOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVGFn
KG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSwgcGFyc2VyOworCisgICAgICAgICAg
ICAvLyBza2lwIHRvIHRhZworICAgICAgICAgICAgaWYgKCFza2lwVG9UYWcoKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBz
Y2FuIHRpdGxlCisgICAgICAgICAgICB0aXRsZSA9IHNjYW5UaXRsZSgpOworCisgICAgICAgICAg
ICAvLyBjb25zdHJ1Y3QgdGFnIHBhcnNlcgorICAgICAgICAgICAgcGFyc2VyID0gbmV3IFRhZ1Bh
cnNlcihvcHRpb25zLCB0aXRsZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBQYXJzZSBKU0RvYworICAgICAg
ICAvLworCisgICAgICAgIGZ1bmN0aW9uIHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJycsIGNoLCBhdEFsbG93ZWQ7CisKKyAgICAgICAgICAg
IGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoYXRBbGxvd2VkICYmIGNoID09PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0
b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChhdEFsbG93ZWQgJiYgIWlzV2hpdGVTcGFjZShjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYWR2YW5jZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHRyaW0oZGVzY3JpcHRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykgeworICAgICAgICAgICAgdmFy
IHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBpejsKKwor
ICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7CisgICAgICAg
ICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFncworICAgICAgICAgICAgaWYg
KG9wdGlvbnMudGFncykgeworICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlvbnMudGFn
cykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9OworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7IGkgPCBp
ejsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGFn
c1tpXSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVz
dGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ0ludmFs
aWQgInRhZ3MiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkICJ0YWdzIiBwYXJhbWV0
ZXI6ICcgKyBvcHRpb25zLnRhZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAgICAgICAg
ICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgcmVjb3ZlcmFibGUgPSBvcHRp
b25zLnJlY292ZXJhYmxlOworICAgICAgICAgICAgc2xvcHB5ID0gb3B0aW9ucy5zbG9wcHk7Cisg
ICAgICAgICAgICBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsKKworICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSBzY2FuSlNEb2NEZXNjcmlwdGlvbigpOworCisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHRhZyA9IHBhcnNlVGFnKG9wdGlvbnMpOworICAgICAgICAg
ICAgICAgIGlmICghdGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWludGVyZXN0aW5nVGFncyB8fCBpbnRlcmVz
dGluZ1RhZ3MuaGFzT3duUHJvcGVydHkodGFnLnRpdGxlKSkgeworICAgICAgICAgICAgICAgICAg
ICB0YWdzLnB1c2godGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgIHRhZ3M6IHRhZ3MKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKyAgICAgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworICAgIH0oanNkb2MgPSB7fSkpOwor
CisgICAgZXhwb3J0cy52ZXJzaW9uID0gVkVSU0lPTjsKKyAgICBleHBvcnRzLnBhcnNlID0ganNk
b2MucGFyc2U7CisgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7CisgICAg
ZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlOworICAgIGV4cG9y
dHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7CisgICAgZXhwb3J0cy5TeW50YXggPSBz
aGFsbG93Q29weSh0eXBlZC5TeW50YXgpOworICAgIGV4cG9ydHMuRXJyb3IgPSBEb2N0cmluZUVy
cm9yOworICAgIGV4cG9ydHMudHlwZSA9IHsKKyAgICAgICAgU3ludGF4OiBleHBvcnRzLlN5bnRh
eCwKKyAgICAgICAgcGFyc2VUeXBlOiB0eXBlZC5wYXJzZVR5cGUsCisgICAgICAgIHBhcnNlUGFy
YW1UeXBlOiB0eXBlZC5wYXJzZVBhcmFtVHlwZSwKKyAgICAgICAgc3RyaW5naWZ5OiB0eXBlZC5z
dHJpbmdpZnkKKyAgICB9OworfSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAoZG9j
dHJpbmUgPSB7fSkgOiBleHBvcnRzKSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAg
OiAqLworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qCisg
IENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggU2V2aWxsZSA8aGlAYWxleGFuZGVyc2V2
aWxsZS5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qKgorICog
RXNjb3BlICg8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2VzY29wZSI+
ZXNjb3BlPC9hPikgaXMgYW4gPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtMjYyLmh0bSI+RUNNQVNjcmlwdDwv
YT4KKyAqIHNjb3BlIGFuYWx5emVyIGV4dHJhY3RlZCBmcm9tIHRoZSA8YQorICogaHJlZj0iaHR0
cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9lc21hbmdsZSI+ZXNtYW5nbGUgcHJvamVjdDwv
YS8+LgorICogPHA+CisgKiA8ZW0+ZXNjb3BlPC9lbT4gZmluZHMgbGV4aWNhbCBzY29wZXMgaW4g
YSBzb3VyY2UgcHJvZ3JhbSwgaS5lLiBhcmVhcyBvZiB0aGF0CisgKiBwcm9ncmFtIHdoZXJlIGRp
ZmZlcmVudCBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBpZGVudGlmaWVyIHJlZmVyIHRvIHRoZSBz
YW1lCisgKiB2YXJpYWJsZS4gV2l0aCBlYWNoIHNjb3BlIHRoZSBjb250YWluZWQgdmFyaWFibGVz
IGFyZSBjb2xsZWN0ZWQsIGFuZCBlYWNoCisgKiBpZGVudGlmaWVyIHJlZmVyZW5jZSBpbiBjb2Rl
IGlzIGxpbmtlZCB0byBpdHMgY29ycmVzcG9uZGluZyB2YXJpYWJsZSAoaWYKKyAqIHBvc3NpYmxl
KS4KKyAqIDxwPgorICogPGVtPmVzY29wZTwvZW0+IHdvcmtzIG9uIGEgc3ludGF4IHRyZWUgb2Yg
dGhlIHBhcnNlZCBzb3VyY2UgY29kZSB3aGljaCBoYXMKKyAqIHRvIGFkaGVyZSB0byB0aGUgPGEK
KyAqIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvU3BpZGVy
TW9ua2V5L1BhcnNlcl9BUEkiPgorICogTW96aWxsYSBQYXJzZXIgQVBJPC9hPi4gRS5nLiA8YSBo
cmVmPSJodHRwOi8vZXNwcmltYS5vcmciPmVzcHJpbWE8L2E+IGlzIGEgcGFyc2VyCisgKiB0aGF0
IHByb2R1Y2VzIHN1Y2ggc3ludGF4IHRyZWVzLgorICogPHA+CisgKiBUaGUgbWFpbiBpbnRlcmZh
Y2UgaXMgdGhlIHtAbGluayBhbmFseXplfSBmdW5jdGlvbi4KKyAqIEBtb2R1bGUKKyAqLworCisv
KmpzbGludCBiaXR3aXNlOnRydWUgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRy
dWUsIHJlcXVpcmU6dHJ1ZSovCisoZnVuY3Rpb24gKGZhY3RvcnksIGdsb2JhbCkgeworICAgICd1
c2Ugc3RyaWN0JzsKKworICAgIGZ1bmN0aW9uIG5hbWVzcGFjZShzdHIsIG9iaikgeworICAgICAg
ICB2YXIgaSwgaXosIG5hbWVzLCBuYW1lOworICAgICAgICBuYW1lcyA9IHN0ci5zcGxpdCgnLicp
OworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5hbWVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsK
KyAgICAgICAgICAgIG5hbWUgPSBuYW1lc1tpXTsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3du
UHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvYmogPSBvYmpbbmFtZV07CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iaiA9IChvYmpbbmFtZV0gPSB7fSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisK
KyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQs
IENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gYW5kIHBsYWluIGJyb3dzZXIgbG9hZGluZywKKyAg
ICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAg
ICAgIGRlZmluZSgnZXNjb3BlJywgWydleHBvcnRzJywgJ2VzdHJhdmVyc2UnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIGVzdHJhdmVyc2UpIHsKKyAgICAgICAgICAgIGZhY3RvcnkoZXhwb3J0cywgZ2xv
YmFsLCBlc3RyYXZlcnNlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
b3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzLCBnbG9iYWws
IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeShu
YW1lc3BhY2UoJ2VzY29wZScsIGdsb2JhbCksIGdsb2JhbCwgZ2xvYmFsLmVzdHJhdmVyc2UpOwor
ICAgIH0KK30oZnVuY3Rpb24gKGV4cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSkgeworICAgICd1
c2Ugc3RyaWN0JzsKKworICAgIHZhciBTeW50YXgsCisgICAgICAgIE1hcCwKKyAgICAgICAgY3Vy
cmVudFNjb3BlLAorICAgICAgICBnbG9iYWxTY29wZSwKKyAgICAgICAgc2NvcGVzLAorICAgICAg
ICBvcHRpb25zOworCisgICAgU3ludGF4ID0gZXN0cmF2ZXJzZS5TeW50YXg7CisKKyAgICBpZiAo
dHlwZW9mIGdsb2JhbC5NYXAgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8vIEVTNiBNYXAK
KyAgICAgICAgTWFwID0gZ2xvYmFsLk1hcDsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXAgPSBm
dW5jdGlvbiBNYXAoKSB7CisgICAgICAgICAgICB0aGlzLl9fZGF0YSA9IHt9OworICAgICAgICB9
OworCisgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTWFwR2V0KGtleSkgewor
ICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRh
Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2Rh
dGFba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBNYXBIYXMo
a2V5KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fX2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KTsKKyAgICAgICAgfTsKKworICAgICAgICBN
YXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIE1hcFNldChrZXksIHZhbCkgeworICAgICAgICAg
ICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgdGhpcy5fX2RhdGFba2V5XSA9IHZhbDsK
KyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9u
IE1hcERlbGV0ZShrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAgICAgICAg
ICAgIHJldHVybiBkZWxldGUgdGhpcy5fX2RhdGFba2V5XTsKKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZCwgdGV4dCkgeworICAgICAgICBpZiAoIWNvbmQpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKCkgeworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgb3B0aW1pc3RpYzogZmFsc2UsCisgICAgICAgICAgICBkaXJlY3RpdmU6IGZhbHNlCisg
ICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlRGVlcGx5KHRhcmdldCwgb3Zl
cnJpZGUpIHsKKyAgICAgICAgdmFyIGtleSwgdmFsOworCisgICAgICAgIGZ1bmN0aW9uIGlzSGFz
aE9iamVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGFyZ2V0ID09PSAn
b2JqZWN0JyAmJiB0YXJnZXQgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh0YXJnZXQgaW5zdGFuY2Vv
ZiBSZWdFeHApOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChrZXkgaW4gb3ZlcnJpZGUpIHsK
KyAgICAgICAgICAgIGlmIChvdmVycmlkZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAg
ICAgICAgICAgdmFsID0gb3ZlcnJpZGVba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNIYXNo
T2JqZWN0KHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9iamVjdCh0YXJn
ZXRba2V5XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURlZXBseSh0YXJnZXRb
a2V5XSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFtrZXldID0gdXBkYXRlRGVlcGx5KHt9LCB2YWwpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0W2tleV0gPSB2YWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQSBSZWZlcmVuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIGFuIGlkZW50
aWZpZXIgaW4gY29kZS4KKyAgICAgKiBAY2xhc3MgUmVmZXJlbmNlCisgICAgICovCisgICAgZnVu
Y3Rpb24gUmVmZXJlbmNlKGlkZW50LCBzY29wZSwgZmxhZywgd3JpdGVFeHByLCBtYXliZUltcGxp
Y2l0R2xvYmFsKSB7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogSWRlbnRpZmllciBzeW50YXgg
bm9kZS4KKyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNJZGVudGlmaWVyfSBSZWZlcmVuY2Uj
aWRlbnRpZmllciAKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50
OworICAgICAgICAvKiogCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5jbG9zaW5nIFNj
b3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gUmVmZXJlbmNlI2Zyb20gCisgICAgICAg
ICAqLworICAgICAgICB0aGlzLmZyb20gPSBzY29wZTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb21lcyBmcm9tIGEgZHluYW1pYyBzY29wZSAoc3VjaCBh
cyAnZXZhbCcsCisgICAgICAgICAqICd3aXRoJywgZXRjLiksIGFuZCBtYXkgYmUgdHJhcHBlZCBi
eSBkeW5hbWljIHNjb3Blcy4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVmZXJlbmNl
I3RhaW50ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZhbHNlOworICAg
ICAgICAvKiogCisgICAgICAgICAqIFRoZSB2YXJpYWJsZSB0aGlzIHJlZmVyZW5jZSBpcyByZXNv
bHZlZCB3aXRoLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZX0gUmVmZXJlbmNlI3Jlc29s
dmVkIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZXNvbHZlZCA9IG51bGw7CisgICAgICAg
IC8qKiAKKyAgICAgICAgICogVGhlIHJlYWQtd3JpdGUgbW9kZSBvZiB0aGUgcmVmZXJlbmNlLiAo
VmFsdWUgaXMgb25lIG9mIHtAbGluaworICAgICAgICAgKiBSZWZlcmVuY2UuUkVBRH0sIHtAbGlu
ayBSZWZlcmVuY2UuUld9LCB7QGxpbmsgUmVmZXJlbmNlLldSSVRFfSkuCisgICAgICAgICAqIEBt
ZW1iZXIge251bWJlcn0gUmVmZXJlbmNlI2ZsYWcgCisgICAgICAgICAqIEBwcml2YXRlCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICBpZiAodGhpcy5pc1dy
aXRlKCkpIHsKKyAgICAgICAgICAgIC8qKiAKKyAgICAgICAgICAgICAqIElmIHJlZmVyZW5jZSBp
cyB3cml0ZWFibGUsIHRoaXMgaXMgdGhlIHRyZWUgYmVpbmcgd3JpdHRlbiB0byBpdC4KKyAgICAg
ICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEjTm9kZX0gUmVmZXJlbmNlI3dyaXRlRXhwciAKKyAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy53cml0ZUV4cHIgPSB3cml0ZUV4cHI7Cisg
ICAgICAgIH0KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBXaGV0aGVyIHRoZSBSZWZlcmVuY2Ug
bWlnaHQgcmVmZXIgdG8gYSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jv
b2xlYW59IFJlZmVyZW5jZSNfX21heWJlSW1wbGljaXRHbG9iYWwgCisgICAgICAgICAqIEBwcml2
YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCA9IG1h
eWJlSW1wbGljaXRHbG9iYWw7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIEBjb25zdGFudCBS
ZWZlcmVuY2UuUkVBRCAKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIFJlZmVyZW5jZS5S
RUFEID0gMHgxOworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLldSSVRFIAor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLldSSVRFID0gMHgyOworICAg
IC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLlJXIAorICAgICAqIEBwcml2YXRlCisg
ICAgICovCisgICAgUmVmZXJlbmNlLlJXID0gMHgzOworCisgICAgLyoqCisgICAgICogV2hldGhl
ciB0aGUgcmVmZXJlbmNlIGlzIHN0YXRpYy4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1N0
YXRpYworICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnBy
b3RvdHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlzU3RhdGljKCkgeworICAgICAgICByZXR1cm4g
IXRoaXMudGFpbnRlZCAmJiB0aGlzLnJlc29sdmVkICYmIHRoaXMucmVzb2x2ZWQuc2NvcGUuaXNT
dGF0aWMoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNl
IGlzIHdyaXRlYWJsZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1dyaXRlCisgICAgICog
QHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzV3Jp
dGUgPSBmdW5jdGlvbiBpc1dyaXRlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFnICYgUmVm
ZXJlbmNlLldSSVRFOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZl
cmVuY2UgaXMgcmVhZGFibGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkCisgICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlz
UmVhZCA9IGZ1bmN0aW9uIGlzUmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyAmIFJl
ZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZl
cmVuY2UgaXMgcmVhZC1vbmx5LgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZE9ubHkK
KyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5
cGUuaXNSZWFkT25seSA9IGZ1bmN0aW9uIGlzUmVhZE9ubHkoKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBX
aGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgd3JpdGUtb25seS4KKyAgICAgKiBAbWV0aG9kIFJlZmVy
ZW5jZSNpc1dyaXRlT25seQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAg
UmVmZXJlbmNlLnByb3RvdHlwZS5pc1dyaXRlT25seSA9IGZ1bmN0aW9uIGlzV3JpdGVPbmx5KCkg
eworICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuV1JJVEU7CisgICAgfTsK
KworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyByZWFkLXdyaXRlLgor
ICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZFdyaXRlCisgICAgICogQHJldHVybiB7Ym9v
bGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzUmVhZFdyaXRlID0gZnVu
Y3Rpb24gaXNSZWFkV3JpdGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcgPT09IFJlZmVy
ZW5jZS5SVzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQSBWYXJpYWJsZSByZXByZXNlbnRz
IGEgbG9jYWxseSBzY29wZWQgaWRlbnRpZmllci4gVGhlc2UgaW5jbHVkZSBhcmd1bWVudHMgdG8K
KyAgICAgKiBmdW5jdGlvbnMuCisgICAgICogQGNsYXNzIFZhcmlhYmxlCisgICAgICovCisgICAg
ZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgLyoqICAKKyAgICAgICAg
ICogVGhlIHZhcmlhYmxlIG5hbWUsIGFzIGdpdmVuIGluIHRoZSBzb3VyY2UgY29kZS4KKyAgICAg
ICAgICogQG1lbWJlciB7U3RyaW5nfSBWYXJpYWJsZSNuYW1lIAorICAgICAgICAgKi8KKyAgICAg
ICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgZGVm
aW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJsZSAobGlrZSBpbiAndmFyIC4uLicKKyAg
ICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0ZXIpLCBhcyBBU1Qgbm9kZXMuCisgICAg
ICAgICAqIEBtZW1iZXIge2VzcHJpbWEuSWRlbnRpZmllcltdfSBWYXJpYWJsZSNpZGVudGlmaWVy
cworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pZGVudGlmaWVycyA9IFtdOworICAgICAgICAv
KioKKyAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZXN9IG9mIHRo
aXMgdmFyaWFibGUgKGV4Y2x1ZGluZyBwYXJhbWV0ZXIgZW50cmllcykKKyAgICAgICAgICogaW4g
aXRzIGRlZmluaW5nIHNjb3BlIGFuZCBhbGwgbmVzdGVkIHNjb3Blcy4gRm9yIGRlZmluaW5nCisg
ICAgICAgICAqIG9jY3VycmVuY2VzIG9ubHkgc2VlIHtAbGluayBWYXJpYWJsZSNkZWZzfS4KKyAg
ICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFZhcmlhYmxlI3JlZmVyZW5jZXMKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOworCisgICAgICAgIC8qKgorICAg
ICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFyaWFibGUgKGxp
a2UgaW4gJ3ZhciAuLi4nCisgICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFyYW1ldGVyKSwg
YXMgY3VzdG9tIG9iamVjdHMuCisgICAgICAgICAqIEB0eXBlZGVmIHtPYmplY3R9IERlZkVudHJ5
CisgICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBEZWZFbnRyeS50eXBlIC0gdGhlIHR5cGUg
b2YgdGhlIG9jY3VycmVuY2UgKGUuZy4KKyAgICAgICAgICogICAgICAiUGFyYW1ldGVyIiwgIlZh
cmlhYmxlIiwgLi4uKQorICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuSWRlbnRpZmllcn0g
RGVmRW50cnkubmFtZSAtIHRoZSBpZGVudGlmaWVyIEFTVCBub2RlIG9mIHRoZSBvY2N1cnJlbmNl
CisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5Ob2RlfSBEZWZFbnRyeS5ub2RlIC0gdGhl
IGVuY2xvc2luZyBub2RlIG9mIHRoZQorICAgICAgICAgKiAgICAgIGlkZW50aWZpZXIKKyAgICAg
ICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IFtEZWZFbnRyeS5wYXJlbnRdIC0gdGhlIGVu
Y2xvc2luZyBzdGF0ZW1lbnQKKyAgICAgICAgICogICAgICBub2RlIG9mIHRoZSBpZGVudGlmaWVy
CisgICAgICAgICAqIEBtZW1iZXIge0RlZkVudHJ5W119IFZhcmlhYmxlI2RlZnMKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuZGVmcyA9IFtdOworCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZh
bHNlOworICAgICAgICAvKioKKyAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEgc3RhY2sgdmFy
aWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFZhcmlhYmxlI3N0YWNrCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnN0YWNrID0gdHJ1ZTsKKyAgICAgICAgLyoqIAorICAgICAg
ICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS4KKyAgICAgICAgICogQG1lbWJl
ciB7U2NvcGV9IFZhcmlhYmxlI3Njb3BlIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zY29w
ZSA9IHNjb3BlOworICAgIH0KKworICAgIFZhcmlhYmxlLkNhdGNoQ2xhdXNlID0gJ0NhdGNoQ2xh
dXNlJzsKKyAgICBWYXJpYWJsZS5QYXJhbWV0ZXIgPSAnUGFyYW1ldGVyJzsKKyAgICBWYXJpYWJs
ZS5GdW5jdGlvbk5hbWUgPSAnRnVuY3Rpb25OYW1lJzsKKyAgICBWYXJpYWJsZS5WYXJpYWJsZSA9
ICdWYXJpYWJsZSc7CisgICAgVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJsZSA9ICdJbXBs
aWNpdEdsb2JhbFZhcmlhYmxlJzsKKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0U2NvcGUoc2NvcGUs
IGJsb2NrKSB7CisgICAgICAgIHZhciBib2R5LCBpLCBpeiwgc3RtdCwgZXhwcjsKKworICAgICAg
ICAvLyBXaGVuIHVwcGVyIHNjb3BlIGlzIGV4aXN0cyBhbmQgc3RyaWN0LCBpbm5lciBzY29wZSBp
cyBhbHNvIHN0cmljdC4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmIHNjb3BlLnVwcGVyLmlz
U3RyaWN0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzY29wZS50eXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBib2R5ID0gYmxv
Y2suYm9keTsKKyAgICAgICAgfSBlbHNlIGlmIChzY29wZS50eXBlID09PSAnZ2xvYmFsJykgewor
ICAgICAgICAgICAgYm9keSA9IGJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aXZl
KSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBp
ejsgKytpKSB7CisgICAgICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RtdC50eXBlICE9PSAnRGlyZWN0aXZlU3RhdGVtZW50JykgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKHN0bXQucmF3ID09PSAnInVzZSBzdHJpY3QiJyB8fCBzdG10LnJhdyA9PT0gJ1wndXNlIHN0
cmljdFwnJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAg
ICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoc3RtdC50eXBl
ICE9PSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhwciA9IHN0bXQuZXhw
cmVzc2lvbjsKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBTeW50YXguTGl0ZXJh
bCB8fCB0eXBlb2YgZXhwci52YWx1ZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChleHByLnJh
dyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnJhdyA9PT0gJyJ1c2Ug
c3RyaWN0IicgfHwgZXhwci5yYXcgPT09ICdcJ3VzZSBzdHJpY3RcJycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudmFsdWUgPT09
ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAq
IEBjbGFzcyBTY29wZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNjb3BlKGJsb2NrLCBvcHQpIHsK
KyAgICAgICAgdmFyIHZhcmlhYmxlLCBib2R5OworCisgICAgICAgIC8qKgorICAgICAgICAgKiBP
bmUgb2YgJ2NhdGNoJywgJ3dpdGgnLCAnZnVuY3Rpb24nIG9yICdnbG9iYWwnLgorICAgICAgICAg
KiBAbWVtYmVyIHtTdHJpbmd9IFNjb3BlI3R5cGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMu
dHlwZSA9CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkNhdGNoQ2xhdXNlKSA/
ICdjYXRjaCcgOgorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5XaXRoU3RhdGVt
ZW50KSA/ICd3aXRoJyA6CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LlByb2dy
YW0pID8gJ2dsb2JhbCcgOiAnZnVuY3Rpb24nOworICAgICAgICAgLyoqCisgICAgICAgICAqIFRo
ZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZSwgYXMgPGNvZGU+eyBWYXJp
YWJsZS5uYW1lCisgICAgICAgICAqIDogVmFyaWFibGUgfTwvY29kZT4uCisgICAgICAgICAqIEBt
ZW1iZXIge01hcH0gU2NvcGUjc2V0CisgICAgICAgICAqLworICAgICAgICB0aGlzLnNldCA9IG5l
dyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB0YWludGVkIHZhcmlhYmxlcyBv
ZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5hbWUgOgorICAgICAgICAgKiBib29s
ZWFuIH08L2NvZGU+LgorICAgICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3RhaW50cyAqLwor
ICAgICAgICB0aGlzLnRhaW50cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IEdlbmVyYWxseSwgdGhyb3VnaCB0aGUgbGV4aWNhbCBzY29waW5nIG9mIEpTIHlvdSBjYW4gYWx3
YXlzIGtub3cKKyAgICAgICAgICogd2hpY2ggdmFyaWFibGUgYW4gaWRlbnRpZmllciBpbiB0aGUg
c291cmNlIGNvZGUgcmVmZXJzIHRvLiBUaGVyZSBhcmUKKyAgICAgICAgICogYSBmZXcgZXhjZXB0
aW9ucyB0byB0aGlzIHJ1bGUuIFdpdGggJ2dsb2JhbCcgYW5kICd3aXRoJyBzY29wZXMgeW91Cisg
ICAgICAgICAqIGNhbiBvbmx5IGRlY2lkZSBhdCBydW50aW1lIHdoaWNoIHZhcmlhYmxlIGEgcmVm
ZXJlbmNlIHJlZmVycyB0by4KKyAgICAgICAgICogTW9yZW92ZXIsIGlmICdldmFsKCknIGlzIHVz
ZWQgaW4gYSBzY29wZSwgaXQgbWlnaHQgaW50cm9kdWNlIG5ldworICAgICAgICAgKiBiaW5kaW5n
cyBpbiB0aGlzIG9yIGl0cyBwcmFyZW50IHNjb3Blcy4KKyAgICAgICAgICogQWxsIHRob3NlIHNj
b3BlcyBhcmUgY29uc2lkZXJlZCAnZHluYW1pYycuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xl
YW59IFNjb3BlI2R5bmFtaWMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZHluYW1pYyA9IHRo
aXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnd2l0aCc7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc2NvcGUtZGVmaW5pbmcgc3ludGF4IG5v
ZGUuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZX0gU2NvcGUjYmxvY2sKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBUaGUge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSB0aGF0IGFyZSBub3QgcmVzb2x2
ZWQgd2l0aCB0aGlzIHNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gU2Nv
cGUjdGhyb3VnaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50aHJvdWdoID0gW107CisgICAg
ICAgICAvKioKKyAgICAgICAgICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9cyBvZiB0aGlz
IHNjb3BlLiBJbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAqICdmdW5jdGlvbicgc2NvcGUgdGhp
cyBpbmNsdWRlcyB0aGUgYXV0b21hdGljIGFyZ3VtZW50IDxlbT5hcmd1bWVudHM8L2VtPiBhcwor
ICAgICAgICAgKiBpdHMgZmlyc3QgZWxlbWVudCwgYXMgd2VsbCBhcyBhbGwgZnVydGhlciBmb3Jt
YWwgYXJndW1lbnRzLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZVtdfSBTY29wZSN2YXJp
YWJsZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFyaWFibGVzID0gW107CisgICAgICAg
ICAvKioKKyAgICAgICAgICogQW55IHZhcmlhYmxlIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNl
fSBmb3VuZCBpbiB0aGlzIHNjb3BlLiBUaGlzCisgICAgICAgICAqIGluY2x1ZGVzIG9jY3VycmVu
Y2VzIG9mIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsIGFzIHZhcmlhYmxlcyBmcm9tCisgICAgICAg
ICAqIHBhcmVudCBzY29wZXMgKGluY2x1ZGluZyB0aGUgZ2xvYmFsIHNjb3BlKS4gRm9yIGxvY2Fs
IHZhcmlhYmxlcworICAgICAgICAgKiB0aGlzIGFsc28gaW5jbHVkZXMgZGVmaW5pbmcgb2NjdXJy
ZW5jZXMgKGxpa2UgaW4gYSAndmFyJyBzdGF0ZW1lbnQpLgorICAgICAgICAgKiBJbiBhICdmdW5j
dGlvbicgc2NvcGUgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUK
KyAgICAgICAgICogZm9ybWFsIHBhcmFtZXRlciBpbiB0aGUgcGFyYW1ldGVyIGxpc3QuCisgICAg
ICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29wZSNyZWZlcmVuY2VzCisgICAgICAgICAq
LworICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAgIC8qKgorICAgICAgICAg
KiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V9cyB0aGF0IGFyZSBsZWZ0IHRvIGJlIHJlc29sdmVk
IChpLmUuIHdoaWNoCisgICAgICAgICAqIG5lZWQgdG8gYmUgbGlua2VkIHRvIHRoZSB2YXJpYWJs
ZSB0aGV5IHJlZmVyIHRvKS4gVXNlZCBpbnRlcm5hbGx5IHRvCisgICAgICAgICAqIHJlc29sdmUg
YmluZGluZ3MgZHVyaW5nIHNjb3BlIGFuYWx5c2lzLiBPbiBhIGZpbmFsaXplZCBzY29wZQorICAg
ICAgICAgKiBhbmFseXNpcywgYWxsIHNvcGVzIGhhdmUgPGVtPmxlZnQ8L2VtPiB2YWx1ZSA8c3Ry
b25nPm51bGw8L3N0cm9uZz4uCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29w
ZSNsZWZ0CisgICAgICAgICAqLworICAgICAgICB0aGlzLmxlZnQgPSBbXTsKKyAgICAgICAgIC8q
KgorICAgICAgICAgKiBGb3IgJ2dsb2JhbCcgYW5kICdmdW5jdGlvbicgc2NvcGVzLCB0aGlzIGlz
IGEgc2VsZi1yZWZlcmVuY2UuIEZvcgorICAgICAgICAgKiBvdGhlciBzY29wZSB0eXBlcyB0aGlz
IGlzIHRoZSA8ZW0+dmFyaWFibGVTY29wZTwvZW0+IHZhbHVlIG9mIHRoZQorICAgICAgICAgKiBw
YXJlbnQgc2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN2YXJpYWJsZVNj
b3BlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcmlhYmxlU2NvcGUgPQorICAgICAgICAg
ICAgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnZnVuY3Rpb24nKSA/
IHRoaXMgOiBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZTsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBXaGV0aGVyIHRoaXMgc2NvcGUgaXMgY3JlYXRlZCBieSBhIEZ1bmN0aW9uRXhwcmVzc2lv
bi4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZnVuY3Rpb25FeHByZXNzaW9u
U2NvcGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUg
PSBmYWxzZTsKKyAgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBzY29w
ZSB0aGF0IGNvbnRhaW5zIGFuICdldmFsKCknIGludm9jYXRpb24uCisgICAgICAgICAqIEBtZW1i
ZXIge2Jvb2xlYW59IFNjb3BlI2RpcmVjdENhbGxUb0V2YWxTY29wZQorICAgICAgICAgKi8KKyAg
ICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSBmYWxzZTsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSN0aGlzRm91bmQKKyAgICAgICAgICov
CisgICAgICAgIHRoaXMudGhpc0ZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvZHkgPSB0aGlzLnR5
cGUgPT09ICdmdW5jdGlvbicgPyBibG9jay5ib2R5IDogYmxvY2s7CisgICAgICAgIGlmIChvcHQu
bmFtaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9fZGVmaW5lKGJsb2NrLmlkLCB7CisgICAgICAg
ICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgIG5h
bWU6IGJsb2NrLmlkLAorICAgICAgICAgICAgICAgIG5vZGU6IGJsb2NrCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Z1bmN0aW9uJykg
eworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKCdhcmd1bWVudHMnLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhaW50cy5zZXQoJ2FyZ3VtZW50cycsIHRydWUp
OworICAgICAgICAgICAgICAgIHRoaXMuc2V0LnNldCgnYXJndW1lbnRzJywgdmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhw
cmVzc2lvbiAmJiBibG9jay5pZCkgeworICAgICAgICAgICAgICAgIG5ldyBTY29wZShibG9jaywg
eyBuYW1pbmc6IHRydWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAg
LyoqCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHtAbGluayBTY29wZXxzY29w
ZX0uCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN1cHBlcgorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy51cHBlciA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgIC8qKgorICAgICAg
ICAgKiBXaGV0aGVyICd1c2Ugc3RyaWN0JyBpcyBpbiBlZmZlY3QgaW4gdGhpcyBzY29wZS4KKyAg
ICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjaXNTdHJpY3QKKyAgICAgICAgICovCisg
ICAgICAgIHRoaXMuaXNTdHJpY3QgPSBpc1N0cmljdFNjb3BlKHRoaXMsIGJsb2NrKTsKKworICAg
ICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbmVzdGVkIHtAbGluayBTY29wZX1zLgorICAg
ICAgICAgKiBAbWVtYmVyIHtTY29wZVtdfSBTY29wZSNjaGlsZFNjb3BlcworICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5jaGlsZFNjb3BlcyA9IFtdOworICAgICAgICBpZiAoY3VycmVudFNjb3Bl
KSB7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUuY2hpbGRTY29wZXMucHVzaCh0aGlzKTsKKyAg
ICAgICAgfQorCisKKyAgICAgICAgLy8gUkFJSQorICAgICAgICBjdXJyZW50U2NvcGUgPSB0aGlz
OworICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZ2xvYmFsJykgeworICAgICAgICAgICAgZ2xv
YmFsU2NvcGUgPSB0aGlzOworICAgICAgICAgICAgZ2xvYmFsU2NvcGUuaW1wbGljaXQgPSB7Cisg
ICAgICAgICAgICAgICAgc2V0OiBuZXcgTWFwKCksCisgICAgICAgICAgICAgICAgdmFyaWFibGVz
OiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBzY29wZXMucHVzaCh0aGlz
KTsKKyAgICB9CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19jbG9zZSA9IGZ1bmN0aW9uIF9fY2xv
c2UoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVmLCBjdXJyZW50LCBub2RlLCBpbXBsaWNpdDsK
KworICAgICAgICAvLyBCZWNhdXNlIGlmIHRoaXMgaXMgZ2xvYmFsIGVudmlyb25tZW50LCB1cHBl
ciBpcyBudWxsCisgICAgICAgIGlmICghdGhpcy5keW5hbWljIHx8IG9wdGlvbnMub3B0aW1pc3Rp
YykgeworICAgICAgICAgICAgLy8gc3RhdGljIHJlc29sdmUKKyAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAg
ICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9fcmVzb2x2
ZShyZWYpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0ZVRvVXBwZXJTY29w
ZShyZWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgImdsb2JhbCIgLyAid2l0aCIgLyAiZnVuY3Rpb24g
d2l0aCBldmFsIiBlbnZpcm9ubWVudAorICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3dp
dGgnKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3Ro
OyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07
CisgICAgICAgICAgICAgICAgICAgIHJlZi50YWludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9
IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IG5vdGlmeSBhbGwgbmFtZXMgYXJlIHRocm91Z2ggdG8gZ2xvYmFsCisgICAgICAgICAgICAgICAg
ICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRo
aXM7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQudGhyb3VnaC5wdXNoKHJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC51cHBlcjsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcpIHsKKyAgICAgICAgICAgIGltcGxpY2l0ID0gW107
CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsg
KytpKSB7CisgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAgICAgICAgICAg
ICAgIGlmIChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsICYmICF0aGlzLnNldC5oYXMocmVmLmlk
ZW50aWZpZXIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQucHVzaChyZWYu
X19tYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBnbG9iYWwgdmFyaWFibGUgZnJv
bSBhc3NpZ25tZW50IGV4cHJlc3Npb24KKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gaW1w
bGljaXQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBpbXBs
aWNpdFtpXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9fZGVmaW5lSW1wbGljaXQobm9kZS5sZWZ0
LCB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkltcGxpY2l0R2xvYmFsVmFy
aWFibGUsCisgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubGVmdCwKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDsKKyAgICAgICAgY3VycmVudFNj
b3BlID0gdGhpcy51cHBlcjsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fcmVzb2x2
ZSA9IGZ1bmN0aW9uIF9fcmVzb2x2ZShyZWYpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlLCBuYW1l
OworICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAgaWYgKHRoaXMu
c2V0LmhhcyhuYW1lKSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQobmFt
ZSk7CisgICAgICAgICAgICB2YXJpYWJsZS5yZWZlcmVuY2VzLnB1c2gocmVmKTsKKyAgICAgICAg
ICAgIHZhcmlhYmxlLnN0YWNrID0gdmFyaWFibGUuc3RhY2sgJiYgcmVmLmZyb20udmFyaWFibGVT
Y29wZSA9PT0gdGhpcy52YXJpYWJsZVNjb3BlOworICAgICAgICAgICAgaWYgKHJlZi50YWludGVk
KSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUudGFpbnRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgdGhpcy50YWludHMuc2V0KHZhcmlhYmxlLm5hbWUsIHRydWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVmLnJlc29sdmVkID0gdmFyaWFibGU7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAg
IFNjb3BlLnByb3RvdHlwZS5fX2RlbGVnYXRlVG9VcHBlclNjb3BlID0gZnVuY3Rpb24gX19kZWxl
Z2F0ZVRvVXBwZXJTY29wZShyZWYpIHsKKyAgICAgICAgaWYgKHRoaXMudXBwZXIpIHsKKyAgICAg
ICAgICAgIHRoaXMudXBwZXIubGVmdC5wdXNoKHJlZik7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy50aHJvdWdoLnB1c2gocmVmKTsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fZGVm
aW5lSW1wbGljaXQgPSBmdW5jdGlvbiBfX2RlZmluZUltcGxpY2l0KG5vZGUsIGluZm8pIHsKKyAg
ICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOworICAgICAgICBpZiAobm9kZSAmJiBub2RlLnR5cGUg
PT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBuYW1lID0gbm9kZS5uYW1lOwor
ICAgICAgICAgICAgaWYgKCF0aGlzLmltcGxpY2l0LnNldC5oYXMobmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgICAgICB0aGlzLmltcGxpY2l0LnNl
dC5zZXQobmFtZSwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMuaW1wbGljaXQudmFy
aWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZSA9IHRoaXMuaW1wbGljaXQuc2V0LmdldChuYW1lKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZWZpbmUgPSBmdW5jdGlvbiBfX2RlZmluZShub2Rl
LCBpbmZvKSB7CisgICAgICAgIHZhciBuYW1lLCB2YXJpYWJsZTsKKyAgICAgICAgaWYgKG5vZGUg
JiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgbmFtZSA9
IG5vZGUubmFtZTsKKyAgICAgICAgICAgIGlmICghdGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICAgICAgdGhpcy5zZXQuc2V0
KG5hbWUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZh
cmlhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUg
PSB0aGlzLnNldC5nZXQobmFtZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmll
cnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBl
Ll9fcmVmZXJlbmNpbmcgPSBmdW5jdGlvbiBfX3JlZmVyZW5jaW5nKG5vZGUsIGFzc2lnbiwgd3Jp
dGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIHZhciByZWY7CisgICAgICAg
IC8vIGJlY2F1c2UgQXJyYXkgZWxlbWVudCBtYXkgYmUgbnVsbAorICAgICAgICBpZiAobm9kZSAm
JiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICByZWYgPSBu
ZXcgUmVmZXJlbmNlKG5vZGUsIHRoaXMsIGFzc2lnbiB8fCBSZWZlcmVuY2UuUkVBRCwgd3JpdGVF
eHByLCBtYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlcy5w
dXNoKHJlZik7CisgICAgICAgICAgICB0aGlzLmxlZnQucHVzaChyZWYpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdEV2YWwgPSBmdW5jdGlvbiBfX2Rl
dGVjdEV2YWwoKSB7CisgICAgICAgIHZhciBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gdGhp
czsKKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSB0cnVlOworICAgICAgICBk
byB7CisgICAgICAgICAgICBjdXJyZW50LmR5bmFtaWMgPSB0cnVlOworICAgICAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQudXBwZXI7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOworICAgIH07
CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZXRlY3RUaGlzID0gZnVuY3Rpb24gX19kZXRlY3RU
aGlzKCkgeworICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IHRydWU7CisgICAgfTsKKworICAgIFNj
b3BlLnByb3RvdHlwZS5fX2lzQ2xvc2VkID0gZnVuY3Rpb24gaXNDbG9zZWQoKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmxlZnQgPT09IG51bGw7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNy
ZXNvbHZlKG5hbWUpCisgICAgLy8gcmV0dXJucyByZXNvbHZlZCByZWZlcmVuY2UKKyAgICBTY29w
ZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoaWRlbnQpIHsKKyAgICAgICAg
dmFyIHJlZiwgaSwgaXo7CisgICAgICAgIGFzc2VydCh0aGlzLl9faXNDbG9zZWQoKSwgJ3Njb3Bl
IHNob3VsZCBiZSBjbG9zZWQnKTsKKyAgICAgICAgYXNzZXJ0KGlkZW50LnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyLCAndGFyZ2V0IHNob3VsZCBiZSBpZGVudGlmaWVyJyk7CisgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAg
ICAgICAgICAgIHJlZiA9IHRoaXMucmVmZXJlbmNlc1tpXTsKKyAgICAgICAgICAgIGlmIChyZWYu
aWRlbnRpZmllciA9PT0gaWRlbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVmOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAg
ICAvLyBBUEkgU2NvcGUjaXNTdGF0aWMKKyAgICAvLyByZXR1cm5zIHRoaXMgc2NvcGUgaXMgc3Rh
dGljCisgICAgU2NvcGUucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7
CisgICAgICAgIHJldHVybiAhdGhpcy5keW5hbWljOworICAgIH07CisKKyAgICAvLyBBUEkgU2Nv
cGUjaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMg
bWF0ZXJpYWxpemVkIGFyZ3VtZW50cworICAgIFNjb3BlLnByb3RvdHlwZS5pc0FyZ3VtZW50c01h
dGVyaWFsaXplZCA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzTWF0ZXJpYWxpemVkKCkgeworICAgICAg
ICAvLyBUT0RPKENvbnN0ZWxsYXRpb24pCisgICAgICAgIC8vIFdlIGNhbiBtb3JlIGFnZ3Jlc3Np
dmUgb24gdGhpcyBjb25kaXRpb24gbGlrZSB0aGlzLgorICAgICAgICAvLworICAgICAgICAvLyBm
dW5jdGlvbiB0KCkgeworICAgICAgICAvLyAgICAgLy8gYXJndW1lbnRzIG9mIHQgaXMgYWx3YXlz
IGhpZGRlbi4KKyAgICAgICAgLy8gICAgIGZ1bmN0aW9uIGFyZ3VtZW50cygpIHsKKyAgICAgICAg
Ly8gICAgIH0KKyAgICAgICAgLy8gfQorICAgICAgICB2YXIgdmFyaWFibGU7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBub3QgZnVuY3Rpb24gc2NvcGUKKyAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0g
J2Z1bmN0aW9uJykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXRoaXMuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0LmdldCgnYXJndW1lbnRzJyk7
CisgICAgICAgIGFzc2VydCh2YXJpYWJsZSwgJ2Fsd2F5cyBoYXZlIGFyZ3VtZW50cyB2YXJpYWJs
ZScpOworICAgICAgICByZXR1cm4gdmFyaWFibGUudGFpbnRlZCB8fCB2YXJpYWJsZS5yZWZlcmVu
Y2VzLmxlbmd0aCAgIT09IDA7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNpc1RoaXNNYXRl
cmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMgbWF0ZXJpYWxpemVkIGB0aGlz
YCByZWZlcmVuY2UKKyAgICBTY29wZS5wcm90b3R5cGUuaXNUaGlzTWF0ZXJpYWxpemVkID0gZnVu
Y3Rpb24gaXNUaGlzTWF0ZXJpYWxpemVkKCkgeworICAgICAgICAvLyBUaGlzIGlzIG5vdCBmdW5j
dGlvbiBzY29wZQorICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuaXNTdGF0
aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRoaXMudGhpc0ZvdW5kOworICAgIH07CisKKyAgICBTY29wZS5tYW5nbGVkTmFtZSA9ICdf
XyRlc2NvcGUkX18nOworCisgICAgU2NvcGUucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIGF0
dGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Cisg
ICAgICAgICAgICB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXSA9IHRoaXM7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uIGRldGFj
aCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7CisgICAg
ICAgICAgICBkZWxldGUgdGhpcy5ibG9ja1tTY29wZS5tYW5nbGVkTmFtZV07CisgICAgICAgIH0K
KyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmlzVXNlZE5hbWUgPSBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICBpZiAodGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaXogPSB0aGlzLnRo
cm91Z2gubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMudGhyb3Vn
aFtpXS5pZGVudGlmaWVyLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEBjbGFzcyBTY29wZU1hbmFnZXIKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBTY29wZU1hbmFnZXIoc2NvcGVzKSB7CisgICAgICAgIHRoaXMuc2NvcGVzID0g
c2NvcGVzOworICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8g
UmV0dXJucyBhcHByb3BsaWF0ZSBzY29wZSBmb3IgdGhpcyBub2RlCisgICAgU2NvcGVNYW5hZ2Vy
LnByb3RvdHlwZS5fX2dldCA9IGZ1bmN0aW9uIF9fZ2V0KG5vZGUpIHsKKyAgICAgICAgdmFyIGks
IGl6LCBzY29wZTsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBub2RlW1Njb3BlLm1hbmdsZWROYW1lXSB8fCBudWxsOworICAgICAgICB9CisgICAgICAg
IGlmIChTY29wZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKKyAgICAgICAgICAgIGZvciAoaSA9
IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgIHNjb3BlID0gdGhpcy5zY29wZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFzY29wZS5m
dW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUu
YmxvY2sgPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29wZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgU2NvcGVNYW5h
Z2VyLnByb3RvdHlwZS5hY3F1aXJlID0gZnVuY3Rpb24gYWNxdWlyZShub2RlKSB7CisgICAgICAg
IHJldHVybiB0aGlzLl9fZ2V0KG5vZGUpOworICAgIH07CisKKyAgICBTY29wZU1hbmFnZXIucHJv
dG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbiByZWxlYXNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHNj
b3BlID0gdGhpcy5fX2dldChub2RlKTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAgICAgICAg
ICBzY29wZSA9IHNjb3BlLnVwcGVyOworICAgICAgICAgICAgd2hpbGUgKHNjb3BlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUu
YXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7CisgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgdGhpcy5zY29wZXNbaV0uYXR0YWNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5hdHRhY2hlZCA9IHRydWU7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUu
ZGV0YWNoID0gZnVuY3Rpb24gZGV0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7CisgICAgICAg
IGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgdGhpcy5zY29wZXNbaV0uZGV0YWNoKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5hdHRhY2hlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBTY29wZS5pc1Njb3BlUmVxdWlyZWQg
PSBmdW5jdGlvbiBpc1Njb3BlUmVxdWlyZWQobm9kZSkgeworICAgICAgICByZXR1cm4gU2NvcGUu
aXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkgfHwgbm9kZS50eXBlID09PSBTeW50YXguV2l0
aFN0YXRlbWVudCB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5DYXRjaENsYXVzZTsKKyAgICB9Owor
CisgICAgU2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1ZhcmlhYmxl
U2NvcGVSZXF1aXJlZChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09IFN5bnRh
eC5Qcm9ncmFtIHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiB8fCBu
b2RlLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH07CisKKyAgICAv
KioKKyAgICAgKiBNYWluIGludGVyZmFjZSBmdW5jdGlvbi4gVGFrZXMgYW4gRXNwcmltYSBzeW50
YXggdHJlZSBhbmQgcmV0dXJucyB0aGUKKyAgICAgKiBhbmFseXplZCBzY29wZXMuCisgICAgICog
QGZ1bmN0aW9uIGFuYWx5emUKKyAgICAgKiBAcGFyYW0ge2VzcHJpbWEuVHJlZX0gdHJlZQorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlZE9wdGlvbnMgLSBPcHRpb25zIHRoYXQgdGFpbG9y
IHRoZSBzY29wZSBhbmFseXNpcworICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0
aW9ucy5vcHRpbWlzdGljPWZhbHNlXSAtIHRoZSBvcHRpbWlzdGljIGZsYWcKKyAgICAgKiBAcGFy
YW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMuZGlyZWN0aXZlPWZhbHNlXS0gdGhlIGRpcmVj
dGl2ZSBmbGFnCisgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLmlnbm9y
ZUV2YWw9ZmFsc2VdLSB3aGV0aGVyIHRvIGNoZWNrICdldmFsKCknIGNhbGxzCisgICAgICogQHJl
dHVybiB7U2NvcGVNYW5hZ2VyfQorICAgICAqLworICAgIGZ1bmN0aW9uIGFuYWx5emUodHJlZSwg
cHJvdmlkZWRPcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHRTY29wZXM7CisKKyAgICAgICAg
b3B0aW9ucyA9IHVwZGF0ZURlZXBseShkZWZhdWx0T3B0aW9ucygpLCBwcm92aWRlZE9wdGlvbnMp
OworICAgICAgICByZXN1bHRTY29wZXMgPSBzY29wZXMgPSBbXTsKKyAgICAgICAgY3VycmVudFNj
b3BlID0gbnVsbDsKKyAgICAgICAgZ2xvYmFsU2NvcGUgPSBudWxsOworCisgICAgICAgIC8vIGF0
dGFjaCBzY29wZSBhbmQgY29sbGVjdCAvIHJlc29sdmUgbmFtZXMKKyAgICAgICAgZXN0cmF2ZXJz
ZS50cmF2ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIobm9k
ZSkgeworICAgICAgICAgICAgICAgIHZhciBpLCBpeiwgZGVjbDsKKyAgICAgICAgICAgICAgICBp
ZiAoU2NvcGUuaXNTY29wZVJlcXVpcmVkKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
dyBTY29wZShub2RlLCB7fSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25t
ZW50RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09
ICc9JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsICghY3VycmVudFNjb3Bl
LmlzU3RyaWN0ICYmIG5vZGUubGVmdC5uYW1lICE9IG51bGwpICYmIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuUlcsIG5vZGUucmlnaHQpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3Jl
ZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGUuZWxlbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQmxvY2tTdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9f
cmVmZXJlbmNpbmcobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQnJlYWtTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQ2FsbEV4cHJl
c3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGUuY2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlWydh
cmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtpXSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGlzIGlz
IGRpcmVjdCBjYWxsIHRvIGV2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmln
bm9yZUV2YWwgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgbm9k
ZS5jYWxsZWUubmFtZSA9PT0gJ2V2YWwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RldGVjdEV2YWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
U3ludGF4LkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19k
ZWZpbmUobm9kZS5wYXJhbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFi
bGUuQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLnBhcmFt
LAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNl
IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuY29uc2VxdWVudCk7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Db250
aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIFN5bnRheC5EaXJlY3RpdmVTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRG9XaGlsZVN0YXRlbWVudDoK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FeHByZXNzaW9uU3Rh
dGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhu
b2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5pbml0KTsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS51cGRhdGUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZvckluU3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09IFN5bnRheC5W
YXJpYWJsZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdLmlkLCBSZWZlcmVuY2Uu
V1JJVEUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCwg
UmVmZXJlbmNlLldSSVRFLCBudWxsLCAoIWN1cnJlbnRTY29wZS5pc1N0cmljdCAmJiBub2RlLmxl
ZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5G
dW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbkRlY2xh
cmF0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQorICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUudXBwZXIuX19kZWZpbmUobm9kZS5pZCwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogbm9kZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBpZCBpcyBkZWZp
bmVkIGluIHVwcGVyIHNjb3BlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0g
bm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGkK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguSWRl
bnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5JZlN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5MaXRlcmFsOgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguTG9naWNhbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5f
X3JlZmVyZW5jaW5nKG5vZGUubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUub2JqZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucHJvcGVydHkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jYWxsZWUpOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IG5vZGVbJ2FyZ3VtZW50cyddLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5v
ZGVbJ2FyZ3VtZW50cyddW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9iamVjdEV4cHJl
c3Npb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguUHJvZ3JhbToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBjYXNlIFN5bnRheC5Qcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguUmV0dXJuU3RhdGVtZW50OgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmV4cHJlc3Npb25z
W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlN3aXRjaFN0YXRlbWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5kaXNjcmltaW5hbnQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LlN3aXRjaENhc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgY2FzZSBTeW50YXguVGhpc0V4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0VGhpcygpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlRocm93U3RhdGVt
ZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVW5hcnlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5V
cGRhdGVFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmFyZ3VtZW50LCBSZWZlcmVuY2UuUlcsIG51bGwpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlZhcmlhYmxlRGVj
bGFyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5kZWNs
YXJhdGlvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZWZpbmUoZGVjbC5pZCwgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlZhcmlhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWU6IGRlY2wuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZTogZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG5vZGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGZvdW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcoZGVjbC5pZCwgUmVm
ZXJlbmNlLldSSVRFLCBkZWNsLmluaXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmluaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9y
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19y
ZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdpdGhTdGF0ZW1lbnQgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYXQgdXBwZXIgc2NvcGUK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVyLl9fcmVmZXJlbmNpbmcobm9k
ZS5vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUobm9k
ZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50U2NvcGUgJiYgbm9kZSA9PT0gY3Vy
cmVudFNjb3BlLmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2Ns
b3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwor
ICAgICAgICBhc3NlcnQoY3VycmVudFNjb3BlID09PSBudWxsKTsKKyAgICAgICAgZ2xvYmFsU2Nv
cGUgPSBudWxsOworICAgICAgICBzY29wZXMgPSBudWxsOworICAgICAgICBvcHRpb25zID0gbnVs
bDsKKworICAgICAgICByZXR1cm4gbmV3IFNjb3BlTWFuYWdlcihyZXN1bHRTY29wZXMpOworICAg
IH0KKworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLnZlcnNpb24gKi8KKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMS4wLjEnOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlJlZmVyZW5j
ZSAqLworICAgIGV4cG9ydHMuUmVmZXJlbmNlID0gUmVmZXJlbmNlOworICAgIC8qKiBAbmFtZSBt
b2R1bGU6ZXNjb3BlLlZhcmlhYmxlICovCisgICAgZXhwb3J0cy5WYXJpYWJsZSA9IFZhcmlhYmxl
OworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlICovCisgICAgZXhwb3J0cy5TY29w
ZSA9IFNjb3BlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlTWFuYWdlciAqLwor
ICAgIGV4cG9ydHMuU2NvcGVNYW5hZ2VyID0gU2NvcGVNYW5hZ2VyOworICAgIC8qKiBAbmFtZSBt
b2R1bGU6ZXNjb3BlLmFuYWx5emUgKi8KKyAgICBleHBvcnRzLmFuYWx5emUgPSBhbmFseXplOwor
fSwgdGhpcykpOworLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7ImVz
dHJhdmVyc2UiOjd9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qCisg
IENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNv
bT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBnbWFpbC5j
b20+CisgIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJl
PgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFp
bC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdp
LmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13
aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlz
Lmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8
YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEg
SGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMg
SVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9S
IEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlICovCisv
Kmdsb2JhbCBlc3ByaW1hOnRydWUsIGRlZmluZTp0cnVlLCBleHBvcnRzOnRydWUsIHdpbmRvdzog
dHJ1ZSwKK3Rocm93RXJyb3JUb2xlcmFudDogdHJ1ZSwKK3Rocm93RXJyb3I6IHRydWUsIGdlbmVy
YXRlU3RhdGVtZW50OiB0cnVlLCBwZWVrOiB0cnVlLAorcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bjogdHJ1ZSwgcGFyc2VCbG9jazogdHJ1ZSwgcGFyc2VFeHByZXNzaW9uOiB0cnVlLAorcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uOiB0cnVlLCBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbjogdHJ1ZSwK
K3BhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czogdHJ1ZSwgcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXI6IHRydWUsCitwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb246IHRydWUsCitwYXJzZVVuYXJ5
RXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlU3RhdGVtZW50OiB0cnVlLCBwYXJzZVNvdXJjZUVsZW1l
bnQ6IHRydWUgKi8KKworKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJp
Y3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBv
cnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAorICAgIC8vIFJoaW5vLCBhbmQgcGxhaW4gYnJvd3Nl
ciBsb2FkaW5nLgorCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBpZiAodHlw
ZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIGRlZmlu
ZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBmYWN0b3J5KChyb290LmVzcHJpbWEgPSB7fSkpOworICAgIH0KK30odGhpcywg
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgVG9rZW4s
CisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5FeHByVG9rZW5zLAorICAgICAgICBTeW50
YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAgICAgTWVzc2FnZXMsCisgICAgICAgIFJl
Z2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCisgICAgICAgIHNvdXJjZSwKKyAgICAg
ICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAg
bGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAorICAgICAgICBs
b29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAgIFRva2VuID0g
eworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAorICAgICAgICBJ
ZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxsTGl0ZXJhbDog
NSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0b3I6IDcsCisg
ICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uOiA5Cisg
ICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tlbi5Cb29sZWFu
TGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4n
OworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVyJzsKKyAgICBU
b2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5OYW1lW1Rva2Vu
Lk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVy
YWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5j
dHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsK
KyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3VsYXJFeHByZXNz
aW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMg
aXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAneycsICdbJywgJ2lu
JywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCisgICAgICAgICAgICAgICAgICAgICdy
ZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisgICAgICAgICAgICAg
ICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgICAgICc9Jywg
Jys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScsCisgICAg
ICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAgICAnKycsICct
JywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcmJywKKyAg
ICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwnLCAnPycsICc6
JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAgICAgICAgICAgICc8PScsICc8JywgJz4n
LCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBBcnJheUV4cHJlc3Npb246
ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVt
ZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAg
ICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAgQ2FsbEV4cHJl
c3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1
c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Np
b24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JywKKyAg
ICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBEZWJ1
Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAgRW1wdHlTdGF0ZW1l
bnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHBy
ZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywK
KyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAgICAgIEZ1bmN0
aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAgICAgRnVuY3Rpb25F
eHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRlbnRpZmllcjogJ0lk
ZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICAgICAg
TGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0
YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24n
LAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsCisgICAgICAg
IE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lv
bjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCisgICAg
ICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1
cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJl
c3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAg
ICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHByZXNzaW9uOiAn
VGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50
JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAgICAgVW5hcnlF
eHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjog
J1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFi
bGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVj
bGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLAorICAg
ICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKKyAgICB9OworCisgICAgUHJvcGVy
dHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAgICAgICBHZXQ6IDIsCisgICAgICAgIFNl
dDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2Fs
IHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVjdGVkVG9rZW46ICAnVW5l
eHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICAnVW5leHBlY3Rl
ZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1VuZXhwZWN0ZWQgc3RyaW5n
JywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBlY3RlZCBpZGVudGlmaWVy
JywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0ZWQgcmVzZXJ2ZWQgd29y
ZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQnLAor
ICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cn
LAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAor
ICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246
IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAnSW52YWxpZCBs
ZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExIU0luRm9ySW46
ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBNdWx0aXBsZURl
ZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBz
dGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAgJ01pc3NpbmcgY2F0Y2ggb3Ig
ZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRlZmluZWQgbGFi
ZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBoYXMgYWxyZWFk
eSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxsZWdhbCBjb250
aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0
YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1l
bnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3Qg
aW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTog
ICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBt
b2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1heSBub3QgYmUg
ZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbU5h
bWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4g
c3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5j
dGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisgICAgICAgIFN0
cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1
bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICAnT2N0
YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCisgICAgICAgIFN0
cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJp
Y3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogICdEdXBsaWNhdGUg
ZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9k
ZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiAgJ09iamVjdCBsaXRlcmFsIG1heSBu
b3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUnLAor
ICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVs
dGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lJywKKyAgICAgICAgU3Ry
aWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5v
dCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUG9zdGZpeDogICdQ
b3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRz
IG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQcmVmaXg6ICAnUHJl
Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9w
ZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6ICAnVXNl
IG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJworICAgIH07CisKKyAgICAv
LyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJlZ2V4ID0g
eworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4QUFceEI1
XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAy
RTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM4
Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0
ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUw
NUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUw
NkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcx
Mi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdG
QVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXHUwOEEy
LVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3
N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlB
QS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURG
LVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4
XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1c
dTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMt
XHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBc
dTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1c
dTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1
MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1
MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBC
QUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUw
QzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBD
ODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1
MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBE
MEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBE
N0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUw
REM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBF
ODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVB
MS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIz
XHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3
XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1
NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4
MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0
OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEy
ODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUx
MkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1
MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYt
XHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcw
Q1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3
NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUx
OEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5NTAtXHUxOTZEXHUxOTcwLVx1
MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRc
dTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZc
dTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5
LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYx
NVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFG
NTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFG
QkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUx
RkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1
MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUy
MTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1
MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1c
dTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1
MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVc
dTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQw
LVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAz
MS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUz
MEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1
MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAt
XHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZF
XHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4
Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVB
ODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1
QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0Nc
dUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRC
XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjkt
XHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0
XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIy
OC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVE
N0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1
RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1
RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1
RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEt
XHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZD
Rlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAorICAgICAgICBOb25Bc2NpaUlkZW50aWZp
ZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1c
dTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRc
dTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1c
dTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTI3
XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMx
XHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAt
XHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZF
OFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3
RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMFx1MDhBMi1cdTA4QUNcdTA4
RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1
MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1
MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1
MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1
MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1c
dTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUw
QTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBB
NjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1
MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1
MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZc
dTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEt
XHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhc
dTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1c
dTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1c
dTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUw
QkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1
MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1c
dTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0QtXHUwQzQ0
XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBDNTlcdTBDNjAt
XHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkw
XHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MEND
Ni1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENF
Ni1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQx
MFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENEVcdTBE
NTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJcdTBEODNcdTBE
ODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUw
RENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERjJcdTBERjNcdTBFMDEtXHUw
RTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBF
ODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBF
QTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBF
QzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBG
MThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0
OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEw
MDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUx
MEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1
MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVc
dTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEw
XHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzgwLVx1MTM4Rlx1MTNB
MC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUx
NkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIwLVx1MTczNFx1
MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1c
dTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgwRFx1MTgxMC1c
dTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFD
XHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4
MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEOVx1MUEwMC1cdTFBMUJcdTFBMjAtXHUx
QTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjAwLVx1
MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdc
dTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxRDAw
LVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFG
NERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFG
QjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUx
RkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1
MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIw
RDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIx
MTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIx
MzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUy
QzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAwLVx1MkQyNVx1
MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEwLVx1MkRBNlx1
MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgt
XHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUyRTJGXHUzMDA1
LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMw
OTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMx
MDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1
NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENc
dUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVBNjk3XHVBNjlG
LVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3
OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVB
OEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1
QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QUEwMC1cdUFBMzZcdUFBNDAt
XHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0JcdUFBODAtXHVBQUMy
XHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIw
OS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVB
QkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVE
N0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1c
dUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBc
dUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZc
dUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTI2XHVGRTMz
XHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYx
OVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZG
QzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJykKKyAgICB9OworCisg
ICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVy
cm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFu
dGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAgIC8vIHRvIGNhdGNoIGEgbG9naWMgZXJy
b3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLgorICAg
IC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55
IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7
CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBpZiAoIWNvbmRpdGlv
bikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1Njc4
OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhPZihjaCkg
Pj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0ZSBTcGFjZQorCisgICAgZnVuY3Rpb24g
aXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9
PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhB
MCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIw
MDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAw
NywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZG
XS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9y
cworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAgICByZXR1cm4g
KGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2gg
PT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElk
ZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgeworICAgICAg
ICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIp
IGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1
QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAw
eDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAg
ICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChjaCA+PSAw
eDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hh
ckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkg
eworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAk
IChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYg
Y2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAm
JiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA+PSAweDMw
ICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4uOQorICAgICAgICAgICAgKGNoID09PSAw
eDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAg
ICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChTdHJp
bmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJl
c2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29yZChpZCkgewor
ICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAgICAgY2Fz
ZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2UgJ2V4dGVuZHMn
OgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2Vy
dmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2ltcGxl
bWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNlICdwYWNrYWdl
JzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6Cisg
ICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6CisgICAgICAgIGNh
c2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgeworICAgICAgICBy
ZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAgfQorCisgICAg
Ly8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlkKSB7CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29uc3QnIGlzIHNw
ZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcgYW5kICdsZXQn
IGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0LgorICAg
ICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29yZHMuCisKKyAg
ICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpOwor
ICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlk
ID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09
ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2Fz
ZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgn
KSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHJldHVy
biAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gn
KSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3Qn
KSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3Mn
KSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVs
ZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdl
eHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3OgorICAgICAgICAg
ICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlk
ID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gKGlk
ID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVn
Z2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5z
dGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBmdW5jdGlvbiBh
ZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKKyAgICAgICAgdmFyIGNv
bW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09ICdudW1i
ZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKworICAgICAgICAvLyBC
ZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRlbiB0aGUgY29t
bWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBs
ZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNraXAgYWRkaW5n
IGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAgICAgIC8vIGhhbmRs
ZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0KSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUubGFzdENvbW1lbnRT
dGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQgPSB7CisgICAgICAgICAgICB0eXBlOiB0
eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgICAgIGlmIChl
eHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICBjb21tZW50
LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBleHRyYS5jb21tZW50cy5wdXNoKGNvbW1l
bnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgZXh0
cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICBleHRyYS50cmFp
bGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAgIHZhciBzdGFydCwg
bG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0OworICAg
ICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAt
IG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHdoaWxlIChpbmRl
eCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7
CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3Io
Y2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4IC0g
MSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBp
bmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCAtIDEsIGxv
Yyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYg
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4dHJhLmNvbW1l
bnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0
LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgIGxpbmU6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBz
dGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBza2lw
TXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50
OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgc3RhcnQgPSBp
bmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAgc3RhcnQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAg
IGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
MHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
IGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVu
ZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21t
ZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShz
dGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0g
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0Js
b2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNoLCBzdGFydDsKKworICAgICAg
ICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAgICAgICAg
ICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAg
ICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIHN0YXJ0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8gVSswMDJGIGlz
ICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAgICAgICAgICAgICAgICAgICBzdGFydCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAgLy8gVSsw
MDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5lQ29tbWVudCgp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09
IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAgICAgICAgICAgIC8vIFUrMDAzRSBpcyAn
PicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09
IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnQKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmds
ZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8JworICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSAnIS0tJykgeworICAgICAgICAgICAg
ICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8g
YCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVD
b21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICB2YXIgaSwgbGVuLCBjaCwg
Y29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8
IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiAr
ICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBj
aCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTsKKyAgICAg
ICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAnXHUnIChVKzAw
NUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKGNo
ID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9
PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgaWYg
KCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgw
KSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZCA9IGNoOwor
ICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghaXNJZGVu
dGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZCArPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMg
YW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAg
ICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAg
ICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
aWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFy
IHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGluZGV4Kys7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgICAgICAvLyBC
bGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgorICAgICAg
ICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldEVzY2Fw
ZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNJZGVudGlm
aWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBpZCwgdHlw
ZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgIC8vIEJhY2tzbGFzaCAoVSsw
MDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0gKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmllcigpIDogZ2V0
SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJh
bCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gVGh1cywgaXQgbXVzdCBiZSBh
biBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAg
ICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc0tleXdvcmQo
aWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAgICAgfSBlbHNl
IGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVy
YWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJykg
eworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgIHZh
bHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAg
ICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKworICAgIC8vIDcuNyBQdW5j
dHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7CisgICAgICAgIHZhciBz
dGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAgICAgY2gxID0gc291cmNlW2luZGV4XSwK
KyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNoMywKKyAgICAgICAgICAgIGNoNDsKKwor
ICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21t
b24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgY2FzZSAweDJFOiAgLy8g
LiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBvcGVuIGJyYWNrZXQKKyAgICAgICAgY2Fz
ZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAgICAgIGNhc2UgMHgzQjogIC8vIDsgc2Vt
aWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwgY29tbWEKKyAgICAgICAgY2FzZSAweDdC
OiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg3RDogIC8vIH0gY2xvc2Ug
Y3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAgLy8gWworICAgICAgICBjYXNlIDB4NUQ6
ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoKKyAgICAgICAgY2FzZSAweDNGOiAgLy8g
PworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09
IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSBleHRy
YS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHg3
QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRv
a2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAg
ICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLAorICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0
OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKworICAgICAgICAg
ICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFyaXNvbiBvcGVy
YXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gMHgzRCkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMHgyQjogIC8vICsKKyAgICAg
ICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAgICAgICAgICAgICAgY2FzZSAweDJGOiAg
Ly8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzogIC8vIDwKKyAgICAgICAgICAgICAgICBj
YXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSAweDVFOiAgLy8gXgorICAgICAg
ICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjU6ICAv
LyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAgLy8gJgorICAgICAgICAgICAgICAgIGNh
c2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2Vu
LlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21D
aGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6
IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2FzZSAweDIxOiAvLyAhCisgICAgICAgICAg
ICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xpY2Uoc3RhcnQs
IGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9y
OiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7CisKKyAgICAg
ICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSA0OworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0
b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAgICAgY2gzID0gY2g0LnN1YnN0cigwLCAz
KTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0nIHx8IGNoMyA9
PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAg
ICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsr
IC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNoMy5zdWJzdHIoMCwgMik7CisKKyAgICAg
ICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEpID49IDApKSB8
fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6IDwg
PiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlmICgnPD49ISstKiUmfF4vJy5pbmRleE9m
KGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAg
ICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8gNy44LjMgTnVtZXJpYyBMaXRlcmFscwor
CisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAgdmFyIG51bWJl
ciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
aWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAgICAgICB2YWx1
ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAorICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAg
IH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAgdmFy
IG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVt
YmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERpZ2l0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAg
ICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLAorICAgICAgICAgICAgb2N0YWw6IHRy
dWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGlu
ZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAg
ICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nhbk51bWVy
aWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7CisKKyAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGlnaXQoY2guY2hh
ckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051bWVyaWMgbGl0ZXJh
bCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpOwor
CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcnOworICAgICAgICBp
ZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAvLyBIZXggbnVt
YmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRz
IHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3Rh
cnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0
KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChzdGFy
dCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZGVjaW1hbCBudW1i
ZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLgorICAgICAgICAgICAg
ICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAg
ICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAg
ICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkp
KSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgIG51bWJlciAr
PSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAg
ICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAg
ICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkg
eworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAgICAg
IHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQor
CisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2FuU3RyaW5n
TGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNoLCBjb2Rl
LCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2UsIHN0YXJ0TGluZU51bWJlciwgc3Rh
cnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAg
ICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIHF1b3RlID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyIn
KSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUn
KTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4OworCisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgr
K107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAgICAgICAgICBx
dW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVB
dCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdW5l
c2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQn
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0g
JzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
Y3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3Vy
Y2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcw
MTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3Rh
cnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49
IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxl
bmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT2N0YWxE
aWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVt
YmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNvdXJjZVtpbmRl
eF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9y
KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRl
cmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwK
KyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAorICAgICAgICAg
ICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAorICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHsKKyAgICAg
ICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFsdWUgPSBuZXcgUmVn
RXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBCb2R5KCkg
eworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJvZHk7CisK
KyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2ggPT09ICcvJywg
J1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7Cisg
ICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICBjbGFzc01hcmtlciA9IGZh
bHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAvLyBFQ01BLTI2MiA3
LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVy
bWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29k
ZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVy
bWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFya2VyKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xh
c3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xh
c3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAgIGJvZHkgPSBz
dHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAgICAgIH07Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAgICB2YXIgY2gs
IHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAgc3RyID0gJyc7CisgICAgICAgIGZsYWdz
ID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcgJiYgaW5k
ZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAg
ICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsrcmVzdG9yZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9yZV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xc
dSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXCc7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAgICAgICAgc3Ry
ICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0cgorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CisgICAgICAgIHZhciBz
dGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVlOworCisgICAgICAgIGxvb2thaGVhZCA9
IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisK
KyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CisgICAgICAgIGZsYWdzID0gc2NhblJl
Z0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVlLCBmbGFn
cy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsCisgICAgICAgICAgICB2YWx1
ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGlu
ZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkgewor
ICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjsKKworICAgICAgICBza2lwQ29tbWVu
dCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAg
ICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpOworICAgICAgICBsb2MuZW5kID0gewor
ICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4
dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAvLyBQb3Ag
dGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScKKyAgICAgICAg
ICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHRva2Vu
ID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAg
ICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVuY3R1YXRv
cicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycgfHwgdG9r
ZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vu
cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAg
ICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgdmFsdWU6IHJl
Z2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4XSwKKyAgICAg
ICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyTmFtZSh0
b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8
fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAorICAgICAgICAg
ICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAgICAgICAgIHRv
a2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFk
dmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAgICAgIGNoZWNr
VG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorICAgICAg
ICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnbgorICAg
ICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOwor
ICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGluZyBiZWZvcmUg
dGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1cm4gY29sbGVj
dFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnUHVu
Y3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICddJykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJyknKSB7CisgICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tlbiAtIDFdOwor
ICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
cHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAgICAgICAgICAgICAvLyBEaXZpZGluZyBh
IGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKyAgICAgICAgICAgICAg
ICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICBpZiAo
ZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdLnR5cGUgPT09
ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24u
CisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3Bl
bkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEudG9rZW5z
W2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09ICdLZXl3b3JkJykg
eworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVd
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBjaGVj
a1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAg
ICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgaWYg
KEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxl
Y3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdl
eCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gJ0tleXdvcmQn
KSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWR2YW5j
ZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisKKyAgICAg
ICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVmVyeSBj
b21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAw
eDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNp
bmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisgICAgICAgIGlm
IChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5T
dHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIERvdCAoLikgVSswMDJF
IGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUgbmVlZAor
ICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgIGlmIChjaCA9
PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0
ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9y
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAg
ICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguCisgICAgICAgIGlm
IChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikgeworICAgICAgICAgICAgcmV0dXJuIGFk
dmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9y
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkgeworICAgICAgICB2YXIg
bG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAg
ICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTog
bGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZhbmNlKCk7Cisg
ICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAg
ICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAgICAgIGlm
ICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVlID0gc291cmNl
LnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZXh0cmEudG9rZW5z
LnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBlXSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFt0b2tl
bi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBsaW5lTnVtYmVy
ID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0
OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZp
bmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKKworICAgICAgICBpbmRleCA9IHRv
a2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAg
IGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICByZXR1cm4gdG9rZW47Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAgICAgICAgdmFyIHBvcywgbGluZSwgc3Rh
cnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwor
ICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBl
eHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgp
OworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7CisgICAg
ICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKworICAgIGZ1bmN0aW9uIFBvc2l0aW9uKGxp
bmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgICAgICB0aGlzLmNv
bHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihzdGFy
dExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5zdGFydCA9
IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgdGhpcy5lbmQg
PSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAgICB9CisKKyAgICBTeW50YXhUcmVlRGVs
ZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAorCisgICAgICAgIHByb2Nl
c3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCwg
dHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4
LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4g
MCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdl
WzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21t
ZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgICAgIGV4dHJh
LnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0
cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0g
MV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90
dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5n
Q29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAg
ICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0
b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisgICAgICAgICAg
ICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4dHJhLmJvdHRv
bVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5yYW5nZVswXSA+
PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0cmEuYm90
dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxh
c3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRz
ICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5s
ZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50czsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVu
dHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29tbWVudHNbZXh0cmEubGVhZGluZ0NvbW1l
bnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
ICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50czsKKyAgICAg
ICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKwor
CisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAgICAgICAgIG5v
ZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTsKKyAgICAgICAg
fSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAobm9kZSwgc3RhcnRUb2tlbikgeworICAg
ICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbm9kZS5yYW5nZSA9
IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBuZXcgU291cmNlTG9j
YXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnRMaW5lTnVtYmVyID09
PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVtYmVyIDogc3RhcnRUb2tlbi5zdGFydExp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnQgLSAoc3RhcnRU
b2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4ubGluZVN0YXJ0
IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisgICAgICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzKG5vZGUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAg
ICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBwb3N0UHJvY2Vzczog
ZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVB
cnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9y
LCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0
b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAg
ICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsK
KyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09
PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAgICAgICAgICAg
ICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0
b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICByaWdodDog
cmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQmxvY2tT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBi
b2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUJy
ZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3Vt
ZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
Q2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisgICAgICAgICAg
ICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9u
OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBjb25zZXF1
ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlCisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRpbnVlU3RhdGVt
ZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxh
YmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVE
ZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rp
b24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogYm9k
eSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0eVN0YXRlbWVu
dAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFeHByZXNzaW9u
U3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQsIHRlc3Qs
IHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQsCisg
ICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHVwZGF0
ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9
LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQs
IGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAg
ICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAg
ICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRl
ZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGlkOiBpZCwK
KyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBkZWZhdWx0
czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAg
ICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCisgICAgICAg
ICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywg
ZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBpZDogaWQs
CisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAgICAgZGVmYXVs
dHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICAg
ICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLAorICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZGVudGlmaWVyLAorICAg
ICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRl
cm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAg
ICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6
IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVM
YWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0ZXJhbDogZnVu
Y3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwK
KyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5k
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVNZW1iZXJFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1lbWJlckV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSAnWycsCisgICAgICAg
ICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgcHJvcGVydHk6IHByb3Bl
cnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU5ld0V4cHJl
c3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lv
bjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAg
cHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVu
dCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
VXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgIHByZWZp
eDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUHJv
Z3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAgICAgICAgICAgICAgYm9keTogYm9keQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9wZXJ0eTogZnVu
Y3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAgICAgIGtleToga2V5
LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBraW5kOiBr
aW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVJldHVyblN0
YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5TZXF1ZW5j
ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zCisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1
bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNlLAorICAgICAgICAgICAgICAgIHRlc3Q6
IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0
aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
ZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAgICAgICAgICAgICAgY2FzZXM6IGNhc2Vz
CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRoaXNFeHByZXNz
aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UaHJvd1N0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAo
YmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMsIGZpbmFsaXplcikgeworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHJ5U3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAgICAgICAgICAgICAgICBndWFyZGVkSGFu
ZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAgICAgICAgICBoYW5kbGVyczogaGFuZGxl
cnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBmaW5hbGl6ZXIKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAo
b3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICcrKycg
fHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3Bl
cmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAg
ICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xhcmF0aW9u
cywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6
IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rp
b24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAgaWQ6IGlkLAor
ICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBib2R5KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaGlsZVN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlV2l0
aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2l0aFN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAg
ICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4KKworICAgIGZ1
bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAgICAgICAgdmFyIHBvcywgbGluZSwgc3Rh
cnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5lID0gbGluZU51
bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIHNraXBDb21tZW50KCk7
CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKKyAgICAgICAgaW5kZXggPSBw
b3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3RhcnQgPSBzdGFy
dDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8gVGhyb3cgYW4gZXhj
ZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdlRm9ybWF0KSB7
CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1h
dC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGluZGV4
IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9
PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcgKyB0
b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJvci5pbmRleCA9
IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2VuLmxpbmVO
dW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxpbmVTdGFy
dCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcign
TGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAgZXJyb3IuaW5k
ZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwor
ICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxOworICAgICAg
ICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7CisgICAgICAgIHRocm93IGVy
cm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgpIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsK
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewor
ICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4u
CisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKKyAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
dG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Cisg
ICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVk
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
dG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisgICAgICAgIHRo
cm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lm
aWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJv
d24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFyIHRva2VuID0g
bGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRv
a2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2Vu
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBt
YXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24g
d2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHsK
KyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBU
b2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3Iu
CisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4gbG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTsK
KyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRo
ZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQp
IHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxv
b2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAgICBmdW5jdGlv
biBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAgICAgICByZXR1
cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAgICAgICAgICAg
IG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAgICAgICAgICAg
b3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAgICAgICAgICBv
cCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAgICAgICAgICAg
b3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAgICAgICAgICAg
IG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsKKworICAgICAg
ICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1p
Y29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09
IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAh
PT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlm
IHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorCisgICAgZnVu
Y3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1iZXJFeHByZXNz
aW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJheSBJbml0aWFsaXNlcgorCisgICAgZnVu
Y3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgZWxlbWVudHMgPSBb
XSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsKKyAgICAgICAg
ICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAg
ICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4
cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0K
KworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAgIGZ1bmN0aW9uIHBhcnNl
UHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzU3Ry
aWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0
OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBib2R5ID0gcGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChmaXJzdCAmJiBzdHJpY3QgJiYg
aXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkgeworICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAgICB9Cisg
ICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW0sIFtd
LCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAg
ICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0
UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBh
cmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRv
a2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwp
IHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJh
bCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVy
KHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VP
YmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBrZXksIGlkLCB2YWx1ZSwgcGFy
YW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHN0
YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2Vu
LklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRlciBhbmQgU2V0
dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICFtYXRjaCgn
OicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwor
ICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKScp
OworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKFtdKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9w
ZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhbWF0Y2goJzonKSkgeworICAg
ICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgeworICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oW10p
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0g
WyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAgICAgICAgIGV4cGVj
dCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlv
bihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnc2V0Jywga2V5LCB2
YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc6
Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5
KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVh
dG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAg
ICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRl
LmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpIHsKKyAg
ICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVydHksIG5hbWUsIGtleSwga2luZCwgbWFw
ID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgd2hpbGUg
KCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2JqZWN0UHJvcGVy
dHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50YXguSWRl
bnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHRvU3RyaW5nKHByb3Bl
cnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBraW5kID0gKHByb3Bl
cnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9wZXJ0eS5raW5k
ID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNldDsKKworICAg
ICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdER1cGxpY2F0
ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kICE9PSBQcm9w
ZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAo
a2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtrZXldICYga2luZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3Nvckdl
dFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0b3IKKworICAg
IGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwcjsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQor
CisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwgZXhwciwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgcmV0dXJu
IHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2go
J1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICB0eXBlID0gbG9v
a2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAg
aWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGV4cHIgPSAgZGVs
ZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5OdW1lcmljTGl0
ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5TdHJp
Y3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRv
a2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMnKSkgeworICAg
ICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICB0b2tlbiA9
IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVl
Jyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7Cisg
ICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7CisgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgeworICAgICAgICAgICAgaWYgKHR5
cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVjdFJlZ2V4KCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChz
Y2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVlaygpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwor
ICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMKKworICAgIGZ1
bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAgICB2YXIgYXJncyA9IFtdOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJncy5wdXNoKHBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcp
JykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9rZW4s
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7
CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tl
bi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29t
cHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgnLicpOworCisgICAgICAgIHJldHVybiBw
YXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUNv
bXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBleHBlY3QoJ1sn
KTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0
KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBzdGFydFRva2Vu
OworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24o
KTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDogW107CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTmV3RXhwcmVz
c2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAgIHZhciBwcmV2
aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3Rh
dGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAgICAgIGV4cHIg
PSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1h
cnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47
CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcuJykpIHsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignLicsIGV4
cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygnKSkgeworICAg
ICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAgICAgICAgIGV4
cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0g
cGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5j
cmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lk
ZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIHByb3Bl
cnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAg
ICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgZXhwciA9IG1h
dGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwor
ICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpKSB7CisgICAgICAgICAgICBp
ZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VDb21wdXRl
ZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJF
eHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignLicsIGV4
cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9u
IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCB0b2tlbiwgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VMZWZ0SGFuZFNpZGVF
eHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBU
b2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNo
KCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAx
MS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RM
SFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlz
TGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgICAgICBl
eHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0
b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuNCBVbmFyeSBPcGVy
YXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2
YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5LZXl3b3Jk
KSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAgICAgICAgICBz
dGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgLy8gMTEu
NC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50
YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFs
aWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgnficpIHx8IG1h
dGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
ICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9u
KHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5k
KGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgnZGVs
ZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBlb2YnKSkg
eworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFs
dWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3Rh
cnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdk
ZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERlbGV0
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHByID0g
cGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4
cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJ
bikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09
IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkgeworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRva2VuLnZh
bHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAxOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAgcHJlYyA9IDI7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIHBy
ZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6CisgICAgICAg
ICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyYnOgor
ICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
ICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoKKyAgICAgICAg
Y2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBjYXNlICc8PSc6
CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6CisgICAgICAg
ICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2luJzoK
KyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAgICAgY2FzZSAn
Pj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJlYyA9IDk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgY2FzZSAnLyc6
CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBNdWx0aXBsaWNh
dGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycworICAgIC8vIDEx
LjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0
b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMCBCaW5hcnkg
Qml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnMK
KworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIG1h
cmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwgb3BlcmF0b3Is
IGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9va2FoZWFkOworICAgICAgICBsZWZ0ID0g
cGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93SW4pOworICAg
ICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAg
IH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOworCisgICAgICAg
IG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOworICAgICAgICByaWdodCA9IHBhcnNlVW5h
cnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTsK
KworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2thaGVhZCwgc3Rh
dGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5h
cnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisgICAgICAgICAg
ICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0
aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3AoKTsKKyAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlOworICAgICAgICAgICAg
ICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbWFya2VyID0gbWFya2Vyc1tt
YXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhw
ciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0YWNrLnB1c2go
dG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2thaGVhZCk7CisgICAgICAgICAg
ICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YWNrLnB1c2go
ZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAg
dGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTsKKyAgICAgICAgZXhwciA9
IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICB3aGlsZSAoaSA+IDEp
IHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0
YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTsKKyAgICAgICAgICAgIGkgLT0g
MjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICBkZWxl
Z2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJhdG9yCisKKyAg
ICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4
cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwciA9IHBhcnNl
QmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnPycpKSB7CisgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47
CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnNlcXVl
bnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAg
ICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29u
c2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwg
c3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisK
KyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBsZWZ0LCByaWdodCwg
bm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBub2RlID0gbGVmdCA9IHBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoQXNzaWduKCkpIHsKKyAg
ICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAgIGlmICghaXNM
ZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxlZnQudHlw
ZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChsZWZ0Lm5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJp
Y3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQXNzaWdu
bWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAvLyAxMS4xNCBD
b21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkgeworICAgICAg
ICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Cisg
ICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uKFsgZXhw
ciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBl
eHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2Vu
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDEy
LjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsKKyAgICAgICAg
dmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRlbWVudDsKKworICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBw
YXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09
PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkgeworICAgICAg
ICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVu
dExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4gZGVsZWdh
dGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jayksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50CisKKyAgICBmdW5j
dGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRv
a2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGluaXQgPSBudWxsLCBpZCwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZCA9
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gMTIuMi4xCisgICAgICAg
IGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAgICBleHBlY3Qo
Jz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVE
ZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZhciBsaXN0ID0g
W107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIGxpc3Q7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsKKyAgICAgICAg
dmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXInKTsKKworICAg
ICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CisKKyAg
ICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAgIH0KKworICAg
IC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFyZSBleHBlcmlt
ZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8gc2VlIGh0dHA6
Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QKKyAgICAvLyBh
bmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpsZXQKKyAg
ICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAgICAgICB2YXIg
ZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5kKTsKKworICAgICAgICBkZWNsYXJhdGlv
bnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpOworCisgICAgICAgIGNvbnN1
bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAgICBmdW5jdGlv
biBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQorCisgICAgLy8g
MTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVF
eHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUgSWYgc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdGVz
dCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7
CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lv
bigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVlbnQgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2UnKSkgeworICAg
ICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0YXRlbWVudCgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVudCh0ZXN0LCBj
b25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRlcmF0aW9uIFN0
YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRp
b247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBleHBlY3Qo
JygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhw
ZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxleCgp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURvV2hpbGVTdGF0
ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRl
bWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAg
ICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOwor
CisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAgIHN0
YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQo
KTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRl
Y2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGluaXQsIHRlc3QsIHVwZGF0
ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGluaXQgPSB0
ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdmb3InKTsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAg
ICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAgICAgICAgc3Rh
dGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUZvclZhcmlh
YmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYg
bWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBw
YXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0
ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRXhwcmVzc2lv
bigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0SGFu
ZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFu
dCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQg
PSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisKKyAg
ICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHBh
cnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhw
ZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRp
b247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpID8KKyAg
ICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBk
YXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9ySW5TdGF0ZW1l
bnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjcgVGhlIGNvbnRpbnVl
IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHsKKyAg
ICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nv
bnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06ICdj
b250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNC
KSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxD
b250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChw
ZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlv
bikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250
aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgbGFiZWwgPSBw
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJl
bC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIGlmIChs
YWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwpOworICAgIH0K
KworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VC
cmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkg
Y29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgorICAg
ICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7CisgICAgICAgICAg
ICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUu
aW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxs
ZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBl
ZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlv
biB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAgICAga2V5
ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKwor
ICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0
ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVn
YWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJl
YWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjkgVGhlIHJldHVybiBzdGF0
ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgeworICAgICAgICB2
YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3JldHVybicpOwor
CisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBpZGVudGlmaWVy
IGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0
b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVu
dChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsnKSkgeworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsK
KyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOworICAgIH0K
KworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VX
aXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OworCisgICAgICAgIGlm
IChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBTaG91bGQgd2Ug
dXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/CisgICAgICAgICAgICBza2lwQ29tbWVudCgp
OworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RNb2Rl
V2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7CisKKyAg
ICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50
KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1lbnQob2JqZWN0
LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVtZW50CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0LCBjb25zZXF1
ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51bGw7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7CisgICAgICAgICAgICB0ZXN0ID0g
cGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KCc6Jyk7CisKKyAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30n
KSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nhc2UnKSkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVt
ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaChzdGF0
ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSwgc3RhcnRUb2tlbik7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZh
ciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQ7
CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAgZXhwZWN0KCco
Jyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgY2FzZXMg
PSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1p
bmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5p
blN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOworICAgICAgICBkZWZhdWx0
Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsKKyAgICAgICAg
ICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChkZWZh
dWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
TXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLmluU3dpdGNoID0g
b2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsKKyAgICB9
CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQ7CisKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkp
IHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8gMTIuMTQgVGhl
IHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2UoKSB7CisgICAg
ICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCisgICAgICAgIGV4
cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgdGhyb3dV
bmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbSA9IHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAgICAgaWYgKHN0
cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpOworICAgICAg
ICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUNhdGNoQ2xh
dXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMgPSBbXSwgZmlu
YWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsKKworICAgICAg
ICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdjYXRj
aCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1c2UoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykpIHsKKyAgICAg
ICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9jaygpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAhZmluYWxpemVy
KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUcnlTdGF0ZW1l
bnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAgICAvLyAxMi4x
NSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3Rh
dGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOworCisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRGVi
dWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRzCisKKyAgICBm
dW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBsb29rYWhlYWQu
dHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9keSwKKyAgICAg
ICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKHR5cGUg
PT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBs
b29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2so
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAg
ICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVtcHR5U3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnYnJl
YWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlQnJlYWtT
dGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdjb250aW51ZSc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VDb250aW51ZVN0YXRl
bWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2VyJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURlYnVnZ2VyU3RhdGVtZW50
KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAg
ICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCksIHN0YXJ0VG9rZW4pOworICAgICAgICAg
ICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBh
cnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdyZXR1cm4n
OgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlUmV0dXJuU3Rh
dGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVN3aXRjaFN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRocm93U3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
cGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2Ug
J3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVdo
aWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnd2l0aCc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaXRoU3RhdGVtZW50
KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIgPSBwYXJzZUV4
cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRzCisgICAg
ICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2goJzonKSkg
eworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGV4cHIubmFt
ZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
c3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAg
IGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0
ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSksIHN0YXJ0VG9r
ZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1l
bnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0aW9uIERlZmlu
aXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpIHsKKyAg
ICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJl
Y3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0
ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBzdGFydFRva2VuOworCisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgneycpOworCisg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAg
ICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAg
c291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzb3Vy
Y2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tl
bi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9
PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0
ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAg
ICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJlbFNldCA9IHN0YXRlLmxh
YmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOworICAg
ICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBvbGRJbkZ1bmN0aW9u
Qm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHN0YXRlLmxhYmVsU2V0ID0g
e307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmlu
U3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1ZTsKKwor
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgn
fScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNv
dXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAg
ICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRp
b24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRj
aDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9uQm9keTsKKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRl
bWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgcGFyYW0sIHBhcmFt
cyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0LCBrZXksIG1lc3NhZ2U7CisgICAgICAg
IGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAg
cGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgIHBhcmFtID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBrZXkgPSAnJCcgKyB0
b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQg
PSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJp
Y3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVz
dHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJh
bVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0g
dG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0
UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICBwYXJhbVNl
dFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3Qo
JyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisg
ICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisgICAgICAgICAgICBmaXJzdFJlc3RyaWN0
ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7
CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJvZHksIHRva2VuLCBzdHJpY3RlZCwgdG1w
LCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBzdGFydFRva2VuOwor
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29y
ZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlkID0g
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAg
ICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlzUmVz
dHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1
bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRX
b3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRv
a2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdv
cmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJzZVBhcmFt
cyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOworICAgICAg
ICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1w
LmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7CisgICAgICAgICAg
ICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1N0
cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0ID0gcHJl
dmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgewor
ICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVzdHJpY3RlZCwg
bWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0S2V5
d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsKKyAgICAgICAg
ICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRl
bnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgICAgIGlm
IChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
ID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVz
dHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgIHN0cmljdGVk
ID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0
cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2Ug
PSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3Ry
aWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vy
cm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0
cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHN0cmlj
dGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmlj
dDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5j
dGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9
CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQo
KSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgeworICAg
ICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgJ2Nv
bnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAgICAgICAgY2Fz
ZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
U3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJj
ZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMg
PSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkOworCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzb3VyY2VFbGVt
ZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5w
dXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVz
c2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIC8vIHRoaXMg
aXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9r
ZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcp
IHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChm
aXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZmly
c3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0
UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
c291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAgLyogaXN0
YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQg
PT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBib2R5LCBzdGFydFRva2VuOworCisgICAg
ICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisKKyAgICAgICAgYm9keSA9IHBh
cnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAgICAgICAgdmFyIGksIGVudHJ5LCB0b2tl
biwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNbaV07CisgICAg
ICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLAorICAg
ICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIHRva2VuLnJhbmdlID0gZW50
cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7Cisg
ICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgZXh0cmEu
dG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9w
dGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAorICAgICAgICAgICAgdG9rZW4sCisgICAg
ICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlm
ICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkg
eworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7
CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3Ro
ID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0g
c291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUg
PSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9
LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVy
YXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAg
bGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9Owor
CisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLgor
ICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRva2VucyA9IFtd
OworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4IHRva2Vucy4K
KyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0cmEub3BlbkN1
cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5y
YW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBleHRyYS5sb2Mg
PSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOworCisg
ICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9u
cy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICB9
CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9w
dGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOworICAgICAg
ICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWsoKTsKKyAgICAgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW4gPSBsZXgo
KTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7Cisg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
KyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgeworICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9y
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4RXJyb3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmly
c3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGluZmluaXRlIGxv
b3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJvcjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgdG9rZW5zID0gZXh0
cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBleHRyYS5jb21t
ZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3Jz
ICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJvcnMgPSBleHRy
YS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBleHRyYSA9IHt9
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7
CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBlb2YgY29kZSAh
PT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgICAg
Y29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZWdhdGUgPSBT
eW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAgICAgIGluZGV4
ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDsK
KyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsK
KyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7CisgICAgICAgICAg
ICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAgICAgICAgICAg
aW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAor
ICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENvbW1lbnRTdGFy
dDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9OworICAgICAgICBpZiAodHlw
ZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBleHRyYS5yYW5nZSA9
ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOwor
ICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4n
KSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1lbnQgPSAodHlw
ZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmF0dGFj
aENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2Ug
IT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAg
ICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jvb2xlYW4n
ICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9
PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJh
LmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9w
dGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7CisgICAg
ICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJhLnJhbmdl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICAg
ICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKKyAgICAgICAgICAgICAgICBleHRy
YS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0Nv
bW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpOworICAgICAgICAgICAgaWYgKHR5
cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg
ICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS50
b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlw
ZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBwcm9n
cmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJvZ3JhbTsK
KyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KKyAgICBleHBvcnRz
LnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOwor
CisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBjb3B5LgorICAgLyog
aXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBvcnRzLlN5bnRheCA9IChmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9OworCisgICAgICAgIGlmICh0eXBlb2Yg
T2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgdHlwZXMgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuYW1lIGluIFN5bnRh
eCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAg
ICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4W25hbWVdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09PSAnZnVuY3Rp
b24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOworCit9KSk7CisvKiB2aW06IHNldCBzdz00
IHRzPTQgZXQgdHc9ODAgOiAqLworCit9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQg
PGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi8KKy8qanNoaW50IGluZGVu
dDo0Ki8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRydWUqLworKGZ1bmN0aW9uIChy
b290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1v
ZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAor
ICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsCisgICAgaWYgKHR5cGVvZiBkZWZpbmUg
PT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICBkZWZpbmUoWydleHBvcnRz
J10sIGZhY3RvcnkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZmFjdG9yeSgocm9vdC5lc3RyYXZlcnNlID0ge30pKTsKKyAgICB9Cit9KHRoaXMsIGZ1bmN0aW9u
IChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFN5bnRheCwKKyAgICAg
ICAgaXNBcnJheSwKKyAgICAgICAgVmlzaXRvck9wdGlvbiwKKyAgICAgICAgVmlzaXRvcktleXMs
CisgICAgICAgIEJSRUFLLAorICAgICAgICBTS0lQOworCisgICAgU3ludGF4ID0geworICAgICAg
ICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKKyAgICAgICAg
QXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQXJyYXlQYXR0ZXJu
OiAnQXJyYXlQYXR0ZXJuJywKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0
ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisg
ICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAgICBDYWxsRXhw
cmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENs
YXVzZScsCisgICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsCisgICAgICAgIENsYXNzRGVj
bGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJywKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiAn
Q2xhc3NFeHByZXNzaW9uJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0
aW9uYWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0
YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQn
LAorICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1lbnQnLAorICAg
ICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAgICAgIEVtcHR5
U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50
OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0YXRl
bWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAorICAgICAg
ICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsCisgICAgICAgIEZ1
bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIElkZW50aWZp
ZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsCisg
ICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xh
YmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHBy
ZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAor
ICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsCisgICAgICAgIE5l
d0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjog
J09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVy
bicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAgUHJvcGVydHk6ICdQcm9w
ZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisgICAg
ICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCisgICAgICAgIFN3
aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAgIFN3aXRjaENhc2U6ICdT
d2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsCisg
ICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAgICBUcnlTdGF0
ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4
cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbics
CisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJywKKyAg
ICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywKKyAgICAgICAg
V2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6
ICdXaXRoU3RhdGVtZW50JywKKyAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNz
aW9uJworICAgIH07CisKKyAgICBmdW5jdGlvbiBpZ25vcmVKU0hpbnRFcnJvcigpIHsgfQorCisg
ICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgaWYgKCFpc0FycmF5KSB7CisgICAgICAg
IGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7CisgICAgICAgICAgICByZXR1cm4g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmplY3QgQXJyYXld
JzsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWVwQ29weShvYmopIHsKKyAg
ICAgICAgdmFyIHJldCA9IHt9LCBrZXksIHZhbDsKKyAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7
CisgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAg
ICAgICB2YWwgPSBvYmpba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0g
J29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFtrZXld
ID0gZGVlcENvcHkodmFsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICByZXRba2V5XSA9IHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
aGFsbG93Q29weShvYmopIHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7CisgICAgICAgIGZv
ciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7CisgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZ25vcmVKU0hpbnRF
cnJvcihzaGFsbG93Q29weSk7CisKKyAgICAvLyBiYXNlZCBvbiBMTFZNIGxpYmMrKyB1cHBlcl9i
b3VuZCAvIGxvd2VyX2JvdW5kCisgICAgLy8gTUlUIExpY2Vuc2UKKworICAgIGZ1bmN0aW9uIHVw
cGVyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVu
dDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGkgPSAwOworCisgICAg
ICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAg
ICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJy
ZW50XSkpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVu
IC09IGRpZmYgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAg
ICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5n
dGg7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAg
IGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAg
ICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAgICAgICBpID0g
Y3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICBpZ25vcmVKU0hpbnRFcnJv
cihsb3dlckJvdW5kKTsKKworICAgIFZpc2l0b3JLZXlzID0geworICAgICAgICBBc3NpZ25tZW50
RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIEFycmF5RXhwcmVzc2lvbjog
WydlbGVtZW50cyddLAorICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSwKKyAgICAg
ICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3Qn
LCAnYm9keSddLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sCisgICAgICAgIEJp
bmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBCcmVha1N0YXRlbWVu
dDogWydsYWJlbCddLAorICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1l
bnRzJ10sCisgICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSwKKyAgICAgICAg
Q2xhc3NCb2R5OiBbJ2JvZHknXSwKKyAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdi
b2R5JywgJ3N1cGVyQ2xhc3MnXSwKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ2Jv
ZHknLCAnc3VwZXJDbGFzcyddLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFsndGVz
dCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLAorICAgICAgICBDb250aW51ZVN0YXRlbWVu
dDogWydsYWJlbCddLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogW10sCisgICAgICAgIERp
cmVjdGl2ZVN0YXRlbWVudDogW10sCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFsnYm9keScs
ICd0ZXN0J10sCisgICAgICAgIEVtcHR5U3RhdGVtZW50OiBbXSwKKyAgICAgICAgRXhwcmVzc2lv
blN0YXRlbWVudDogWydleHByZXNzaW9uJ10sCisgICAgICAgIEZvclN0YXRlbWVudDogWydpbml0
JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSwKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6IFsn
bGVmdCcsICdyaWdodCcsICdib2R5J10sCisgICAgICAgIEZvck9mU3RhdGVtZW50OiBbJ2xlZnQn
LCAncmlnaHQnLCAnYm9keSddLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBbJ2lkJywg
J3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwKKyAgICAgICAgRnVuY3Rpb25F
eHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwK
KyAgICAgICAgSWRlbnRpZmllcjogW10sCisgICAgICAgIElmU3RhdGVtZW50OiBbJ3Rlc3QnLCAn
Y29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSwKKyAgICAgICAgTGl0ZXJhbDogW10sCisgICAgICAg
IExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLAorICAgICAgICBMb2dpY2FsRXhw
cmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsn
b2JqZWN0JywgJ3Byb3BlcnR5J10sCisgICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5Jywg
J3ZhbHVlJ10sCisgICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cydd
LAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSwKKyAgICAgICAgT2Jq
ZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgIFByb2dyYW06IFsnYm9keSddLAor
ICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSwKKyAgICAgICAgUmV0dXJuU3RhdGVt
ZW50OiBbJ2FyZ3VtZW50J10sCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogWydleHByZXNz
aW9ucyddLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFsnZGlzY3JpbWluYW50JywgJ2Nhc2Vz
J10sCisgICAgICAgIFN3aXRjaENhc2U6IFsndGVzdCcsICdjb25zZXF1ZW50J10sCisgICAgICAg
IFRoaXNFeHByZXNzaW9uOiBbXSwKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQn
XSwKKyAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXJzJywgJ2hhbmRsZXIn
LCAnZ3VhcmRlZEhhbmRsZXJzJywgJ2ZpbmFsaXplciddLAorICAgICAgICBVbmFyeUV4cHJlc3Np
b246IFsnYXJndW1lbnQnXSwKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydhcmd1bWVudCdd
LAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucyddLAorICAgICAg
ICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLAorICAgICAgICBXaGlsZVN0YXRl
bWVudDogWyd0ZXN0JywgJ2JvZHknXSwKKyAgICAgICAgV2l0aFN0YXRlbWVudDogWydvYmplY3Qn
LCAnYm9keSddLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQnXQorICAgIH07
CisKKyAgICAvLyB1bmlxdWUgaWQKKyAgICBCUkVBSyA9IHt9OworICAgIFNLSVAgPSB7fTsKKwor
ICAgIFZpc2l0b3JPcHRpb24gPSB7CisgICAgICAgIEJyZWFrOiBCUkVBSywKKyAgICAgICAgU2tp
cDogU0tJUAorICAgIH07CisKKyAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHsK
KyAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHRoaXMua2V5ID0ga2V5Owor
ICAgIH0KKworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxh
Y2Uobm9kZSkgeworICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlOworICAgIH07
CisKKyAgICBmdW5jdGlvbiBFbGVtZW50KG5vZGUsIHBhdGgsIHdyYXAsIHJlZikgeworICAgICAg
ICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICB0aGlzLnBhdGggPSBwYXRoOworICAgICAgICB0
aGlzLndyYXAgPSB3cmFwOworICAgICAgICB0aGlzLnJlZiA9IHJlZjsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBDb250cm9sbGVyKCkgeyB9CisKKyAgICAvLyBBUEk6CisgICAgLy8gcmV0dXJuIHBy
b3BlcnR5IHBhdGggYXJyYXkgZnJvbSByb290IHRvIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xs
ZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkgeworICAgICAgICB2YXIgaSwgaXos
IGosIGp6LCByZXN1bHQsIGVsZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkVG9QYXRoKHJl
c3VsdCwgcGF0aCkgeworICAgICAgICAgICAgaWYgKGlzQXJyYXkocGF0aCkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGogPSAwLCBqeiA9IHBhdGgubGVuZ3RoOyBqIDwgano7ICsraikgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoW2pdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcm9vdCBub2RlCisgICAg
ICAgIGlmICghdGhpcy5fX2N1cnJlbnQucGF0aCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIH0KKworICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsLCBzZWNvbmQg
bm9kZSBpcyByb290IGVsZW1lbnQKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
aSA9IDIsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICBlbGVtZW50ID0gdGhpcy5fX2xlYXZlbGlzdFtpXTsKKyAgICAgICAgICAgIGFkZFRv
UGF0aChyZXN1bHQsIGVsZW1lbnQucGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgYWRkVG9QYXRo
KHJlc3VsdCwgdGhpcy5fX2N1cnJlbnQucGF0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyByZXR1cm4gYXJyYXkgb2YgcGFyZW50IGVsZW1l
bnRzCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUucGFyZW50cyA9IGZ1bmN0aW9uIHBhcmVudHMo
KSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVzdWx0OworCisgICAgICAgIC8vIGZpcnN0IG5vZGUg
aXMgc2VudGluZWwKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAoaSA9IDEsIGl6
ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICBy
ZXN1bHQucHVzaCh0aGlzLl9fbGVhdmVsaXN0W2ldLm5vZGUpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIHJldHVybiBj
dXJyZW50IG5vZGUKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24g
Y3VycmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19jdXJyZW50Lm5vZGU7CisgICAgfTsK
KworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9fZXhlY3V0ZSA9IGZ1bmN0aW9uIF9fZXhlY3V0
ZShjYWxsYmFjaywgZWxlbWVudCkgeworICAgICAgICB2YXIgcHJldmlvdXMsIHJlc3VsdDsKKwor
ICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgcHJldmlvdXMgID0gdGhpcy5f
X2N1cnJlbnQ7CisgICAgICAgIHRoaXMuX19jdXJyZW50ID0gZWxlbWVudDsKKyAgICAgICAgdGhp
cy5fX3N0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBjYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQubm9kZSwgdGhpcy5fX2xlYXZlbGlz
dFt0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aCAtIDFdLm5vZGUpOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX19jdXJyZW50ID0gcHJldmlvdXM7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIG5vdGlmeSBjb250cm9sIHNraXAgLyBicmVhawor
ICAgIENvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShmbGFnKSB7
CisgICAgICAgIHRoaXMuX19zdGF0ZSA9IGZsYWc7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAg
ICAvLyBza2lwIGNoaWxkIG5vZGVzIG9mIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xsZXIucHJv
dG90eXBlLnNraXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubm90aWZ5KFNLSVApOwor
ICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gYnJlYWsgdHJhdmVyc2FscworICAgIENvbnRy
b2xsZXIucHJvdG90eXBlWydicmVhayddID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm5v
dGlmeShCUkVBSyk7CisgICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlh
bGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdGhpcy52aXNpdG9yID0g
dmlzaXRvcjsKKyAgICAgICAgdGhpcy5yb290ID0gcm9vdDsKKyAgICAgICAgdGhpcy5fX3dvcmts
aXN0ID0gW107CisgICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5f
X2N1cnJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsOworICAgIH07CisK
KyAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJv
b3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVs
aXN0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICBub2RlVHlwZSwKKyAgICAgICAgICAgIHJldCwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAg
ICAgIGN1cnJlbnQsCisgICAgICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0
ZXMsCisgICAgICAgICAgICBjYW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5lbDsKKworICAg
ICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTsKKworICAgICAgICBzZW50aW5l
bCA9IHt9OworCisgICAgICAgIC8vIHJlZmVyZW5jZQorICAgICAgICB3b3JrbGlzdCA9IHRoaXMu
X193b3JrbGlzdDsKKyAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDsKKworICAg
ICAgICAvLyBpbml0aWFsaXplCisgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9v
dCwgbnVsbCwgbnVsbCwgbnVsbCkpOworICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVu
dChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxl
bmd0aCkgeworICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAg
ICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
ID0gbGVhdmVsaXN0LnBvcCgpOworCisgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1
dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
X3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHsKKworICAgICAg
ICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpOwor
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBC
UkVBSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAgICAgICAg
ICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
X3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkgeworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBub2RlID0gZWxl
bWVudC5ub2RlOworICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5v
ZGUudHlwZTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktleXNbbm9kZVR5
cGVdOworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOworICAg
ICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07CisgICAgICAgICAgICAgICAgICAgIGNh
bmRpZGF0ZSA9IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0ZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRl
LCBrZXksIG51bGwsIG51bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudDIgPSBj
YW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09
IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJl
bnQyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChub2RlVHlwZSA9
PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQ
YXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGNhbmRpZGF0ZXNbY3VycmVudF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1
cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVu
dCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVs
bCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIENv
bnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0
b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVsaXN0LAorICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIG5vZGVUeXBlLAorICAgICAgICAgICAgdGFyZ2V0
LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIGN1cnJlbnQsCisgICAgICAgICAg
ICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMsCisgICAgICAgICAgICBjYW5kaWRh
dGUsCisgICAgICAgICAgICBzZW50aW5lbCwKKyAgICAgICAgICAgIG91dGVyLAorICAgICAgICAg
ICAga2V5OworCisgICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpOworCisg
ICAgICAgIHNlbnRpbmVsID0ge307CisKKyAgICAgICAgLy8gcmVmZXJlbmNlCisgICAgICAgIHdv
cmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0OworICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVh
dmVsaXN0OworCisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgb3V0ZXIgPSB7CisgICAg
ICAgICAgICByb290OiByb290CisgICAgICAgIH07CisgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxl
bWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9vdCcpKTsKKyAg
ICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxl
bWVudCk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAg
ZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0g
c2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpOwor
CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwg
ZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRo
IG51bGwsCisgICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmlu
ZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09
IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQu
cmVmLnJlcGxhY2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGFy
Z2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7CisKKyAgICAgICAg
ICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCwKKyAgICAgICAgICAgIC8vIHNv
IGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2UKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYm
IHRhcmdldCAhPT0gU0tJUCkgeworICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5ub2RlID0gdGFyZ2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhp
cy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG91dGVyLnJvb3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5v
ZGUgbWF5IGJlIG51bGwKKyAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7CisgICAgICAg
ICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAgICAgICBs
ZWF2ZWxpc3QucHVzaChlbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9
PT0gU0tJUCB8fCB0YXJnZXQgPT09IFNLSVApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAgfHwg
bm9kZS50eXBlOworICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JLZXlzW25vZGVUeXBl
XTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOworICAgICAgICAg
ICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBj
YW5kaWRhdGVzW2N1cnJlbnRdOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5
XTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlz
QXJyYXkoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5l
dyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBuZXcgUmVmZXJlbmNlKG5vZGUsIGtleSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAg
ICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
VHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gJiYgJ3Byb3BlcnRpZXMnID09PSBjYW5k
aWRhdGVzW2N1cnJlbnRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3
IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHkn
LCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVu
dChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5ldyBSZWZlcmVu
Y2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7Cisg
ICAgfTsKKworICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAg
dmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpOworICAgICAgICByZXR1cm4gY29udHJv
bGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXBs
YWNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJv
bGxlcigpOworICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3Ip
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tl
bnMpIHsKKyAgICAgICAgdmFyIHRhcmdldDsKKworICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5k
KHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4gdG9r
ZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdOworICAgICAgICB9KTsKKworICAgICAgICBj
b21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsx
XV07CisKKyAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkgeworICAgICAgICAg
ICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07Cisg
ICAgICAgIH0KKworICAgICAgICB0YXJnZXQgLT0gMTsKKyAgICAgICAgaWYgKHRhcmdldCA+PSAw
KSB7CisgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0
XS5yYW5nZVsxXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21tZW50OworICAgIH0K
KworICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRv
a2VucykgeworICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRl
ZCBjb21tZW50IHJhbmdlcy4KKyAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxl
biwgaSwgY3Vyc29yOworCisgICAgICAgIGlmICghdHJlZS5yYW5nZSkgeworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRh
Y2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJworICAgICAgICBpZiAoIXRv
a2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkg
eworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVu
Z3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRl
ZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICBjb21tZW50
LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07CisgICAgICAgICAgICAgICAgICAg
IGNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJlZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDAsIGxl
biA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAg
ICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29t
bWVudHNbaV0pLCB0b2tlbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgaXMgYmFz
ZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGN1cnNvciA9IDA7
CisgICAgICAgIHRyYXZlcnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAg
d2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBj
b21tZW50ID0gY29tbWVudHNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1l
bnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdD
b21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMu
c3BsaWNlKGN1cnNvciwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVk
IG5vZGUKKyAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5k
ZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFZpc2l0b3JPcHRpb24uU2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworCisgICAgICAgIGN1cnNvciA9IDA7CisgICAgICAgIHRyYXZlcnNlKHRyZWUs
IHsKKyAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgICAg
IHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRz
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29y
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVu
ZGVkUmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09
IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJz
b3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGUKKyAgICAgICAgICAgICAg
ICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFu
Z2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAg
IHJldHVybiB0cmVlOworICAgIH0KKworICAgIGV4cG9ydHMudmVyc2lvbiA9ICcxLjUuMS1kZXYn
OworICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4OworICAgIGV4cG9ydHMudHJhdmVyc2UgPSB0
cmF2ZXJzZTsKKyAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlOworICAgIGV4cG9ydHMuYXR0
YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50czsKKyAgICBleHBvcnRzLlZpc2l0b3JLZXlzID0g
VmlzaXRvcktleXM7CisgICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRvck9wdGlvbjsK
KyAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyOworfSkpOworLyogdmltOiBzZXQg
c3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIFRvT2JqZWN0KHZhbCkgewor
CWlmICh2YWwgPT0gbnVsbCkgeworCQl0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWdu
IGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpOworCX0KKworCXJldHVy
biBPYmplY3QodmFsKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1
bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworCXZhciBwZW5kaW5nRXhjZXB0aW9uOworCXZhciBm
cm9tOworCXZhciBrZXlzOworCXZhciB0byA9IFRvT2JqZWN0KHRhcmdldCk7CisKKwlmb3IgKHZh
ciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworCQlmcm9tID0gYXJndW1lbnRz
W3NdOworCQlrZXlzID0gT2JqZWN0LmtleXMoT2JqZWN0KGZyb20pKTsKKworCQlmb3IgKHZhciBp
ID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJdG9ba2V5c1tpXV0g
PSBmcm9tW2tleXNbaV1dOworCQkJfSBjYXRjaCAoZXJyKSB7CisJCQkJaWYgKHBlbmRpbmdFeGNl
cHRpb24gPT09IHVuZGVmaW5lZCkgeworCQkJCQlwZW5kaW5nRXhjZXB0aW9uID0gZXJyOworCQkJ
CX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwZW5kaW5nRXhjZXB0aW9uKSB7CisJCXRocm93IHBl
bmRpbmdFeGNlcHRpb247CisJfQorCisJcmV0dXJuIHRvOworfTsKKworfSx7fV0sOTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgTWFpbiBF
U0xpbnQgb2JqZWN0LgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmltYSIpLAor
ICAgIGVzdHJhdmVyc2UgPSByZXF1aXJlKCJlc3RyYXZlcnNlIiksCisgICAgZXNjb3BlID0gcmVx
dWlyZSgiZXNjb3BlIiksCisgICAgZW52aXJvbm1lbnRzID0gcmVxdWlyZSgiLi4vY29uZi9lbnZp
cm9ubWVudHMuanNvbiIpLAorICAgIGFzc2lnbiA9IHJlcXVpcmUoIm9iamVjdC1hc3NpZ24iKSwK
KyAgICBydWxlcyA9IHJlcXVpcmUoIi4vcnVsZXMiKSwKKyAgICB1dGlsID0gcmVxdWlyZSgiLi91
dGlsIiksCisgICAgUnVsZUNvbnRleHQgPSByZXF1aXJlKCIuL3J1bGUtY29udGV4dCIpLAorICAg
IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhlbHBlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Z1bmN0aW9uIGVzY2FwZVJlZ0V4cChyeCkgeworICAgIHJldHVybiByeC5yZXBsYWNlKC9bXC1c
W1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7Cit9CisKKy8qKgorICog
UGFyc2VzIGEgbGlzdCBvZiAibmFtZTpib29sZWFuX3ZhbHVlIiBvci9hbmQgIm5hbWUiIG9wdGlv
bnMgZGl2aWRlZCBieSBjb21tYSBvcgorICogd2hpdGVzcGFjZS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3Vs
dCBtYXAgb2JqZWN0IG9mIG5hbWVzIGFuZCBib29sZWFuIHZhbHVlcworICovCitmdW5jdGlvbiBw
YXJzZUJvb2xlYW5Db25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgLy8g
Q29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgOiB0byBtYWtlIHBhcnNpbmcgZWFzaWVyCisgICAg
c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKjpccyovZywgIjoiKTsKKyAgICAvLyBDb2xsYXBz
ZSB3aGl0ZXNwYWNlIGFyb3VuZCAsCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKixc
cyovZywgIiwiKTsKKyAgICBzdHJpbmcuc3BsaXQoL1xzfCwrLykuZm9yRWFjaChmdW5jdGlvbihu
YW1lKSB7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHZhciBwb3MgPSBuYW1lLmluZGV4T2YoIjoiKSwKKyAgICAgICAgICAgIHZh
bHVlOworICAgICAgICBpZiAocG9zICE9PSAtMSkgeworICAgICAgICAgICAgdmFsdWUgPSBuYW1l
LnN1YnN0cmluZyhwb3MgKyAxLCBuYW1lLmxlbmd0aCk7CisgICAgICAgICAgICBuYW1lID0gbmFt
ZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1zW25hbWVdID0g
KHZhbHVlID09PSAidHJ1ZSIpOworCisgICAgfSk7CisgICAgcmV0dXJuIGl0ZW1zOworfQorCisv
KioKKyAqIFBhcnNlcyBhIEpTT04tbGlrZSBjb25maWcuCisgKiBAcGFyYW0ge3N0cmluZ30gc3Ry
aW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgbWFw
IG9iamVjdAorICovCitmdW5jdGlvbiBwYXJzZUpzb25Db25maWcoc3RyaW5nKSB7CisgICAgdmFy
IGl0ZW1zID0ge307CisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XC1cL10r
KTovZywgIlwiJDFcIjoiKS5yZXBsYWNlKC8oXF18WzAtOV0pXHMrKD89IikvLCAiJDEsIik7Cisg
ICAgdHJ5IHsKKyAgICAgICAgaXRlbXMgPSBKU09OLnBhcnNlKCJ7IiArIHN0cmluZyArICJ9Iik7
CisgICAgfSBjYXRjaChlKSB7IH0KKworICAgIHJldHVybiBpdGVtczsKK30KKworLyoqCisgKiBQ
YXJzZXMgYSBjb25maWcgb2YgdmFsdWVzIHNlcGFyYXRlZCBieSBjb21tYS4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9
IFJlc3VsdCBtYXAgb2YgdmFsdWVzIGFuZCB0cnVlIHZhbHVlcworICovCitmdW5jdGlvbiBwYXJz
ZUxpc3RDb25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgLy8gQ29sbGFw
c2Ugd2hpdGVzcGFjZSBhcm91bmQgLAorICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9ccyos
XHMqL2csICIsIik7CisgICAgc3RyaW5nLnNwbGl0KC8sKy8pLmZvckVhY2goZnVuY3Rpb24obmFt
ZSkgeworICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7CisgICAgICAgIGlmICghbmFtZSkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGl0ZW1zW25hbWVdID0gdHJ1
ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKKy8qKgorICogQHBhcmFtIHtTY29w
ZX0gc2NvcGUgVGhlIHNjb3BlIG9iamVjdCB0byBjaGVjay4KKyAqIEBwYXJhbSB7c3RyaW5nfSBu
YW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBsb29rIHVwLgorICogQHJldHVybnMge1Zh
cmlhYmxlfSBUaGUgdmFyaWFibGUgb2JqZWN0IGlmIGZvdW5kIG9yIG51bGwgaWYgbm90LgorICov
CitmdW5jdGlvbiBnZXRWYXJpYWJsZShzY29wZSwgbmFtZSkgeworICAgIHZhciB2YXJpYWJsZSA9
IG51bGw7CisgICAgc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odikgeworICAgICAgICBp
ZiAodi5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHY7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgfSk7CisgICAgcmV0dXJuIHZhcmlhYmxlOworfQorCisv
KioKKyAqIEVuc3VyZXMgdGhhdCB2YXJpYWJsZXMgcmVwcmVzZW50aW5nIGJ1aWx0LWluIHByb3Bl
cnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QsCisgKiBhbmQgYW55IGdsb2JhbHMgZGVjbGFyZWQg
Ynkgc3BlY2lhbCBibG9jayBjb21tZW50cywgYXJlIHByZXNlbnQgaW4gdGhlIGdsb2JhbAorICog
c2NvcGUuCisgKiBAcGFyYW0ge0FTVE5vZGV9IHByb2dyYW0gVGhlIHRvcCBub2RlIG9mIHRoZSBB
U1QuCisgKiBAcGFyYW0ge1Njb3BlfSBnbG9iYWxTY29wZSBUaGUgZ2xvYmFsIHNjb3BlLgorICog
QHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBkYXRhLgor
ICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGFkZERlY2xhcmVkR2xvYmFscyhwcm9n
cmFtLCBnbG9iYWxTY29wZSwgY29uZmlnKSB7CisgICAgdmFyIGRlY2xhcmVkR2xvYmFscyA9IHt9
LAorICAgICAgICBleHBsaWNpdEdsb2JhbHMgPSB7fSwKKyAgICAgICAgYnVpbHRpbiA9IGVudmly
b25tZW50cy5idWlsdGluOworCisgICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywgYnVpbHRpbik7
CisKKyAgICBPYmplY3Qua2V5cyhjb25maWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgIGlmIChjb25maWcuZW52W25hbWVdKSB7CisgICAgICAgICAgICB2YXIgZW52aXJv
bm1lbnRHbG9iYWxzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50c1tuYW1lXS5n
bG9iYWxzOworICAgICAgICAgICAgaWYgKGVudmlyb25tZW50R2xvYmFscykgeworICAgICAgICAg
ICAgICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMsIGVudmlyb25tZW50R2xvYmFscyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2lnbihkZWNsYXJlZEdsb2Jh
bHMsIGNvbmZpZy5nbG9iYWxzKTsKKyAgICBhc3NpZ24oZXhwbGljaXRHbG9iYWxzLCBjb25maWcu
YXN0R2xvYmFscyk7CisKKyAgICBPYmplY3Qua2V5cyhkZWNsYXJlZEdsb2JhbHMpLmZvckVhY2go
ZnVuY3Rpb24obmFtZSkgeworICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXRWYXJpYWJsZShnbG9i
YWxTY29wZSwgbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHZh
cmlhYmxlID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBnbG9iYWxTY29wZSk7CisgICAgICAg
ICAgICB2YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9IGZhbHNlOworICAgICAgICAgICAg
Z2xvYmFsU2NvcGUudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICB9CisgICAgICAg
IHZhcmlhYmxlLndyaXRlYWJsZSA9IGRlY2xhcmVkR2xvYmFsc1tuYW1lXTsKKyAgICB9KTsKKwor
ICAgIE9iamVjdC5rZXlzKGV4cGxpY2l0R2xvYmFscykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7
CisgICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxlKGdsb2JhbFNjb3BlLCBuYW1lKTsK
KyAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgZXNj
b3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLmVz
bGludEV4cGxpY2l0R2xvYmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlLnZhcmlh
Ymxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICB2YXJpYWJsZS53cml0ZWFi
bGUgPSBleHBsaWNpdEdsb2JhbHNbbmFtZV07CisgICAgfSk7Cit9CisKKy8qKgorICogQWRkIGRh
dGEgdG8gcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSByZXBvcnRpbmcgZm9yIGxp
c3Qgb2YgcnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAg
e09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlv
bgorICogQHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFt
ICB7c3RyaW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICov
CitmdW5jdGlvbiBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgc3RhcnQsIHJ1bGVz
KSB7CisKKyAgICBpZiAocnVsZXMubGVuZ3RoKSB7CisgICAgICAgIHJ1bGVzLmZvckVhY2goZnVu
Y3Rpb24ocnVsZSkgeworICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2goeworICAgICAg
ICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IG51bGwsCisgICAg
ICAgICAgICAgICAgcnVsZTogcnVsZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIHJlcG9ydGluZ0NvbmZpZy5wdXNoKHsKKyAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogbnVsbCwKKyAgICAgICAgICAgIHJ1bGU6IG51
bGwKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvKioKKyAqIEFkZCBkYXRhIHRvIHJlcG9ydGlu
ZyBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSByZXBvcnRpbmcgZm9yIGxpc3Qgb2YgcnVsZXMKKyAq
IHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAge09iamVjdFtdfSByZXBv
cnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlvbgorICogQHBhcmFtICB7
T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFtICB7c3RyaW5nW119IHJ1
bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBlbmFi
bGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwgcnVsZXMpIHsKKyAgICB2YXIgaTsK
KworICAgIGlmIChydWxlcy5sZW5ndGgpIHsKKyAgICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlv
bihydWxlKSB7CisgICAgICAgICAgICBmb3IgKGkgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZpZ1tp
XS5lbmQgJiYgcmVwb3J0aW5nQ29uZmlnW2ldLnJ1bGUgPT09IHJ1bGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBmaW5kIGFsbCBwcmV2aW91cyBkaXNhYmxlZCBs
b2NhdGlvbnMgaWYgdGhleSB3YXMgc3RhcnRlZCBhcyBsaXN0IG9mIHJ1bGVzCisgICAgICAgIHZh
ciBwcmV2U3RhcnQ7CisgICAgICAgIGZvciAoaSA9IHJlcG9ydGluZ0NvbmZpZy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKHByZXZTdGFydCAmJiBwcmV2U3RhcnQg
IT09IHJlcG9ydGluZ0NvbmZpZ1tpXS5zdGFydCkgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQp
IHsKKyAgICAgICAgICAgICAgICByZXBvcnRpbmdDb25maWdbaV0uZW5kID0gc3RhcnQ7CisgICAg
ICAgICAgICAgICAgcHJldlN0YXJ0ID0gcmVwb3J0aW5nQ29uZmlnW2ldLnN0YXJ0OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKKy8qKgorICogUGFyc2VzIGNvbW1lbnRz
IGluIGZpbGUgdG8gZXh0cmFjdCBmaWxlLXNwZWNpZmljIGNvbmZpZyBvZiBydWxlcywgZ2xvYmFs
cworICogYW5kIGVudmlyb25tZW50cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBnbG9iYWwgY29uZmln
OyBhbHNvIGNvZGUgYmxvY2tzCisgKiB3aGVyZSByZXBvcnRpbmcgaXMgZGlzYWJsZWQgb3IgZW5h
YmxlZCBhbmQgbWVyZ2VzIHRoZW0gd2l0aCByZXBvcnRpbmcgY29uZmlnLgorICogQHBhcmFtIHtB
U1ROb2RlfSBhc3QgVGhlIHRvcCBub2RlIG9mIHRoZSBBU1QuCisgKiBAcGFyYW0ge09iamVjdH0g
Y29uZmlnIFRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIGRhdGEuCisgKiBAcGFyYW0ge09iamVj
dFtdfSByZXBvcnRpbmdDb25maWcgVGhlIGV4aXN0aW5nIHJlcG9ydGluZyBjb25maWd1cmF0aW9u
IGRhdGEuCisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gbW9kaWZ5Q29uZmlnc0Zy
b21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29uZmlnKSB7CisKKyAgICB2YXIgY29t
bWVudENvbmZpZyA9IHsKKyAgICAgICAgYXN0R2xvYmFsczoge30sCisgICAgICAgIHJ1bGVzOiB7
fSwKKyAgICAgICAgZW52OiB7fQorICAgIH07CisgICAgdmFyIGNvbW1lbnRSdWxlcyA9IHt9Owor
CisgICAgYXN0LmNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkgeworICAgICAgICBp
ZiAoY29tbWVudC50eXBlID09PSAiQmxvY2siKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9
IGNvbW1lbnQudmFsdWUudHJpbSgpOworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oZXNsaW50
LVx3K3xlc2xpbnR8Z2xvYmFscz8pKFxzfCQpLy5leGVjKHZhbHVlKTsKKworICAgICAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcobWF0
Y2guaW5kZXggKyBtYXRjaFsxXS5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgc3dpdGNoICht
YXRjaFsxXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJnbG9iYWxzIjoKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiZ2xvYmFsIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwu
bWl4aW4oY29tbWVudENvbmZpZy5hc3RHbG9iYWxzLCBwYXJzZUJvb2xlYW5Db25maWcodmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgImVzbGludC1lbnYiOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5taXhpbihj
b21tZW50Q29uZmlnLmVudiwgcGFyc2VMaXN0Q29uZmlnKHZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJlc2xpbnQtZGlz
YWJsZSI6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGlu
Z0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQsIE9iamVjdC5rZXlzKHBhcnNlTGlzdENvbmZpZyh2
YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgImVzbGludC1lbmFibGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5h
YmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgY29tbWVudC5sb2Muc3RhcnQsIE9iamVjdC5r
ZXlzKHBhcnNlTGlzdENvbmZpZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGludCI6CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaXRlbXMgPSBwYXJzZUpzb25Db25maWcodmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoaXRlbXMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlVmFsdWUgPSBpdGVtc1tuYW1l
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVWYWx1ZSA9PT0g
Im51bWJlciIgfHwgKEFycmF5LmlzQXJyYXkocnVsZVZhbHVlKSAmJiB0eXBlb2YgcnVsZVZhbHVl
WzBdID09PSAibnVtYmVyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWVudFJ1bGVzW25hbWVdID0gcnVsZVZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgLy8gYXBwbHkg
ZW52aXJvbm1lbnQgcnVsZXMgYmVmb3JlIHVzZXIgcnVsZXMKKyAgICBPYmplY3Qua2V5cyhjb21t
ZW50Q29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgZW52
aXJvbm1lbnRSdWxlcyA9IGVudmlyb25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVudHNbbmFtZV0u
cnVsZXM7CisgICAgICAgIGlmIChjb21tZW50Q29uZmlnLmVudltuYW1lXSAmJiBlbnZpcm9ubWVu
dFJ1bGVzKSB7CisgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRDb25maWcucnVsZXMsIGVu
dmlyb25tZW50UnVsZXMpOworICAgICAgICB9CisgICAgfSk7CisgICAgdXRpbC5taXhpbihjb21t
ZW50Q29uZmlnLnJ1bGVzLCBjb21tZW50UnVsZXMpOworCisgICAgdXRpbC5tZXJnZUNvbmZpZ3Mo
Y29uZmlnLCBjb21tZW50Q29uZmlnKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBtZXNzYWdlIG9m
IHJ1bGUgd2l0aCBydWxlSWQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gbG9jYXRpb24KKyAqIEBwYXJh
bSAge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgIENvbGxlY3Rpb24gb2YgaWdub3JlIHJlY29y
ZHMKKyAqIEBwYXJhbSAge3N0cmluZ30gcnVsZUlkICAgSWQgb2YgcnVsZQorICogQHBhcmFtICB7
T2JqZWN0fSBsb2NhdGlvbiBMb2NhdGlvbiBvZiBtZXNzYWdlCisgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gICAgICAgICAgVHJ1ZSBpZiBtZXNzYWdlIHNob3VsZCBiZSBpZ25vcmVkLCBmYWxzZSBvdGhl
cndpc2UKKyAqLworZnVuY3Rpb24gaXNEaXNhYmxlZEJ5UmVwb3J0aW5nQ29uZmlnKHJlcG9ydGlu
Z0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikgeworCisgICAgZm9yICh2YXIgaSA9IDAsIGMgPSBy
ZXBvcnRpbmdDb25maWcubGVuZ3RoOyBpIDwgYzsgaSsrKSB7CisKKyAgICAgICAgdmFyIGlnbm9y
ZSA9IHJlcG9ydGluZ0NvbmZpZ1tpXTsKKyAgICAgICAgaWYgKCghaWdub3JlLnJ1bGUgfHwgaWdu
b3JlLnJ1bGUgPT09IHJ1bGVJZCkgJiYKKyAgICAgICAgICAgIChsb2NhdGlvbi5saW5lID4gaWdu
b3JlLnN0YXJ0LmxpbmUgfHwgKGxvY2F0aW9uLmxpbmUgPT09IGlnbm9yZS5zdGFydC5saW5lICYm
IGxvY2F0aW9uLmNvbHVtbiA+PSBpZ25vcmUuc3RhcnQuY29sdW1uKSkgJiYKKyAgICAgICAgICAg
ICghaWdub3JlLmVuZCB8fCAobG9jYXRpb24ubGluZSA8IGlnbm9yZS5lbmQubGluZSB8fCAobG9j
YXRpb24ubGluZSA9PT0gaWdub3JlLmVuZC5saW5lICYmIGxvY2F0aW9uLmNvbHVtbiA8PSBpZ25v
cmUuZW5kLmNvbHVtbikpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFByb2Nlc3MgaW5p
dGlhbCBjb25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZCBieSBmaWxlIGNvbW1lbnQgY29u
ZmlnCisgKiBAcGFyYW0gIHtPYmplY3R9IGNvbmZpZyBJbml0aWFsIGNvbmZpZworICogQHJldHVy
bnMge09iamVjdH0gICAgICAgIFByb2Nlc3NlZCBjb25maWcKKyAqLworZnVuY3Rpb24gcHJlcGFy
ZUNvbmZpZyhjb25maWcpIHsKKworICAgIGNvbmZpZy5nbG9iYWxzID0gY29uZmlnLmdsb2JhbHMg
fHwgY29uZmlnLmdsb2JhbCB8fCB7fTsKKyAgICBkZWxldGUgY29uZmlnLmdsb2JhbDsKKworICAg
IHZhciBjb3BpZWRSdWxlcyA9IHt9OworICAgIGlmICh0eXBlb2YgY29uZmlnLnJ1bGVzID09PSAi
b2JqZWN0IikgeworICAgICAgICBPYmplY3Qua2V5cyhjb25maWcucnVsZXMpLmZvckVhY2goZnVu
Y3Rpb24oaykgeworICAgICAgICAgICAgdmFyIHJ1bGUgPSBjb25maWcucnVsZXNba107CisgICAg
ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlKSkgeworICAgICAgICAgICAgICAgIGNvcGll
ZFJ1bGVzW2tdID0gcnVsZS5zbGljZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb3BpZWRSdWxlc1trXSA9IHJ1bGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIHJ1bGVzOiBjb3BpZWRSdWxlcywKKyAg
ICAgICAgZ2xvYmFsczogdXRpbC5tZXJnZUNvbmZpZ3Moe30sIGNvbmZpZy5nbG9iYWxzKSwKKyAg
ICAgICAgZW52OiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmVudiB8fCB7fSksCisgICAg
ICAgIHNldHRpbmdzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLnNldHRpbmdzIHx8IHt9
KQorICAgIH07Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQdWJsaWMgSW50ZXJm
YWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIE9iamVjdCB0aGF0IGlzIHJl
c3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgSmF2YVNjcmlwdCB0ZXh0CisgKiBAbmFtZSBlc2xpbnQK
KyAqLworbW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgYXBpID0gT2Jq
ZWN0LmNyZWF0ZShuZXcgRXZlbnRFbWl0dGVyKCkpLAorICAgICAgICBtZXNzYWdlcyA9IFtdLAor
ICAgICAgICBjdXJyZW50VGV4dCA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBb
XSwKKyAgICAgICAgY3VycmVudENvbmZpZyA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUb2tlbnMg
PSBudWxsLAorICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbCwKKyAgICAgICAgc2NvcGVNYXAg
PSBudWxsLAorICAgICAgICBjdXJyZW50RmlsZW5hbWUgPSBudWxsLAorICAgICAgICBjb250cm9s
bGVyID0gbnVsbCwKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW10sCisgICAgICAgIGNvbW1l
bnRMb2NzRW50ZXIgPSBbXSwKKyAgICAgICAgY29tbWVudExvY3NFeGl0ID0gW107CisKKyAgICAv
KioKKyAgICAgKiBQYXJzZXMgdGV4dCBpbnRvIGFuIEFTVC4gTW92ZWQgb3V0IGhlcmUgYmVjYXVz
ZSB0aGUgdHJ5LWNhdGNoIHByZXZlbnRzCisgICAgICogb3B0aW1pemF0aW9uIG9mIGZ1bmN0aW9u
cywgc28gaXQncyBiZXN0IHRvIGtlZXAgdGhlIHRyeS1jYXRjaCBhcyBpc29sYXRlZAorICAgICAq
IGFzIHBvc3NpYmxlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRleHQgdG8gcGFy
c2UuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBBU1QgaWYgc3VjY2Vzc2Z1bCBvciBu
dWxsIGlmIG5vdC4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHBhcnNl
KHRleHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIHBhcnNpbmcgZXJyb3Jz
IGZpcnN0LiBJZiB0aGVyZSdzIGEgcGFyc2luZyBlcnJvciwgbm90aGluZworICAgICAgICAgKiBl
bHNlIGNhbiBoYXBwZW4uIEhvd2V2ZXIsIGEgcGFyc2luZyBlcnJvciBkb2VzIG5vdCB0aHJvdyBh
biBlcnJvcgorICAgICAgICAgKiBmcm9tIHRoaXMgbWV0aG9kIC0gaXQncyBqdXN0IGNvbnNpZGVy
ZWQgYSBmYXRhbCBlcnJvciBtZXNzYWdlLCBhCisgICAgICAgICAqIHByb2JsZW0gdGhhdCBFU0xp
bnQgaWRlbnRpZmllZCBqdXN0IGxpa2UgYW55IG90aGVyLgorICAgICAgICAgKi8KKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBlc3ByaW1hLnBhcnNlKHRleHQsIHsKKyAgICAgICAg
ICAgICAgICBsb2M6IHRydWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IHRydWUsCisgICAgICAg
ICAgICAgICAgcmF3OiB0cnVlLAorICAgICAgICAgICAgICAgIHRva2VuczogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBjb21tZW50OiB0cnVlLAorICAgICAgICAgICAgICAgIGF0dGFjaENvbW1lbnQ6
IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChleCkgeworCisgICAgICAg
ICAgICBtZXNzYWdlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBzZXZlcml0eTogMiwKKworICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2VzIGNv
bWUgYXMgIkxpbmUgWDogVW5leHBlY3RlZCB0b2tlbiBmb28iLCBzbyBzdHJpcCBvZmYgbGVhZGlu
ZyBwYXJ0CisgICAgICAgICAgICAgICAgbWVzc2FnZTogZXgubWVzc2FnZS5zdWJzdHJpbmcoZXgu
bWVzc2FnZS5pbmRleE9mKCI6IikgKyAxKS50cmltKCksCisKKyAgICAgICAgICAgICAgICBsaW5l
OiBleC5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogZXguY29sdW1uCisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBjb2xsZWN0aW9uIG9mIGNvbW1lbnRzIHRvIHByZXZl
bnQgZG91YmxlIGV2ZW50IGZvciBjb21tZW50IGFzCisgICAgICogbGVhZGluZyBhbmQgdHJhaWxp
bmcsIHRoZW4gZW1pdCBldmVudCBpZiBwYXNzaW5nCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119
IGNvbW1lbnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEBwYXJhbSB7T2Jq
ZWN0W119IGxvY3MgTGlzdCBvZiBsb2NhdGlvbnMgb2YgcHJldmlvdXMgY29tbWVudCBub2Rlcwor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgRXZlbnQgbmFtZSBwb3N0Zml4CisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZW1pdENvbW1lbnRzKGNv
bW1lbnRzLCBsb2NzLCBldmVudE5hbWUpIHsKKworICAgICAgICBpZiAoY29tbWVudHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICBjb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobG9jcy5pbmRleE9mKG5vZGUubG9jKSA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxvY3Muc3BsaWNlKGxvY3MuaW5kZXhPZihub2RlLmxvYyksIDEpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvY3MucHVzaChub2RlLmxv
Yyk7CisgICAgICAgICAgICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSArIGV2ZW50TmFtZSwg
bm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBlbnRlciBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1lbnRzIENvbGxl
Y3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzKSB7CisgICAgICAgIGVtaXRD
b21tZW50cyhjb21tZW50cywgY29tbWVudExvY3NFbnRlciwgIkNvbW1lbnQiKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBleGl0IG9mIGNvbW1l
bnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29sbGVjdGlvbiBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gZW1pdENvbW1lbnRzRXhpdChjb21tZW50cykgeworICAgICAgICBlbWl0Q29tbWVudHMo
Y29tbWVudHMsIGNvbW1lbnRMb2NzRXhpdCwgIkNvbW1lbnQ6ZXhpdCIpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEdldCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgYSBydWxlICgwIC0gbm9uZSwg
MSAtIHdhcm5pbmcsIDIgLSBlcnJvcikKKyAgICAgKiBSZXR1cm5zIDAgaWYgdGhlIHJ1bGUgY29u
ZmlnIGlzIG5vdCB2YWxpZCAoYW4gQXJyYXkgb3IgYSBudW1iZXIpCisgICAgICogQHBhcmFtIHtB
cnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVy
bnMge251bWJlcn0gMCwgMSwgb3IgMiwgaW5kaWNhdGluZyBydWxlIHNldmVyaXR5CisgICAgICov
CisgICAgZnVuY3Rpb24gZ2V0UnVsZVNldmVyaXR5KHJ1bGVDb25maWcpIHsKKyAgICAgICAgaWYg
KHR5cGVvZiBydWxlQ29uZmlnID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgcmV0dXJuIHJ1
bGVDb25maWc7CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShydWxlQ29uZmlnKSkg
eworICAgICAgICAgICAgcmV0dXJuIHJ1bGVDb25maWdbMF07CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAq
IEdldCB0aGUgb3B0aW9ucyBmb3IgYSBydWxlIChub3QgaW5jbHVkaW5nIHNldmVyaXR5KSwgaWYg
YW55CisgICAgICogQHBhcmFtIHtBcnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1
cmF0aW9uCisgICAgICogQHJldHVybnMge0FycmF5fSBvZiBydWxlIG9wdGlvbnMsIGVtcHR5IEFy
cmF5IGlmIG5vbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSdWxlT3B0aW9ucyhydWxlQ29u
ZmlnKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7CisgICAgICAg
ICAgICByZXR1cm4gcnVsZUNvbmZpZy5zbGljZSgxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNldCB1bmxpbWl0
ZWQgbGlzdGVuZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVz
LzUyNCkKKyAgICBhcGkuc2V0TWF4TGlzdGVuZXJzKDApOworCisgICAgLyoqCisgICAgICogUmVz
ZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHt2
b2lkfQorICAgICAqLworICAgIGFwaS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LnJlbW92ZUFsbExpc3RlbmVycygpOworICAgICAgICBtZXNzYWdlcyA9IFtdOworICAgICAgICBj
dXJyZW50Q29uZmlnID0gbnVsbDsKKyAgICAgICAgY3VycmVudFRleHQgPSBudWxsOworICAgICAg
ICBjdXJyZW50VGV4dExpbmVzID0gW107CisgICAgICAgIGN1cnJlbnRUb2tlbnMgPSBudWxsOwor
ICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbDsKKyAgICAgICAgc2NvcGVNYXAgPSBudWxsOwor
ICAgICAgICBjb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW107
CisgICAgICAgIGNvbW1lbnRMb2NzRW50ZXIgPSBbXTsKKyAgICAgICAgY29tbWVudExvY3NFeGl0
ID0gW107CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFZlcmlmaWVzIHRoZSB0ZXh0IGFnYWlu
c3QgdGhlIHJ1bGVzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBKYXZhU2NyaXB0IHRleHQgdG8gdmVyaWZ5LgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBjb25maWcgQW4gb2JqZWN0IHdob3NlIGtleXMgc3BlY2lmeSB0aGUg
cnVsZXMgdG8gdXNlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gZmlsZW5hbWUgVGhlIG9wdGlv
bmFsIGZpbGVuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQuCisgICAgICogICAgICBJZiB0
aGlzIGlzIG5vdCBzZXQsIHRoZSBmaWxlbmFtZSB3aWxsIGRlZmF1bHQgdG8gJzxpbnB1dD4nIGlu
IHRoZSBydWxlIGNvbnRleHQuCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2F2ZVN0YXRlIElu
ZGljYXRlcyBpZiB0aGUgc3RhdGUgZnJvbSB0aGUgbGFzdCBydW4gc2hvdWxkIGJlIHNhdmVkLgor
ICAgICAqICAgICAgTW9zdGx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0W119IFRoZSByZXN1bHRzIGFzIGFuIGFycmF5IG9mIG1lc3NhZ2VzIG9y
IG51bGwgaWYgbm8gbWVzc2FnZXMuCisgICAgICovCisgICAgYXBpLnZlcmlmeSA9IGZ1bmN0aW9u
KHRleHQsIGNvbmZpZywgZmlsZW5hbWUsIHNhdmVTdGF0ZSkgeworCisgICAgICAgIHZhciBhc3Q7
CisKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IHBhcnNlZCBmaWxlbmFtZQorICAgICAgICBj
dXJyZW50RmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgICAgICBpZiAoIXNhdmVTdGF0ZSkgewor
ICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgYXN0ID0gcGFy
c2UodGV4dC5yZXBsYWNlKC9eIyEoW15cclxuXStbXHJcbl0rKS8sICIvLyQxIikpOworCisgICAg
ICAgIC8vIGlmIEVzcHJpbWEgZmFpbGVkIHRvIHBhcnNlIHRoZSBmaWxlLCB0aGVyZSdzIG5vIHNl
bnNlIGluIHNldHRpbmcgdXAgcnVsZXMKKyAgICAgICAgaWYgKGFzdCkgeworICAgICAgICAgICAg
Ly8gcHJvY2VzcyBpbml0aWFsIGNvbmZpZyB0byBtYWtlIGl0IHNhZmUgdG8gZXh0ZW5kCisgICAg
ICAgICAgICBjb25maWcgPSBwcmVwYXJlQ29uZmlnKGNvbmZpZyk7CisKKyAgICAgICAgICAgIC8v
IHBhcnNlIGdsb2JhbCBjb21tZW50cyBhbmQgbW9kaWZ5IGNvbmZpZworICAgICAgICAgICAgbW9k
aWZ5Q29uZmlnc0Zyb21Db21tZW50cyhhc3QsIGNvbmZpZywgcmVwb3J0aW5nQ29uZmlnKTsKKwor
ICAgICAgICAgICAgLy8gZW5hYmxlIGFwcHJvcHJpYXRlIHJ1bGVzCisgICAgICAgICAgICBPYmpl
Y3Qua2V5cyhjb25maWcucnVsZXMpLmZpbHRlcihmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSA+IDA7CisgICAg
ICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworCisgICAgICAgICAgICAgICAgdmFy
IHJ1bGVDcmVhdG9yID0gcnVsZXMuZ2V0KGtleSksCisgICAgICAgICAgICAgICAgICAgIHNldmVy
aXR5ID0gZ2V0UnVsZVNldmVyaXR5KGNvbmZpZy5ydWxlc1trZXldKSwKKyAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucyA9IGdldFJ1bGVPcHRpb25zKGNvbmZpZy5ydWxlc1trZXldKSwKKyAgICAg
ICAgICAgICAgICAgICAgcnVsZTsKKworICAgICAgICAgICAgICAgIGlmIChydWxlQ3JlYXRvcikg
eworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgcnVs
ZSA9IHJ1bGVDcmVhdG9yKG5ldyBSdWxlQ29udGV4dChrZXksIGFwaSwgc2V2ZXJpdHksIG9wdGlv
bnMsIGNvbmZpZy5zZXR0aW5ncykpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQg
YWxsIHRoZSBub2RlIHR5cGVzIGFzIGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAgICAg
T2JqZWN0LmtleXMocnVsZSkuZm9yRWFjaChmdW5jdGlvbihub2RlVHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwaS5vbihub2RlVHlwZSwgcnVsZVtub2RlVHlwZV0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Lm1lc3NhZ2UgPSAiRXJyb3Igd2hpbGUgbG9h
ZGluZyBydWxlICciICsga2V5ICsgIic6ICIgKyBleC5tZXNzYWdlOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRGVmaW5p
dGlvbiBmb3IgcnVsZSAnIiArIGtleSArICInIHdhcyBub3QgZm91bmQuIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIHNv
IHJ1bGVzIGNhbiBhY2Nlc3MgYXMgbmVjZXNzYXJ5CisgICAgICAgICAgICBjdXJyZW50Q29uZmln
ID0gY29uZmlnOworICAgICAgICAgICAgY3VycmVudFRleHQgPSB0ZXh0OworICAgICAgICAgICAg
Y29udHJvbGxlciA9IG5ldyBlc3RyYXZlcnNlLkNvbnRyb2xsZXIoKTsKKworICAgICAgICAgICAg
Ly8gZ2F0aGVyIGRhdGEgdGhhdCBtYXkgYmUgbmVlZGVkIGJ5IHRoZSBydWxlcworICAgICAgICAg
ICAgY3VycmVudFNjb3BlcyA9IGVzY29wZS5hbmFseXplKGFzdCwgeyBpZ25vcmVFdmFsOiB0cnVl
IH0pLnNjb3BlczsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEluZGV4IHRoZSBz
Y29wZXMgYnkgdGhlIHN0YXJ0IHJhbmdlIG9mIHRoZWlyIGJsb2NrIGZvciBlZmZpY2llbnQKKyAg
ICAgICAgICAgICAqIGxvb2t1cCBpbiBnZXRTY29wZS4KKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgc2NvcGVNYXAgPSBbXTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZXMuZm9yRWFjaChm
dW5jdGlvbiAoc2NvcGUsIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Nv
cGUuYmxvY2sucmFuZ2VbMF07CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgdHdvIHNj
b3BlcyBhcmUgcmV0dXJuZWQgZm9yIGEgZ2l2ZW4gbm9kZS4gVGhpcyBpcworICAgICAgICAgICAg
ICAgIC8vIGhhbmRsZWQgbGF0ZXIgaW4gYSBrbm93biB3YXksIHNvIGp1c3QgZG9uJ3Qgb3Zlcndy
aXRlIGhlcmUuCisgICAgICAgICAgICAgICAgaWYgKCFzY29wZU1hcFtyYW5nZV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2NvcGVNYXBbcmFuZ2VdID0gaW5kZXg7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTcGxp
dCB0ZXh0IGhlcmUgaW50byBhcnJheSBvZiBsaW5lcyBzbworICAgICAgICAgICAgICogaXQncyBu
b3QgYmVpbmcgZG9uZSByZXBlYXRlZGx5CisgICAgICAgICAgICAgKiBieSBpbmRpdmlkdWFsIHJ1
bGVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjdXJyZW50VGV4dExpbmVzID0gY3Vy
cmVudFRleHQuc3BsaXQoL1xyP1xuL2cpOworCisgICAgICAgICAgICAvLyBGcmVlemluZyBzbyBh
cnJheSBpc24ndCBhY2NpZGVudGFsbHkgY2hhbmdlZCBieSBhIHJ1bGUuCisgICAgICAgICAgICBP
YmplY3QuZnJlZXplKGN1cnJlbnRUZXh0TGluZXMpOworCisgICAgICAgICAgICAvKiBnZXQgYWxs
IHRva2VucyBmcm9tIHRoZSBhc3QgYW5kIHN0b3JlIHRoZW0gYXMgYSBoYXNodGFibGUgdG8KKyAg
ICAgICAgICAgICAqIGltcHJvdmUgdHJhdmVyc2FsIHNwZWVkIHdoZW4gd2FudGluZyB0byBmaW5k
IHRva2VucyBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICogbm9kZQorICAgICAgICAgICAgICov
CisgICAgICAgICAgICBjdXJyZW50VG9rZW5zID0gW107CisgICAgICAgICAgICBhc3QudG9rZW5z
LmZvckVhY2goZnVuY3Rpb24odG9rZW4pIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW5z
W3Rva2VuLnJhbmdlWzBdXSA9IHRva2VuOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
IC8vIGF1Z21lbnQgZ2xvYmFsIHNjb3BlIHdpdGggZGVjbGFyZWQgZ2xvYmFsIHZhcmlhYmxlcwor
ICAgICAgICAgICAgYWRkRGVjbGFyZWRHbG9iYWxzKGFzdCwgY3VycmVudFNjb3Blc1swXSwgY3Vy
cmVudENvbmZpZyk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFYWNoIG5vZGUg
aGFzIGEgdHlwZSBwcm9wZXJ0eS4gV2hlbmV2ZXIgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygbm9kZSBp
cyBmb3VuZCwKKyAgICAgICAgICAgICAqIGFuIGV2ZW50IGlzIGZpcmVkLiBUaGlzIGFsbG93cyBh
bnkgbGlzdGVuZXJzIHRvIGF1dG9tYXRpY2FsbHkgYmUgaW5mb3JtZWQKKyAgICAgICAgICAgICAq
IHRoYXQgdGhpcyB0eXBlIG9mIG5vZGUgaGFzIGJlZW4gZm91bmQgYW5kIHJlYWN0IGFjY29yZGlu
Z2x5LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjb250cm9sbGVyLnRyYXZlcnNlKGFz
dCwgeworICAgICAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHsKKwor
ICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudHMgPSBhcGkuZ2V0Q29tbWVudHMobm9kZSk7
CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRW50ZXIoY29tbWVudHMubGVhZGlu
Zyk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OworICAgICAgICAg
ICAgICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUsIG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy50cmFpbGluZyk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhub2RlKTsKKworICAgICAg
ICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzLnRyYWlsaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgIjpleGl0Iiwgbm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMubGVhZGluZyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtZXNzYWdlczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhIG1lc3Nh
Z2UgZnJvbSBvbmUgb2YgdGhlIHJ1bGVzLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQg
VGhlIElEIG9mIHRoZSBydWxlIGNhdXNpbmcgdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IHNldmVyaXR5IFRoZSBzZXZlcml0eSBsZXZlbCBvZiB0aGUgcnVsZSBhcyBjb25maWd1
cmVkLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdGhhdCB0aGUg
bWVzc2FnZSByZWxhdGVzIHRvLgorICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYXRpb24gQW4g
b2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVycm9yIGxpbmUgYW5kIGNvbHVtbgorICAgICAqICAgICAg
bnVtYmVycy4gSWYgbG9jYXRpb24gaXMgbm90IHByb3ZpZGVkIHRoZSBub2RlJ3Mgc3RhcnQgbG9j
YXRpb24gd2lsbAorICAgICAqICAgICAgYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWVzc2FnZSBUaGUgYWN0dWFsIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMg
T3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGljaCBwcm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdl
CisgICAgICogICAgIHdpdGggc3ltYm9scyBiZWluZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdz
IHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBhcGkucmVwb3J0
ID0gZnVuY3Rpb24ocnVsZUlkLCBzZXZlcml0eSwgbm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9w
dHMpIHsKKworICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgb3B0cyA9IG1lc3NhZ2U7CisgICAgICAgICAgICBtZXNzYWdlID0gbG9jYXRpb247
CisgICAgICAgICAgICBsb2NhdGlvbiA9IG5vZGUubG9jLnN0YXJ0OworICAgICAgICB9CisKKyAg
ICAgICAgT2JqZWN0LmtleXMob3B0cyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7Cisg
ICAgICAgICAgICB2YXIgcnggPSBuZXcgUmVnRXhwKCJ7eyIgKyBlc2NhcGVSZWdFeHAoa2V5KSAr
ICJ9fSIsICJnIik7CisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKHJ4LCBv
cHRzW2tleV0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoaXNEaXNhYmxlZEJ5UmVwb3J0
aW5nQ29uZmlnKHJlcG9ydGluZ0NvbmZpZywgcnVsZUlkLCBsb2NhdGlvbikpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1lc3NhZ2VzLnB1c2goeworICAgICAg
ICAgICAgcnVsZUlkOiBydWxlSWQsCisgICAgICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksCisg
ICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSwKKyAg
ICAgICAgICAgIGxpbmU6IGxvY2F0aW9uLmxpbmUsCisgICAgICAgICAgICBjb2x1bW46IGxvY2F0
aW9uLmNvbHVtbiwKKyAgICAgICAgICAgIHNvdXJjZTogYXBpLmdldFNvdXJjZShub2RlKQorICAg
ICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc291cmNlIGNvZGUg
Zm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZT19IG5vZGUgVGhlIEFT
VCBub2RlIHRvIGdldCB0aGUgdGV4dCBmb3IuCisgICAgICogQHBhcmFtIHtpbnQ9fSBiZWZvcmVD
b3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBub2RlIHRvIHJldHJpZXZl
LgorICAgICAqIEBwYXJhbSB7aW50PX0gYWZ0ZXJDb3VudCBUaGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge3N0cmluZ30g
VGhlIHRleHQgcmVwcmVzZW50aW5nIHRoZSBBU1Qgbm9kZS4KKyAgICAgKi8KKyAgICBhcGkuZ2V0
U291cmNlID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291bnQpIHsKKyAgICAg
ICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiAoY3VycmVudFRleHQgIT09IG51bGwp
ID8gY3VycmVudFRleHQuc2xpY2Uobm9kZS5yYW5nZVswXSAtIChiZWZvcmVDb3VudCB8fCAwKSwK
KyAgICAgICAgICAgICAgICBub2RlLnJhbmdlWzFdICsgKGFmdGVyQ291bnQgfHwgMCkpIDogbnVs
bDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50VGV4dDsKKyAg
ICAgICAgfQorCisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGVudGlyZSBzb3Vy
Y2UgdGV4dCBzcGxpdCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzLgorICAgICAqIEByZXR1cm5zIHtB
cnJheX0gVGhlIHNvdXJjZSB0ZXh0IGFzIGFuIGFycmF5IG9mIGxpbmVzLgorICAgICAqLworICAg
IGFwaS5nZXRTb3VyY2VMaW5lcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gY3VycmVu
dFRleHRMaW5lczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhbGwgY29tbWVudHMg
Zm9yIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUgdG8gZ2V0IHRoZSBjb21tZW50cyBmb3IuCisgICAgICogQHJldHVybnMge09iamVjdH0g
VGhlIGxpc3Qgb2YgY29tbWVudHMgaW5kZXhlZCBieSB0aGVpciBwb3NpdGlvbi4KKyAgICAgKi8K
KyAgICBhcGkuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGxl
YWRpbmdDb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzIHx8IFtdLAorICAgICAgICAgICAg
dHJhaWxpbmdDb21tZW50cyA9IG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXTsKKworICAgICAg
ICAvKgorICAgICAgICAgKiBFc3ByaW1hIGFkZHMgYSAiY29tbWVudHMiIGFycmF5IG9uIFByb2dy
YW0gbm9kZXMgcmF0aGVyIHRoYW4KKyAgICAgICAgICogbGVhZGluZ0NvbW1lbnRzL3RyYWlsaW5n
Q29tbWVudHMuIENvbW1lbnRzIGFyZSBvbmx5IGxlZnQgaW4gdGhlCisgICAgICAgICAqIFByb2dy
YW0gbm9kZSBjb21tZW50cyBhcnJheSBpZiB0aGVyZSBpcyBubyBleGVjdXRhYmxlIGNvZGUuCisg
ICAgICAgICAqLworICAgICAgICBpZiAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgbGVh
ZGluZ0NvbW1lbnRzID0gbm9kZS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBsZWFkaW5nOiBsZWFkaW5nQ29tbWVudHMs
CisgICAgICAgICAgICB0cmFpbGluZzogdHJhaWxpbmdDb21tZW50cworICAgICAgICB9OworICAg
IH07CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIEpTRG9jIGNvbW1lbnQgZm9yIGEg
Z2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRv
IGdldCB0aGUgY29tbWVudCBmb3IuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBCbG9j
a0NvbW1lbnQgbm9kZSBjb250YWluaW5nIHRoZSBKU0RvYyBmb3IgdGhlCisgICAgICogICAgICBn
aXZlbiBub2RlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorICAgICAqLworICAgIGFwaS5nZXRKU0Rv
Y0NvbW1lbnQgPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUu
cGFyZW50LAorICAgICAgICAgICAgbGluZSA9IG5vZGUubG9jLnN0YXJ0LmxpbmU7CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEZpbmRzIGEgSlNEb2MgY29tbWVudCBub2RlIGluIGFuIGFycmF5
IG9mIGNvbW1lbnQgbm9kZXMuCisgICAgICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50
cyBUaGUgYXJyYXkgb2YgY29tbWVudCBub2RlcyB0byBzZWFyY2guCisgICAgICAgICAqIEByZXR1
cm5zIHtBU1ROb2RlfSBUaGUgbm9kZSBpZiBmb3VuZCwgbnVsbCBpZiBub3QuCisgICAgICAgICAq
IEBwcml2YXRlCisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBmaW5kSlNEb2NDb21tZW50
KGNvbW1lbnRzKSB7CisKKyAgICAgICAgICAgIGlmIChjb21tZW50cykgeworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSBjb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbaV0udHlwZSA9PT0gIkJsb2NrIiAmJiBjb21t
ZW50c1tpXS52YWx1ZS5jaGFyQXQoMCkgPT09ICIqIikgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGluZSAtIGNvbW1lbnRzW2ldLmxvYy5lbmQubGluZSA8PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
ICAgIH0KKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAgICAgY2FzZSAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRKU0RvY0Nv
bW1lbnQobm9kZS5sZWFkaW5nQ29tbWVudHMpOworCisgICAgICAgICAgICBjYXNlICJGdW5jdGlv
bkV4cHJlc3Npb24iOgorCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlICE9PSAiQ2Fs
bEV4cHJlc3Npb24iIHx8IHBhcmVudC5jYWxsZWUgIT09IG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LmxlYWRpbmdDb21tZW50cyAmJiBwYXJlbnQu
dHlwZSAhPT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYgcGFyZW50LnR5cGUgIT09ICJGdW5jdGlv
bkRlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
LnBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJlbnQgJiYgKHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIpID8g
ZmluZEpTRG9jQ29tbWVudChwYXJlbnQubGVhZGluZ0NvbW1lbnRzKSA6IG51bGw7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZmFsbHMgdGhyb3VnaAorCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgcHJl
Y2VkZSBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBb
YmVmb3JlQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBub2RlIHRvIHJl
dHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJl
c2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRva2Vuc0JlZm9yZSA9IGZ1bmN0
aW9uKG5vZGUsIGJlZm9yZUNvdW50KSB7CisgICAgICAgIHZhciBiZWZvcmVUb2tlbnMgPSBbXSwg
Y3Vyc29yID0gbm9kZS5yYW5nZVswXSAtIDE7CisgICAgICAgIHdoaWxlIChiZWZvcmVDb3VudCA+
IDAgJiYgY3Vyc29yID49IDApIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNv
cl0pIHsKKyAgICAgICAgICAgICAgICBiZWZvcmVUb2tlbnMudW5zaGlmdChjdXJyZW50VG9rZW5z
W2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tYmVmb3JlQ291bnQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAtLWN1cnNvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVmb3Jl
VG9rZW5zOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b2tlbiB0aGF0IHBy
ZWNlZGVzIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9
IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGJlZm9yZSB0aGUgZ2l2ZW4gbm9k
ZS4KKyAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRv
a2VuLgorICAgICAqLworICAgIGFwaS5nZXRUb2tlbkJlZm9yZSA9IGZ1bmN0aW9uKG5vZGUsIHNr
aXApIHsKKyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXSAtIDE7IGN1cnNv
ciA+PSAwOyAtLWN1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29y
XSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhIG51bWJl
ciBvZiB0b2tlbnMgdGhhdCBwcmVjZWRlIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9r
ZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisg
ICAgICogQHBhcmFtIHtpbnR9IFthZnRlckNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGFm
dGVyIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJh
eSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRv
a2Vuc0FmdGVyID0gZnVuY3Rpb24obm9kZSwgYWZ0ZXJDb3VudCkgeworICAgICAgICB2YXIgYWZ0
ZXJUb2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsKKyAgICAgICAgd2hpbGUgKGFm
dGVyQ291bnQgPiAwICYmIGN1cnNvciA8IGN1cnJlbnRUb2tlbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgYWZ0ZXJU
b2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tYWZ0
ZXJDb3VudDsKKyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0u
cmFuZ2VbMV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29y
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhZnRlclRva2VuczsK
KyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9rZW4gdGhhdCBmb2xsb3dzIGEg
Z2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBd
IEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwIGFmdGVyIHRoZSBnaXZlbiBub2RlLgorICAgICAq
IEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4uCisgICAg
ICovCisgICAgYXBpLmdldFRva2VuQWZ0ZXIgPSBmdW5jdGlvbihub2RlLCBza2lwKSB7CisgICAg
ICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMV07IGN1cnNvciA8IGN1cnJlbnRUb2tl
bnMubGVuZ3RoOyArK2N1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vy
c29yXSkgeworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAtLXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhbGwg
dG9rZW5zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2JlZm9y
ZUNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2
ZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tl
bnMgYWZ0ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19
IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGku
Z2V0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgYmVmb3JlQ291bnQsIGFmdGVyQ291bnQpIHsKKyAg
ICAgICAgdmFyIGJlZm9yZVRva2VucyA9IGFwaS5nZXRUb2tlbnNCZWZvcmUobm9kZSwgYmVmb3Jl
Q291bnQpLAorICAgICAgICAgICAgYWZ0ZXJUb2tlbnMgPSBhcGkuZ2V0VG9rZW5zQWZ0ZXIobm9k
ZSwgYWZ0ZXJDb3VudCksCisgICAgICAgICAgICB0b2tlbnMgPSBbXSwKKyAgICAgICAgICAgIGN1
cnNvciA9IG5vZGUucmFuZ2VbMF07CisgICAgICAgIHdoaWxlIChjdXJzb3IgPCBub2RlLnJhbmdl
WzFdKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW5zLnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAg
ICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0ucmFuZ2VbMV07CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29yOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBiZWZvcmVUb2tlbnMuY29uY2F0KHRva2VucywgYWZ0ZXJU
b2tlbnMpOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBmaXJzdCBgY291bnRg
IHRva2VucyBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KKyAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbY291bnQ9
MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICog
QHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0Rmlyc3RUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBjb3VudCkg
eworICAgICAgICB2YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07CisgICAg
ICAgIHdoaWxlIChjb3VudCA+IDAgJiYgY3Vyc29yIDwgbm9kZS5yYW5nZVsxXSkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIHRva2Vu
cy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1jb3VudDsK
KyAgICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJyZW50VG9rZW5zW2N1cnNvcl0ucmFuZ2VbMV07
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICsrY3Vyc29yOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfTsKKworICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9r
ZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisg
ICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2VucyB0byBza2lwLgor
ICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4u
CisgICAgICovCisgICAgYXBpLmdldEZpcnN0VG9rZW4gPSBmdW5jdGlvbihub2RlLCBza2lwKSB7
CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMF07IGN1cnNvciA8IG5vZGUu
cmFuZ2VbMV07ICsrY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJz
b3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBs
YXN0IGBjb3VudGAgdG9rZW5zIG9mIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtjb3VudD0wXSBU
aGUgbnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0
dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgorICAg
ICAqLworICAgIGFwaS5nZXRMYXN0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgY291bnQpIHsKKyAg
ICAgICAgdmFyIHRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdIC0gMTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXSkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIHRva2Vu
cy51bnNoaWZ0KGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1jb3Vu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC0tY3Vyc29yOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b2tlbnM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxh
c3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9
MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAuCisgICAgICogQHJldHVybnMge1Rva2VufSBB
biBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KKyAgICAgKi8KKyAgICBhcGkuZ2V0TGFz
dFRva2VuID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgeworICAgICAgICBmb3IgKHZhciBjdXJzb3Ig
PSBub2RlLnJhbmdlWzFdIC0gMTsgY3Vyc29yID49IG5vZGUucmFuZ2VbMF07IC0tY3Vyc29yKSB7
CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC0tc2tpcDsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2Vu
c1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIG5vZGVzIHRoYXQgYXJlIGFuY2VzdG9ycyBv
ZiBjdXJyZW50IG5vZGUuCisgICAgICogQHJldHVybnMge0FTVE5vZGVbXX0gQXJyYXkgb2Ygb2Jq
ZWN0cyByZXByZXNlbnRpbmcgYW5jZXN0b3JzLgorICAgICAqLworICAgIGFwaS5nZXRBbmNlc3Rv
cnMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucGFyZW50cygpOwor
ICAgIH07CisKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNjb3BlIGZvciB0aGUgY3VycmVu
dCBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCByZXByZXNlbnRpbmcg
dGhlIGN1cnJlbnQgbm9kZSdzIHNjb3BlLgorICAgICAqLworICAgIGFwaS5nZXRTY29wZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgcGFyZW50cyA9IGNvbnRyb2xsZXIucGFyZW50cygpLAor
ICAgICAgICAgICAgaW5uZXJCbG9jayA9IG51bGwsCisgICAgICAgICAgICBzZWxlY3RlZFNjb3Bl
SW5kZXg7CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcyBmb3IgUHJvZ3JhbSBub2RlcyAtIHRo
ZXkgaGF2ZSBubyBwYXJlbnRzCisgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCkgeworCisgICAg
ICAgICAgICAvLyBpZiBjdXJyZW50IG5vZGUgaXMgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFkZCBp
dCB0byB0aGUgbGlzdAorICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjb250cm9sbGVyLmN1cnJl
bnQoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0
aW9uIiB8fCBjdXJyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CisgICAgICAg
ICAgICAgICAgcGFyZW50cy5wdXNoKGN1cnJlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBBc2NlbmQgdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVudHMKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgZmlyc3Qgbm9kZSB0aGF0IHJlcXVpcmVzIGEgc2NvcGUgaXMgdGhlIG5v
ZGUgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gb3VyIGN1cnJlbnQgbm9kZSdzIGlu
bmVybW9zdCBzY29wZS4KKyAgICAgICAgICAgICAgICBpZiAoZXNjb3BlLlNjb3BlLmlzU2NvcGVS
ZXF1aXJlZChwYXJlbnRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBpbm5lckJsb2NrID0g
cGFyZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGaW5kIGFuZCByZXR1cm4gdGhlIGlu
bmVybW9zdCBzY29wZQorICAgICAgICAgICAgc2VsZWN0ZWRTY29wZUluZGV4ID0gc2NvcGVNYXBb
aW5uZXJCbG9jay5yYW5nZVswXV07CisKKyAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uIGV4
cHJlc3Npb25zIGNyZWF0ZSB0d28gbmVzdGVkIHNjb3BlIG9iamVjdHMuIFRoZQorICAgICAgICAg
ICAgLy8gb3V0ZXIgc2NvcGUgY29udGFpbnMgb25seSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiBu
YW1lLiBXZSByZXR1cm4KKyAgICAgICAgICAgIC8vIHRoZSBpbm5lciBzY29wZS4KKyAgICAgICAg
ICAgIGlmIChpbm5lckJsb2NrLnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iICYmIGlubmVy
QmxvY2suaWQgJiYgaW5uZXJCbG9jay5pZC5uYW1lKSB7CisgICAgICAgICAgICAgICAgKytzZWxl
Y3RlZFNjb3BlSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50U2NvcGVzW3NlbGVjdGVkU2NvcGVJbmRleF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFNjb3Blc1swXTsgICAgLy8gZ2xvYmFsIHNjb3BlCisgICAgICAg
IH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlsZW5hbWUgZm9yIHRoZSBj
dXJyZW50bHkgcGFyc2VkIHNvdXJjZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmls
ZW5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2UgYmVpbmcgcGFyc2VkLgorICAgICAqICAg
ICBEZWZhdWx0cyB0byAiPGlucHV0PiIgaWYgbm8gZmlsZW5hbWUgaW5mbyBpcyBwcmVzZW50Lgor
ICAgICAqLworICAgIGFwaS5nZXRGaWxlbmFtZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
dHlwZW9mIGN1cnJlbnRGaWxlbmFtZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50RmlsZW5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
IjxpbnB1dD4iOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIERlZmluZXMg
YSBuZXcgbGludGluZyBydWxlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQgQSB1bmlx
dWUgcnVsZSBpZGVudGlmaWVyCisgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBG
dW5jdGlvbiBmcm9tIGNvbnRleHQgdG8gb2JqZWN0IG1hcHBpbmcgQVNUIG5vZGUgdHlwZXMgdG8g
ZXZlbnQgaGFuZGxlcnMKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICB2YXIg
ZGVmaW5lUnVsZSA9IGFwaS5kZWZpbmVSdWxlID0gZnVuY3Rpb24ocnVsZUlkLCBydWxlTW9kdWxl
KSB7CisgICAgICAgIHJ1bGVzLmRlZmluZShydWxlSWQsIHJ1bGVNb2R1bGUpOworICAgIH07CisK
KyAgICAvKioKKyAgICAgKiBEZWZpbmVzIG1hbnkgbmV3IGxpbnRpbmcgcnVsZXMuCisgICAgICog
QHBhcmFtIHtvYmplY3R9IHJ1bGVzIG1hcCBmcm9tIHVuaXF1ZSBydWxlIGlkZW50aWZpZXIgdG8g
cnVsZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5kZWZpbmVSdWxl
cyA9IGZ1bmN0aW9uKHJ1bGVzKSB7CisgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGVJZCkgeworICAgICAgICAgICAgZGVmaW5lUnVs
ZShydWxlSWQsIHJ1bGVzW3J1bGVJZF0pOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoq
CisgICAgICogR2V0cyB0aGUgZGVmYXVsdCBlc2xpbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBPYmplY3QgbWFwcGluZyBydWxlIElEcyB0byB0aGVpciBkZWZhdWx0
IGNvbmZpZ3VyYXRpb25zCisgICAgICovCisgICAgYXBpLmRlZmF1bHRzID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiByZXF1aXJlKCIuLi9jb25mL2VzbGludC5qc29uIik7CisgICAgfTsK
KworICAgIHJldHVybiBhcGk7CisKK30oKSk7CisKK30seyIuLi9jb25mL2Vudmlyb25tZW50cy5q
c29uIjoxLCIuLi9jb25mL2VzbGludC5qc29uIjoyLCIuL3J1bGUtY29udGV4dCI6MTEsIi4vcnVs
ZXMiOjEyLCIuL3V0aWwiOjE1MCwiZXNjb3BlIjo1LCJlc3ByaW1hIjo2LCJlc3RyYXZlcnNlIjo3
LCJldmVudHMiOjMsIm9iamVjdC1hc3NpZ24iOjh9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBydWxl
cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CisgICAgcnVsZXNbImJsb2NrLXNjb3BlZC12YXIiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciIpOworICAgIHJ1bGVzWyJicmFjZS1z
dHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9icmFjZS1zdHlsZSIpOworICAgIHJ1bGVzWyJjYW1l
bGNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY2FtZWxjYXNlIik7CisgICAgcnVsZXNbImNvbW1h
LXNwYWNpbmciXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tbWEtc3BhY2luZyIpOworICAgIHJ1bGVz
WyJjb21tYS1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zdHlsZSIpOworICAgIHJ1
bGVzWyJjb21wbGV4aXR5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbXBsZXhpdHkiKTsKKyAgICBy
dWxlc1siY29uc2lzdGVudC1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29uc2lzdGVudC1y
ZXR1cm4iKTsKKyAgICBydWxlc1siY29uc2lzdGVudC10aGlzIl0gPSByZXF1aXJlKCIuL3J1bGVz
L2NvbnNpc3RlbnQtdGhpcyIpOworICAgIHJ1bGVzWyJjdXJseSJdID0gcmVxdWlyZSgiLi9ydWxl
cy9jdXJseSIpOworICAgIHJ1bGVzWyJkZWZhdWx0LWNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
ZGVmYXVsdC1jYXNlIik7CisgICAgcnVsZXNbImRvdC1ub3RhdGlvbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9kb3Qtbm90YXRpb24iKTsKKyAgICBydWxlc1siZW9sLWxhc3QiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvZW9sLWxhc3QiKTsKKyAgICBydWxlc1siZXFlcWVxIl0gPSByZXF1aXJlKCIuL3J1bGVz
L2VxZXFlcSIpOworICAgIHJ1bGVzWyJmdW5jLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Z1
bmMtbmFtZXMiKTsKKyAgICBydWxlc1siZnVuYy1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9m
dW5jLXN0eWxlIik7CisgICAgcnVsZXNbImdsb2JhbC1zdHJpY3QiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvZ2xvYmFsLXN0cmljdCIpOworICAgIHJ1bGVzWyJndWFyZC1mb3ItaW4iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvZ3VhcmQtZm9yLWluIik7CisgICAgcnVsZXNbImhhbmRsZS1jYWxsYmFjay1lcnIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciIpOworICAgIHJ1bGVzWyJr
ZXktc3BhY2luZyJdID0gcmVxdWlyZSgiLi9ydWxlcy9rZXktc3BhY2luZyIpOworICAgIHJ1bGVz
WyJtYXgtZGVwdGgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWRlcHRoIik7CisgICAgcnVsZXNb
Im1heC1sZW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWxlbiIpOworICAgIHJ1bGVzWyJtYXgt
bmVzdGVkLWNhbGxiYWNrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbmVzdGVkLWNhbGxiYWNr
cyIpOworICAgIHJ1bGVzWyJtYXgtcGFyYW1zIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1wYXJh
bXMiKTsKKyAgICBydWxlc1sibWF4LXN0YXRlbWVudHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4
LXN0YXRlbWVudHMiKTsKKyAgICBydWxlc1sibmV3LWNhcCJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
ZXctY2FwIik7CisgICAgcnVsZXNbIm5ldy1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbmV3
LXBhcmVucyIpOworICAgIHJ1bGVzWyJuby1hbGVydCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1h
bGVydCIpOworICAgIHJ1bGVzWyJuby1hcnJheS1jb25zdHJ1Y3RvciJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1hcnJheS1jb25zdHJ1Y3RvciIpOworICAgIHJ1bGVzWyJuby1iaXR3aXNlIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWJpdHdpc2UiKTsKKyAgICBydWxlc1sibm8tY2FsbGVyIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWNhbGxlciIpOworICAgIHJ1bGVzWyJuby1jYXRjaC1zaGFkb3ci
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Iik7CisgICAgcnVsZXNbIm5vLWNv
bW1hLWRhbmdsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUiKTsKKyAgICBy
dWxlc1sibm8tY29uZC1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29uZC1hc3NpZ24i
KTsKKyAgICBydWxlc1sibm8tY29uc29sZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25zb2xl
Iik7CisgICAgcnVsZXNbIm5vLWNvbnN0YW50LWNvbmRpdGlvbiJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1jb25zdGFudC1jb25kaXRpb24iKTsKKyAgICBydWxlc1sibm8tY29udHJvbC1yZWdleCJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb250cm9sLXJlZ2V4Iik7CisgICAgcnVsZXNbIm5vLWRl
YnVnZ2VyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWRlYnVnZ2VyIik7CisgICAgcnVsZXNbIm5v
LWRlbGV0ZS12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVsZXRlLXZhciIpOworICAgIHJ1
bGVzWyJuby1kaXYtcmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGl2LXJlZ2V4Iik7Cisg
ICAgcnVsZXNbIm5vLWR1cGUta2V5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kdXBlLWtleXMi
KTsKKyAgICBydWxlc1sibm8tZWxzZS1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZWxz
ZS1yZXR1cm4iKTsKKyAgICBydWxlc1sibm8tZW1wdHktY2xhc3MiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tZW1wdHktY2xhc3MiKTsKKyAgICBydWxlc1sibm8tZW1wdHktbGFiZWwiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiKTsKKyAgICBydWxlc1sibm8tZW1wdHkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZW1wdHkiKTsKKyAgICBydWxlc1sibm8tZXEtbnVsbCJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1lcS1udWxsIik7CisgICAgcnVsZXNbIm5vLWV2YWwiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZXZhbCIpOworICAgIHJ1bGVzWyJuby1leC1hc3NpZ24iXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZXgtYXNzaWduIik7CisgICAgcnVsZXNbIm5vLWV4dGVuZC1uYXRpdmUi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSIpOworICAgIHJ1bGVzWyJuby1l
eHRyYS1iaW5kIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiKTsKKyAgICBydWxl
c1sibm8tZXh0cmEtYm9vbGVhbi1jYXN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJv
b2xlYW4tY2FzdCIpOworICAgIHJ1bGVzWyJuby1leHRyYS1wYXJlbnMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tZXh0cmEtcGFyZW5zIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXNlbWkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc2VtaSIpOworICAgIHJ1bGVzWyJuby1leHRyYS1zdHJp
Y3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtc3RyaWN0Iik7CisgICAgcnVsZXNbIm5v
LWZhbGx0aHJvdWdoIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZhbGx0aHJvdWdoIik7CisgICAg
cnVsZXNbIm5vLWZsb2F0aW5nLWRlY2ltYWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmxvYXRp
bmctZGVjaW1hbCIpOworICAgIHJ1bGVzWyJuby1mdW5jLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1mdW5jLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1pbXBsaWVkLWV2YWwiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8taW1wbGllZC1ldmFsIik7CisgICAgcnVsZXNbIm5vLWlubmVyLWRl
Y2xhcmF0aW9ucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbm5lci1kZWNsYXJhdGlvbnMiKTsK
KyAgICBydWxlc1sibm8taW52YWxpZC1yZWdleHAiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8taW52
YWxpZC1yZWdleHAiKTsKKyAgICBydWxlc1sibm8taXRlcmF0b3IiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8taXRlcmF0b3IiKTsKKyAgICBydWxlc1sibm8tbGFiZWwtdmFyIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLWxhYmVsLXZhciIpOworICAgIHJ1bGVzWyJuby1sYWJlbHMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbGFiZWxzIik7CisgICAgcnVsZXNbIm5vLWxvbmUtYmxvY2tzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWxvbmUtYmxvY2tzIik7CisgICAgcnVsZXNbIm5vLWxvbmVseS1pZiJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sb25lbHktaWYiKTsKKyAgICBydWxlc1sibm8tbG9vcC1m
dW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxvb3AtZnVuYyIpOworICAgIHJ1bGVzWyJuby1t
aXhlZC1yZXF1aXJlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyIpOwor
ICAgIHJ1bGVzWyJuby1taXhlZC1zcGFjZXMtYW5kLXRhYnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIik7CisgICAgcnVsZXNbIm5vLW11bHRpLXNwYWNlcyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiKTsKKyAgICBydWxlc1sibm8tbXVs
dGktc3RyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRpLXN0ciIpOworICAgIHJ1bGVzWyJu
by1tdWx0aXBsZS1lbXB0eS1saW5lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1tdWx0aXBsZS1l
bXB0eS1saW5lcyIpOworICAgIHJ1bGVzWyJuby1uYXRpdmUtcmVhc3NpZ24iXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbmF0aXZlLXJlYXNzaWduIik7CisgICAgcnVsZXNbIm5vLW5lZ2F0ZWQtaW4t
bGhzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lZ2F0ZWQtaW4tbGhzIik7CisgICAgcnVsZXNb
Im5vLW5lc3RlZC10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5
Iik7CisgICAgcnVsZXNbIm5vLW5ldy1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5ldy1m
dW5jIik7CisgICAgcnVsZXNbIm5vLW5ldy1vYmplY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bmV3LW9iamVjdCIpOworICAgIHJ1bGVzWyJuby1uZXctcmVxdWlyZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1uZXctcmVxdWlyZSIpOworICAgIHJ1bGVzWyJuby1uZXctd3JhcHBlcnMiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIik7CisgICAgcnVsZXNbIm5vLW5ldyJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1uZXciKTsKKyAgICBydWxlc1sibm8tb2JqLWNhbGxzIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLW9iai1jYWxscyIpOworICAgIHJ1bGVzWyJuby1vY3RhbC1lc2Nh
cGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIik7CisgICAgcnVsZXNbIm5v
LW9jdGFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9jdGFsIik7CisgICAgcnVsZXNbIm5vLXBh
dGgtY29uY2F0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Iik7CisgICAgcnVs
ZXNbIm5vLXBsdXNwbHVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBsdXNwbHVzIik7CisgICAg
cnVsZXNbIm5vLXByb2Nlc3MtZW52Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXByb2Nlc3MtZW52
Iik7CisgICAgcnVsZXNbIm5vLXByb2Nlc3MtZXhpdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1w
cm9jZXNzLWV4aXQiKTsKKyAgICBydWxlc1sibm8tcHJvdG8iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tcHJvdG8iKTsKKyAgICBydWxlc1sibm8tcmVkZWNsYXJlIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLXJlZGVjbGFyZSIpOworICAgIHJ1bGVzWyJuby1yZWdleC1zcGFjZXMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIik7CisgICAgcnVsZXNbIm5vLXJlc2VydmVkLWtleXMi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyIpOworICAgIHJ1bGVzWyJuby1y
ZXN0cmljdGVkLW1vZHVsZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzdHJpY3RlZC1tb2R1
bGVzIik7CisgICAgcnVsZXNbIm5vLXJldHVybi1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tcmV0dXJuLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1zY3JpcHQtdXJsIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXNjcmlwdC11cmwiKTsKKyAgICBydWxlc1sibm8tc2VsZi1jb21wYXJlIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLXNlbGYtY29tcGFyZSIpOworICAgIHJ1bGVzWyJuby1zZXF1
ZW5jZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2VxdWVuY2VzIik7CisgICAgcnVsZXNbIm5v
LXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNoYWRvdy1y
ZXN0cmljdGVkLW5hbWVzIik7CisgICAgcnVsZXNbIm5vLXNoYWRvdyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1zaGFkb3ciKTsKKyAgICBydWxlc1sibm8tc3BhY2UtYmVmb3JlLXNlbWkiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tc3BhY2UtYmVmb3JlLXNlbWkiKTsKKyAgICBydWxlc1sibm8tc3Bh
Y2VkLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiKTsKKyAgICBydWxl
c1sibm8tc3BhcnNlLWFycmF5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFyc2UtYXJyYXlz
Iik7CisgICAgcnVsZXNbIm5vLXN5bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3luYyIpOwor
ICAgIHJ1bGVzWyJuby10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRlcm5hcnkiKTsK
KyAgICBydWxlc1sibm8tdHJhaWxpbmctc3BhY2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRy
YWlsaW5nLXNwYWNlcyIpOworICAgIHJ1bGVzWyJuby11bmRlZi1pbml0Il0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLXVuZGVmLWluaXQiKTsKKyAgICBydWxlc1sibm8tdW5kZWYiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tdW5kZWYiKTsKKyAgICBydWxlc1sibm8tdW5kZWZpbmVkIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXVuZGVmaW5lZCIpOworICAgIHJ1bGVzWyJuby11bmRlcnNjb3JlLWRhbmds
ZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSIpOworICAgIHJ1bGVz
WyJuby11bnJlYWNoYWJsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnJlYWNoYWJsZSIpOwor
ICAgIHJ1bGVzWyJuby11bnVzZWQtZXhwcmVzc2lvbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
dW51c2VkLWV4cHJlc3Npb25zIik7CisgICAgcnVsZXNbIm5vLXVudXNlZC12YXJzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLXVudXNlZC12YXJzIik7CisgICAgcnVsZXNbIm5vLXVzZS1iZWZvcmUt
ZGVmaW5lIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVzZS1iZWZvcmUtZGVmaW5lIik7CisgICAg
cnVsZXNbIm5vLXZvaWQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdm9pZCIpOworICAgIHJ1bGVz
WyJuby13YXJuaW5nLWNvbW1lbnRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdhcm5pbmctY29t
bWVudHMiKTsKKyAgICBydWxlc1sibm8td2l0aCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13aXRo
Iik7CisgICAgcnVsZXNbIm5vLXdyYXAtZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13cmFw
LWZ1bmMiKTsKKyAgICBydWxlc1sib25lLXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9vbmUtdmFy
Iik7CisgICAgcnVsZXNbInBhZGRlZC1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcGFkZGVk
LWJsb2NrcyIpOworICAgIHJ1bGVzWyJxdW90ZS1wcm9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9x
dW90ZS1wcm9wcyIpOworICAgIHJ1bGVzWyJxdW90ZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcXVv
dGVzIik7CisgICAgcnVsZXNbInJhZGl4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3JhZGl4Iik7Cisg
ICAgcnVsZXNbInNlbWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc2VtaSIpOworICAgIHJ1bGVzWyJz
b3J0LXZhcnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc29ydC12YXJzIik7CisgICAgcnVsZXNbInNw
YWNlLWFmdGVyLWtleXdvcmRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWFmdGVyLWtleXdv
cmRzIik7CisgICAgcnVsZXNbInNwYWNlLWJlZm9yZS1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvc3BhY2UtYmVmb3JlLWJsb2NrcyIpOworICAgIHJ1bGVzWyJzcGFjZS1pbi1icmFja2V0cyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1icmFja2V0cyIpOworICAgIHJ1bGVzWyJzcGFj
ZS1pbi1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5zIik7CisgICAg
cnVsZXNbInNwYWNlLWluZml4LW9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbmZpeC1v
cHMiKTsKKyAgICBydWxlc1sic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvc3BhY2UtcmV0dXJuLXRocm93LWNhc2UiKTsKKyAgICBydWxlc1sic3BhY2UtdW5hcnkt
d29yZC1vcHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiKTsKKyAg
ICBydWxlc1sic3BhY2VkLWxpbmUtY29tbWVudCJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZWQt
bGluZS1jb21tZW50Iik7CisgICAgcnVsZXNbInN0cmljdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9z
dHJpY3QiKTsKKyAgICBydWxlc1sidXNlLWlzbmFuIl0gPSByZXF1aXJlKCIuL3J1bGVzL3VzZS1p
c25hbiIpOworICAgIHJ1bGVzWyJ2YWxpZC1qc2RvYyJdID0gcmVxdWlyZSgiLi9ydWxlcy92YWxp
ZC1qc2RvYyIpOworICAgIHJ1bGVzWyJ2YWxpZC10eXBlb2YiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
dmFsaWQtdHlwZW9mIik7CisgICAgcnVsZXNbInZhcnMtb24tdG9wIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3ZhcnMtb24tdG9wIik7CisgICAgcnVsZXNbIndyYXAtaWlmZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy93cmFwLWlpZmUiKTsKKyAgICBydWxlc1sid3JhcC1yZWdleCJdID0gcmVxdWlyZSgiLi9y
dWxlcy93cmFwLXJlZ2V4Iik7CisgICAgcnVsZXNbInlvZGEiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
eW9kYSIpOworCisgICAgcmV0dXJuIHJ1bGVzOworfTsKK30seyIuL3J1bGVzL2Jsb2NrLXNjb3Bl
ZC12YXIiOjEzLCIuL3J1bGVzL2JyYWNlLXN0eWxlIjoxNCwiLi9ydWxlcy9jYW1lbGNhc2UiOjE1
LCIuL3J1bGVzL2NvbW1hLXNwYWNpbmciOjE2LCIuL3J1bGVzL2NvbW1hLXN0eWxlIjoxNywiLi9y
dWxlcy9jb21wbGV4aXR5IjoxOCwiLi9ydWxlcy9jb25zaXN0ZW50LXJldHVybiI6MTksIi4vcnVs
ZXMvY29uc2lzdGVudC10aGlzIjoyMCwiLi9ydWxlcy9jdXJseSI6MjEsIi4vcnVsZXMvZGVmYXVs
dC1jYXNlIjoyMiwiLi9ydWxlcy9kb3Qtbm90YXRpb24iOjIzLCIuL3J1bGVzL2VvbC1sYXN0Ijoy
NCwiLi9ydWxlcy9lcWVxZXEiOjI1LCIuL3J1bGVzL2Z1bmMtbmFtZXMiOjI2LCIuL3J1bGVzL2Z1
bmMtc3R5bGUiOjI3LCIuL3J1bGVzL2dsb2JhbC1zdHJpY3QiOjI4LCIuL3J1bGVzL2d1YXJkLWZv
ci1pbiI6MjksIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciI6MzAsIi4vcnVsZXMva2V5LXNw
YWNpbmciOjMxLCIuL3J1bGVzL21heC1kZXB0aCI6MzIsIi4vcnVsZXMvbWF4LWxlbiI6MzMsIi4v
cnVsZXMvbWF4LW5lc3RlZC1jYWxsYmFja3MiOjM0LCIuL3J1bGVzL21heC1wYXJhbXMiOjM1LCIu
L3J1bGVzL21heC1zdGF0ZW1lbnRzIjozNiwiLi9ydWxlcy9uZXctY2FwIjozNywiLi9ydWxlcy9u
ZXctcGFyZW5zIjozOCwiLi9ydWxlcy9uby1hbGVydCI6MzksIi4vcnVsZXMvbm8tYXJyYXktY29u
c3RydWN0b3IiOjQwLCIuL3J1bGVzL25vLWJpdHdpc2UiOjQxLCIuL3J1bGVzL25vLWNhbGxlciI6
NDIsIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Ijo0MywiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUi
OjQ0LCIuL3J1bGVzL25vLWNvbmQtYXNzaWduIjo0NSwiLi9ydWxlcy9uby1jb25zb2xlIjo0Niwi
Li9ydWxlcy9uby1jb25zdGFudC1jb25kaXRpb24iOjQ3LCIuL3J1bGVzL25vLWNvbnRyb2wtcmVn
ZXgiOjQ4LCIuL3J1bGVzL25vLWRlYnVnZ2VyIjo0OSwiLi9ydWxlcy9uby1kZWxldGUtdmFyIjo1
MCwiLi9ydWxlcy9uby1kaXYtcmVnZXgiOjUxLCIuL3J1bGVzL25vLWR1cGUta2V5cyI6NTIsIi4v
cnVsZXMvbm8tZWxzZS1yZXR1cm4iOjUzLCIuL3J1bGVzL25vLWVtcHR5Ijo1NiwiLi9ydWxlcy9u
by1lbXB0eS1jbGFzcyI6NTQsIi4vcnVsZXMvbm8tZW1wdHktbGFiZWwiOjU1LCIuL3J1bGVzL25v
LWVxLW51bGwiOjU3LCIuL3J1bGVzL25vLWV2YWwiOjU4LCIuL3J1bGVzL25vLWV4LWFzc2lnbiI6
NTksIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSI6NjAsIi4vcnVsZXMvbm8tZXh0cmEtYmluZCI6
NjEsIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1jYXN0Ijo2MiwiLi9ydWxlcy9uby1leHRyYS1w
YXJlbnMiOjYzLCIuL3J1bGVzL25vLWV4dHJhLXNlbWkiOjY0LCIuL3J1bGVzL25vLWV4dHJhLXN0
cmljdCI6NjUsIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giOjY2LCIuL3J1bGVzL25vLWZsb2F0aW5n
LWRlY2ltYWwiOjY3LCIuL3J1bGVzL25vLWZ1bmMtYXNzaWduIjo2OCwiLi9ydWxlcy9uby1pbXBs
aWVkLWV2YWwiOjY5LCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9ucyI6NzAsIi4vcnVsZXMv
bm8taW52YWxpZC1yZWdleHAiOjcxLCIuL3J1bGVzL25vLWl0ZXJhdG9yIjo3MiwiLi9ydWxlcy9u
by1sYWJlbC12YXIiOjczLCIuL3J1bGVzL25vLWxhYmVscyI6NzQsIi4vcnVsZXMvbm8tbG9uZS1i
bG9ja3MiOjc1LCIuL3J1bGVzL25vLWxvbmVseS1pZiI6NzYsIi4vcnVsZXMvbm8tbG9vcC1mdW5j
Ijo3NywiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyI6NzgsIi4vcnVsZXMvbm8tbWl4ZWQtc3Bh
Y2VzLWFuZC10YWJzIjo3OSwiLi9ydWxlcy9uby1tdWx0aS1zcGFjZXMiOjgwLCIuL3J1bGVzL25v
LW11bHRpLXN0ciI6ODEsIi4vcnVsZXMvbm8tbXVsdGlwbGUtZW1wdHktbGluZXMiOjgyLCIuL3J1
bGVzL25vLW5hdGl2ZS1yZWFzc2lnbiI6ODMsIi4vcnVsZXMvbm8tbmVnYXRlZC1pbi1saHMiOjg0
LCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5Ijo4NSwiLi9ydWxlcy9uby1uZXciOjkwLCIuL3J1
bGVzL25vLW5ldy1mdW5jIjo4NiwiLi9ydWxlcy9uby1uZXctb2JqZWN0Ijo4NywiLi9ydWxlcy9u
by1uZXctcmVxdWlyZSI6ODgsIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIjo4OSwiLi9ydWxlcy9u
by1vYmotY2FsbHMiOjkxLCIuL3J1bGVzL25vLW9jdGFsIjo5MywiLi9ydWxlcy9uby1vY3RhbC1l
c2NhcGUiOjkyLCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Ijo5NCwiLi9ydWxlcy9uby1wbHVzcGx1
cyI6OTUsIi4vcnVsZXMvbm8tcHJvY2Vzcy1lbnYiOjk2LCIuL3J1bGVzL25vLXByb2Nlc3MtZXhp
dCI6OTcsIi4vcnVsZXMvbm8tcHJvdG8iOjk4LCIuL3J1bGVzL25vLXJlZGVjbGFyZSI6OTksIi4v
cnVsZXMvbm8tcmVnZXgtc3BhY2VzIjoxMDAsIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyI6MTAx
LCIuL3J1bGVzL25vLXJlc3RyaWN0ZWQtbW9kdWxlcyI6MTAyLCIuL3J1bGVzL25vLXJldHVybi1h
c3NpZ24iOjEwMywiLi9ydWxlcy9uby1zY3JpcHQtdXJsIjoxMDQsIi4vcnVsZXMvbm8tc2VsZi1j
b21wYXJlIjoxMDUsIi4vcnVsZXMvbm8tc2VxdWVuY2VzIjoxMDYsIi4vcnVsZXMvbm8tc2hhZG93
IjoxMDgsIi4vcnVsZXMvbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXMiOjEwNywiLi9ydWxlcy9u
by1zcGFjZS1iZWZvcmUtc2VtaSI6MTA5LCIuL3J1bGVzL25vLXNwYWNlZC1mdW5jIjoxMTAsIi4v
cnVsZXMvbm8tc3BhcnNlLWFycmF5cyI6MTExLCIuL3J1bGVzL25vLXN5bmMiOjExMiwiLi9ydWxl
cy9uby10ZXJuYXJ5IjoxMTMsIi4vcnVsZXMvbm8tdHJhaWxpbmctc3BhY2VzIjoxMTQsIi4vcnVs
ZXMvbm8tdW5kZWYiOjExNiwiLi9ydWxlcy9uby11bmRlZi1pbml0IjoxMTUsIi4vcnVsZXMvbm8t
dW5kZWZpbmVkIjoxMTcsIi4vcnVsZXMvbm8tdW5kZXJzY29yZS1kYW5nbGUiOjExOCwiLi9ydWxl
cy9uby11bnJlYWNoYWJsZSI6MTE5LCIuL3J1bGVzL25vLXVudXNlZC1leHByZXNzaW9ucyI6MTIw
LCIuL3J1bGVzL25vLXVudXNlZC12YXJzIjoxMjEsIi4vcnVsZXMvbm8tdXNlLWJlZm9yZS1kZWZp
bmUiOjEyMiwiLi9ydWxlcy9uby12b2lkIjoxMjMsIi4vcnVsZXMvbm8td2FybmluZy1jb21tZW50
cyI6MTI0LCIuL3J1bGVzL25vLXdpdGgiOjEyNSwiLi9ydWxlcy9uby13cmFwLWZ1bmMiOjEyNiwi
Li9ydWxlcy9vbmUtdmFyIjoxMjcsIi4vcnVsZXMvcGFkZGVkLWJsb2NrcyI6MTI4LCIuL3J1bGVz
L3F1b3RlLXByb3BzIjoxMjksIi4vcnVsZXMvcXVvdGVzIjoxMzAsIi4vcnVsZXMvcmFkaXgiOjEz
MSwiLi9ydWxlcy9zZW1pIjoxMzIsIi4vcnVsZXMvc29ydC12YXJzIjoxMzMsIi4vcnVsZXMvc3Bh
Y2UtYWZ0ZXIta2V5d29yZHMiOjEzNCwiLi9ydWxlcy9zcGFjZS1iZWZvcmUtYmxvY2tzIjoxMzUs
Ii4vcnVsZXMvc3BhY2UtaW4tYnJhY2tldHMiOjEzNiwiLi9ydWxlcy9zcGFjZS1pbi1wYXJlbnMi
OjEzNywiLi9ydWxlcy9zcGFjZS1pbmZpeC1vcHMiOjEzOCwiLi9ydWxlcy9zcGFjZS1yZXR1cm4t
dGhyb3ctY2FzZSI6MTM5LCIuL3J1bGVzL3NwYWNlLXVuYXJ5LXdvcmQtb3BzIjoxNDAsIi4vcnVs
ZXMvc3BhY2VkLWxpbmUtY29tbWVudCI6MTQxLCIuL3J1bGVzL3N0cmljdCI6MTQyLCIuL3J1bGVz
L3VzZS1pc25hbiI6MTQzLCIuL3J1bGVzL3ZhbGlkLWpzZG9jIjoxNDQsIi4vcnVsZXMvdmFsaWQt
dHlwZW9mIjoxNDUsIi4vcnVsZXMvdmFycy1vbi10b3AiOjE0NiwiLi9ydWxlcy93cmFwLWlpZmUi
OjE0NywiLi9ydWxlcy93cmFwLXJlZ2V4IjoxNDgsIi4vcnVsZXMveW9kYSI6MTQ5fV0sMTE6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGVDb250ZXh0IHV0aWxpdHkgZm9yIHJ1bGVzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2Fz
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnN0
YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFBBU1NUSFJPVUdIUyA9IFsKKyAg
ICAgICAgImdldFNvdXJjZSIsCisgICAgICAgICJnZXRTb3VyY2VMaW5lcyIsCisgICAgICAgICJn
ZXRUb2tlbnMiLAorICAgICAgICAiZ2V0VG9rZW5zQmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vu
QmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vuc0FmdGVyIiwKKyAgICAgICAgImdldFRva2VuQWZ0
ZXIiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbnMiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbiIs
CisgICAgICAgICJnZXRMYXN0VG9rZW5zIiwKKyAgICAgICAgImdldExhc3RUb2tlbiIsCisgICAg
ICAgICJnZXRDb21tZW50cyIsCisgICAgICAgICJnZXRBbmNlc3RvcnMiLAorICAgICAgICAiZ2V0
U2NvcGUiLAorICAgICAgICAiZ2V0SlNEb2NDb21tZW50IiwKKyAgICAgICAgImdldEZpbGVuYW1l
IgorICAgIF07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQWN0cyBhcyBhbiBhYnN0cmFjdGlv
biBsYXllciBiZXR3ZWVuIHJ1bGVzIGFuZCB0aGUgbWFpbiBlc2xpbnQgb2JqZWN0LgorICogQGNv
bnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJRCBvZiB0aGUgcnVsZSB1
c2luZyB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSB7ZXNsaW50fSBlc2xpbnQgVGhlIGVzbGludCBv
YmplY3QuCisgKiBAcGFyYW0ge251bWJlcn0gc2V2ZXJpdHkgVGhlIGNvbmZpZ3VyZWQgc2V2ZXJp
dHkgbGV2ZWwgb2YgdGhlIHJ1bGUuCisgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIFRoZSBjb25m
aWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBydWxlLgorICogQHBhcmFt
IHtvYmplY3R9IHNldHRpbmdzIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHBhc3NlZCBmcm9t
IHRoZSBjb25maWcgZmlsZS4KKyAqLworZnVuY3Rpb24gUnVsZUNvbnRleHQocnVsZUlkLCBlc2xp
bnQsIHNldmVyaXR5LCBvcHRpb25zLCBzZXR0aW5ncykgeworCisgICAgLyoqCisgICAgICogVGhl
IHJlYWQtb25seSBJRCBvZiB0aGUgcnVsZS4KKyAgICAgKi8KKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkodGhpcywgImlkIiwgeworICAgICAgICB2YWx1ZTogcnVsZUlkCisgICAgfSk7CisKKyAg
ICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IG9wdGlvbnMgb2YgdGhlIHJ1bGUKKyAgICAgKi8K
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm9wdGlvbnMiLCB7CisgICAgICAgIHZh
bHVlOiBvcHRpb25zCisgICAgfSk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IHNl
dHRpbmdzIHNoYXJlZCBiZXR3ZWVuIGFsbCBydWxlcworICAgICAqLworICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSh0aGlzLCAic2V0dGluZ3MiLCB7CisgICAgICAgIHZhbHVlOiBzZXR0aW5ncwor
ICAgIH0pOworCisgICAgLy8gY29weSBvdmVyIHBhc3N0aHJvdWdoIG1ldGhvZHMKKyAgICBQQVNT
VEhST1VHSFMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHRoaXNbbmFtZV0gPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBlc2xpbnRbbmFtZV0uYXBwbHkoZXNsaW50
LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0sIHRoaXMpOworCisgICAgLyoqCisgICAg
ICogUGFzc3Rocm91Z2ggdG8gZXNsaW50LnJlcG9ydCgpIHRoYXQgYXV0b21hdGljYWxseSBhc3Np
Z25zIHRoZSBydWxlIElEIGFuZCBzZXZlcml0eS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIEFTVCBub2RlIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFtIHtP
YmplY3Q9fSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisg
ICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGljaCBw
cm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdlCisgICAgICogICAgIHdpdGggc3ltYm9scyBiZWlu
ZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdzIHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKi8KKyAgICB0aGlzLnJlcG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGxvY2F0aW9uLCBt
ZXNzYWdlLCBvcHRzKSB7CisgICAgICAgIGVzbGludC5yZXBvcnQocnVsZUlkLCBzZXZlcml0eSwg
bm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9wdHMpOworICAgIH07CisKK30KKworUnVsZUNvbnRl
eHQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBSdWxlQ29udGV4dAorfTsKKworbW9k
dWxlLmV4cG9ydHMgPSBSdWxlQ29udGV4dDsKKworfSx7fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMgYSBzdG9yYWdl
IGZvciBydWxlcy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBsb2FkUnVsZXMgPSByZXF1aXJlKCIuL2xvYWQtcnVs
ZXMiKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByaXZhdGVzCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2YXIgcnVsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworLyoqCisgKiBSZWdpc3RlcnMgYSBydWxlIG1vZHVsZSBmb3IgcnVsZSBpZCBp
biBzdG9yYWdlLgorICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUp
LgorICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBSdWxlIGhhbmRsZXIuCisgKiBAcmV0
dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSkgewor
ICAgIHJ1bGVzW3J1bGVJZF0gPSBydWxlTW9kdWxlOworfQorCitleHBvcnRzLmRlZmluZSA9IGRl
ZmluZTsKKworLyoqCisgKiBMb2FkcyBhbmQgcmVnaXN0ZXJzIGFsbCBydWxlcyBmcm9tIHBhc3Nl
ZCBydWxlcyBkaXJlY3RvcnkuCisgKiBAcGFyYW0ge1N0cmluZ30gW3J1bGVzRGlyXSBQYXRoIHRv
IHJ1bGVzIGRpcmVjdG9yeSwgbWF5IGJlIHJlbGF0aXZlLiBEZWZhdWx0cyB0byBgbGliL3J1bGVz
YC4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBsb2FkKHJ1bGVzRGlyKSB7Cisg
ICAgdmFyIG5ld1J1bGVzID0gbG9hZFJ1bGVzKHJ1bGVzRGlyKTsKKyAgICBPYmplY3Qua2V5cyhu
ZXdSdWxlcykuZm9yRWFjaChmdW5jdGlvbihydWxlSWQpIHsKKyAgICAgICAgZGVmaW5lKHJ1bGVJ
ZCwgbmV3UnVsZXNbcnVsZUlkXSk7CisgICAgfSk7Cit9CisKK2V4cG9ydHMubG9hZCA9IGxvYWQ7
CisKKy8qKgorICogUmVnaXN0ZXJzIGFsbCBnaXZlbiBydWxlcyBvZiBhIHBsdWdpbi4KKyAqIEBw
YXJhbSB7T2JqZWN0fSBwbHVnaW5SdWxlcyBBIGtleS92YWx1ZSBtYXAgb2YgcnVsZSBkZWZpbml0
aW9ucy4KKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVn
aW4gd2l0aG91dCBwcmVmaXggKGBlc2xpbnQtcGx1Z2luLWApLgorICogQHJldHVybnMge3ZvaWR9
CisgKi8KK2V4cG9ydHMuaW1wb3J0ID0gZnVuY3Rpb24gKHBsdWdpblJ1bGVzLCBwbHVnaW5OYW1l
KSB7CisgICAgT2JqZWN0LmtleXMocGx1Z2luUnVsZXMpLmZvckVhY2goZnVuY3Rpb24gKHJ1bGVJ
ZCkgeworICAgICAgICB2YXIgcXVhbGlmaWVkUnVsZUlkID0gcGx1Z2luTmFtZSArICIvIiArIHJ1
bGVJZCwKKyAgICAgICAgICAgIHJ1bGUgPSBwbHVnaW5SdWxlc1tydWxlSWRdOworCisgICAgICAg
IGRlZmluZShxdWFsaWZpZWRSdWxlSWQsIHJ1bGUpOworICAgIH0pOworfTsKKworLyoqCisgKiBB
Y2Nlc3MgcnVsZSBoYW5kbGVyIGJ5IGlkIChmaWxlIG5hbWUpLgorICogQHBhcmFtIHtTdHJpbmd9
IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUpLgorICogQHJldHVybnMge0Z1bmN0aW9ufSBSdWxl
IGhhbmRsZXIuCisgKi8KK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24ocnVsZUlkKSB7CisgICAgcmV0
dXJuIHJ1bGVzW3J1bGVJZF07Cit9OworCisvKioKKyAqIFJlc2V0IHJ1bGVzIHN0b3JhZ2UuCisg
KiBTaG91bGQgYmUgdXNlZCBvbmx5IGluIHRlc3RzLgorICogQHJldHVybnMge3ZvaWR9CisgKi8K
K2V4cG9ydHMudGVzdENsZWFyID0gZnVuY3Rpb24oKSB7CisgICAgcnVsZXMgPSBPYmplY3QuY3Jl
YXRlKG51bGwpOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxpemF0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBsb2FkcyBidWlsdC1pbiBydWxlcwor
bG9hZCgpOworCit9LHsiLi9sb2FkLXJ1bGVzIjoxMH1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciAi
YmxvY2sgc2NvcGVkIiB2YXJpYWJsZXMgYnkgYmluZGluZyBjb250ZXh0CisgKiBAYXV0aG9yIE1h
dHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisidXNlIHN0cmljdCI7
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgdmFyIHNjb3BlU3RhY2sgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICog
RGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRpb24gcG9zaXRp
b24gb3IgaXMgYSBub24tZGVjbGFyYXRpb24gcmVmZXJlbmNlLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQg
VGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMge0Jvb2xl
YW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBwb3NpdGlvbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uKGlkLCBwYXJlbnQpIHsKKyAgICAg
ICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNs
YXJhdGlvbiI6CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQucGFyYW1zLmluZGV4T2YoaWQpID4gLTEgfHwgaWQgPT09
IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9yIjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2Fz
ZSAiQ2F0Y2hDbGF1c2UiOgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LnBh
cmFtOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhl
ciBhbiBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0aW9uLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJl
bnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMge0Jv
b2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBwcm9wZXJ0eSBwb3NpdGlvbi4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KGlkLCBwYXJlbnQpIHsKKyAgICAgICAg
c3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiTWVtYmVyRXhwcmVzc2lv
biI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQucHJvcGVydHkgJiYgIXBh
cmVudC5jb21wdXRlZDsKKworICAgICAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICAg
ICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmtleTsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBQdXNoZXMgYSBuZXcgc2NvcGUgb2JqZWN0IG9uIHRoZSBzY29wZSBzdGFjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBwdXNoU2NvcGUo
KSB7CisgICAgICAgIHNjb3BlU3RhY2sucHVzaChbXSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogUmVtb3ZlcyB0aGUgdG9wbW9zdCBzY29wZSBvYmplY3QgZnJvbSB0aGUgc2NvcGUgc3RhY2su
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcG9wU2NvcGUo
KSB7CisgICAgICAgIHNjb3BlU3RhY2sucG9wKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
RGVjbGFyZXMgdGhlIGdpdmVuIG5hbWVzIGluIHRoZSB0b3Btb3N0IHNjb3BlIG9iamVjdC4KKyAg
ICAgKiBAcGFyYW0ge1tTdHJpbmddfSBuYW1lcyBBIGxpc3Qgb2YgbmFtZXMgdG8gZGVjbGFyZS4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkZWNsYXJlKG5h
bWVzKSB7CisgICAgICAgIFtdLnB1c2guYXBwbHkoc2NvcGVTdGFja1tzY29wZVN0YWNrLmxlbmd0
aCAtIDFdLCBuYW1lcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBmdW5j
dGlvbkhhbmRsZXIobm9kZSkgeworICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAgICAgZGVjbGFy
ZShub2RlLnBhcmFtcy5tYXAoZnVuY3Rpb24oaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBpZC5u
YW1lOworICAgICAgICB9KSk7CisgICAgICAgIGRlY2xhcmUobm9kZS5pZCA/IFtub2RlLmlkLm5h
bWVdIDogW10pOworICAgICAgICBkZWNsYXJlKFsiYXJndW1lbnRzIl0pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5vZGUpIHsKKyAgICAgICAgZGVj
bGFyZShub2RlLmRlY2xhcmF0aW9ucy5tYXAoZnVuY3Rpb24oZGVjbCkgeworICAgICAgICAgICAg
cmV0dXJuIGRlY2wuaWQubmFtZTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAgIHJldHVybiB7
CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzY29wZVN0YWNr
ID0gW2NvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXMubWFwKGZ1bmN0aW9uKHYpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdi5uYW1lOworICAgICAgICAgICAgfSldOworICAgICAgICB9LAor
CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5OworICAgICAgICAgICAgcHVzaFNjb3BlKCk7Cisg
ICAgICAgICAgICBzdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oc3RtdCkgeworICAgICAgICAg
ICAgICAgIGlmIChzdG10LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihzdG10KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0bXQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSB7
CisgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUoW3N0bXQuaWQubmFtZV0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJCbG9ja1N0
YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAgICAgICBkZWNsYXJl
KFtub2RlLnBhcmFtLm5hbWVdKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkNhdGNoQ2xhdXNlOmV4
aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9u
SGFuZGxlciwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IHBvcFNjb3BlLAor
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbkhhbmRsZXIsCisgICAgICAg
ICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLmluaXQgJiYgbm9kZS5pbml0LnR5cGUgPT09ICJWYXJpYWJsZURlY2xh
cmF0aW9uIikgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5v
ZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1l
bnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICAgICAgaWYgKG5vZGUu
bGVmdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICB2
YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlLmxlZnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAg
ICAgICJJZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2Vz
dG9yID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgICAgIGlmIChpc0Rl
Y2xhcmF0aW9uKG5vZGUsIGFuY2VzdG9yKSB8fCBpc1Byb3BlcnR5KG5vZGUsIGFuY2VzdG9yKSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gc2NvcGVTdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2NvcGVTdGFja1tpXS5pbmRleE9mKG5vZGUubmFtZSkgPiAtMSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiXCIiICsgbm9kZS5uYW1l
ICsgIlwiIHVzZWQgb3V0c2lkZSBvZiBiaW5kaW5nIGNvbnRleHQuIik7CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrIHN0YXRlbWVudHMgdGhh
dCBkbyBub3QgdXNlIHRoZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZQorICogQGF1dGhvciBJYW4gQ2hy
aXN0aWFuIE15ZXJzCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICB2YXIgc3R5bGUgPSBjb250ZXh0
Lm9wdGlvbnNbMF0gfHwgIjF0YnMiOworICAgIHZhciBwYXJhbXMgPSBjb250ZXh0Lm9wdGlvbnNb
MV0gfHwge307CisKKyAgICB2YXIgT1BFTl9NRVNTQUdFID0gIk9wZW5pbmcgY3VybHkgYnJhY2Ug
ZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgY29udHJvbGxpbmcgc3RhdGVtZW50
LiIsCisgICAgICAgIEJPRFlfTUVTU0FHRSA9ICJTdGF0ZW1lbnQgaW5zaWRlIG9mIGN1cmx5IGJy
YWNlcyBzaG91bGQgYmUgb24gbmV4dCBsaW5lLiIsCisgICAgICAgIENMT1NFX01FU1NBR0UgPSAi
Q2xvc2luZyBjdXJseSBicmFjZSBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyB0
aGUgc3Vic2VxdWVudCBibG9jay4iLAorICAgICAgICBDTE9TRV9NRVNTQUdFX1NJTkdMRSA9ICJD
bG9zaW5nIGN1cmx5IGJyYWNlIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIG9wZW5pbmcg
Y3VybHkgYnJhY2Ugb3Igb24gdGhlIGxpbmUgYWZ0ZXIgdGhlIHByZXZpb3VzIGJsb2NrLiIsCisg
ICAgICAgIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCA9ICJDbG9zaW5nIGN1cmx5IGJyYWNlIGFw
cGVhcnMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgc3Vic2VxdWVudCBibG9jay4iOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBhIGZ1
bmN0aW9uIHRoYXQgdmVyaWZpZXMgdGhhdCB0aGUgb3BlbmluZworICAgICAqIGN1cmx5IGJyYWNl
IGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIGNvbnRyb2xsaW5nIHN0YXRlbWVudCBvZiBhIGdp
dmVuCisgICAgICogbm9kZS4KKyAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gVGhlIHByb3BlcnRp
ZXMgdG8gY2hlY2sgb24gdGhlIG5vZGUuCisgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1
bmN0aW9uIHRoYXQgd2lsbCBwZXJmb3JtIHRoZSBjaGVjayBvbiBhIG5vZGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBjaGVja0Jsb2NrKCkgeworICAgICAgICB2YXIgYmxvY2tQcm9wZXJ0aWVzID0g
YXJndW1lbnRzOworICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
W10uZm9yRWFjaC5jYWxsKGJsb2NrUHJvcGVydGllcywgZnVuY3Rpb24oYmxvY2tQcm9wKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbm9kZVtibG9ja1Byb3BdLCBwcmV2aW91c1Rva2Vu
LCBjdXJseVRva2VuLCBjdXJseVRva2VuRW5kLCBjdXJseVRva2Vuc09uU2FtZUxpbmU7CisgICAg
ICAgICAgICAgICAgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF07CisgICAgICAgICAgICAgICAgaWYg
KGJsb2NrICYmIGJsb2NrLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoYmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbkVuZCA9IGNvbnRleHQuZ2V0TGFz
dFRva2VuKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbnNPblNhbWVMaW5l
ID0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQu
bGluZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Muc3RhcnQu
bGluZSAhPT0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChibG9jay5ib2R5Lmxlbmd0aCAmJiBwYXJhbXMuYWxsb3dTaW5nbGVM
aW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VybHlUb2tlbi5sb2Muc3RhcnQu
bGluZSA9PT0gYmxvY2suYm9keVswXS5sb2Muc3RhcnQubGluZSAmJiAhY3VybHlUb2tlbnNPblNh
bWVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoYmxv
Y2suYm9keVswXSwgQk9EWV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9keVtibG9jay5i
b2R5Lmxlbmd0aCAtIDFdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vuc09uU2FtZUxpbmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChibG9jay5ib2R5
W2Jsb2NrLmJvZHkubGVuZ3RoIC0gMV0sIENMT1NFX01FU1NBR0VfU0lOR0xFKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChibG9jay5i
b2R5Lmxlbmd0aCAmJiBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09PSBibG9jay5ib2R5WzBd
LmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChibG9jay5ib2R5WzBdLCBCT0RZX01FU1NBR0UpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgfQorCisg
ICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gSWZT
dGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEFuIElmU3RhdGVtZW50IG5v
ZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tJ
ZlN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0b2tlbnM7CisKKyAgICAgICAgY2hlY2tC
bG9jaygiY29uc2VxdWVudCIsICJhbHRlcm5hdGUiKShub2RlKTsKKworICAgICAgICBpZiAobm9k
ZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50Iikg
eworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5hbHRl
cm5hdGUsIDIpOworICAgICAgICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0
YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5hbHRl
cm5hdGUsIENMT1NFX01FU1NBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgeworICAgICAgICAgICAgICAgIGlmICh0
b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmFsdGVybmF0ZSwgQ0xPU0Vf
TUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJl
ZCBicmFjZSBzdHlsZSBvbiBUcnlTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIEEgVHJ5U3RhdGVtZW50IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICov
CisgICAgZnVuY3Rpb24gY2hlY2tUcnlTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9r
ZW5zOworCisgICAgICAgIGNoZWNrQmxvY2soImJsb2NrIiwgImZpbmFsaXplciIpKG5vZGUpOwor
CisgICAgICAgIGlmIChub2RlLmZpbmFsaXplciAmJiBub2RlLmZpbmFsaXplci50eXBlID09PSAi
QmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vu
c0JlZm9yZShub2RlLmZpbmFsaXplciwgMik7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT09ICIx
dGJzIikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09
IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3RydXAiKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW5zWzFdLmxv
Yy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUu
ZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVuZm9y
Y2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIENhdGNoQ2xhdXNlcworICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBBIENhdGNoQ2xhdXNlIG5vZGUuCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tDYXRjaENsYXVzZShub2RlKSB7Cisg
ICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwK
KyAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZSk7CisK
KyAgICAgICAgY2hlY2tCbG9jaygiYm9keSIpKG5vZGUpOworCisgICAgICAgIGlmIChub2RlLmJv
ZHkgJiYgbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
IGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9r
ZW4ubG9jLnN0YXJ0LmxpbmUgIT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3Ry
dXAiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9jLnN0YXJ0LmxpbmUg
PT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBTd2l0Y2hTdGF0ZW1lbnRz
CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgU3dpdGNoU3RhdGVtZW50IG5vZGUuCisg
ICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tTd2l0Y2hT
dGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICBpZiAobm9kZS5j
YXNlcyAmJiBub2RlLmNhc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4
dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5jYXNlc1swXSwgMik7CisgICAgICAgICAgICBpZiAodG9r
ZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5n
ZXRMYXN0VG9rZW5zKG5vZGUsIDMpOworICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3Rh
cnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJ
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJJZlN0YXRlbWVudCI6IGNo
ZWNrSWZTdGF0ZW1lbnQsCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBjaGVja1RyeVN0YXRlbWVu
dCwKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogY2hlY2tDYXRjaENsYXVzZSwKKyAgICAgICAgIkRv
V2hpbGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBjaGVj
a0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5
IiksCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAg
ICAgIlN3aXRjaFN0YXRlbWVudCI6IGNoZWNrU3dpdGNoU3RhdGVtZW50CisgICAgfTsKKworfTsK
KworfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tY2FtZWxjYXNlZCBpZGVudGlmaWVycworICog
QGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgY29udGFpbnMgYW4gdW5k
ZXJzY29yZSBhbmQgaXNuJ3QgYWxsIHVwcGVyLWNhc2UKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30g
bmFtZSBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiB0
aGUgc3RyaW5nIGlzIHVuZGVyc2NvcmVkCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBpc1VuZGVyc2NvcmVkKG5hbWUpIHsKKworICAgICAgICAvLyBpZiB0aGVyZSdzIGFu
IHVuZGVyc2NvcmUsIGl0IG1pZ2h0IGJlIEFfQ09OU1RBTlQsIHdoaWNoIGlzIG9rYXkKKyAgICAg
ICAgcmV0dXJuIG5hbWUuaW5kZXhPZigiXyIpID4gLTEgJiYgbmFtZSAhPT0gbmFtZS50b1VwcGVy
Q2FzZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydHMgYW4gQVNUIG5vZGUgYXMg
YSBydWxlIHZpb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUg
dG8gcmVwb3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAg
ICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIklkZW50aWZpZXIgJ3t7bmFtZX19JyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLCB7IG5h
bWU6IG5vZGUubmFtZSB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJJZGVu
dGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBMZWFkaW5nIGFuZCB0
cmFpbGluZyB1bmRlcnNjb3JlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBmbGFnIHByaXZhdGUvcHJv
dGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpcCB0aGVtCisgICAgICAgICAgICB2YXIgbmFtZSA9IG5v
ZGUubmFtZS5yZXBsYWNlKC9eXyt8XyskL2csICIiKSwKKyAgICAgICAgICAgICAgICBlZmZlY3Rp
dmVQYXJlbnQgPSAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSA/IG5v
ZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50OworCisgICAgICAgICAgICAvLyBNZW1iZXJF
eHByZXNzaW9ucyBnZXQgc3BlY2lhbCBydWxlcworICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50
LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworCisgICAgICAgICAgICAgICAgLy8gQWx3
YXlzIHJlcG9ydCB1bmRlcnNjb3JlZCBvYmplY3QgbmFtZXMKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5wYXJlbnQub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS5wYXJlbnQub2JqZWN0Lm5hbWUgPT09IG5vZGUubmFtZSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNVbmRlcnNjb3JlZChuYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXBvcnQobm9kZSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZXBvcnQgQXNzaWdu
bWVudEV4cHJlc3Npb25zIG9ubHkgaWYgdGhleSBhcmUgdGhlIGxlZnQgc2lkZSBvZiB0aGUgYXNz
aWdubWVudAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWZmZWN0aXZlUGFyZW50LnR5cGUg
PT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
VW5kZXJzY29yZWQobmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChlZmZlY3RpdmVQ
YXJlbnQucmlnaHQudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVmdC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lv
biIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnByb3Bl
cnR5Lm5hbWUgPT09IG5vZGUubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVwb3J0IGFueXRoaW5n
IHRoYXQgaXMgdW5kZXJzY29yZWQgdGhhdCBpc24ndCBhIENhbGxFeHByZXNzaW9uCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzVW5kZXJzY29yZWQobmFtZSkgJiYgZWZmZWN0aXZlUGFyZW50LnR5
cGUgIT09ICJDYWxsRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQ29t
bWEgc3BhY2luZyAtIHZhbGlkYXRlcyBzcGFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgY29tbWEKKyAq
IEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNvcHlyaWdodCAy
MDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGJlZm9yZTogY29udGV4dC5vcHRpb25zWzBd
ID8gISFjb250ZXh0Lm9wdGlvbnNbMF0uYmVmb3JlIDogZmFsc2UsCisgICAgICAgIGFmdGVyOiBj
b250ZXh0Lm9wdGlvbnNbMF0gPyAhIWNvbnRleHQub3B0aW9uc1swXS5hZnRlciA6IHRydWUKKyAg
ICB9OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdv
IGFkamFjZW50IHRva2VucyBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRv
a2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAg
ICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFJ1biByZXBvcnQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBtc2cgVGhlIGVycm9yIG1zZyB0byBzaG93LgorICAgICAqIEBwcml2YXRlCisgICAgICogQHJl
dHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUsIG1zZykgewor
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBtc2cpOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIFNob3cgc3BhY2UgcmVxdWlyZWQgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
ZGlyIFRoZSBsb2NhdGlvbiBvZiBzcGFjaW5nLgorICAgICAqIEBwcml2YXRlCisgICAgICogQHJl
dHVybnMge3N0cmluZ30gVGhlIHNwYWNpbmcgZXJyb3IgbXNnLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGdldFNwYWNlUmVxTXNnKGRpcikgeworICAgICAgICByZXR1cm4gIkEgc3BhY2UgaXMgcmVx
dWlyZWQgIiArIGRpciArICIgJywnLiI7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hvdyBu
byBzcGFjZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgVGhlIGxvY2F0aW9u
IG9mIHNwYWNpbmcKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRo
ZSBzcGFjaW5nIGVycm9yIG1zZy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXROb1NwYWNlTXNn
KGRpcikgeworICAgICAgICByZXR1cm4gIlRoZXJlIHNob3VsZCBiZSBubyBzcGFjZSAiICsgZGly
ICsgIiAnLCcuIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZXMgdGhlIHNwYWNp
bmcgYmVmb3JlIGFuZCBhZnRlciBjb21tYXMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2YgdGhlIG5vZGUuCisgICAgICogQHByaXZhdGUK
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZUNv
bW1hU3BhY2luZyhub2RlLCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMgPSBub2RlW3By
b3BlcnR5XTsKKworICAgICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMSkgeworICAg
ICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAg
ICAgICAgIHZhciB0b2tlbkJlZm9yZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisg
ICAgICAgICAgICAgICAgICAgIGl0ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdLAorICAgICAg
ICAgICAgICAgICAgICB0b2tlbkVuZExpbmU7CisKKyAgICAgICAgICAgICAgICBpZiAodG9rZW5C
ZWZvcmUgJiYgdG9rZW5CZWZvcmUudmFsdWUgPT09ICIsIikgeworICAgICAgICAgICAgICAgICAg
ICB0b2tlbkVuZExpbmUgPSB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmU7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2luZ2xlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuRW5k
TGluZSA9PT0gaXRlbUJlZm9yZS5sb2MuZW5kLmxpbmUgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRva2VuRW5kTGluZSA9PT0gaXRlbS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICYmIG9wdGlvbnMuYWZ0ZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVm
b3JlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0
U3BhY2VSZXFNc2coImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRl
bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNw
YWNlUmVxTXNnKCJhZnRlciIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYmVmb3JlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9y
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNw
YWNlUmVxTXNnKCJiZWZvcmUiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRlbSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3Bh
Y2VNc2coImFmdGVyIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hZnRlcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0pKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFjZVJlcU1zZygi
YWZ0ZXIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3BhY2VNc2co
ImJlZm9yZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Nw
YWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldE5vU3BhY2VNc2coImJlZm9yZSIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
U3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYWZ0ZXIiKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFy
YXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2lu
Zyhub2RlLCAiZGVjbGFyYXRpb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJPYmplY3RFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNp
bmcobm9kZSwgInByb3BlcnRpZXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkFycmF5RXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5n
KG5vZGUsICJlbGVtZW50cyIpOworICAgICAgICB9LAorICAgICAgICAiU2VxdWVuY2VFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmco
bm9kZSwgImV4cHJlc3Npb25zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2lu
Zyhub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmco
bm9kZSwgInBhcmFtcyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTc6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IENv
bW1hIHN0eWxlIC0gZW5mb3JjZXMgY29tbWEgc3R5bGVzIG9mIHR3byB0eXBlczogbGFzdCBhbmQg
Zmlyc3QKKyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuCisgKiBAY29w
eXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAi
bGFzdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgY29tbWEgcGxh
Y2VtZW50IHdpdGggcmVnYXJkcyB0byBhIGRlY2xhcmF0aW9uL3Byb3BlcnR5L2VsZW1lbnQKKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8g
Y2hlY2sKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbWEobm9kZSkgeworICAgICAgICB2YXIgaXRlbXMgPSBu
b2RlLmRlY2xhcmF0aW9ucyB8fCBub2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVtZW50czsKKwor
ICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaXRlbXMuZm9yRWFj
aChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB0b2tlbkJlZm9y
ZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisgICAgICAgICAgICAgICAgICAgIGl0
ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdOworCisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
QmVmb3JlLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2luZ2xl
IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9
PT0gaXRlbS5sb2Muc3RhcnQubGluZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5C
ZWZvcmUubG9jLmVuZC5saW5lID09PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIC8vIGxvbmUgY29tbWEKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVtLmxvYy5zdGFydC5saW5lICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgIT09IGl0ZW1CZWZv
cmUubG9jLmVuZC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChpdGVtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdG9rZW5CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdG9rZW5C
ZWZvcmUubG9jLnN0YXJ0LmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIkJhZCBs
aW5lIGJyZWFraW5nIGJlZm9yZSBhbmQgYWZ0ZXIgJywnLiIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAiZmlyc3QiICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2Muc3RhcnQubGluZSAhPT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgIicsJyBzaG91bGQgYmUgcGxhY2VkIGZpcnN0LiIpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAibGFzdCIgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9PT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGl0ZW1CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlbUJl
Zm9yZS5sb2MuZW5kLmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIicsJyBzaG91
bGQgYmUgcGxhY2VkIGxhc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IHZhbGlkYXRlQ29tbWEs
CisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogdmFsaWRhdGVDb21tYSwKKyAgICAgICAgIkFy
cmF5RXhwcmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSwxODpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
Q291bnRzIHRoZSBjeWNsb21hdGljIGNvbXBsZXhpdHkgb2YgZWFjaCBmdW5jdGlvbiBvZiB0aGUg
c2NyaXB0LiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWNsb21hdGljX2NvbXBs
ZXhpdHkuCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBpZiwgY29uZGl0aW9uYWwsIGZvciwgd2hp
bHRlLCB0cnksIHN3aXRjaC9jYXNlLAorICogQGF1dGhvciBQYXRyaWNrIEJyb3NzZXQKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNb
MF07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFVzaW5nIGEgc3RhY2sgdG8gc3RvcmUgY29tcGxleGl0
eSAoaGFuZGxpbmcgbmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107CisKKyAgICAv
LyBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBmdW5jdGlvbiBz
dGFjaworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZucy5wdXNoKDEp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFy
IGNvbXBsZXhpdHkgPSBmbnMucG9wKCksIG5hbWUgPSAiYW5vbnltb3VzIjsKKworICAgICAgICBp
ZiAobm9kZS5pZCkgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUuaWQubmFtZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29tcGxleGl0eSA+IFRIUkVTSE9MRCkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkZ1bmN0aW9uICd7e25hbWV9fScgaGFzIGEgY29tcGxleGl0eSBv
ZiB7e2NvbXBsZXhpdHl9fS4iLCB7IG5hbWU6IG5hbWUsIGNvbXBsZXhpdHk6IGNvbXBsZXhpdHkg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFzZUNvbXBsZXhpdHko
KSB7CisgICAgICAgIGlmIChmbnMubGVuZ3RoKSB7CisgICAgICAgICAgICBmbnNbZm5zLmxlbmd0
aCAtIDFdICsrOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5KG5vZGUpIHsKKyAgICAgICAgLy8gQXZvaWRpbmcgYGRlZmF1bHRgCisgICAg
ICAgIGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgIGluY3JlYXNlQ29tcGxleGl0eShub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNlTG9naWNhbENvbXBs
ZXhpdHkobm9kZSkgeworICAgICAgICAvLyBBdm9pZGluZyAmJgorICAgICAgICBpZiAobm9kZS5v
cGVyYXRvciA9PT0gInx8IikgeworICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5KG5vZGUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
bjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6
IGVuZEZ1bmN0aW9uLAorCisgICAgICAgICJDYXRjaENsYXVzZSI6IGluY3JlYXNlQ29tcGxleGl0
eSwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGluY3JlYXNlQ29tcGxleGl0eSwK
KyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogaW5jcmVhc2VMb2dpY2FsQ29tcGxleGl0eSwK
KyAgICAgICAgIkZvclN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAgICAgICAgIkZv
ckluU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAgICAiSWZTdGF0ZW1lbnQi
OiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAgICJTd2l0Y2hDYXNlIjogaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5LAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhp
dHksCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5CisgICAg
fTsKKworfTsKKworfSx7fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb25zaXN0ZW50IHJldHVybiB2YWx1
ZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IHZhciBmdW5jdGlvbnMgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBI
ZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gZW50ZXJGdW5j
dGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnB1c2goe30pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGV4aXRGdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnBvcCgpOworICAgIH0KKwor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBlbnRlckZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZW50ZXJGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRGdW5jdGlvbiwK
KyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZXhpdEZ1bmN0aW9uLAorCisgICAg
ICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZh
ciByZXR1cm5JbmZvID0gZnVuY3Rpb25zW2Z1bmN0aW9ucy5sZW5ndGggLSAxXSwKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlRGVmaW5lZCA9ICJ0eXBlIiBpbiByZXR1cm5JbmZvOworCisgICAg
ICAgICAgICBpZiAocmV0dXJuVHlwZURlZmluZWQpIHsKKworICAgICAgICAgICAgICAgIGlmIChy
ZXR1cm5JbmZvLnR5cGUgIT09ICEhbm9kZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgIiArIChyZXR1cm5JbmZvLnR5cGUgPyAi
YSIgOiAibm8iKSArICIgcmV0dXJuIHZhbHVlLiIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm5JbmZvLnR5cGUgPSAhIW5v
ZGUuYXJndW1lbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisK
K30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgY29uc2lzdGVudCBuYW1pbmcgb2YgInRoaXMiIGNv
bnRleHQgdmFyaWFibGVzCisgKiBAYXV0aG9yIFJhcGhhZWwgUGlndWxsYQorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbGlhcyA9IGNvbnRleHQub3B0aW9uc1sw
XTsKKworICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihkZWNs
YXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZC5uYW1lID09PSBh
bGlhcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIShkZWNsYXJhdGlvbi5pbml0ICYmIGRl
Y2xhcmF0aW9uLmluaXQudHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIikpIHsKKworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAiRGVzaWduYXRlZCAndGhpcycgYWxpYXMgJ3t7YWxp
YXN9fScgaXMgbm90IGFzc2lnbmVkICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
byB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgeyBhbGlhczogZGVjbGFyYXRpb24uaWQubmFtZSB9CisgICAgICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlu
aXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmluaXQudHlwZSA9PT0g
IlRoaXNFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24u
aWQubmFtZSAhPT0gYWxpYXMpIHsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiVW5leHBlY3RlZCBhbGlhcyAne3thbGlhc319JyBmb3IgJ3RoaXMnLiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB7IGFsaWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVtZW50cyB3aXRo
b3V0IGN1cmx5IGJyYWNlcworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIG11bHRpT25seSA9IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJt
dWx0aSIpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIGJvZHkgb2Yg
YSBub2RlIHRvIHNlZSBpZiBpdCdzIGEgYmxvY2sgc3RhdGVtZW50LiBEZXBlbmRpbmcgb24KKyAg
ICAgKiB0aGUgcnVsZSBvcHRpb25zLCByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBwcm9ibGVtcy4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVwb3J0IGlmIHRoZXJl
J3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYm9keSBub2Rl
IHRvIGNoZWNrIGZvciBibG9ja3MuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5h
bWUgdG8gcmVwb3J0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzdWZmaXggQWRkaXRpb25hbCBzdHJpbmcgdG8gYWRkIHRvIHRoZSBlbmQgb2YgYSByZXBvcnQu
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tCb2R5
KG5vZGUsIGJvZHksIG5hbWUsIHN1ZmZpeCkgeworICAgICAgICB2YXIgaGFzQmxvY2sgPSAoYm9k
eS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKTsKKworICAgICAgICBpZiAobXVsdGlPbmx5KSB7
CisgICAgICAgICAgICBpZiAoaGFzQmxvY2sgJiYgYm9keS5ib2R5Lmxlbmd0aCA9PT0gMSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2FyeSB7IGFmdGVy
ICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWZm
aXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAiIikKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoIWhhc0Jsb2NrKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkV4cGVjdGVkIHsgYWZ0ZXIgJ3t7bmFtZX19J3t7c3VmZml4fX0uIiwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogKHN1ZmZpeCA/ICIgIiArIHN1ZmZpeCA6ICIiKQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJJ
ZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgY2hlY2tCb2R5KG5v
ZGUsIG5vZGUuY29uc2VxdWVudCwgImlmIiwgImNvbmRpdGlvbiIpOworCisgICAgICAgICAgICBp
ZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3RhdGVtZW50
IikgeworICAgICAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmFsdGVybmF0ZSwgImVs
c2UiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2Rl
LmJvZHksICJ3aGlsZSIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRG9X
aGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBjaGVja0JvZHko
bm9kZSwgbm9kZS5ib2R5LCAiZG8iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRm9yU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUu
Ym9keSwgImZvciIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyByZXF1aXJlIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2ggc3RhdGVtZW50cworICogQGF1
dGhvciBBbGlha3NlaSBTaHl0a2luCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENPTU1FTlRf
VkFMVUUgPSAibm8gZGVmYXVsdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhl
bHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1
dCB0byBnZXQgbGFzdCBlbGVtZW50IG9mIGFycmF5CisgICAgICogQHBhcmFtICB7KltdfSBjb2xs
ZWN0aW9uIEFycmF5CisgICAgICogQHJldHVybnMgeyp9IExhc3QgZWxlbWVudAorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGxhc3QoY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4gY29sbGVjdGlv
bltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIGlmICghbm9kZS5jYXNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lw
IGNoZWNrIG9mIGVtcHR5IHN3aXRjaCBiZWNhdXNlIHRoZXJlIGlzIG5vIGVhc3kgd2F5CisgICAg
ICAgICAgICAgICAgLy8gdG8gZXh0cmFjdCBjb21tZW50cyBpbnNpZGUgaXQgbm93CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgaGFzRGVm
YXVsdCA9IG5vZGUuY2FzZXMuc29tZShmdW5jdGlvbih2KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHYudGVzdCA9PT0gbnVsbDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAo
IWhhc0RlZmF1bHQpIHsKKworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworICAgICAgICAg
ICAgICAgIHZhciBjb21tZW50czsKKworICAgICAgICAgICAgICAgIHZhciBsYXN0Q2FzZSA9IGxh
c3Qobm9kZS5jYXNlcyk7CisgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGxhc3RDYXNlKS50cmFpbGluZzsKKworICAgICAgICAgICAgICAgIGlmIChjb21tZW50
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3QoY29tbWVudHMp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghY29tbWVudCB8fCBj
b21tZW50LnZhbHVlLnRyaW0oKSAhPT0gQ09NTUVOVF9WQUxVRSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBkZWZhdWx0IGNhc2UuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisK
K30se31dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIHdhcm4gYWJvdXQgdXNpbmcgZG90IG5vdGF0aW9uIGluc3RlYWQg
b2Ygc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd2hlbiBwb3NzaWJsZS4KKyAqIEBhdXRob3IgSm9z
aCBQZXJlegorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciB2YWxpZElk
ZW50aWZpZXIgPSAvXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQvOwordmFyIGtleXdvcmRzID0g
WworICAgICJ0aGlzIiwKKyAgICAiZnVuY3Rpb24iLAorICAgICJpZiIsCisgICAgInJldHVybiIs
CisgICAgInZhciIsCisgICAgImVsc2UiLAorICAgICJmb3IiLAorICAgICJuZXciLAorICAgICJh
cmd1bWVudHMiLAorICAgICJpbiIsCisgICAgInR5cGVvZiIsCisgICAgIndoaWxlIiwKKyAgICAi
Y2FzZSIsCisgICAgImJyZWFrIiwKKyAgICAidHJ5IiwKKyAgICAiY2F0Y2giLAorICAgICJkZWxl
dGUiLAorICAgICJ0aHJvdyIsCisgICAgInN3aXRjaCIsCisgICAgImNvbnRpbnVlIiwKKyAgICAi
ZGVmYXVsdCIsCisgICAgImluc3RhbmNlb2YiLAorICAgICJkbyIsCisgICAgInZvaWQiLAorICAg
ICJmaW5hbGx5IiwKKyAgICAid2l0aCIsCisgICAgImRlYnVnZ2VyIiwKKyAgICAiZXZhbCIsCisg
ICAgImltcGxlbWVudHMiLAorICAgICJpbnRlcmZhY2UiLAorICAgICJwYWNrYWdlIiwKKyAgICAi
cHJpdmF0ZSIsCisgICAgInByb3RlY3RlZCIsCisgICAgInB1YmxpYyIsCisgICAgInN0YXRpYyIs
CisgICAgInlpZWxkIiwKKyAgICAibGV0IiwKKyAgICAiY2xhc3MiLAorICAgICJlbnVtIiwKKyAg
ICAiZXhwb3J0IiwKKyAgICAiZXh0ZW5kcyIsCisgICAgImltcG9ydCIsCisgICAgInN1cGVyIiwK
KyAgICAidHJ1ZSIsCisgICAgImZhbHNlIiwKKyAgICAibnVsbCIsCisgICAgImFic3RyYWN0IiwK
KyAgICAiYm9vbGVhbiIsCisgICAgImJ5dGUiLAorICAgICJjaGFyIiwKKyAgICAiY29uc3QiLAor
ICAgICJkb3VibGUiLAorICAgICJmaW5hbCIsCisgICAgImZsb2F0IiwKKyAgICAiZ290byIsCisg
ICAgImludCIsCisgICAgImxvbmciLAorICAgICJuYXRpdmUiLAorICAgICJzaG9ydCIsCisgICAg
InN5bmNocm9uaXplZCIsCisgICAgInRocm93cyIsCisgICAgInRyYW5zaWVudCIsCisgICAgInZv
bGF0aWxlIgorXTsKKworZnVuY3Rpb24gY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlvbihub2RlKSB7
CisgICAgcmV0dXJuIG5vZGUuY29tcHV0ZWQgPT09IHRydWUgJiYKKyAgICAgICAgbm9kZS5wcm9w
ZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgdmFsaWRJZGVudGlmaWVyLnRlc3Qo
bm9kZS5wcm9wZXJ0eS52YWx1ZSkgJiYKKyAgICAgICAga2V5d29yZHMuaW5kZXhPZigiIiArIG5v
ZGUucHJvcGVydHkudmFsdWUpID09PSAtMTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlv
bihub2RlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJbJyIgKyBu
b2RlLnByb3BlcnR5LnZhbHVlICsgIiddIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlv
bi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwyNDpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UmVxdWlyZSBmaWxlIHRvIGVuZCB3aXRoIHNpbmdsZSBuZXdsaW5lLgorICogQGF1dGhvciBOb2Rl
Y2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hl
Y2tCYWRFT0Yobm9kZSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBzb3VyY2UgY29k
ZSwgbm90IGZvciBub2RlIG9ubHkuCisgICAgICAgICAgICB2YXIgc3JjID0gY29udGV4dC5nZXRT
b3VyY2UoKSwgbG9jYXRpb24gPSB7Y29sdW1uOiAxfTsKKworICAgICAgICAgICAgaWYgKHNyYy5s
ZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChzcmNbc3JjLmxlbmd0aCAtIDFdICE9PSAiXG4iKSB7CisgICAgICAg
ICAgICAgICAgLy8gZmlsZSBpcyBub3QgbmV3bGluZS10ZXJtaW5hdGVkCisgICAgICAgICAgICAg
ICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZykubGVuZ3RoOworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiTmV3bGluZSByZXF1aXJlZCBhdCBl
bmQgb2YgZmlsZSBidXQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmICgvXG5c
cypcbiQvLnRlc3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgbGluZSBpcyBlbXB0
eQorICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBzcmMuc3BsaXQoL1xuL2cpLmxlbmd0
aCAtIDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24sICJV
bmV4cGVjdGVkIGJsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGUuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDI1OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVt
ZW50cyB0aGF0IHVzZSAhPSBhbmQgPT0gaW5zdGVhZCBvZiAhPT0gYW5kID09PQorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIGVpdGhlciBvcGVyYW5kIG9mIGEgYmluYXJ5IGV4cHJlc3Npb24gaXMg
YSB0eXBlb2Ygb3BlcmF0aW9uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9uZSBvZiB0aGUgb3BlcmFu
ZHMgaXMgdHlwZW9mCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1R5
cGVPZihub2RlKSB7CisgICAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJpZ2h0XS5zb21l
KGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJVbmFy
eUV4cHJlc3Npb24iICYmIG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgb3BlcmFuZHMgYXJlIGxpdGVyYWxz
IG9mIHRoZSBzYW1lIHR5cGUgKHZpYSB0eXBlb2YpCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBvZiBzYW1lIHR5cGUKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIGFyZUxpdGVyYWxzQW5kU2FtZVR5cGUobm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5s
ZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAm
JgorICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxlZnQudmFsdWUgPT09IHR5cGVvZiBub2Rl
LnJpZ2h0LnZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBvbmUgb2Yg
dGhlIG9wZXJhbmRzIGlzIGEgbGl0ZXJhbCBudWxsCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBudWxsCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc051
bGxDaGVjayhub2RlKSB7CisgICAgICAgIHJldHVybiAobm9kZS5yaWdodC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgbm9kZS5yaWdodC52YWx1ZSA9PT0gbnVsbCkgfHwKKyAgICAgICAgICAgICAgICAo
bm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQudmFsdWUgPT09IG51bGwp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIChsaW5lIGFuZCBj
b2x1bW4pIG9mIHRoZSBiaW5hcnkgZXhwcmVzc2lvbidzIG9wZXJhdG9yCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrCisgICAg
ICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBmaW5kCisgICAgICog
QHJldHVybnMge09iamVjdH0geyBsaW5lLCBjb2x1bW4gfSBsb2NhdGlvbiBvZiBvcGVyYXRvcgor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0T3BlcmF0b3JMb2NhdGlv
bihub2RlKSB7CisgICAgICAgIHZhciBvcFRva2VuID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSlb
Y29udGV4dC5nZXRUb2tlbnMobm9kZS5sZWZ0KS5sZW5ndGhdOworICAgICAgICByZXR1cm4ge2xp
bmU6IG9wVG9rZW4ubG9jLnN0YXJ0LmxpbmUsIGNvbHVtbjogb3BUb2tlbi5sb2Muc3RhcnQuY29s
dW1ufTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yICE9PSAiPT0i
ICYmIG5vZGUub3BlcmF0b3IgIT09ICIhPSIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJz
bWFydCIgJiYgKGlzVHlwZU9mKG5vZGUpIHx8CisgICAgICAgICAgICAgICAgICAgIGFyZUxpdGVy
YWxzQW5kU2FtZVR5cGUobm9kZSkpIHx8IGlzTnVsbENoZWNrKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC5v
cHRpb25zWzBdID09PSAiYWxsb3ctbnVsbCIgJiYgaXNOdWxsQ2hlY2sobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KAorICAgICAgICAgICAgICAgIG5vZGUsIGdldE9wZXJhdG9yTG9jYXRpb24obm9kZSks
CisgICAgICAgICAgICAgICAgIkV4cGVjdGVkICd7e29wfX09JyBhbmQgaW5zdGVhZCBzYXcgJ3t7
b3B9fScuIiwKKyAgICAgICAgICAgICAgICB7b3A6IG5vZGUub3BlcmF0b3J9CisgICAgICAgICAg
ICApOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjY6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gd2FybiB3
aGVuIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KKyAqIEBhdXRo
b3IgS3lsZSBULiBOdW5lcnkKKyAqLworICJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
dmFyIG5hbWUgPSBub2RlLmlkICYmIG5vZGUuaWQubmFtZTsKKworICAgICAgICAgICAgaWYgKCFu
YW1lKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgZnVu
Y3Rpb24gZXhwcmVzc2lvbiBuYW1lLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKK307CisKK30se31dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9u
IHN0eWxlCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0sCisgICAgICAgIGVuZm9yY2VEZWNs
YXJhdGlvbnMgPSAoc3R5bGUgPT09ICJkZWNsYXJhdGlvbiIpOworCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICghZW5mb3JjZURlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCku
cG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbmZvcmNlRGVjbGFyYXRpb25zICYmIHBhcmVudC50
eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KHBhcmVudCwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24uIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyODpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIG9yIHJlcXVpcmUgZ2xvYmFsIHN0cmljdCBtb2RlLgorICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG1vZGUgPSBjb250ZXh0Lm9wdGlv
bnNbMF07CisKKyAgICBpZiAobW9kZSA9PT0gImFsd2F5cyIpIHsKKworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
dGF0ZW1lbnQgPSBub2RlLmJvZHlbMF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoc3Rh
dGVtZW50LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJiBzdGF0ZW1lbnQuZXhwcmVz
c2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZ2xvYmFsIGZvcm0gb2YgXCJ1c2Ugc3RyaWN0
XCIuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICB9IGVsc2UgeyAvLyBtb2RlID0gIm5ldmVyIgorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNl
c3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24udmFs
dWUgPT09ICJ1c2Ugc3RyaWN0IiAmJiBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGZ1bmN0aW9uIGZv
cm0gb2YgXCJ1c2Ugc3RyaWN0XCIuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHt9XSwyOTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGZv
ci1pbiBsb29wcyB3aXRob3V0IGlmIHN0YXRlbWVudHMgaW5zaWRlCisgKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAqIElmIHRoZSBmb3ItaW4gc3RhdGVtZW50IGhhcyB7fSwgdGhlbiB0
aGUgcmVhbCBib2R5IGlzIHRoZSBib2R5CisgICAgICAgICAgICAgKiBvZiB0aGUgQmxvY2tTdGF0
ZW1lbnQuIE90aGVyd2lzZSwganVzdCB1c2UgYm9keSBhcyBwcm92aWRlZC4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgdmFyIGJvZHkgPSBub2RlLmJvZHkudHlwZSA9PT0gIkJsb2NrU3Rh
dGVtZW50IiA/IG5vZGUuYm9keS5ib2R5WzBdIDogbm9kZS5ib2R5OworCisgICAgICAgICAgICBp
ZiAoYm9keSAmJiBib2R5LnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGJvZHkgb2YgYSBmb3ItaW4gc2hvdWxkIGJlIHdy
YXBwZWQgaW4gYW4gaWYgc3RhdGVtZW50IHRvIGZpbHRlciB1bndhbnRlZCBwcm9wZXJ0aWVzIGZy
b20gdGhlIHByb3RvdHlwZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBFbnN1cmUgaGFuZGxpbmcgb2YgZXJyb3JzIHdoZW4gd2Uga25vdyB0
aGV5IGV4aXN0LgorICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb24KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBlcnJvckFyZ3VtZW50ID0gY29udGV4dC5vcHRpb25zWzBdIHx8ICJl
cnIiOworICAgIHZhciBjYWxsYmFja3MgPSBbXTsKKyAgICB2YXIgc2NvcGVzID0gMDsKKworICAg
IC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgc2hvdWxkIGJlIGludGVy
cHJldGVkIGFzIGEgcmVnZXhwIHBhdHRlcm4uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmlu
Z1RvQ2hlY2sgVGhlIHN0cmluZyB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgKiBAcmV0
dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHN0cmluZyBzaG91bGQgYmUgaW50ZXJw
cmV0ZWQgYXMgYSBwYXR0ZXJuLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGF0dGVybihzdHJp
bmdUb0NoZWNrKSB7CisgICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHJpbmdUb0NoZWNrWzBdOwor
ICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09PSAiXiI7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgZXJyb3Ig
YXJndW1lbnQuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgd2hpY2ggc2hv
dWxkIGJlIGNvbXBhcmVkLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5v
dCB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVycm9yIHZhcmlhYmxlIG5h
bWUuCisgICAgICovCisgICAgZnVuY3Rpb24gbWF0Y2hlc0NvbmZpZ3VyZWRFcnJvck5hbWUobmFt
ZSkgeworICAgICAgICBpZiAoaXNQYXR0ZXJuKGVycm9yQXJndW1lbnQpKSB7CisgICAgICAgICAg
ICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChlcnJvckFyZ3VtZW50KTsKKyAgICAgICAgICAgIHJl
dHVybiByZWdleHAudGVzdChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZSA9
PT0gZXJyb3JBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayB0aGUgYXJn
dW1lbnRzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBlcnJvciBvYmpl
Y3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIG5lc3RlZCBzY29wZXMKKyAg
ICAgICAgc2NvcGVzKys7CisKKyAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZpcnN0IGFyZ3VtZW50
IG1hdGNoZXMgb3VyIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgdmFyIGZpcnN0QXJnID0gbm9kZS5w
YXJhbXMgJiYgbm9kZS5wYXJhbXNbMF07CisgICAgICAgIGlmIChmaXJzdEFyZyAmJiBtYXRjaGVz
Q29uZmlndXJlZEVycm9yTmFtZShmaXJzdEFyZy5uYW1lKSkgeworICAgICAgICAgICAgY2FsbGJh
Y2tzLnB1c2goe2hhbmRsZWQ6IGZhbHNlLCBkZXB0aDogc2NvcGVzLCBlcnJvclZhcmlhYmxlTmFt
ZTogZmlyc3RBcmcubmFtZX0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog
QXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNoZWNrIHRvIHNlZSBpZiB0aGUgZXJyb3Igd2FzIGhh
bmRsZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVj
ay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbmRGdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzW2NhbGxiYWNr
cy5sZW5ndGggLSAxXSB8fCB7fTsKKworICAgICAgICAvLyBjaGVjayBpZiBhIGNhbGxiYWNrIGlz
IGVuZGluZywgaWYgc28gcG9wIGl0IG9mZiB0aGUgc3RhY2sKKyAgICAgICAgaWYgKGNhbGxiYWNr
LmRlcHRoID09PSBzY29wZXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5wb3AoKTsKKworICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgd2VyZSBubyBoYW5kbGVkIGVycm9ycyBzaW5jZSB0
aGUgbGFzdCBjYWxsYmFjaworICAgICAgICAgICAgaWYgKCFjYWxsYmFjay5oYW5kbGVkKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGVycm9yIHRvIGJl
IGhhbmRsZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBsZXNz
IG5lc3RlZCBmdW5jdGlvbnMKKyAgICAgICAgc2NvcGVzLS07CisKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgaGFuZGxpbmcgdGhlIGVycm9yIG9iamVjdCBw
cm9wZXJseS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
Rm9yRXJyb3Iobm9kZSkgeworICAgICAgICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxsYmFja3MubGVuZ3RoIC0gMV0g
fHwge307CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbm9kZSdzIG5hbWUgbWF0Y2hl
cyBvdXIgZXJyb3IgYXJndW1lbnQgbmFtZQorICAgICAgICAgICAgdmFyIGlzQWJvdXRFcnJvciA9
IG5vZGUubmFtZSA9PT0gY2FsbGJhY2suZXJyb3JWYXJpYWJsZU5hbWU7CisKKyAgICAgICAgICAg
IC8vIHdlIGRvbid0IGNvbnNpZGVyIHRoZXNlIHVzZSBjYXNlcyBhcyAiaGFuZGxpbmciIHRoZSBl
cnJvcgorICAgICAgICAgICAgdmFyIGRvTm90Q291bnQgPSBbIkZ1bmN0aW9uRGVjbGFyYXRpb24i
LCAiRnVuY3Rpb25FeHByZXNzaW9uIiwgIkNhdGNoQ2xhdXNlIl07CisKKyAgICAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGlzIGlkZW50aWZpZXIgaXNuJ3QgdXNlZCBhcyBwYXJ0IG9mIG9uZSBvZiB0
aGVtCisgICAgICAgICAgICB2YXIgaXNIYW5kbGVkID0gZG9Ob3RDb3VudC5pbmRleE9mKG5vZGUu
cGFyZW50LnR5cGUpID09PSAtMTsKKworICAgICAgICAgICAgaWYgKGlzQWJvdXRFcnJvciAmJiBp
c0hhbmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyByZWNvcmQgdGhhdCB0aGlzIGNhbGxiYWNr
IGhhbmRsZWQgaXRzIGVycm9yCisgICAgICAgICAgICAgICAgY2FsbGJhY2suaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiSWRlbnRpZmllciI6IGNo
ZWNrRm9yRXJyb3IsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAg
ICB9OworCit9OworCit9LHt9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBzcGVjaWZ5IHNwYWNpbmcgb2Ygb2JqZWN0
IGxpdGVyYWwga2V5cyBhbmQgdmFsdWVzCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqIEBj
b3B5cmlnaHQgMjAxNCBCcmFuZG9uIE1pbGxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisi
dXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJzCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEdldHMgYW4gb2JqZWN0IGxpdGVyYWwgcHJv
cGVydHkncyBrZXkgYXMgdGhlIGlkZW50aWZpZXIgbmFtZSBvciBzdHJpbmcgdmFsdWUuCisgKiBA
cGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgd2hvc2Uga2V5IHRvIHJldHJp
ZXZlLgorICogQHJldHVybnMge3N0cmluZ30gVGhlIHByb3BlcnR5J3Mga2V5LgorICovCitmdW5j
dGlvbiBnZXRLZXkocHJvcGVydHkpIHsKKyAgICByZXR1cm4gcHJvcGVydHkua2V5Lm5hbWUgfHwg
cHJvcGVydHkua2V5LnZhbHVlOworfQorCisvKioKKyAqIEdldHMgdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGluIGEga2V5LCBpbmNsdWRpbmcgcXVvdGVzIGFyb3VuZCBzdHJpbmcga2V5cy4KKyAq
IEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgb2Ygb24gb2JqZWN0IGxpdGVyYWwu
CisgKiBAcmV0dXJucyB7aW50fSBXaWR0aCBvZiB0aGUga2V5LCBpbmNsdWRpbmcgc3RyaW5nIHF1
b3RlcyB3aGVyZSBwcmVzZW50LgorICovCitmdW5jdGlvbiBnZXRLZXlXaWR0aChwcm9wZXJ0eSkg
eworICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5rZXk7CisgICAgcmV0dXJuIChrZXkudHlwZSA9PT0g
IklkZW50aWZpZXIiID8ga2V5Lm5hbWUgOiBrZXkucmF3KS5sZW5ndGg7Cit9CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK3ZhciBtZXNzYWdlcyA9IHsKKyAgICBrZXk6ICJ7e2Vycm9yfX0gc3BhY2UgYWZ0ZXIg
a2V5IFwie3trZXl9fVwiLiIsCisgICAgdmFsdWU6ICJ7e2Vycm9yfX0gc3BhY2UgYmVmb3JlIHZh
bHVlIGZvciBrZXkgXCJ7e2tleX19XCIuIgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBPUFRJT05TCisgICAgICogImtleS1zcGFj
aW5nIjogWzIsIHsKKyAgICAgKiAgICAgYmVmb3JlQ29sb246IGZhbHNlLAorICAgICAqICAgICBh
ZnRlckNvbG9uOiB0cnVlLAorICAgICAqICAgICBhbGlnbjogImNvbG9uIiAvLyBPcHRpb25hbCwg
b3IgInZhbHVlIgorICAgICAqIH0KKyAgICAgKi8KKworICAgIHZhciBvcHRpb25zID0gY29udGV4
dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBhbGlnbiA9IG9wdGlvbnMuYWxpZ24sCisgICAg
ICAgIGJlZm9yZUNvbG9uID0gKyEhb3B0aW9ucy5iZWZvcmVDb2xvbiwgLy8gRGVmYXVsdHMgdG8g
ZmFsc2UKKyAgICAgICAgYWZ0ZXJDb2xvbiA9ICshKG9wdGlvbnMuYWZ0ZXJDb2xvbiA9PT0gZmFs
c2UpOyAvLyBEZWZhdWx0cyB0byB0cnVlCisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzcGFj
aW5nIGFyb3VuZCB0aGUgY29sb24gaW4gYW4gb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkKKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IFByb3BlcnR5IG5vZGUgZnJvbSBhbiBvYmplY3Qg
bGl0ZXJhbAorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFNwYWNpbmcgYmVmb3JlIGFuZCBhZnRl
ciB0aGUgcHJvcGVydHkncyBjb2xvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5
U3BhY2luZyhwcm9wZXJ0eSkgeworICAgICAgICB2YXIgd2hpdGVzcGFjZSA9IC9eKFxzKik6KFxz
KikvLmV4ZWMoY29udGV4dC5nZXRTb3VyY2UoKS5zbGljZSgKKyAgICAgICAgICAgIHByb3BlcnR5
LmtleS5yYW5nZVsxXSwgcHJvcGVydHkudmFsdWUucmFuZ2VbMF0KKyAgICAgICAgKSk7CisKKyAg
ICAgICAgaWYgKHdoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgYmVmb3JlQ29sb246IHdoaXRlc3BhY2VbMV0ubGVuZ3RoLAorICAgICAgICAgICAgICAg
IGFmdGVyQ29sb246IHdoaXRlc3BhY2VbMl0ubGVuZ3RoCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0cyBhbiBhcHByb3ByaWF0ZWx5LWZv
cm1hdHRlZCBlcnJvciBpZiBzcGFjaW5nIGlzIGluY29ycmVjdCBvbiBvbmUKKyAgICAgKiBzaWRl
IG9mIHRoZSBjb2xvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHByb3BlcnR5IEtleS12YWx1
ZSBwYWlyIGluIGFuIG9iamVjdCBsaXRlcmFsLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWRl
IFNpZGUgYmVpbmcgdmVyaWZpZWQgLSBlaXRoZXIgImtleSIgb3IgInZhbHVlIi4KKyAgICAgKiBA
cGFyYW0ge2ludH0gZGlmZiBEaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsIGFuZCBleHBlY3RlZCBz
cGFjaW5nLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHJl
cG9ydChwcm9wZXJ0eSwgc2lkZSwgZGlmZikgeworICAgICAgICBpZiAoZGlmZikgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQocHJvcGVydHlbc2lkZV0sIG1lc3NhZ2VzW3NpZGVdLCB7Cisg
ICAgICAgICAgICAgICAgZXJyb3I6IGRpZmYgPiAwID8gIkV4dHJhIiA6ICJNaXNzaW5nIiwKKyAg
ICAgICAgICAgICAgICBrZXk6IGdldEtleShwcm9wZXJ0eSkKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGFsaWduKSB7IC8vIFZlcmlmeSB2ZXJ0aWNhbCBhbGln
bm1lbnQKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgIk9iamVjdEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBub2Rl
LnByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnRpZXMubGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICB3aWR0aHMgPSBwcm9wZXJ0aWVzLm1hcChnZXRLZXlX
aWR0aCksIC8vIFdpZHRoIG9mIGtleXMsIGluY2x1ZGluZyBxdW90ZXMKKyAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0V2lkdGggPSBNYXRoLm1heC5hcHBseShudWxsLCB3aWR0aHMpLAorICAgICAg
ICAgICAgICAgICAgICBpLCBwcm9wZXJ0eSwgc3BhY2luZywgd2lkdGg7CisKKyAgICAgICAgICAg
ICAgICAvLyBDb25kaXRpb25hbGx5IGluY2x1ZGUgb25lIHNwYWNlIGJlZm9yZSBvciBhZnRlciBj
b2xvbgorICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoICs9IChhbGlnbiA9PT0gImNvbG9uIiA/
IGJlZm9yZUNvbG9uIDogYWZ0ZXJDb2xvbik7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9w
ZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgICAgICBzcGFjaW5nID0gZ2V0UHJvcGVydHlTcGFj
aW5nKHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYWNpbmcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBPYmplY3QgbGl0ZXJhbCBnZXR0ZXJz
L3NldHRlcnMgbGFjayBhIGNvbG9uCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICB3aWR0aCA9IHdpZHRoc1tpXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
YWxpZ24gPT09ICJ2YWx1ZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9w
ZXJ0eSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBiZWZvcmVDb2xvbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2YWx1ZSIsICh3aWR0aCArIHNwYWNp
bmcuYWZ0ZXJDb2xvbikgLSB0YXJnZXRXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7IC8vIGFsaWduID0gImNvbG9uIgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHBy
b3BlcnR5LCAia2V5IiwgKHdpZHRoICsgc3BhY2luZy5iZWZvcmVDb2xvbikgLSB0YXJnZXRXaWR0
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJ2YWx1ZSIsIHNw
YWNpbmcuYWZ0ZXJDb2xvbiAtIGFmdGVyQ29sb24pOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgfSBlbHNl
IHsgLy8gU3RyaWN0bHkgb2JleSBiZWZvcmVDb2xvbiBhbmQgYWZ0ZXJDb2xvbiBpbiBlYWNoIHBy
b3BlcnR5CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJQcm9wZXJ0eSI6IGZ1bmN0
aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSBnZXRQcm9wZXJ0eVNw
YWNpbmcobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNpbmcpIHsgLy8gT2JqZWN0IGxp
dGVyYWwgZ2V0dGVycy9zZXR0ZXJzIGxhY2sgY29sb24gc3BhY2luZworICAgICAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZSwgImtleSIsIHNwYWNpbmcuYmVmb3JlQ29sb24gLSBiZWZvcmVDb2xv
bik7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLCAidmFsdWUiLCBzcGFjaW5nLmFm
dGVyQ29sb24gLSBhZnRlckNvbG9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30se31dLDMyOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gc2V0IHRo
ZSBtYXhpbXVtIGRlcHRoIGJsb2NrIGNhbiBiZSBuZXN0ZWQgaW4gYSBmdW5jdGlvbi4KKyAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICB2YXIgZnVuY3Rpb25TdGFjayA9IFtdLAorICAgICAgICBtYXhEZXB0aCA9IGNv
bnRleHQub3B0aW9uc1swXSB8fCA0OworCisgICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsK
KyAgICAgICAgZnVuY3Rpb25TdGFjay5wdXNoKDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVu
ZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBvcCgpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHB1c2hCbG9jayhub2RlKSB7CisgICAgICAgIHZhciBsZW4gPSArK2Z1bmN0aW9u
U3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAobGVuID4gbWF4
RGVwdGgpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJCbG9ja3MgYXJlIG5l
c3RlZCB0b28gZGVlcGx5ICh7e2RlcHRofX0pLiIsCisgICAgICAgICAgICAgICAgICAgIHsgZGVw
dGg6IGxlbiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBvcEJsb2NrKCkg
eworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0tLTsKKyAg
ICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogc3Rh
cnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9u
LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKworICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBw
dXNoQmxvY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJE
b1doaWxlU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBw
dXNoQmxvY2ssCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAi
Rm9yU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBwdXNo
QmxvY2ssCisKKyAgICAgICAgIklmU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAg
IlN3aXRjaFN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQ6
ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudDpleGl0IjogcG9wQmxv
Y2ssCisgICAgICAgICJXaGlsZVN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJX
aXRoU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIkZvclN0YXRlbWVudDpleGl0
IjogcG9wQmxvY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAg
ICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIlByb2dy
YW06ZXhpdCI6IGVuZEZ1bmN0aW9uCisgICAgfTsKKworfTsKKworfSx7fV0sMzM6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
Y2hlY2sgZm9yIG1heCBsZW5ndGggb24gYSBsaW5lLgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8
aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqIEBjb3B5cmlnaHQgMjAxMyBNYXR0IER1VmFs
bC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLyoqCisg
ICAgICogQ3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIG1hZGUgdXAgb2YgcmVwZWF0aW5nIGEgZ2l2
ZW4gc3RyaW5nIGEgY2VydGFpbgorICAgICAqIG51bWJlciBvZiB0aW1lcy4gVGhpcyB1c2VzIGV4
cG9uZW50aWF0aW9uIG9mIHNxdWFyZXMgdG8gYWNoaWV2ZSBzaWduaWZpY2FudAorICAgICAqIHBl
cmZvcm1hbmNlIGdhaW5zIG92ZXIgdGhlIG1vcmUgdHJhZGl0aW9uYWwgaW1wbGVtZW50YXRpb24g
b2Ygc3VjaAorICAgICAqIGZ1bmN0aW9uYWxpdHkuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0
ciBUaGUgc3RyaW5nIHRvIHJlcGVhdC4KKyAgICAgKiBAcGFyYW0ge2ludH0gbnVtIFRoZSBudW1i
ZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuCisgICAgICogQHJldHVybnMge3N0cmlu
Z30gVGhlIGNyZWF0ZWQgc3RyaW5nLgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVu
Y3Rpb24gc3RyaW5nUmVwZWF0KHN0ciwgbnVtKSB7CisgICAgICAgIHZhciByZXN1bHQgPSAiIjsK
KyAgICAgICAgZm9yIChudW0gfD0gMDsgbnVtID4gMDsgbnVtID4+Pj0gMSwgc3RyICs9IHN0cikg
eworICAgICAgICAgICAgaWYgKG51bSAmIDEpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0g
c3RyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdmFyIHRhYldpZHRoID0gY29udGV4dC5vcHRpb25zWzFdOworCisgICAgdmFy
IG1heExlbmd0aCA9IGNvbnRleHQub3B0aW9uc1swXSwKKyAgICAgICAgdGFiU3RyaW5nID0gc3Ry
aW5nUmVwZWF0KCIgIiwgdGFiV2lkdGgpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnVuY3Rpb24gY2hlY2tQ
cm9ncmFtRm9yTWF4TGVuZ3RoKG5vZGUpIHsKKyAgICAgICAgdmFyIGxpbmVzID0gY29udGV4dC5n
ZXRTb3VyY2VMaW5lcygpOworCisgICAgICAgIC8vIFJlcGxhY2UgdGhlIHRhYnMKKyAgICAgICAg
Ly8gU3BsaXQgKGhvbm9ycyBsaW5lLWVuZGluZykKKyAgICAgICAgLy8gSXRlcmF0ZQorICAgICAg
ICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAgIGlmIChsaW5l
LnJlcGxhY2UoL1x0L2csIHRhYlN0cmluZykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29sOiAxIH0sICJM
aW5lICIgKyAoaSArIDEpICsgIiBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIG9mICIg
KyBtYXhMZW5ndGggKyAiLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBjaGVja1By
b2dyYW1Gb3JNYXhMZW5ndGgKKyAgICB9OworCit9OworCit9LHt9XSwzNDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZv
cmNlIGEgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIGNhbGxiYWNrcy4KKyAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIENvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBjYWxsYmFja1N0YWNrID0gW107CisKKyAgICByZXR1cm4geworCisgICAgICAgICJG
dW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBh
cmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChw
YXJlbnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNhbGxi
YWNrU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNh
bGxiYWNrU3RhY2subGVuZ3RoID4gVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAgICAgdmFyIG9w
dHMgPSB7bnVtOiBjYWxsYmFja1N0YWNrLmxlbmd0aCwgbWF4OiBUSFJFU0hPTER9OworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUb28gbWFueSBuZXN0ZWQgY2FsbGJhY2tz
ICh7e251bX19KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgb3B0cyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQi
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrU3RhY2sucG9wKCk7CisgICAgICAg
IH0KKworICAgIH07CisKK307CisKK30se31dLDM1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBhIGZ1bmN0
aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG51bVBhcmFtcyA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCAzOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGgg
PiBudW1QYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhp
cyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycyAoe3tjb3VudH19KS4gTWF4aW11bSBh
bGxvd2VkIGlzIHt7bWF4fX0uIiwgeworICAgICAgICAgICAgICAgICAgICBjb3VudDogbm9kZS5w
YXJhbXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBtYXg6IG51bVBhcmFtcworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5w
YXJhbXMubGVuZ3RoID4gbnVtUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMgKHt7Y291bnR9
fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsIHsKKyAgICAgICAgICAgICAgICAgICAg
Y291bnQ6IG5vZGUucGFyYW1zLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgbWF4OiBudW1Q
YXJhbXMKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBv
ZiBzdGF0ZW1lbnRzIGluIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXll
cnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFyIGZ1bmN0aW9u
U3RhY2sgPSBbXSwKKyAgICAgICAgbWF4U3RhdGVtZW50cyA9IGNvbnRleHQub3B0aW9uc1swXSB8
fCAxMDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9u
U3RhY2sucHVzaCgwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbihub2RlKSB7
CisgICAgICAgIHZhciBjb3VudCA9IGZ1bmN0aW9uU3RhY2sucG9wKCk7CisKKyAgICAgICAgaWYg
KGNvdW50ID4gbWF4U3RhdGVtZW50cykgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHN0YXRlbWVudHMgKHt7Y291bnR9fSkuIE1h
eGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsgY291bnQ6
IGNvdW50LCBtYXg6IG1heFN0YXRlbWVudHMgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiBjb3VudFN0YXRlbWVudHMobm9kZSkgeworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1
bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gKz0gbm9kZS5ib2R5Lmxlbmd0aDsKKyAgICB9CisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjog
c3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rp
b24sCisKKyAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogY291bnRTdGF0ZW1lbnRzLAorCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1
bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9
XSwzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zdHJ1Y3RvcnMgd2l0aG91dCBjYXBpdGFsIGxl
dHRlcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqIEBjb3B5cmlnaHQgMjAxMy0y
MDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyJ1c2Ug
c3RyaWN0IjsKKwordmFyIENBUFNfQUxMT1dFRCA9IFsKKyAgICAiTnVtYmVyIiwKKyAgICAiU3Ry
aW5nIiwKKyAgICAiQm9vbGVhbiIsCisgICAgIkRhdGUiLAorICAgICJBcnJheSIsCisgICAgIlN5
bWJvbCIsCisgICAgIlJlZ0V4cCIKK107CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIGNvbmZpZyA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCB7fTsKKyAgICBjb25maWcubmV3SXNDYXAgPSBjb25maWcubmV3SXNDYXAgPT09IGZh
bHNlID8gZmFsc2UgOiB0cnVlOworICAgIGNvbmZpZy5jYXBJc05ldyA9IGNvbmZpZy5jYXBJc05l
dyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisKKyAgICB2YXIgbGlzdGVuZXJzID0ge307CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEdldCBleGFjdCBjYWxsZWUgbmFtZSBmcm9tIGV4
cHJlc3Npb24KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJlc3Npb24gb3Ig
TmV3RXhwcmVzc2lvbiBub2RlCisgICAgICogQHJldHVybnMge1N0cmluZ30gbmFtZQorICAgICAq
LworICAgIGZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSkgeworCisgICAg
ICAgIHZhciBuYW1lID0gIiIsCisgICAgICAgICAgICBwcm9wZXJ0eTsKKworICAgICAgICBpZiAo
bm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICBw
cm9wZXJ0eSA9IG5vZGUuY2FsbGVlLnByb3BlcnR5OworCisgICAgICAgICAgICBpZiAocHJvcGVy
dHkudHlwZSA9PT0gIkxpdGVyYWwiICYmICh0eXBlb2YgcHJvcGVydHkudmFsdWUgPT09ICJzdHJp
bmciKSkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS52YWx1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAocHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmICFub2RlLmNh
bGxlZS5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUu
Y2FsbGVlLm5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisg
ICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2FwaXRhbGl6YXRpb24gc3RhdGUgb2YgdGhlIHN0
cmluZyAtCisgICAgICogV2hldGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHVwcGVyY2FzZSwg
bG93ZXJjYXNlLCBvciBub24tYWxwaGFiZXRpYworICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIg
U3RyaW5nCisgICAgICogQHJldHVybnMge1N0cmluZ30gY2FwaXRhbGl6YXRpb24gc3RhdGU6ICJu
b24tYWxwaGEiLCAibG93ZXIiLCBvciAidXBwZXIiCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0
Q2FwKHN0cikgeworICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKTsKKworICAg
ICAgICB2YXIgZmlyc3RDaGFyTG93ZXIgPSBmaXJzdENoYXIudG9Mb3dlckNhc2UoKTsKKyAgICAg
ICAgdmFyIGZpcnN0Q2hhclVwcGVyID0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCk7CisKKyAgICAg
ICAgaWYgKGZpcnN0Q2hhckxvd2VyID09PSBmaXJzdENoYXJVcHBlcikgeworICAgICAgICAgICAg
Ly8gY2hhciBoYXMgbm8gdXBwZXJjYXNlIHZhcmlhbnQsIHNvIGl0J3Mgbm9uLWFscGhhYmV0aWMK
KyAgICAgICAgICAgIHJldHVybiAibm9uLWFscGhhIjsKKyAgICAgICAgfSBlbHNlIGlmIChmaXJz
dENoYXIgPT09IGZpcnN0Q2hhckxvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4gImxvd2VyIjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAidXBwZXIiOworICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgY2FwaXRhbGl6YXRpb24gaXMgYWxs
b3dlZCBmb3IgYSBDYWxsRXhwcmVzc2lvbgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBD
YWxsRXhwcmVzc2lvbiBub2RlCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxlZU5hbWUgQ2Fw
aXRhbGl6ZWQgY2FsbGVlIG5hbWUgZnJvbSBhIENhbGxFeHByZXNzaW9uCisgICAgICogQHJldHVy
bnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVlIG1heSBiZSBjYXBpdGFsaXpl
ZAorICAgICAqLworICAgIGZ1bmN0aW9uIGlzQ2FwQWxsb3dlZChub2RlLCBjYWxsZWVOYW1lKSB7
CisgICAgICAgIGlmIChDQVBTX0FMTE9XRUQuaW5kZXhPZihjYWxsZWVOYW1lKSA+PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FsbGVlTmFt
ZSA9PT0gIlVUQyIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7
CisgICAgICAgICAgICAvLyBhbGxvdyBpZiBjYWxsZWUgaXMgRGF0ZS5VVEMKKyAgICAgICAgICAg
IHJldHVybiBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAg
ICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJEYXRlIjsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGlmIChj
b25maWcubmV3SXNDYXApIHsKKyAgICAgICAgbGlzdGVuZXJzLk5ld0V4cHJlc3Npb24gPSBmdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBleHRyYWN0
TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTmFt
ZSAmJiBnZXRDYXAoY29uc3RydWN0b3JOYW1lKSA9PT0gImxvd2VyIikgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIGNvbnN0cnVjdG9yIG5hbWUgc2hvdWxkIG5vdCBz
dGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlci4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLmNhcElzTmV3KSB7CisgICAgICAgIGxpc3RlbmVy
cy5DYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNh
bGxlZU5hbWUgPSBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAg
aWYgKGNhbGxlZU5hbWUgJiYgZ2V0Q2FwKGNhbGxlZU5hbWUpID09PSAidXBwZXIiICYmICFpc0Nh
cEFsbG93ZWQobm9kZSwgY2FsbGVlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiQSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBzdGFydGluZyB3aXRoIGFuIHVwcGVy
Y2FzZSBsZXR0ZXIgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0cnVjdG9yLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHJldHVybiBsaXN0ZW5lcnM7Cit9
OworCit9LHt9XSwzODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3RydWN0b3Igd2l0aG91
dCBwYXJlbnRoZXNlcworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9k
ZSk7CisgICAgICAgICAgICB2YXIgcHJlbnRpY2VzVG9rZW5zID0gdG9rZW5zLmZpbHRlcihmdW5j
dGlvbih0b2tlbikgeworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gIigi
IHx8IHRva2VuLnZhbHVlID09PSAiKSI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlm
IChwcmVudGljZXNUb2tlbnMubGVuZ3RoIDwgMikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJNaXNzaW5nICcoKScgaW52b2tpbmcgYSBjb25zdHJ1Y3RvciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMzk6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgYWxlcnQsIGNvbmZpcm0sIHByb21wdAorICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBIZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBtYXRjaFByb2hp
Yml0ZWQobmFtZSkgeworICAgIHJldHVybiBuYW1lLm1hdGNoKC9eKGFsZXJ0fGNvbmZpcm18cHJv
bXB0KSQvKTsKK30KKworZnVuY3Rpb24gcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCkgewor
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHt7bmFtZX19LiIsIHsgbmFtZTog
cmVzdWx0WzFdIH0pOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2FsbEV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQ7CisKKyAgICAg
ICAgICAgIC8vIHdpdGhvdXQgd2luZG93LgorICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5
cGUgPT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQ
cm9oaWJpdGVkKG5vZGUuY2FsbGVlLm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jYWxsZWUu
dHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUg
PT09ICJJZGVudGlmaWVyIikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQcm9o
aWJpdGVkKG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gIndpbmRvdyIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDQwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBEaXNhbGxvdyBjb25zdHJ1Y3Rpb24gb2YgZGVuc2UgYXJyYXlzIHVzaW5nIHRoZSBB
cnJheSBjb25zdHJ1Y3RvcgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0
ZHV2YWxsLmNvbS8+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBjaGVj
ayhub2RlKSB7CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0
aCAhPT0gMSAmJgorICAgICAgICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIi
ICYmCisgICAgICAgICAgICBub2RlLmNhbGxlZS5uYW1lID09PSAiQXJyYXkiCisgICAgICAgICkg
eworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBhcnJheSBsaXRlcmFsIG5v
dGF0aW9uIFtdIGlzIHByZWZlcnJhYmxlLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJOZXdFeHBy
ZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSw0MTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJp
dHdpc2UgaWRlbnRpZmllcnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiAne3tvcGVyYXRvcn19Jy4iLCB7
IG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yIH0pOworICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAv
LyB3YXJuIGZvciBeIHwgJiB+IDw8ID4+ID4+PgorICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0
b3IubWF0Y2goL14oPzpbXF4mXHx+XXw8PHw+Pj4/KSQvKSkgeworICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJVbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIHdhcm4gZm9y
IH4KKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAifiIpIHsKKyAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDQyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFyZ3VtZW50cy5jYWxsZWUgYW5k
IGFyZ3VtZW50cy5jYWxsZXIuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9iamVjdE5hbWUgPSBub2Rl
Lm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5vZGUucHJvcGVy
dHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09ICJhcmd1bWVudHMiICYm
ICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUubWF0Y2goL15j
YWxsZVtlcl0kLykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQXZv
aWQgYXJndW1lbnRzLnt7cHJvcGVydHl9fS4iLCB7IHByb3BlcnR5OiBwcm9wZXJ0eU5hbWUgfSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQzOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdmFyaWFibGUgbGVhayBpbiBDYXRjaENsYXVzZXMgaW4gSUUgOCBhbmQgZWFy
bGllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIHBhcmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5h
bWUpIHsKKyAgICAgICAgdmFyIGZvdW5kID0gc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24o
dmFyaWFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS5uYW1lID09PSBuYW1lOwor
ICAgICAgICB9KTsKKworICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7CisgICAgICAgICAg
ICByZXR1cm4gcGFyYW1Jc1NoYWRvd2luZyhzY29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1
cm4geworCisgICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKworICAgICAgICAgICAgaWYgKHBh
cmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5vZGUucGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVmFsdWUgb2YgJ3t7bmFtZX19JyBtYXkgYmUgb3Zlcndy
aXR0ZW4gaW4gSUUgOCBhbmQgZWFybGllci4iLAorICAgICAgICAgICAgICAgICAgICAgICAgeyBu
YW1lOiBub2RlLnBhcmFtLm5hbWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCit9OworCit9LHt9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIGNvbW1hcyBpbiBvYmpl
Y3QgbGl0ZXJhbHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8gSGVscGVycwor
ICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdD
b21tYShub2RlKSB7CisgICAgICAgIHZhciBzZWNvbmRUb0xhc3RUb2tlbiA9IGNvbnRleHQuZ2V0
TGFzdFRva2Vucyhub2RlLCAyKVswXTsKKworICAgICAgICB2YXIgaXRlbXMgPSBub2RlLnByb3Bl
cnRpZXMgfHwgbm9kZS5lbGVtZW50cywKKyAgICAgICAgICAgIGxhc3RJdGVtID0gaXRlbXNbaXRl
bXMubGVuZ3RoIC0gMV07CisgICAgICAgIC8vIFRoZSBsYXN0IHRva2VuIGluIGFuIG9iamVjdC9h
cnJheSBsaXRlcmFsIHdpbGwgYWx3YXlzIGJlIGEgY2xvc2luZworICAgICAgICAvLyBjdXJseSwg
c28gd2UgY2hlY2sgdGhlIHNlY29uZCB0byBsYXN0IHRva2VuIGZvciBhIGNvbW1hLgorICAgICAg
ICBpZiAoc2Vjb25kVG9MYXN0VG9rZW4udmFsdWUgPT09ICIsIiAmJiBpdGVtcy5sZW5ndGggJiYg
bGFzdEl0ZW0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGxhc3RJdGVtLCBzZWNvbmRU
b0xhc3RUb2tlbi5sb2Muc3RhcnQsICJUcmFpbGluZyBjb21tYS4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIk9iamVjdEV4cHJlc3Np
b24iOiBjaGVja0ZvclRyYWlsaW5nQ29tbWEsCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBj
aGVja0ZvclRyYWlsaW5nQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSw0NTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIGFzc2lnbm1lbnQgaW4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uCisgKiBAYXV0aG9yIFN0
ZXBoZW4gTXVycmF5IDxzcG11cnJheXp6ej4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0
aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0g
Y29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNv
bnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tl
bi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVsw
XSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJh
bmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQu
Z2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0
LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAgICAgcmV0dXJuIGlzUGFyZW50aGVzaXNl
ZChub2RlKSAmJgorICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHBy
ZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4
dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2Vb
MV07CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEZvckFzc2lnbihub2RlKSB7CisgICAgICAg
IGlmIChub2RlLnRlc3QgJiYgKG5vZGUudGVzdC50eXBlID09PSAiQXNzaWdubWVudEV4cHJlc3Np
b24iKSAmJiAhaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBh
bmQgaW5zdGVhZCBzYXcgYW4gYXNzaWdubWVudC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJJZlN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAg
ICJXaGlsZVN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAgICJEb1doaWxlU3RhdGVt
ZW50IjogdGVzdEZvckFzc2lnbiwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IHRlc3RGb3JBc3Np
Z24KKyAgICB9OworCit9OworCit9LHt9XSw0NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zb2xl
IG9iamVjdAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5vYmplY3QubmFtZSA9PT0gImNv
bnNvbGUiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgY29uc29sZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIGNvbnN0YW50IGNvbmRpdGlv
bnMKKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVseiA8aHR0cDovL3JuZG0uZGU+CisgKi8KKwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxw
ZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlm
IGEgbm9kZSBoYXMgYSBjb25zdGFudCB0cnV0aGluZXNzIHZhbHVlLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge0Jv
b2x9IHRydWUgd2hlbiBub2RlJ3MgdHJ1dGhpbmVzcyBpcyBjb25zdGFudAorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNDb25zdGFudChub2RlKSB7CisgICAgICAgIHN3
aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgIkxpdGVyYWwiOgorICAgICAgICBjYXNl
ICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoK
KyAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgIGNhc2UgIkJpbmFyeUV4cHJlc3Npb24i
OgorICAgICAgICBjYXNlICJMb2dpY2FsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1cm4g
aXNDb25zdGFudChub2RlLmxlZnQpICYmIGlzQ29uc3RhbnQobm9kZS5yaWdodCk7CisgICAgICAg
IGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KG5vZGUucmlnaHQpOworICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9kZS5leHByZXNzaW9uc1tub2RlLmV4cHJlc3Np
b25zLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIHdoZW4g
dGhlIGdpdmVuIG5vZGUgY29udGFpbnMgYSBjb25zdGFudCBjb25kaXRpb24uCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJu
cyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ29u
c3RhbnRDb25kaXRpb24obm9kZSkgeworICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlzQ29uc3Rh
bnQobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhw
ZWN0ZWQgY29uc3RhbnQgY29uZGl0aW9uLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIHJldHVybiB7CisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBjaGVja0Nv
bnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29u
ZGl0aW9uLAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9u
LAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24sCisg
ICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uCisgICAgfTsKKwor
fTsKKworfSx7fV0sNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZm9yYmlkIGNvbnRyb2wgY2hhcmFjdGVzIGZyb20gcmVn
dWxhciBleHByZXNzaW9ucy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworCisgICAgZnVuY3Rpb24gZ2V0UmVnRXhwKG5vZGUpIHsKKworICAg
ICAgICBpZiAobm9kZS52YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICAgICAgcmV0
dXJuIG5vZGUudmFsdWU7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09
ICJzdHJpbmciKSB7CisKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2Vz
dG9ycygpLnBvcCgpOworICAgICAgICAgICAgaWYgKChwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJl
c3Npb24iIHx8IHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSAmJgorICAgICAgICAg
ICAgcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgcGFyZW50LmNhbGxlZS5u
YW1lID09PSAiUmVnRXhwIikgeworCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgY291bGQgYmUg
YW4gaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nCisgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobm9kZS52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgfQorCisKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBjb21wdXRlZFZhbHVlLAorICAgICAgICAgICAgICAgIHJlZ2V4ID0gZ2V0
UmVnRXhwKG5vZGUpOworCisgICAgICAgICAgICBpZiAocmVnZXgpIHsKKyAgICAgICAgICAgICAg
ICBjb21wdXRlZFZhbHVlID0gcmVnZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAo
L1tceDAwLVx4MWZdLy50ZXN0KGNvbXB1dGVkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJl
Z3VsYXIgZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBh
IGRlYnVnZ2VyIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiRGVidWdnZXJTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5leHBlY3RlZCAnZGVidWdnZXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBkZWxldGluZyB2YXJpYWJsZXMK
KyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImRlbGV0ZSIgJiYgbm9kZS5hcmd1bWVu
dC50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVmFyaWFibGVzIHNob3VsZCBub3QgYmUgZGVsZXRlZC4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDUxOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZv
ciBhbWJpZ3VvdXMgZGl2IG9wZXJhdG9yIGluIHJlZ2V4ZXMKKyAqIEBhdXRob3IgTWF0dCBEdVZh
bGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVswXSwK
KyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCisgICAgICAgICAgICAgICAg
c291cmNlOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lv
biIpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5v
ZGUsIDEpWzBdLnZhbHVlOworCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVsxXSA9PT0gIj0i
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHJlZ3VsYXIg
ZXhwcmVzc2lvbiBsaXRlcmFsIGNhbiBiZSBjb25mdXNlZCB3aXRoICcvPScuIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sNTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZHVwbGljYXRlIGtleXMgaW4gYW4gb2JqZWN0Lgor
ICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworCisgICAgICAgICAgICAvLyBPYmplY3QgdGhhdCB3aWxsIGJlIGEgbWFwIG9mIHByb3Bl
cnRpZXMtLXNhZmUgYmVjYXVzZSB3ZSB3aWxsCisgICAgICAgICAgICAvLyBwcmVmaXggYWxsIG9m
IHRoZSBrZXlzLgorICAgICAgICAgICAgdmFyIG5vZGVQcm9wcyA9IHt9OworCisgICAgICAgICAg
ICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgeworICAgICAgICAg
ICAgICAgIHZhciBrZXlOYW1lID0gcHJvcGVydHkua2V5Lm5hbWUgfHwgcHJvcGVydHkua2V5LnZh
bHVlOworICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5raW5kICsgIi0iICsga2V5
TmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlUHJvcHNba2V5XSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRHVwbGljYXRlIGtleSAne3trZXl9fScu
IiwgeyBrZXk6IGtleU5hbWUgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZVByb3BzW2tleV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1MzpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIGBlbHNlYCBhZnRlciBhIGByZXR1cm5gIGluIGBpZmAKKyAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICBmdW5jdGlvbiBjaGVja0ZvclJldHVyblN0YXRlbWVudChub2RlLCBhbHRlcm5hdGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlJldHVyblN0YXRlbWVudCIpIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KGFsdGVybmF0ZSwgIlVuZXhwZWN0ZWQgJ2Vsc2UnIGFmdGVyICdyZXR1
cm4nLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
Ly8gRG9uJ3QgYm90aGVyIGZpbmRpbmcgYSBSZXR1cm5TdGF0ZW1lbnQsIGlmIHRoZXJlJ3Mgbm8g
YGVsc2VgCisgICAgICAgICAgICAvLyBvciBpZiB0aGUgYWx0ZXJuYXRlIGlzIGFsc28gYW4gaWYg
KGluZGljYXRpbmcgYW4gZWxzZSBpZikuCisgICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUg
JiYgbm9kZS5jb25zZXF1ZW50ICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVu
dCIpIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBCbG9ja1N0YXRlbWVudCwg
Y2hlY2sgZWFjaCBjb25zZXF1ZW50IGJvZHkgbm9kZS4KKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jb25zZXF1ZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS5jb25zZXF1ZW50LmJvZHkuZm9yRWFjaChmdW5jdGlvbiAoYm9keU5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KGJvZHlOb2Rl
LCBub2RlLmFsdGVybmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgLy8gSWYgbm90IGEgYmxvY2sgc3RhdGVtZW50LCBtYWtlIHN1cmUgdGhlIGNvbnNlcXVl
bnQgaXNuJ3QgYQorICAgICAgICAgICAgICAgIC8vIFJldHVyblN0YXRlbWVudAorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVt
ZW50KG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNTQ6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB0aGUgdXNlIG9mIGVtcHR5IGNoYXJhY3RlciBjbGFzc2VzIGluIHJlZ3VsYXIg
ZXhwcmVzc2lvbnMKKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2Rl
KTsKKyAgICAgICAgICAgIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikgeworICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgcGxhaW4tRW5nbGlzaCBkZXNjcmlwdGlvbiBv
ZiB0aGUgZm9sbG93aW5nIHJlZ2V4cDoKKyAgICAgICAgICAgICAgICAwLiBgXmAgZml4IHRoZSBt
YXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAxLiBg
XC9gOiB0aGUgYC9gIHRoYXQgYmVnaW5zIHRoZSByZWdleHAKKyAgICAgICAgICAgICAgICAyLiBg
KFteXFxbXXxcXC58XFsoW15cXFxdXXxcXC4pK1xdKSpgOiByZWdleHAgY29udGVudHM7IDAgb3Ig
bW9yZSBvZiB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAyLjAuIGBbXlxcW11gOiBh
bnkgY2hhcmFjdGVyIHRoYXQncyBub3QgYSBgXGAgb3IgYSBgW2AgKGFueXRoaW5nIGJ1dCBlc2Nh
cGUgc2VxdWVuY2VzIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcykKKyAgICAgICAgICAgICAgICAgIDIu
MS4gYFxcLmA6IGFuIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgMi4yLiBgXFso
W15cXFxdXXxcXC4pK1xdYDogYSBjaGFyYWN0ZXIgY2xhc3MgdGhhdCBpc24ndCBlbXB0eQorICAg
ICAgICAgICAgICAgIDMuIGBcL2AgdGhlIGAvYCB0aGF0IGVuZHMgdGhlIHJlZ2V4cAorICAgICAg
ICAgICAgICAgIDQuIGBbZ2lteV0qYDogb3B0aW9uYWwgcmVnZXhwIGZsYWdzCisgICAgICAgICAg
ICAgICAgNS4gYCRgOiBmaXggdGhlIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAg
ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJSZWd1
bGFyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAhL15cLyhbXlxcW118XFwufFxbKFte
XFxcXV18XFwuKStcXSkqXC9bZ2lteV0qJC8udGVzdCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkVtcHR5IGNsYXNzLiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9OworCit9Owor
Cit9LHt9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gbGFiZWwgaXMgbm90IHVzZWQgZm9yIGEgbG9v
cCBvciBzd2l0Y2gKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS50eXBlICE9PSAiRm9yU3RhdGVt
ZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIldoaWxlU3RhdGVtZW50IiAmJiBub2RlLmJvZHku
dHlwZSAhPT0gIkRvV2hpbGVTdGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiU3dpdGNo
U3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIkZvckluU3RhdGVtZW50IikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIHt7bH19
Iiwge2w6IG5vZGUubGFiZWwubmFtZX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gZW1wdHkgYmxvY2sg
c3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygp
LAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0g
MV0sCisgICAgICAgICAgICAgICAgcGFyZW50VHlwZSA9IHBhcmVudC50eXBlLAorICAgICAgICAg
ICAgICAgIGlzRmluYWxseUJsb2NrID0gKHBhcmVudFR5cGUgPT09ICJUcnlTdGF0ZW1lbnQiKSAm
JiAocGFyZW50LmZpbmFsaXplciA9PT0gbm9kZSk7CisKKyAgICAgICAgICAgIGlmICgvRnVuY3Rp
b25FeHByZXNzaW9ufEZ1bmN0aW9uRGVjbGFyYXRpb258Q2F0Y2hDbGF1c2UvLnRlc3QocGFyZW50
VHlwZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGlzRmluYWxseUJsb2NrICYmICFwYXJlbnQu
aGFuZGxlcnMubGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgYmxvY2sgc3RhdGVtZW50LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5jYXNlcyA9PT0g
InVuZGVmaW5lZCIgfHwgbm9kZS5jYXNlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgc3dpdGNoIHN0YXRlbWVudC4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDU3OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgY29tcGFyaXNvbnMgdG8gbnVsbCB3aXRob3V0IGEgdHlwZS1jaGVja2luZworICogb3BlcmF0
b3IuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIGJhZE9wZXJhdG9yID0gbm9kZS5vcGVyYXRvciA9PT0g
Ij09IiB8fCBub2RlLm9wZXJhdG9yID09PSAiIT0iOworCisgICAgICAgICAgICBpZiAobm9kZS5y
aWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC5yYXcgPT09ICJudWxsIiAmJiBi
YWRPcGVyYXRvciB8fAorICAgICAgICAgICAgICAgICAgICBub2RlLmxlZnQudHlwZSA9PT0gIkxp
dGVyYWwiICYmIG5vZGUubGVmdC5yYXcgPT09ICJudWxsIiAmJiBiYWRPcGVyYXRvcikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2Ug4oCYPT094oCZIHRvIGNvbXBh
cmUgd2l0aCDigJhudWxs4oCZLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworfTsKKworfSx7fV0sNTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZXZhbCgpIHN0YXRlbWVudAor
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgdmFyIElNUExJRURfRVZBTCA9IC9zZXQoPzpUaW1lb3V0fEludGVydmFsKS87CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgYSBub2RlIHJlcHJlc2VudHMgYSBj
YWxsIHRvIHNldFRpbWVvdXQvc2V0SW50ZXJ2YWwgd2l0aAorICAgICAqIGEgc3RyaW5nIGFyZ3Vt
ZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBtYXRjaGVzLCBmYWxzZSBp
ZiBub3QuCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0ltcGxpZWRF
dmFsKG5vZGUpIHsKKworICAgICAgICB2YXIgaXNNZW1iZXJFeHByZXNzaW9uID0gKG5vZGUuY2Fs
bGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiksCisgICAgICAgICAgICBpc0lkZW50aWZp
ZXIgPSAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSwKKyAgICAgICAgICAgIGlz
U2V0TWV0aG9kID0gKGlzSWRlbnRpZmllciAmJiBJTVBMSUVEX0VWQUwudGVzdChub2RlLmNhbGxl
ZS5uYW1lKSkgfHwKKyAgICAgICAgICAgICAgICAoaXNNZW1iZXJFeHByZXNzaW9uICYmIG5vZGUu
Y2FsbGVlLm9iamVjdC5uYW1lID09PSAid2luZG93IiAmJgorICAgICAgICAgICAgICAgIElNUExJ
RURfRVZBTC50ZXN0KG5vZGUuY2FsbGVlLnByb3BlcnR5Lm5hbWUpKSwKKyAgICAgICAgICAgIGhh
c1N0cmluZ0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMubGVuZ3RoICYmICh0eXBlb2Ygbm9kZS5h
cmd1bWVudHNbMF0udmFsdWUgPT09ICJzdHJpbmciKTsKKworICAgICAgICByZXR1cm4gaXNTZXRN
ZXRob2QgJiYgaGFzU3RyaW5nQXJndW1lbnQ7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJldmFsIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJldmFsIGNhbiBiZSBoYXJtZnVsLiIpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0ltcGxpZWRFdmFsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuYXJndW1lbnRzLmxlbmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVl
ID09PSAic3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkltcGxpZWQgZXZhbCBjYW4gYmUgaGFybWZ1bC4gUGFzcyBhIGZ1bmN0aW9uIGluc3RlYWQg
b2YgYSBzdHJpbmcuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3NpZ25tZW50IG9m
IHRoZSBleGNlcHRpb24gcGFyYW1ldGVyCisgKiBAYXV0aG9yIFN0ZXBoZW4gTXVycmF5IDxzcG11
cnJheXp6ej4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBpbkNhdGNoID0gZmFs
c2UsCisgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBudWxsOworCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpbkNhdGNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBub2RlLnBhcmFtLm5hbWU7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlOmV4aXQiOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGluQ2F0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBu
dWxsOworICAgICAgICB9LAorCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGluQ2F0Y2gpIHsKKworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmxlZnQubmFtZSA9PT0gZXhjZXB0aW9uTmFtZSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IGFzc2lnbiB0byB0aGUgZXhjZXB0
aW9uIHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDYwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYWRkaW5nIHBy
b3BlcnRpZXMgdG8gbmF0aXZlIG9iamVjdCdzIHByb3RvdHlwZXMuCisgKiBAYXV0aG9yIERhdmlk
IE5lbHNvbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBCVUlMVElOUyA9IFsKKyAgICAiT2JqZWN0
IiwgIkZ1bmN0aW9uIiwgIkFycmF5IiwgIlN0cmluZyIsICJCb29sZWFuIiwgIk51bWJlciIsICJE
YXRlIiwKKyAgICAiUmVnRXhwIiwgIkVycm9yIiwgIkV2YWxFcnJvciIsICJSYW5nZUVycm9yIiwg
IlJlZmVyZW5jZUVycm9yIiwKKyAgICAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIlVSSUVy
cm9yIgorXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgIC8v
IGhhbmRsZSB0aGUgQXJyYXkucHJvdG90eXBlLmV4dHJhIHN0eWxlIGNhc2UKKyAgICAgICAgIkFz
c2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGxo
cyA9IG5vZGUubGVmdCwgYWZmZWN0c1Byb3RvOworCisgICAgICAgICAgICBpZiAobGhzLnR5cGUg
IT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBsaHMub2JqZWN0LnR5cGUgIT09ICJNZW1iZXJFeHBy
ZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYWZmZWN0c1Byb3RvID0gbGhzLm9iamVjdC5jb21wdXRlZCA/CisgICAgICAgICAg
ICAgICAgbGhzLm9iamVjdC5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbGhzLm9iamVj
dC5wcm9wZXJ0eS52YWx1ZSA9PT0gInByb3RvdHlwZSIgOgorICAgICAgICAgICAgICAgIGxocy5v
YmplY3QucHJvcGVydHkubmFtZSA9PT0gInByb3RvdHlwZSI7CisKKyAgICAgICAgICAgIGlmICgh
YWZmZWN0c1Byb3RvKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBCVUlMVElOUy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWx0aW4pIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGhzLm9iamVjdC5vYmplY3QubmFtZSA9PT0gYnVpbHRpbikgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBidWlsdGluICsgIiBwcm90b3R5
cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
aGFuZGxlIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlKSBjYXNlCisg
ICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
dmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlLAorICAgICAgICAgICAgICAgIHN1YmplY3QsCisgICAg
ICAgICAgICAgICAgb2JqZWN0OworCisgICAgICAgICAgICAvLyBvbmx5IHdvcnJ5IGFib3V0IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eQorICAgICAgICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAiTWVt
YmVyRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICBjYWxsZWUub2JqZWN0Lm5hbWUgPT09
ICJPYmplY3QiICYmCisgICAgICAgICAgICAgICAgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICJk
ZWZpbmVQcm9wZXJ0eSIpIHsKKworICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGUgb2JqZWN0
IGJlaW5nIGFkZGVkIHRvIGlzIGEgbmF0aXZlIHByb3RvdHlwZQorICAgICAgICAgICAgICAgIHN1
YmplY3QgPSBub2RlLmFyZ3VtZW50c1swXTsKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBzdWJq
ZWN0Lm9iamVjdDsKKworICAgICAgICAgICAgICAgIGlmIChvYmplY3QgJiYKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAg
ICAgICAoQlVJTFRJTlMuaW5kZXhPZihvYmplY3QubmFtZSkgPiAtMSkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgc3ViamVjdC5wcm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIikgeworCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG9iamVjdC5uYW1lICsgIiBwcm90
b3R5cGUgaXMgcmVhZCBvbmx5LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSw2MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IGJpbmQgY2FsbHMKKyAqIEBh
dXRob3IgQmVuY2UgRMOhbnlpIDxiZW5jZUBkYW55aS5tZT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBC
ZW5jZSBEw6FueWkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgc2NvcGUgPSBbeworICAgICAgICBkZXB0aDogLTEsCisgICAgICAgIGZvdW5kOiAwCisg
ICAgfV07CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHRvcG1vc3Qgc2NvcGUKKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBUaGUgdG9wbW9zdCBzY29wZQorICAgICAqLworICAgIGZ1bmN0aW9u
IGdldFRvcFNjb3BlKCkgeworICAgICAgICByZXR1cm4gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07
CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jcmVtZW50IHRoZSBkZXB0aCBvZiB0aGUgdG9w
IHNjb3BlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gaW5j
cmVtZW50U2NvcGVEZXB0aCgpIHsKKyAgICAgICAgdmFyIHRvcCA9IGdldFRvcFNjb3BlKCk7Cisg
ICAgICAgIHRvcC5kZXB0aCsrOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY3JlbWVudCB0
aGUgZGVwdGggb2YgdGhlIHRvcCBzY29wZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAq
LworICAgIGZ1bmN0aW9uIGRlY3JlbWVudFNjb3BlRGVwdGgoKSB7CisgICAgICAgIHZhciB0b3Ag
PSBnZXRUb3BTY29wZSgpOworICAgICAgICB0b3AuZGVwdGgtLTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxICYmCisgICAgICAgICAgICAgICAg
bm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCisgICAgICAgICAgICAg
ICAgbm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSA9PT0gImJpbmQiICYmCisgICAgICAgICAgICAg
ICAgbm9kZS5jYWxsZWUub2JqZWN0LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7Cisg
ICAgICAgICAgICAgICAgc2NvcGUucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIGNhbGw6IG5v
ZGUsCisgICAgICAgICAgICAgICAgICAgIGRlcHRoOiAtMSwKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmQ6IDAKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkNhbGxFeHByZXNzaW9uOmV4aXQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICh0b3AuY2FsbCA9
PT0gbm9kZSAmJiB0b3AuZm91bmQgPT09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVGhlIGZ1bmN0aW9uIGJpbmRpbmcgaXMgdW5uZWNlc3NhcnkuIik7CisgICAg
ICAgICAgICAgICAgc2NvcGUucG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBpbmNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6IGluY3JlbWVudFNjb3BlRGVwdGgsCisgICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiVGhp
c0V4cHJlc3Npb24iOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0b3AgPSBnZXRUb3BT
Y29wZSgpOworICAgICAgICAgICAgaWYgKHRvcC5kZXB0aCA9PT0gMCkgeworICAgICAgICAgICAg
ICAgIHRvcC5mb3VuZCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1bm5lY2Vzc2FyeSBkb3VibGUgbmVnYXRpb24gaW4g
Qm9vbGVhbiBjb250ZXh0cworICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVu
Y3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFu
Y2VzdG9ycygpLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKSwKKyAg
ICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKworICAgICAgICAg
ICAgLy8gRXhpdCBlYXJseSBpZiBpdCdzIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoCisgICAgICAg
ICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0gIiEiIHx8CisgICAgICAgICAgICAgICAgICAgIHBh
cmVudC50eXBlICE9PSAiVW5hcnlFeHByZXNzaW9uIiB8fAorICAgICAgICAgICAgICAgICAgICBw
YXJlbnQub3BlcmF0b3IgIT09ICIhIikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWYgKDxib29sPikgLi4uCisgICAgICAgICAgICBp
ZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIklmU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGFuIGlm
IHN0YXRlbWVudCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIGRvIC4uLiB3aGlsZSAo
PGJvb2w+KQorICAgICAgICAgICAgfSBlbHNlIGlmIChncmFuZHBhcmVudC50eXBlID09PSAiRG9X
aGlsZVN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
UmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIGRvIHdoaWxlIGxvb3AgY29uZGl0aW9uLiIp
OworCisgICAgICAgICAgICAvLyB3aGlsZSAoPGJvb2w+KSAuLi4KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIldoaWxlU3RhdGVtZW50IikgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGlu
IGEgd2hpbGUgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vIDxib29sPiA/IC4u
LiA6IC4uLgorICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkNv
bmRpdGlvbmFsRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID09PSBn
cmFuZHBhcmVudC50ZXN0KSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgdGVybmFyeSBjb25kaXRpb24uIik7CisK
KyAgICAgICAgICAgIC8vIGZvciAoLi4uOyA8Ym9vbD47IC4uLikgLi4uCisgICAgICAgICAgICB9
IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiRm9yU3RhdGVtZW50IiAmJgorICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFyZW50LnRlc3QpKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4g
YSBmb3IgbG9vcCBjb25kaXRpb24uIik7CisKKyAgICAgICAgICAgIC8vICE8Ym9vbD4KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24i
ICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50Lm9wZXJhdG9yID09PSAiISIpKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBtdWx0aXBs
ZSBuZWdhdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gQm9vbGVhbig8Ym9vbD4pCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYm
CisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRp
ZmllciIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLm5hbWUgPT09
ICJCb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVk
dW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBjYWxsIHRvIEJvb2xlYW4oKS4iKTsKKworICAgICAg
ICAgICAgLy8gbmV3IEJvb2xlYW4oPGJvb2w+KQorICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3Jh
bmRwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAg
IGdyYW5kcGFyZW50LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAgICAgICAgICAg
ICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLm5hbWUgPT09ICJCb29sZWFuIikpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlv
biBpbiBCb29sZWFuIGNvbnN0cnVjdG9yIGNhbGwuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCit9OworCit9LHt9XSw2MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgcGFyZW50aGVzZXNpc25nIGhp
Z2hlciBwcmVjZWRlbmNlIHN1YmV4cHJlc3Npb25zLgorICogQGF1dGhvciBNaWNoYWVsIEZpY2Fy
cmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2Rl
KSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShu
b2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2Rl
KTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAg
ICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdl
WzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0g
IikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAgICAgICAgICAg
bmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisgICAgICAgIHJl
dHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHByZWNlZGVuY2Uobm9kZSkgeworCisgICAgICAgIHN3aXRjaCAo
bm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBjYXNlICJBc3NpZ25tZW50RXhw
cmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgICAgIGNhc2Ug
IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisKKyAg
ICAgICAgICAgIGNhc2UgIkxvZ2ljYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3BlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAifHwiOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
IiYmIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICAgICAgICAg
ICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
LyogZmFsbHMgdGhyb3VnaCAqLworICAgICAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVzc2lvbiI6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgInwiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIl4iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDc7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiYiOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDg7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj09IjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiIT0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI9PT0iOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlICIhPT0iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjwiOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICI8PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4iOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlICI+PSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImluIjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiaW5zdGFuY2VvZiI6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMTA7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjw8IjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiPj4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICI+Pj4iOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDExOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICIrIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiLSI6CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMTI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIioiOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICIvIjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJSI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTM7CisgICAgICAgICAgICAgICAgICAgIC8vIG5v
IGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhy
b3VnaCAqLworICAgICAgICAgICAgY2FzZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTQ7CisgICAgICAgICAgICBjYXNlICJVcGRhdGVFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMTU7CisgICAgICAgICAgICBjYXNlICJDYWxsRXhwcmVzc2lv
biI6CisgICAgICAgICAgICAgICAgLy8gSUlGRSBpcyBhbGxvd2VkIHRvIGhhdmUgcGFyZW5zIGlu
IGFueSBwb3NpdGlvbiAoIzY1NSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMTY7CisgICAg
ICAgICAgICBjYXNlICJOZXdFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTc7
CisgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE4
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJHcmF0dWl0b3VzIHBhcmVudGhlc2VzIGFyb3VuZCBleHByZXNzaW9uLiIp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeVVuYXJ5VXBkYXRlKG5vZGUpIHsKKyAgICAgICAg
aWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSAmJiBwcmVjZWRlbmNlKG5vZGUuYXJn
dW1lbnQpID49IHByZWNlZGVuY2Uobm9kZSkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlLmFy
Z3VtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGRyeUNhbGxOZXcobm9k
ZSkgeworICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuY2FsbGVlKSAmJiBwcmVjZWRl
bmNlKG5vZGUuY2FsbGVlKSA+PSBwcmVjZWRlbmNlKG5vZGUpICYmCisgICAgICAgICEobm9kZS50
eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5jdGlv
bkV4cHJlc3Npb24iKSkgeworICAgICAgICAgICAgcmVwb3J0KG5vZGUuY2FsbGVlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAgICAg
ICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5hcmd1bWVudHNbMF0pICYmIHByZWNl
ZGVuY2Uobm9kZS5hcmd1bWVudHNbMF0pID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50
RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50c1sw
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBbXS5mb3JF
YWNoLmNhbGwobm9kZS5hcmd1bWVudHMsIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAgICAg
IGlmIChpc1BhcmVudGhlc2lzZWQoYXJnKSAmJiBwcmVjZWRlbmNlKGFyZykgPj0gcHJlY2VkZW5j
ZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcG9ydChhcmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5QmluYXJ5TG9naWNhbChub2RlKSB7CisgICAg
ICAgIHZhciBwcmVjID0gcHJlY2VkZW5jZShub2RlKTsKKyAgICAgICAgaWYgKGlzUGFyZW50aGVz
aXNlZChub2RlLmxlZnQpICYmIHByZWNlZGVuY2Uobm9kZS5sZWZ0KSA+PSBwcmVjKSB7CisgICAg
ICAgICAgICByZXBvcnQobm9kZS5sZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUucmlnaHQpICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPiBwcmVjKSB7
CisgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKG5vZGUuZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZSAmJiBpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5j
ZShlKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9LAorICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUucmlnaHQp
ICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPj0gcHJlY2VkZW5jZShub2RlKSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2FsLAorICAgICAgICAi
Q2FsbEV4cHJlc3Npb24iOiBkcnlDYWxsTmV3LAorICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChu
b2RlLnRlc3QpICYmIHByZWNlZGVuY2Uobm9kZS50ZXN0KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAi
TG9naWNhbEV4cHJlc3Npb24iLCBvcGVyYXRvcjogInx8In0pKSB7CisgICAgICAgICAgICAgICAg
cmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNQYXJl
bnRoZXNpc2VkKG5vZGUuY29uc2VxdWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmNvbnNlcXVlbnQp
ID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLmNvbnNlcXVlbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFsdGVybmF0ZSkgJiYgcHJlY2VkZW5jZShu
b2RlLmFsdGVybmF0ZSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9u
In0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkg
eworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBmaXJzdFRva2VuOworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVz
aXNlZChub2RlLmV4cHJlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgZmlyc3RUb2tlbiA9IGNv
bnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFRva2VuLnZhbHVlICE9PSAiZnVuY3Rpb24iICYmIGZpcnN0VG9rZW4udmFsdWUgIT09
ICJ7IikgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5leHByZXNzaW9uKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JJ
blN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhl
c2lzZWQobm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIGlzUGFyZW50aGVzaXNl
ZChub2RlLmluaXQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNQYXJlbnRoZXNpc2Vk
KG5vZGUudGVzdCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlICYmIGlzUGFyZW50aGVzaXNl
ZChub2RlLnVwZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS51cGRhdGUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0
KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2Fs
LAorICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc1BhcmVudGhlc2lzZWQobm9kZS5vYmplY3QpICYm
CisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZShub2RlLm9iamVjdCkgPj0gcHJlY2VkZW5jZShu
b2RlKSAmJgorICAgICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jb21w
dXRlZCB8fAorICAgICAgICAgICAgICAgICAgICAhKAorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS5vYmplY3QudHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlb2Ygbm9kZS5vYmplY3QudmFsdWUgPT09ICJudW1iZXIiICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAvXlswLTldKyQvLnRlc3QoY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUub2Jq
ZWN0KS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAg
ICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZHJ5Q2FsbE5l
dywKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHYgPSBlLnZhbHVlOworICAgICAgICAgICAgICAgIGlmICh2ICYmIGlz
UGFyZW50aGVzaXNlZCh2KSAmJiBwcmVjZWRlbmNlKHYpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJB
c3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQodik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAg
ICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5hcmd1bWVudCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5hcmd1bWVudCkpIHsKKyAgICAgICAg
ICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5leHByZXNzaW9ucywgZnVuY3Rpb24oZSkgeworICAg
ICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5jZShlKSA+PSBw
cmVjZWRlbmNlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRj
aENhc2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlz
UGFyZW50aGVzaXNlZChub2RlLnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUu
dGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hTdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdp
Y2Uobm9kZS5kaXNjcmltaW5hbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuZGlz
Y3JpbWluYW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3Rh
dGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNl
ZChub2RlLmFyZ3VtZW50KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6
IGRyeVVuYXJ5VXBkYXRlLAorICAgICAgICAiVXBkYXRlRXhwcmVzc2lvbiI6IGRyeVVuYXJ5VXBk
YXRlLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5pbml0KSAmJiBw
cmVjZWRlbmNlKG5vZGUuaW5pdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHBy
ZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7
CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgICJXaXRoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUub2JqZWN0KSkgeworICAgICAgICAg
ICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSw2NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB1bm5lY2Vzc2FyeSBz
ZW1pY29sb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJFbXB0eVN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2Fy
eSBzZW1pY29sb24uIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2NTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVubmVjZXNzYXJ5IHN0cmljdCBkaXJlY3RpdmVzLgorICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBkaXJlY3Rp
dmVzKGJsb2NrKSB7CisgICAgICAgIHZhciBkcyA9IFtdLCBib2R5ID0gYmxvY2suYm9keSwgZSwg
aSwgbDsKKworICAgICAgICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyArK2kp
IHsKKyAgICAgICAgICAgIGUgPSBib2R5W2ldOworCisgICAgICAgICAgICBpZiAoCisgICAgICAg
ICAgICAgICAgZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAg
ICAgICBlLmV4cHJlc3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAg
dHlwZW9mIGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyIKKyAgICAgICAgICAgICkgewor
ICAgICAgICAgICAgICAgIGRzLnB1c2goZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0KGRpcmVjdGl2
ZSkgeworICAgICAgICByZXR1cm4gZGlyZWN0aXZlLnZhbHVlID09PSAidXNlIHN0cmljdCI7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdChub2RlKSB7
CisgICAgICAgIHZhciB1c2VTdHJpY3REaXJlY3RpdmVzLCBzY29wZSwgdXBwZXI7CisgICAgICAg
IHVzZVN0cmljdERpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzKG5vZGUpLmZpbHRlcihpc1N0cmljdCk7
CisKKyAgICAgICAgc3dpdGNoICh1c2VTdHJpY3REaXJlY3RpdmVzLmxlbmd0aCkgeworICAgICAg
ICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IDE6CisgICAgICAgICAgICAgICAgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisgICAgICAg
ICAgICAgICAgdXBwZXIgPSBzY29wZS51cHBlcjsKKworICAgICAgICAgICAgICAgIGlmICh1cHBl
ciAmJiB1cHBlci5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAg
ICB1cHBlciA9IHVwcGVyLnVwcGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICh1cHBlciAmJiB1cHBlci5pc1N0cmljdCkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydCh1c2VTdHJpY3REaXJlY3RpdmVzWzBdLCAiVW5uZWNlc3NhcnkgJ3VzZSBz
dHJpY3QnLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh1c2VT
dHJpY3REaXJlY3RpdmVzWzFdLCAiTXVsdGlwbGUgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZXMuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjog
Y2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdCwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2FyeVVz
ZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9LAorCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2Fy
eVVzZVN0cmljdChub2RlLmJvZHkpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyBmYWxsLXRocm91Z2ggY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudHMu
CisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vbWF0dGR1dmFsbC5jb20vPgorICovCisi
dXNlIHN0cmljdCI7CisKKwordmFyIEZBTExUSFJPVUdIX0NPTU1FTlQgPSAvZmFsbHNcc3Rocm91
Z2gvOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHZhciBzd2l0Y2hlcyA9IFtdOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAi
U3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNvbnNlcXVl
bnQgPSBub2RlLmNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAgc3dpdGNoRGF0YSA9IHN3aXRj
aGVzW3N3aXRjaGVzLmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgICAgIGksCisgICAgICAgICAg
ICAgICAgY29tbWVudHMsCisgICAgICAgICAgICAgICAgY29tbWVudDsKKworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAqIFNvbWUgZGV2ZWxvcGVycyB3cmFwIGNhc2UgYm9kaWVzIGluIGJs
b2Nrcywgc28gaWYgdGhlcmUgaXMganVzdCBvbmUKKyAgICAgICAgICAgICAqIG5vZGUgYW5kIGl0
J3MgYSBibG9jayBzdGF0ZW1lbnQsIGNoZWNrIGluc2lkZS4KKyAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgaWYgKGNvbnNlcXVlbnQubGVuZ3RoID09PSAxICYmIGNvbnNlcXVlbnRbMF0udHlw
ZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBj
b25zZXF1ZW50WzBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVja2luZyBv
biBwcmV2aW91cyBjYXNlCisgICAgICAgICAgICBpZiAoIXN3aXRjaERhdGEubGFzdENhc2VDbG9z
ZWQpIHsKKworICAgICAgICAgICAgICAgIC8vIGEgZmFsbCB0aHJvdWdoIGNvbW1lbnQgd2lsbCBi
ZSB0aGUgbGFzdCB0cmFpbGluZyBjb21tZW50IG9mIHRoZSBsYXN0IGNhc2UKKyAgICAgICAgICAg
ICAgICBjb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMoc3dpdGNoRGF0YS5sYXN0Q2FzZSku
dHJhaWxpbmc7CisgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2NvbW1lbnRzLmxl
bmd0aCAtIDFdOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGNvbW1lbnQKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbW1lbnQgfHwgIUZBTExUSFJPVUdIX0NPTU1FTlQudGVzdChjb21t
ZW50LnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChzd2l0Y2hE
YXRhLmxhc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgXCJicmVh
a1wiIHN0YXRlbWVudCBiZWZvcmUgXCJ7e2NvZGV9fVwiLiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICB7IGNvZGU6IG5vZGUudGVzdCA/ICJjYXNlIiA6ICJkZWZhdWx0IiB9KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdyBkZWFsaW5nIHdp
dGggdGhlIGN1cnJlbnQgY2FzZQorICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3Nl
ZCA9IGZhbHNlOworICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZSA9IG5vZGU7CisKKyAg
ICAgICAgICAgIC8vIHRyeSB0byB2ZXJpZnkgdXNpbmcgc3RhdGVtZW50cyAtIGdvIGJhY2t3YXJk
cyBhcyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNlYXJjaAorICAgICAgICAgICAgaWYgKGNvbnNlcXVl
bnQubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gY29uc2VxdWVudC5sZW5ndGgg
LSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoLyg/OkJyZWFrfENv
bnRpbnVlfFJldHVybnxUaHJvdylTdGF0ZW1lbnQvLnRlc3QoY29uc2VxdWVudFtpXS50eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gdGhlIGNhc2Ugc3RhdGVtZW50IGhhcyBubyBzdGF0ZW1lbnRzLCBzbyBpdCBtdXN0IGxv
Z2ljYWxseSBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNl
Q2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAqIEFueSB3YXJuaW5ncyBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG5leHQgU3dpdGNoQ2Fz
ZSBvY2N1cnMuCisgICAgICAgICAgICAgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdhcm4gb24gdGhl
IGxhc3QgU3dpdGNoQ2FzZSwgc2luY2UgaXQgY2FuJ3QKKyAgICAgICAgICAgICAqIGZhbGwgdGhy
b3VnaCB0byBhbnl0aGluZy4KKyAgICAgICAgICAgICAqLworICAgICAgICB9LAorCisgICAgICAg
ICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBzd2l0Y2hl
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgICAgIGxh
c3RDYXNlQ2xvc2VkOiB0cnVlLAorICAgICAgICAgICAgICAgIGxhc3RDYXNlOiBudWxsCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAiU3dpdGNoU3RhdGVtZW50OmV4aXQi
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHN3aXRjaGVzLnBvcCgpOworICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sNjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYSBsZWFkaW5nL3Ry
YWlsaW5nIGRlY2ltYWwgcG9pbnQgaW4gYSBudW1lcmljIGxpdGVyYWwKKyAqIEBhdXRob3IgSmFt
ZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAg
ICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBub2RlLnZhbHVlID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLnJh
dy5pbmRleE9mKCIuIikgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkEgbGVhZGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEg
ZG90LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yYXcu
aW5kZXhPZigiLiIpID09PSBub2RlLnJhdy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJl
IGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjg6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ug
b2YgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpZmllcnMgYXMgdmFyaWFibGVzLgorICogQGF1
dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIC8qCisgICAgICogV2FsayB0aGUgc2NvcGUgY2hhaW4gbG9va2luZyBmb3IgZWl0
aGVyIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBvciBhCisgICAgICogVmFyaWFibGVEZWNsYXJhdGlv
biB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgbGVmdC1oYW5kIHNpZGUgb2YgdGhlCisgICAgICogQXNz
aWdubWVudEV4cHJlc3Npb24uIElmIHdlIGZpbmQgdGhlIEZ1bmN0aW9uRGVjbGFyYXRpb24gZmly
c3QsIHRoZW4gd2UKKyAgICAgKiB3YXJuLCBiZWNhdXNlIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBp
cyB0cnlpbmcgdG8gYmVjb21lIGEgVmFyaWFibGUgb3IgYQorICAgICAqIEZ1bmN0aW9uRXhwcmVz
c2lvbi4gSWYgd2UgZmluZCBhIFZhcmlhYmxlRGVjbGFyYXRpb24gZmlyc3QsIHRoZW4gd2UgaGF2
ZQorICAgICAqIGEgbGVnaXRpbWF0ZSBzaGFkb3cgdmFyaWFibGUuCisgICAgICovCisgICAgZnVu
Y3Rpb24gY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLCBuYW1lKSB7CisgICAgICAg
IHZhciB2YXJpYWJsZSwKKyAgICAgICAgICAgIGRlZiwKKyAgICAgICAgICAgIGksCisgICAgICAg
ICAgICBqOworCisgICAgICAgIC8vIExvb3Agb3ZlciBhbGwgb2YgdGhlIGlkZW50aWZpZXJzIGF2
YWlsYWJsZSBpbiBzY29wZS4KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNjb3BlLnZhcmlhYmxl
cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyaWFibGUgPSBzY29wZS52YXJpYWJsZXNb
aV07CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGlkZW50aWZpZXIsIHNlZSBpZiBpdCB3YXMg
ZGVmaW5lZCBpbiBfdGhpc18gc2NvcGUuCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmFy
aWFibGUuZGVmcy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGRlZiA9IHZhcmlhYmxl
LmRlZnNbal07CisKKyAgICAgICAgICAgICAgICAvLyBJZGVudGlmaWVyIGlzIGEgZnVuY3Rpb24g
YW5kIHdhcyBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCisgICAgICAgICAgICAgICAgaWYgKGRlZi5u
YW1lLm5hbWUgPT09IG5hbWUgJiYgZGVmLnR5cGUgPT09ICJGdW5jdGlvbk5hbWUiKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSB2YXJpYWJsZSBhbmQgd2FzIGRlY2xhcmVkIGlu
IHRoaXMgc2NvcGUuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBpcyBhIGxlZ2l0aW1hdGUgc2hh
ZG93IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZS5uYW1lID09PSBuYW1l
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGUgdXBwZXIg
c2NvcGUuCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBnbG9iYWwgc2NvcGUgYW5kIGhhdmVuJ3Qg
Zm91bmQgYW55dGhpbmcuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgp
LAorICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmxlZnQubmFtZTsKKworICAgICAgICAgICAg
aWYgKGNoZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihzY29wZSwgbmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bmFtZX19JyBpcyBhIGZ1bmN0aW9uLiIs
IHsgbmFtZTogbmFtZSB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICB9Owor
Cit9OworCit9LHt9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBpbXBsaWVkIGV2YWwgdmlhIHNl
dFRpbWVvdXQgYW5kIHNldEludGVydmFsCisgKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUu
Y2FsbGVlLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlID09PSAic2V0VGltZW91
dCIgfHwgY2FsbGVlID09PSAic2V0SW50ZXJ2YWwiKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRzWzBdOworICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnQgJiYgYXJndW1lbnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBhcmd1bWVu
dC52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2YWwuIENvbnNpZGVyIHBhc3NpbmcgYSBmdW5jdGlvbiBp
bnN0ZWFkIG9mIGEgc3RyaW5nLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZW5mb3JjZSBkZWNsYXJhdGlvbnMgaW4gcHJvZ3JhbSBvciBmdW5jdGlvbiBi
b2R5IHJvb3QuCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIC8qKgorICAgICAqIEZpbmQgdGhlIG5lYXJlc3QgUHJvZ3JhbSBvciBGdW5jdGlv
biBhbmNlc3RvciBub2RlLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuY2VzdG9yJ3MgdHlw
ZSBhbmQgZGlzdGFuY2UgZnJvbSBub2RlLgorICAgICAqLworICAgIGZ1bmN0aW9uIG5lYXJlc3RC
b2R5KCkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwK
KyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpLAorICAgICAgICAgICAgZ2Vu
ZXJhdGlvbiA9IDE7CisKKyAgICAgICAgd2hpbGUgKGFuY2VzdG9yICYmIFsiUHJvZ3JhbSIsICJG
dW5jdGlvbkRlY2xhcmF0aW9uIiwKKyAgICAgICAgICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
Il0uaW5kZXhPZihhbmNlc3Rvci50eXBlKSA8IDApIHsKKyAgICAgICAgICAgIGdlbmVyYXRpb24g
Kz0gMTsKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3JzLnBvcCgpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC8vIFR5cGUgb2YgY29udGFpbmluZyBh
bmNlc3RvcgorICAgICAgICAgICAgdHlwZTogYW5jZXN0b3IudHlwZSwKKyAgICAgICAgICAgIC8v
IFNlcGFyYXRpb24gYmV0d2VlbiBhbmNlc3RvciBhbmQgbm9kZQorICAgICAgICAgICAgZGlzdGFu
Y2U6IGdlbmVyYXRpb24KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1
cmUgdGhhdCBhIGdpdmVuIG5vZGUgaXMgYXQgYSBwcm9ncmFtIG9yIGZ1bmN0aW9uIGJvZHkncyBy
b290LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBEZWNsYXJhdGlvbiBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
KG5vZGUpIHsKKyAgICAgICAgdmFyIGJvZHkgPSBuZWFyZXN0Qm9keShub2RlKSwKKyAgICAgICAg
ICAgIHZhbGlkID0gKChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiAmJiBib2R5LmRpc3RhbmNlID09
PSAxKSB8fAorICAgICAgICAgICAgICAgIGJvZHkuZGlzdGFuY2UgPT09IDIpOworCisgICAgICAg
IGlmICghdmFsaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNb3ZlIHt7
dHlwZX19IGRlY2xhcmF0aW9uIHRvIHt7Ym9keX19IHJvb3QuIiwKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IChub2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xh
cmF0aW9uIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24iIDogInZhcmlhYmxl
IiksCisgICAgICAgICAgICAgICAgICAgIGJvZHk6IChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiA/
CisgICAgICAgICAgICAgICAgICAgICAgICAicHJvZ3JhbSIgOiAiZnVuY3Rpb24gYm9keSIpCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVjaywKKyAgICAg
ICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYm90aCIpIHsKKyAgICAgICAgICAgICAgICBjaGVj
ayhub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sNzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFZhbGlkYXRlIHN0cmluZ3MgcGFzc2VkIHRvIHRoZSBSZWdFeHAgY29uc3RydWN0b3IK
KyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5j
dGlvbiBpc1N0cmluZyhub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSA9
PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5nIjsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBl
ID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gIlJlZ0V4cCIgJiYgaXNT
dHJpbmcobm9kZS5hcmd1bWVudHNbMF0pKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIGlmIChpc1N0cmluZyhub2RlLmFyZ3VtZW50c1sxXSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlLCBub2RlLmFyZ3Vt
ZW50c1sxXS52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCBlLm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisg
ICAgICAgICJOZXdFeHByZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSw3Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHVzYWdlIG9mIF9faXRlcmF0b3JfXyBwcm9wZXJ0eQorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAg
ICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgorICAgICAgICAgICAgICAgICAgICAobm9kZS5w
cm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09PSAi
X19pdGVyYXRvcl9fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
KG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJvcGVydHkudmFsdWUg
PT09ICJfX2l0ZXJhdG9yX18iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJSZXNlcnZlZCBuYW1lICdfX2l0ZXJhdG9yX18nLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNzM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBsYWJlbHMgdGhh
dCBhcmUgdGhlIHNhbWUgYXMgYW4gaWRlbnRpZmllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFu
IE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9u
IGZpbmRJZGVudGlmaWVyKHNjb3BlLCBpZGVudGlmaWVyKSB7CisgICAgICAgIHZhciBmb3VuZCA9
IGZhbHNlOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlh
YmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gaWRlbnRpZmllcikgewor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkg
eworICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgPT09IGlkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgbm90IGZvdW5kIHRoZSBpZGVudGlmaWVy
IGluIHRoaXMgc2NvcGUsIGNoZWNrIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gc2NvcGUuCisgICAg
ICAgIGlmIChzY29wZS51cHBlciAmJiAhZm91bmQpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
SWRlbnRpZmllcihzY29wZS51cHBlciwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICAvLyBGZXRjaCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgdmFyIHNjb3BlID0g
Y29udGV4dC5nZXRTY29wZSgpOworCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRo
ZSBpZGVudGlmaWVyIHdhbGtpbmcgdXAgdGhlIHNjb3BlLCBzdGFydGluZworICAgICAgICAgICAg
Ly8gd2l0aCB0aGUgaW5uZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgaWYgKGZpbmRJZGVudGlm
aWVyKHNjb3BlLCBub2RlLmxhYmVsLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkZvdW5kIGlkZW50aWZpZXIgd2l0aCBzYW1lIG5hbWUgYXMgbGFiZWwuIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDc0Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBE
aXNhbGxvdyBMYWJlbGVkIFN0YXRlbWVudHMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJM
YWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWxlZCBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0s
CisKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICBpZiAobm9kZS5sYWJlbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGJyZWFrIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICB9LAorCisgICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUubGFiZWwpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbCBpbiBjb250aW51ZSBzdGF0
ZW1lbnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisKKyAgICB9OworCit9Owor
Cit9LHt9XSw3NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrcyB3aXRoIG5vIHJlYXNvbiB0byBleGlzdAor
ICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBvY2N1cnJlbmNlIG9mIEJsb2NrU3RhdGVtZW50ID4g
QmxvY2tTdGF0ZW1lbnQgb3IKKyAgICAgICAgICAgIC8vIFByb2dyYW0gPiBCbG9ja1N0YXRlbWVu
dAorICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7
CisgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgfHwgcGFy
ZW50LnR5cGUgPT09ICJQcm9ncmFtIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJCbG9jayBpcyBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgYmxvY2suIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw3NjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNh
bGxvdyBpZiBhcyB0aGUgb25seSBzdGF0bWVuZXQgaW4gYW4gZWxzZSBibG9jaworICogQGF1dGhv
ciBCcmFuZG9uIE1pbGxzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgYW5jZXN0
b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBh
bmNlc3RvcnMucG9wKCksCisgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnMu
cG9wKCk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9j
a1N0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LmJvZHkubGVuZ3RoID09
PSAxICYmIGdyYW5kcGFyZW50ICYmCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LnR5
cGUgPT09ICJJZlN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID09PSBn
cmFuZHBhcmVudC5hbHRlcm5hdGUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVW5leHBlY3RlZCBpZiBhcyB0aGUgb25seSBzdGF0ZW1lbnQgaW4gYW4gZWxzZSBibG9j
ay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDc3
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgY3JlYXRpb24gb2YgZnVuY3Rpb24gaW5zaWRlIGEgbG9vcAorICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9u
IGNoZWNrRm9yTG9vcHMobm9kZSkgeworICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5n
ZXRBbmNlc3RvcnMoKTsKKworICAgICAgICBpZiAoYW5jZXN0b3JzLnNvbWUoZnVuY3Rpb24oYW5j
ZXN0b3IpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci50eXBlID09PSAiRm9yU3RhdGVt
ZW50IiB8fCBhbmNlc3Rvci50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiIHx8IGFuY2VzdG9yLnR5
cGUgPT09ICJEb1doaWxlU3RhdGVtZW50IjsKKyAgICAgICAgfSkpIHsKKyAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJEb24ndCBtYWtlIGZ1bmN0aW9ucyB3aXRoaW4gYSBsb29wIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjogY2hlY2tGb3JMb29wcywKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBj
aGVja0Zvckxvb3BzCisgICAgfTsKK307CisKK30se31dLDc4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgZ3Jv
dXBlZCByZXF1aXJlIHN0YXRlbWVudHMgZm9yIE5vZGUuSlMKKyAqIEBhdXRob3IgUmFwaGFlbCBQ
aWd1bGxhCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0
aGUgbGlzdCBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgICAqCisgICAgICogQHJldHVybnMge3N0
cmluZ1tdfSBBbiBhcnJheSBvZiBidWlsdC1pbiBOb2RlLmpzIG1vZHVsZXMuCisgICAgICovCisg
ICAgZnVuY3Rpb24gZ2V0QnVpbHRpbk1vZHVsZXMoKSB7CisgICAgICAgIC8vIFRoaXMgbGlzdCBp
cyBnZW5lcmF0ZWQgdXNpbmcgYHJlcXVpcmUoInJlcGwiKS5fYnVpbHRpbkxpYnMuY29uY2F0KCdy
ZXBsJykuc29ydCgpYAorICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgbGlzdCB3YXMgZ2VuZXJh
dGVkIHVzaW5nIG5vZGUgdjAuMTEuOQorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgImFz
c2VydCIsICJidWZmZXIiLCAiY2hpbGRfcHJvY2VzcyIsICJjbHVzdGVyIiwgImNyeXB0byIsCisg
ICAgICAgICAgICAiZGdyYW0iLCAiZG5zIiwgImRvbWFpbiIsICJldmVudHMiLCAiZnMiLCAiaHR0
cCIsICJodHRwcyIsCisgICAgICAgICAgICAibmV0IiwgIm9zIiwgInBhdGgiLCAicHVueWNvZGUi
LCAicXVlcnlzdHJpbmciLCAicmVhZGxpbmUiLAorICAgICAgICAgICAgInJlcGwiLCAic21hbGxv
YyIsICJzdHJlYW0iLCAic3RyaW5nX2RlY29kZXIiLCAidGxzIiwgInR0eSIsCisgICAgICAgICAg
ICAidXJsIiwgInV0aWwiLCAidm0iLCAiemxpYiIKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICB2
YXIgQlVJTFRJTl9NT0RVTEVTID0gZ2V0QnVpbHRpbk1vZHVsZXMoKTsKKworICAgIHZhciBERUNM
X1JFUVVJUkUgPSAicmVxdWlyZSIsCisgICAgICAgIERFQ0xfVU5JTklUSUFMSVpFRCA9ICJ1bmlu
aXRpYWxpemVkIiwKKyAgICAgICAgREVDTF9PVEhFUiA9ICJvdGhlciI7CisKKyAgICB2YXIgUkVR
X0NPUkUgPSAiY29yZSIsCisgICAgICAgIFJFUV9GSUxFID0gImZpbGUiLAorICAgICAgICBSRVFf
TU9EVUxFID0gIm1vZHVsZSIsCisgICAgICAgIFJFUV9DT01QVVRFRCA9ICJjb21wdXRlZCI7CisK
KyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIGEgZGVjbGFyYXRpb24gc3Rh
dGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24gVGhlIGluaXQg
bm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9
IFRoZSB0eXBlIG9mIGRlY2xhcmF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBleHByZXNzaW9uLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIGdldERlY2xhcmF0aW9uVHlwZShpbml0RXhwcmVzc2lvbikg
eworICAgICAgICBpZiAoIWluaXRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICAvLyAidmFyIHg7
IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xfVU5JTklUSUFMSVpFRDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpbml0RXhwcmVzc2lvbi50eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmCisg
ICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYm
CisgICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiCisg
ICAgICAgICkgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgndXRpbCcpOyIKKyAg
ICAgICAgICAgIHJldHVybiBERUNMX1JFUVVJUkU7CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdEV4
cHJlc3Npb24udHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAvLyAi
dmFyIHggPSByZXF1aXJlKCdnbG9iJykuR2xvYjsiCisgICAgICAgICAgICByZXR1cm4gZ2V0RGVj
bGFyYXRpb25UeXBlKGluaXRFeHByZXNzaW9uLm9iamVjdCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyAidmFyIHggPSA0MjsiCisgICAgICAgIHJldHVybiBERUNMX09USEVSOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgbW9kdWxlIHRoYXQgaXMgbG9h
ZGVkIHZpYSByZXF1aXJlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24g
VGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5z
IHtzdHJpbmd9IFRoZSBtb2R1bGUgdHlwZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpbmZlck1v
ZHVsZVR5cGUoaW5pdEV4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKGluaXRFeHByZXNzaW9uLnR5
cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVx
dWlyZSgnZ2xvYicpLkdsb2I7IgorICAgICAgICAgICAgcmV0dXJuIGluZmVyTW9kdWxlVHlwZShp
bml0RXhwcmVzc2lvbi5vYmplY3QpOworICAgICAgICB9IGVsc2UgaWYgKGluaXRFeHByZXNzaW9u
WyJhcmd1bWVudHMiXS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIC8vICJ2YXIgeCA9IHJl
cXVpcmUoKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0NPTVBVVEVEOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGFyZyA9IGluaXRFeHByZXNzaW9uWyJhcmd1bWVudHMiXVswXTsKKworICAg
ICAgICBpZiAoYXJnLnR5cGUgIT09ICJMaXRlcmFsIiB8fCB0eXBlb2YgYXJnLnZhbHVlICE9PSAi
c3RyaW5nIikgeworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSg0Mik7IgorICAgICAg
ICAgICAgcmV0dXJuIFJFUV9DT01QVVRFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChCVUlM
VElOX01PRFVMRVMuaW5kZXhPZihhcmcudmFsdWUpICE9PSAtMSkgeworICAgICAgICAgICAgLy8g
InZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9DT1JFOwor
ICAgICAgICB9IGVsc2UgaWYgKC9eXC57MCwyfVwvLy50ZXN0KGFyZy52YWx1ZSkpIHsKKyAgICAg
ICAgICAgIC8vICJ2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7IgorICAgICAgICAgICAg
cmV0dXJuIFJFUV9GSUxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gInZhciBh
c3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9NT0RVTEU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgbGlzdCBv
ZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaXMgbWl4ZWQsIGkuZS4gd2hldGhlciBpdAorICAgICAq
IGNvbnRhaW5zIGJvdGggcmVxdWlyZSBhbmQgb3RoZXIgZGVjbGFyYXRpb25zLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25zIFRoZSBsaXN0IG9mIFZhcmlhYmxlRGVjbGFyYXRv
cnMuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlY2xhcmF0aW9ucyBh
cmUgbWl4ZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc01peGVkKGRl
Y2xhcmF0aW9ucykgeworICAgICAgICB2YXIgY29udGFpbnMgPSB7fTsKKworICAgICAgICBkZWNs
YXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIHZh
ciB0eXBlID0gZ2V0RGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uLmluaXQpOworICAgICAgICAg
ICAgY29udGFpbnNbdHlwZV0gPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4g
ISEoCisgICAgICAgICAgICBjb250YWluc1tERUNMX1JFUVVJUkVdICYmCisgICAgICAgICAgICAo
Y29udGFpbnNbREVDTF9VTklOSVRJQUxJWkVEXSB8fCBjb250YWluc1tERUNMX09USEVSXSkKKyAg
ICAgICAgKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhbGwgcmVxdWlyZSBk
ZWNsYXJhdGlvbnMgaW4gdGhlIGdpdmVuIGxpc3QgYXJlIG9mIHRoZSBzYW1lCisgICAgICogdHlw
ZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGRlY2xhcmF0aW9ucyBUaGUgbGlzdCBvZiBWYXJp
YWJsZURlY2xhcmF0b3JzLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBk
ZWNsYXJhdGlvbnMgYXJlIGdyb3VwZWQsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5j
dGlvbiBpc0dyb3VwZWQoZGVjbGFyYXRpb25zKSB7CisgICAgICAgIHZhciBmb3VuZCA9IHt9Owor
CisgICAgICAgIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgewor
ICAgICAgICAgICAgaWYgKGdldERlY2xhcmF0aW9uVHlwZShkZWNsYXJhdGlvbi5pbml0KSA9PT0g
REVDTF9SRVFVSVJFKSB7CisgICAgICAgICAgICAgICAgZm91bmRbaW5mZXJNb2R1bGVUeXBlKGRl
Y2xhcmF0aW9uLmluaXQpXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmb3VuZCkubGVuZ3RoIDw9IDE7CisgICAgfQorCisK
KyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIGdyb3VwaW5nID0gISFjb250ZXh0Lm9wdGlvbnNbMF07
CisKKyAgICAgICAgICAgIGlmIChpc01peGVkKG5vZGUuZGVjbGFyYXRpb25zKSkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgICAgICAiRG8gbm90IG1peCAncmVxdWlyZScgYW5kIG90aGVyIGRlY2xhcmF0
aW9ucy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBp
bmcgJiYgIWlzR3JvdXBlZChub2RlLmRlY2xhcmF0aW9ucykpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgIkRvIG5vdCBtaXggY29yZSwgbW9kdWxlLCBmaWxlIGFuZCBjb21wdXRlZCByZXF1aXJl
cy4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDc5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgZm9yIGlu
ZGVudGF0aW9uCisgKiBAYXV0aG9yIEphcnkgTmllYnVyCisgKiBAY29weXJpZ2h0IDIwMTQgTmlj
aG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQg
SmFyeSBOaWVidXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgc21hcnRUYWJzID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgdmFyIENPTU1FTlRf
U1RBUlQgPSAvXlxzKlwvXCovLAorICAgICAgICBNQVlCRV9DT01NRU5UID0gL15ccypcKi87CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBdCBsZWFzdCBvbmUgc3BhY2Ug
Zm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAgICAgICAqIG9yIHRoZSByZXZlcnNlIGJlZm9yZSBu
b24tdGFiLy1zcGFjZQorICAgICAgICAgICAgICogY2hhcmFjdGVycyBiZWdpbi4KKyAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgdmFyIHJlZ2V4ID0gL14oPz1bXHQgXSooXHQgfCBcdCkpLywK
KyAgICAgICAgICAgICAgICBtYXRjaCwKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGNvbnRleHQu
Z2V0U291cmNlTGluZXMoKTsKKworICAgICAgICAgICAgaWYgKHNtYXJ0VGFicykgeworICAgICAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQXQgbGVhc3Qgb25lIHNwYWNlIGZvbGxv
d2VkIGJ5IGEgdGFiCisgICAgICAgICAgICAgICAgICogYmVmb3JlIG5vbi10YWIvLXNwYWNlIGNo
YXJhY3RlcnMgYmVnaW4uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmVn
ZXggPSAvXig/PVtcdCBdKiBcdCkvOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5l
cy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkpIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJl
Z2V4LmV4ZWMobGluZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIU1BWUJFX0NPTU1FTlQudGVzdChsaW5lKSAmJiAhQ09NTUVOVF9T
VEFSVC50ZXN0KGxpbmVzW2kgLSAxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsIHsgbGluZTogaSArIDEsIGNvbHVtbjogbWF0Y2guaW5kZXggKyAxIH0s
ICJNaXhlZCBzcGFjZXMgYW5kIHRhYnMuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9OworCit9
OworCit9LHt9XSw4MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdXNlIG9mIG11bHRpcGxlIHNwYWNlcy4KKyAqIEBhdXRo
b3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuLgorICogQGNvcHlyaWdodCAyMDE0IFZp
Z25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgT1BFUkFUT1JTID0gWworICAgICAgICAiKiIsICIvIiwgIiUiLCAiKyIsICItIiwgIjw8
IiwgIj4+IiwgIj4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiaW4iLAorICAgICAgICAiaW5z
dGFuY2VvZiIsICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwgIiYiLCAiXiIsICJ8IiwgIiYmIiwg
Inx8IiwgIj0iLAorICAgICAgICAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0iLCAiPDw9Iiwg
Ij4+PSIsICI+Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKKyAgICAgICAgIj8iLCAiOiIsICIsIgor
ICAgIF0sIGVyck9wcyA9IFtdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhl
bHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRz
IGFuIEFTVCBub2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAg
KiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNdWx0aXBsZSBzcGFjZXMgZm91bmQgYXJvdW5kICciICsg
ZXJyT3BzLnNoaWZ0KCkgKyAiJy4iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
d2hldGhlciB0aGUgb3BlcmF0b3IgaXMgaW4gc2FtZSBsaW5lIGFzIHR3byBhZGphY2VudCB0b2tl
bnMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBv
cGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0
byB0aGUgb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgb3Bl
cmF0b3IuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG9wZXJhdG9yIGlz
IGluIHNhbWUgbGluZSBhcyB0d28gYWRqYWNlbnQgdG9rZW5zLgorICAgICAqIEBwcml2YXRlCisg
ICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpIHsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmxvYy5lbmQubGluZSA9PT0gbGVmdC5sb2MuZW5kLmxp
bmUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmxvYy5lbmQubGluZSA9PT0g
cmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgd2hl
dGhlciB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCB0aGUgb3BlcmF0b3IuCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBvcGVyYXRvci4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0byB0aGUgb3Bl
cmF0b3IuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IuCisg
ICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNl
cy4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTXVsdGlTcGFjZWQo
bGVmdCwgcmlnaHQsIG9wZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBvcGVyYXRvci5yYW5nZVsw
XSAtIGxlZnQucmFuZ2VbMV0gPiAxIHx8CisgICAgICAgICAgICAgICAgcmlnaHQucmFuZ2VbMF0g
LSBvcGVyYXRvci5yYW5nZVsxXSA+IDE7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRv
a2VucyBhbmQgdmFsaWRhdGUgdGhlIHNwYWNpbmcuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBs
ZWZ0IFRoZSB0b2tlbiBsZWZ0IHRvIHRoZSBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IHJpZ2h0IFRoZSB0b2tlbiByaWdodCB0byB0aGUgb3BlcmF0b3IuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgbXVsdGlwbGUgc3BhY2VzIHdlcmUgZm91bmQuCisgICAgICog
QHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiB2YWxpZGF0ZVNwYWNpbmcobGVmdCwgcmln
aHQpIHsKKyAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xl
ZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpLAorICAgICAgICAgICAgb3BlcmF0
b3I7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA8
IGw7ICsraSkgeworICAgICAgICAgICAgbGVmdCA9IHRva2Vuc1tpIC0gMV07CisgICAgICAgICAg
ICBvcGVyYXRvciA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIHJpZ2h0ID0gdG9rZW5zW2kgKyAx
XTsKKworICAgICAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yLnR5cGUgPT09ICJQdW5j
dHVhdG9yIiAmJiBPUEVSQVRPUlMuaW5kZXhPZihvcGVyYXRvci52YWx1ZSkgPj0gMCAmJgorICAg
ICAgICAgICAgICAgIGlzU2FtZUxpbmUobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSAmJiBpc011bHRp
U3BhY2VkKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICBlcnJPcHMu
cHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisK
KyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNlcyBvbiB0
aGUgZXhwcmVzc2lvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8g
Y2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjaGVja0V4cHJlc3Npb24obm9kZSkgeworICAgICAgICBpZiAodmFsaWRh
dGVTcGFjaW5nKG5vZGUubGVmdCwgbm9kZS5yaWdodCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChu
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydCBpZiB0aGVy
ZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFyb3VuZCBjb25kaXRpb25hbCB0ZXJuYXJ5IG9wZXJhdG9y
cy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBjaGVja0NvbmRpdGlvbmFsKG5vZGUpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlU3BhY2luZyhu
b2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodmFsaWRhdGVTcGFjaW5nKG5vZGUuY29uc2VxdWVudCwg
bm9kZS5hbHRlcm5hdGUpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNw
YWNlcyBhcm91bmQgZXF1YWwgb3BlcmF0b3IgaW4gdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tW
YXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmIHZhbGlkYXRlU3BhY2luZyhub2Rl
LmlkLCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNw
YWNlcyBhcm91bmQgbGlzdCBvZiBpdGVtcyBpbiBvYmplY3RzLCBhcnJheXMsCisgICAgICogZnVu
Y3Rpb24gcGFyYW1ldGVycywgc2VxdWVuY2VzIGFuZCBkZWNsYXJhdGlvbnMuCisgICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgb2Ygbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrTGlzdChub2Rl
LCBwcm9wZXJ0eSkgeworICAgICAgICB2YXIgaXRlbXMgPSBub2RlW3Byb3BlcnR5XTsKKworICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAg
ICAgICAgICAgdmFyIGxlZnQgPSBpdGVtc1tpIC0gMV0sCisgICAgICAgICAgICAgICAgcmlnaHQg
PSBpdGVtc1tpXSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGNvbnRleHQuZ2V0VG9rZW5C
ZWZvcmUocmlnaHQpOworCisgICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IudHlw
ZSA9PT0gIlB1bmN0dWF0b3IiICYmIG9wZXJhdG9yLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpICYmIGlzTXVsdGlT
cGFjZWQobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJP
cHMucHVzaChvcGVyYXRvci52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChyaWdo
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGNoZWNrRXhwcmVzc2lvbiwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBjaGVja0V4cHJl
c3Npb24sCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGNoZWNrRXhwcmVzc2lvbiwKKyAg
ICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uZGl0aW9uYWwsCisgICAgICAg
ICJWYXJpYWJsZURlY2xhcmF0b3IiOiBjaGVja1ZhciwKKyAgICAgICAgIkFycmF5RXhwcmVzc2lv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZWxlbWVu
dHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgInByb3BlcnRpZXMiKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGNoZWNrTGlzdChub2RlLCAicGFyYW1zIik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tMaXN0KG5v
ZGUsICJwYXJhbXMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgImRlY2xhcmF0
aW9ucyIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODE6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyB3aGVuIHVzaW5nIG11bHRpbGluZSBzdHJpbmdzCisgKiBAYXV0aG9yIElseWEgVm9sb2Rpbgor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwi
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbGluZUJyZWFrID0gL1xuLzsKKyAg
ICAgICAgICAgIGlmIChsaW5lQnJlYWsudGVzdChub2RlLnJhdykpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiTXVsdGlsaW5lIHN1cHBvcnQgaXMgbGltaXRlZCB0byBi
cm93c2VycyBzdXBwb3J0aW5nIEVTNSBvbmx5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sODI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBtdWx0aXBsZSBibGFuayBsaW5l
cy4KKyAqIGltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSB0aGUgbm8tdHJhaWxpbmctc3BhY2Vz
IHJ1bGUuCisgKiBAYXV0aG9yIEdyZWcgQ29jaGFyZAorICogQGNvcHlyaWdodCAyMDE0IEdyZWcg
Q29jaGFyZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8v
IFVzZSBvcHRpb25zLm1heCBvciAyIGFzIGRlZmF1bHQKKyAgICB2YXIgbnVtTGluZXMgPSAyOwor
CisgICAgaWYgKGNvbnRleHQub3B0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgbnVtTGluZXMgPSBj
b250ZXh0Lm9wdGlvbnNbMF0ubWF4OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hlY2tCbGFua0xpbmVzKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKSwKKyAgICAgICAg
ICAgICAgICBjdXJyZW50TG9jYXRpb24gPSAtMSwKKyAgICAgICAgICAgICAgICBsYXN0TG9jYXRp
b24sCisgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyID0gMCwKKyAgICAgICAgICAgICAgICBs
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICB0cmltbWVkTGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rp
b24oc3RyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIudHJpbSgpOworICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBBZ2dyZWdhdGUgYW5kIGNvdW50IGJsYW5r
IGxpbmVzCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbGFzdExvY2F0aW9uID0g
Y3VycmVudExvY2F0aW9uOworICAgICAgICAgICAgICAgIGN1cnJlbnRMb2NhdGlvbiA9IHRyaW1t
ZWRMaW5lcy5pbmRleE9mKCIiLGN1cnJlbnRMb2NhdGlvbiArIDEpOworICAgICAgICAgICAgICAg
IGlmIChsYXN0TG9jYXRpb24gPT09IGN1cnJlbnRMb2NhdGlvbiAtIDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYmxhbmtDb3VudGVyKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGJsYW5rQ291bnRlciA+PSBudW1MaW5lcykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogbGFzdExvY2F0aW9uICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IGxpbmVzW2xhc3RMb2NhdGlvbl0ubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24s
ICJNdWx0aXBsZSBibGFuayBsaW5lcyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsbHksIHJlc2V0IHRoZSBibGFuayBj
b3VudGVyCisgICAgICAgICAgICAgICAgICAgIGJsYW5rQ291bnRlciA9IDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudExvY2F0aW9uICE9PSAtMSk7Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmUt
YXNzaWduaW5nIG5hdGl2ZSBvYmplY3RzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIG5hdGl2ZU9iamVjdHMgPSBbIkFycmF5IiwgIkJv
b2xlYW4iLCAiRGF0ZSIsICJkZWNvZGVVUkkiLAorICAgICAgICAgICAgICAgICAgICAgICAgImRl
Y29kZVVSSUNvbXBvbmVudCIsICJlbmNvZGVVUkkiLCAiZW5jb2RlVVJJQ29tcG9uZW50IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJFcnJvciIsICJldmFsIiwgIkV2YWxFcnJvciIsICJGdW5j
dGlvbiIsICJpc0Zpbml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXNOYU4iLCAiSlNP
TiIsICJNYXRoIiwgIk51bWJlciIsICJPYmplY3QiLCAicGFyc2VJbnQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcnNlRmxvYXQiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIs
ICJSZWdFeHAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyIsICJTeW50YXhFcnJv
ciIsICJUeXBlRXJyb3IiLCAiVVJJRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIk1h
cCIsICJOYU4iLCAiU2V0IiwgIldlYWtNYXAiLCAiSW5maW5pdHkiLCAidW5kZWZpbmVkIl07CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChuYXRpdmVPYmplY3RzLmluZGV4T2Yobm9kZS5sZWZ0
Lm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBub2Rl
LmxlZnQubmFtZSArICIgaXMgYSByZWFkLW9ubHkgbmF0aXZlIG9iamVjdC4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2RlLmlk
Lm5hbWUpID49IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVk
ZWZpbml0aW9uIG9mICd7e25hdGl2ZU9iamVjdH19Jy4iLCB7IG5hdGl2ZU9iamVjdDogbm9kZS5p
ZC5uYW1lIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sODQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IEEgcnVsZSB0byBkaXNhbGxvdyBuZWdhdGVkIGxlZnQgb3BlcmFuZHMgb2YgdGhlIGBp
bmAgb3BlcmF0b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJpbiIgJiYg
bm9kZS5sZWZ0LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24iICYmIG5vZGUubGVmdC5vcGVyYXRv
ciA9PT0gIiEiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBg
aW5gIGV4cHJlc3Npb24ncyBsZWZ0IG9wZXJhbmQgaXMgbmVnYXRlZCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODU6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBuZXN0
ZWQgdGVybmFyeSBleHByZXNzaW9ucworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQ29uZGl0aW9u
YWxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYWx0
ZXJuYXRlLnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUuY29uc2VxdWVudC50eXBlID09PSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIikg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgbmVzdCB0ZXJu
YXJ5IGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsK
KworfSx7fV0sODY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIG5ldyBGdW5jdGlvbgorICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gIkZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgRnVuY3Rpb24gY29uc3RydWN0b3IgaXMgZXZhbC4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg3Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBB
IHJ1bGUgdG8gZGlzYWxsb3cgY2FsbHMgdG8gdGhlIE9iamVjdCBjb25zdHJ1Y3RvcgorICogQGF1
dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJP
YmplY3QiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBvYmpl
Y3QgbGl0ZXJhbCBub3RhdGlvbiB7fSBpcyBwcmVmZXJyYWJsZS4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg4OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHVz
ZSBvZiBuZXcgb3BlcmF0b3Igd2l0aCB0aGUgYHJlcXVpcmVgIGZ1bmN0aW9uCisgKiBAYXV0aG9y
IFdpbCBNb29yZSBJSUkKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUuY2FsbGVlLm5hbWUg
PT09ICJyZXF1aXJlIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIHVzZSBvZiBuZXcgd2l0aCByZXF1aXJlLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5n
IGNvbnN0cnVjdG9yIGZvciB3cmFwcGVyIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGlu
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHdyYXBwZXJPYmpl
Y3RzID0gWyJTdHJpbmciLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiTWF0aCIsICJKU09OIl07Cisg
ICAgICAgICAgICBpZiAod3JhcHBlck9iamVjdHMuaW5kZXhPZihub2RlLmNhbGxlZS5uYW1lKSA+
IC0xKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCB1c2Ug
e3tmbn19IGFzIGEgY29uc3RydWN0b3IuIiwgeyBmbjogbm9kZS5jYWxsZWUubmFtZSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDkwOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgc3RhdGVtZW50cyB3aXRoIGZ1bmN0aW9uIGludm9jYXRpb24gcHJlY2VkZWQgYnkKKyAq
ICJuZXciIGFuZCBub3QgcGFydCBvZiBhc3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2Rp
bgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRXhw
cmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5v
ZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSAnbmV3JyBmb3Igc2lkZSBlZmZlY3Rz
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sOTE6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gb2JqZWN0IHByb3BlcnR5IG9mIHRoZSBnbG9iYWwgb2Jq
ZWN0IChNYXRoIGFuZCBKU09OKSBhcyBhIGZ1bmN0aW9uCisgKiBAYXV0aG9yIEphbWVzIEFsbGFy
ZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNh
bGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5j
YWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBub2RlLmNhbGxlZS5uYW1lOworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAiTWF0aCIg
fHwgbmFtZSA9PT0gIkpTT04iKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICIne3tuYW1lfX0nIGlzIG5vdCBhIGZ1bmN0aW9uLiIsIHsgbmFtZTogbmFtZSB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSw5MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgaW4gc3Ry
aW5nIGxpdGVyYWxzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9PSAic3RyaW5n
IikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhciBtYXRjaCA9IG5vZGUucmF3Lm1hdGNoKC9eKFteXFxdfFxcW14wLTddKSpcXChbMC03XSkv
KSwKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0OworCisgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgICBvY3RhbERpZ2l0ID0gbWF0Y2hbMl07CisgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBvY3RhbDogJ1xce3tvY3RhbERpZ2l0
fX0nLiBVc2UgJ1xcdS4uLi4nIGluc3RlYWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsg
b2N0YWxEaWdpdDogb2N0YWxEaWdpdCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgfTsKKworfTsKKworfSx7fV0sOTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRpYWxpemluZyBv
Y3RhbCBsaXRlcmFsCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gIm51bWJlciIgJiYgL14w
WzAtN10vLnRlc3Qobm9kZS5yYXcpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIk9jdGFsIGxpdGVyYWxzIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDk0OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzdHJpbmcg
Y29uY2F0ZW5hdGlvbiB3aGVuIHVzaW5nIF9fZGlybmFtZSBhbmQgX19maWxlbmFtZQorICogQGF1
dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIE1BVENI
RVIgPSAvXl9fKD86ZGlyfGZpbGUpbmFtZSQvOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAg
ICAgIHZhciBsZWZ0ID0gbm9kZS5sZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0ID0gbm9kZS5y
aWdodDsKKworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICIrIiAmJgorICAgICAg
ICAgICAgICAgICAgICAoKGxlZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIE1BVENIRVIudGVz
dChsZWZ0Lm5hbWUpKSB8fAorICAgICAgICAgICAgICAgICAgICAocmlnaHQudHlwZSA9PT0gIklk
ZW50aWZpZXIiICYmIE1BVENIRVIudGVzdChyaWdodC5uYW1lKSkpCisgICAgICAgICAgICApIHsK
KworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgcGF0aC5qb2luKCkg
b3IgcGF0aC5yZXNvbHZlKCkgaW5zdGVhZCBvZiArIHRvIGNyZWF0ZSBwYXRocy4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgdW5hcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IG9wZXJhdG9yICciICsg
bm9kZS5vcGVyYXRvciArICInIHVzZWQuIik7CisgICAgICAgIH0KKworICAgIH07CisKK307CisK
K30se31dLDk2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZW52KCkKKyAqIEBhdXRob3Ig
VmlnbmVzaCBBbmFuZAorICogQGNvcHlyaWdodCAyMDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9i
amVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9IG5vZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09
ICJwcm9jZXNzIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlO
YW1lID09PSAiZW52IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIHVzZSBvZiBwcm9jZXNzLmVudi4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw5NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdGhlIHVzZSBvZiBwcm9j
ZXNzLmV4aXQoKQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlOwor
CisgICAgICAgICAgICBpZiAoY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBj
YWxsZWUub2JqZWN0Lm5hbWUgPT09ICJwcm9jZXNzIiAmJgorICAgICAgICAgICAgICAgIGNhbGxl
ZS5wcm9wZXJ0eS5uYW1lID09PSAiZXhpdCIKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEb24ndCB1c2UgcHJvY2Vzcy5leGl0KCk7IHRocm93
IGFuIGVycm9yIGluc3RlYWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07
CisKK307CisKK30se31dLDk4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19wcm90b19fIHByb3Bl
cnR5CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKworICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVydHkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUucHJvcGVydHku
bmFtZSA9PT0gIl9fcHJvdG9fXyIgJiYgIW5vZGUuY29tcHV0ZWQpIHx8CisgICAgICAgICAgICAg
ICAgICAgIChub2RlLnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnByb3BlcnR5
LnZhbHVlID09PSAiX19wcm90b19fIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVGhlICdfX3Byb3RvX18nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw5OTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHdoZW4gdGhlIHNhbWUgdmFyaWFibGUgaXMgZGVjbGFyZWQgbW9yZSB0aGVuIG9uY2UuCisg
KiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVu
Y3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRT
Y29wZSgpOworCisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlh
YmxlKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUuaWRlbnRpZmllcnMgJiYgdmFyaWFibGUu
aWRlbnRpZmllcnMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlkZW50
aWZpZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YS5yYW5nZVsxXSAtIGIucmFuZ2VbMV07CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHZhcmlhYmxlLmlkZW50aWZpZXJzLmxlbmd0aDsg
aSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh2YXJpYWJs
ZS5pZGVudGlmaWVyc1tpXSwgInt7YX19IGlzIGFscmVhZHkgZGVmaW5lZCIsIHthOiB2YXJpYWJs
ZS5uYW1lfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGZpbmRWYXJpYWJsZXMs
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmaW5kVmFyaWFibGVzLAorICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZpbmRWYXJpYWJsZXMKKyAgICB9OworfTsKKworfSx7fV0s
MTAwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGNvdW50IG11bHRpcGxlIHNwYWNlcyBpbiByZWd1bGFyIGV4cHJlc3Npb25z
CisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tLz4KKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwi
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBjb250ZXh0LmdldEZp
cnN0VG9rZW5zKG5vZGUsIDEpWzBdLAorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gdG9rZW4u
dHlwZSwKKyAgICAgICAgICAgICAgICBub2RlVmFsdWUgPSB0b2tlbi52YWx1ZSwKKyAgICAgICAg
ICAgICAgICBtdWx0aXBsZVNwYWNlc1JlZ2V4ID0gLyggezIsfSkrPy8sCisgICAgICAgICAgICAg
ICAgcmVnZXhSZXN1bHRzOworCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFy
RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZWdleFJlc3VsdHMgPSBtdWx0aXBsZVNw
YWNlc1JlZ2V4LmV4ZWMobm9kZVZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmIChyZWdleFJl
c3VsdHMgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlNwYWNlcyBhcmUgaGFyZCB0byBjb3VudC4gVXNlIHsiICsgcmVnZXhSZXN1bHRzWzBdLmxl
bmd0aCArICJ9LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDEwMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyByZXNlcnZlZCB3
b3JkcyBiZWluZyB1c2VkIGFzIGtleXMKKyAqIEBhdXRob3IgRW1pbCBCYXkKKyAqIEBjb3B5cmln
aHQgMjAxNCBFbWlsIEJheS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBNRVNTQUdFID0gIlJlc2VydmVkIHdvcmQgJ3t7a2V5fX0nIHVzZWQg
YXMga2V5LiI7CisKKyAgICB2YXIgcmVzZXJ2ZWRXb3JkcyA9IFsKKyAgICAgICAgImFic3RyYWN0
IiwKKyAgICAgICAgImJvb2xlYW4iLCAiYnJlYWsiLCAiYnl0ZSIsCisgICAgICAgICJjYXNlIiwg
ImNhdGNoIiwgImNoYXIiLCAiY2xhc3MiLCAiY29uc3QiLCAiY29udGludWUiLAorICAgICAgICAi
ZGVidWdnZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZG91YmxlIiwKKyAgICAgICAg
ImVsc2UiLCAiZW51bSIsICJleHBvcnQiLCAiZXh0ZW5kcyIsCisgICAgICAgICJmaW5hbCIsICJm
aW5hbGx5IiwgImZsb2F0IiwgImZvciIsICJmdW5jdGlvbiIsCisgICAgICAgICJnb3RvIiwKKyAg
ICAgICAgImlmIiwgImltcGxlbWVudHMiLCAiaW1wb3J0IiwgImluIiwgImluc3RhbmNlb2YiLCAi
aW50IiwgImludGVyZmFjZSIsCisgICAgICAgICJsb25nIiwKKyAgICAgICAgIm5hdGl2ZSIsICJu
ZXciLAorICAgICAgICAicGFja2FnZSIsICJwcml2YXRlIiwgInByb3RlY3RlZCIsICJwdWJsaWMi
LAorICAgICAgICAicmV0dXJuIiwKKyAgICAgICAgInNob3J0IiwgInN0YXRpYyIsICJzdXBlciIs
ICJzd2l0Y2giLCAic3luY2hyb25pemVkIiwKKyAgICAgICAgInRoaXMiLCAidGhyb3ciLCAidGhy
b3dzIiwgInRyYW5zaWVudCIsICJ0cnkiLCAidHlwZW9mIiwKKyAgICAgICAgInZhciIsICJ2b2lk
IiwgInZvbGF0aWxlIiwKKyAgICAgICAgIndoaWxlIiwgIndpdGgiCisgICAgXTsKKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgewor
CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSAiSWRlbnRpZmllciIp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKCIiICsga2V5
TmFtZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCBNRVNTQUdFLCB7IGtleToga2V5TmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDEwMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVzdHJpY3QgdXNhZ2Ugb2Ygc3BlY2lmaWVkIG5vZGUgbW9k
dWxlcy4KKyAqIEBhdXRob3IgQ2hyaXN0aWFuIFNjaHVsegorICovCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAg
ICAvLyB0cmltIHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWVzCisgICAgdmFyIHJlc3RyaWN0ZWRNb2R1
bGVzID0gY29udGV4dC5vcHRpb25zOworCisgICAgLy8gaWYgbm8gbW9kdWxlcyBhcmUgcmVzdHJp
Y3RlZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBDYWxsRXhwcmVzc2lvbnMKKyAgICBpZiAo
cmVzdHJpY3RlZE1vZHVsZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiB7fTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG5vZGUgaXMgYSBz
dHJpbmcgbGl0ZXJhbC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8g
Y2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IElmIHRoZSBub2RlIGlzIGEgc3RyaW5n
IGxpdGVyYWwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTdHJpbmcobm9kZSkgeworICAgICAg
ICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS52
YWx1ZSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gdG8g
Y2hlY2sgaWYgYSBub2RlIGlzIGEgcmVxdWlyZSBjYWxsLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYg
dGhlIG5vZGUgaXMgYSByZXF1aXJlIGNhbGwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNSZXF1
aXJlQ2FsbChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLmNhbGxlZS50eXBlID09PSAiSWRl
bnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBoYXMgYW4gYXJndW1lbnQg
dGhhdCBpcyBhbiByZXN0cmljdGVkIG1vZHVsZSBhbmQgcmV0dXJuIGl0cyBuYW1lLgorICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5z
IHt1bmRlZmluZWR8U3RyaW5nfSByZXN0cmljdGVkIG1vZHVsZSBuYW1lIG9yIHVuZGVmaW5lZCBp
ZiBub2RlIGFyZ3VtZW50IGlzbid0IHJlc3RyaWN0ZWQuCisgICAgICovCisgICAgZnVuY3Rpb24g
Z2V0UmVzdHJpY3RlZE1vZHVsZU5hbWUobm9kZSkgeworICAgICAgICB2YXIgbW9kdWxlTmFtZTsK
KworICAgICAgICAvLyBub2RlIGhhcyBhcmd1bWVudHMgYW5kIGZpcnN0IGFyZ3VtZW50IGlzIHN0
cmluZworICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICYmIGlzU3RyaW5nKG5vZGUu
YXJndW1lbnRzWzBdKSkgeworICAgICAgICAgICAgdmFyIGFyZ3VtZW50VmFsdWUgPSBub2RlLmFy
Z3VtZW50c1swXS52YWx1ZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFyZ3Vt
ZW50IHZhbHVlIGlzIGluIHJlc3RyaWN0ZWQgbW9kdWxlcyBhcnJheQorICAgICAgICAgICAgaWYg
KHJlc3RyaWN0ZWRNb2R1bGVzLmluZGV4T2YoYXJndW1lbnRWYWx1ZSkgIT09IC0xKSB7CisgICAg
ICAgICAgICAgICAgbW9kdWxlTmFtZSA9IGFyZ3VtZW50VmFsdWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbW9kdWxlTmFtZTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAg
ICAgICAgaWYgKGlzUmVxdWlyZUNhbGwobm9kZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVz
dHJpY3RlZE1vZHVsZU5hbWUgPSBnZXRSZXN0cmljdGVkTW9kdWxlTmFtZShub2RlKTsKKworICAg
ICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bW9kdWxlTmFtZX19JyBtb2R1bGUgaXMgcmVz
dHJpY3RlZCBmcm9tIGJlaW5nIHVzZWQuIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgbW9k
dWxlTmFtZTogcmVzdHJpY3RlZE1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisK
K30se31dLDEwMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmV0dXJuIHN0YXRlbWVudCBjb250YWlucyBh
c3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisidXNlIHN0cmljdCI7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnQgJiYgbm9kZS5hcmd1bWVudC50eXBlID09
PSAiQXNzaWdubWVudEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlJldHVybiBzdGF0ZW1lbnQgc2hvdWxkIG5vdCBjb250YWluIGFzc2lnbm1lbnQu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMDQ6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIGphdmFzY3JpcHQ6IHVybHMKKyAqIEBhdXRob3IgSWx5
YSBWb2xvZGluCisgKi8KKy8qanNoaW50IHNjcmlwdHVybDogdHJ1ZSAqLworLyplc2xpbnQgbm8t
c2NyaXB0LXVybDogMCovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2YXIgdmFsdWU7CisK
KyAgICAgICAgICAgIGlmIChub2RlLnZhbHVlICYmIHR5cGVvZihub2RlLnZhbHVlKSA9PT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG5vZGUudmFsdWUudG9Mb3dlckNhc2Uo
KTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCJqYXZhc2NyaXB0OiIpID09
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTY3JpcHQg
VVJMIGlzIGEgZm9ybSBvZiBldmFsLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwNTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNv
bXBhcmlzb24gd2hlcmUgbGVmdCBwYXJ0IGlzIHRoZSBzYW1lIGFzIHRoZSByaWdodAorICogcGFy
dC4KKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIHZhciBvcGVyYXRvcnMgPSBbIj09PSIsICI9PSIsICIhPT0iLCAiIT0iLCAi
PiIsICI8IiwgIj49IiwgIjw9Il07CisgICAgICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2Yo
bm9kZS5vcGVyYXRvcikgPiAtMSAmJgorICAgICAgICAgICAgICAgIChub2RlLmxlZnQudHlwZSA9
PT0gIklkZW50aWZpZXIiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5v
ZGUubGVmdC5uYW1lID09PSBub2RlLnJpZ2h0Lm5hbWUgfHwKKyAgICAgICAgICAgICAgICBub2Rl
LmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwi
ICYmIG5vZGUubGVmdC52YWx1ZSA9PT0gbm9kZS5yaWdodC52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQ29tcGFyaW5nIHRvIGl0c2VsZiBpcyBwb3RlbnRp
YWxseSBwb2ludGxlc3MuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSwxMDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgY29tbWEgb3BlcmF0b3IKKyAqIEBh
dXRob3IgQnJhbmRvbiBNaWxscworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisg
ICAgICogUGFydHMgb2YgdGhlIGdyYW1tYXIgdGhhdCBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBwYXJl
bnMuCisgICAgICovCisgICAgdmFyIHBhcmVudGhlc2l6ZWQgPSB7CisgICAgICAgICJEb1doaWxl
U3RhdGVtZW50IjogInRlc3QiLAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiAidGVzdCIsCisgICAg
ICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiAiZGlzY3JpbWluYW50IiwKKyAgICAgICAgIldoaWxlU3Rh
dGVtZW50IjogInRlc3QiLAorICAgICAgICAiV2l0aFN0YXRlbWVudCI6ICJvYmplY3QiCisKKyAg
ICAgICAgLy8gT21pdHRpbmcgQ2FsbEV4cHJlc3Npb24gLSBjb21tYXMgYXJlIHBhcnNlZCBhcyBh
cmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0aW5nIE5ld0V4cHJlc3Npb24gLSBj
b21tYXMgYXJlIHBhcnNlZCBhcyBhcmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0
aW5nIEZvckluU3RhdGVtZW50IC0gcGFydHMgYXJlbid0IGluZGl2aWR1YWxseSBwYXJlbnRoZXNp
c2VkCisgICAgICAgIC8vIE9taXR0aW5nIEZvclN0YXRlbWVudCAtIHBhcnRzIGFyZW4ndCBpbmRp
dmlkdWFsbHkgcGFyZW50aGVzaXNlZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1p
bmVzIHdoZXRoZXIgYSBub2RlIGlzIHJlcXVpcmVkIGJ5IHRoZSBncmFtbWFyIHRvIGJlIHdyYXBw
ZWQgaW4KKyAgICAgKiBwYXJlbnMsIGUuZy4gdGhlIHRlc3Qgb2YgYW4gaWYgc3RhdGVtZW50Lgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1
cm5zIHtib29sZWFufSBUcnVlIGlmIHBhcmVucyBhcm91bmQgbm9kZSBiZWxvbmcgdG8gcGFyZW50
IG5vZGUuCisgICAgICovCisgICAgZnVuY3Rpb24gcmVxdWlyZXNFeHRyYVBhcmVucyhub2RlKSB7
CisgICAgICAgIHJldHVybiBub2RlLnBhcmVudCAmJiBwYXJlbnRoZXNpemVkW25vZGUucGFyZW50
LnR5cGVdICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBub2RlID09PSBub2RlLnBhcmVudFtw
YXJlbnRoZXNpemVkW25vZGUucGFyZW50LnR5cGVdXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBDaGVjayBpZiBhIG5vZGUgaXMgd3JhcHBlZCBpbiBwYXJlbnMuCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRy
dWUgaWYgdGhlIG5vZGUgaGFzIGEgcGFyZW4gb24gZWFjaCBzaWRlLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzUGFyZW50aGVzaXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2Vu
ID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9
IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNU
b2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09
ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAg
ICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBu
b2RlLnJhbmdlWzFdOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIGEgbm9kZSBp
cyB3cmFwcGVkIGluIHR3byBsZXZlbHMgb2YgcGFyZW5zLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlm
IHR3byBwYXJlbnMgc3Vycm91bmQgdGhlIG5vZGUgb24gZWFjaCBzaWRlLgorICAgICAqLworICAg
IGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAgICAgICAgICAg
bmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisgICAgICAgIHJl
dHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICAvLyBBbHdheXMgYWxsb3cgc2VxdWVuY2VzIGluIGZvciBz
dGF0ZW1lbnQgdXBkYXRlCisgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gIkZv
clN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUgPT09IG5vZGUucGFyZW50
LmluaXQgfHwgbm9kZSA9PT0gbm9kZS5wYXJlbnQudXBkYXRlKSkgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV3JhcHBpbmcgYSBzZXF1
ZW5jZSBpbiBleHRyYSBwYXJlbnMgaW5kaWNhdGVzIGludGVudAorICAgICAgICAgICAgaWYgKHJl
cXVpcmVzRXh0cmFQYXJlbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgY29tbWEgb3BlcmF0b3IuIik7CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSwxMDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHNoYWRvd2luZyBvZiBOYU4sIHVu
ZGVmaW5lZCwgYW5kIEluZmluaXR5IChFUzUgc2VjdGlvbiAxNS4xLjEpCisgKiBAYXV0aG9yIE1p
Y2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIFJFU1RSSUNURUQgPSBb
InVuZGVmaW5lZCIsICJOYU4iLCAiSW5maW5pdHkiLCAiYXJndW1lbnRzIiwgImV2YWwiXTsKKwor
ICAgIGZ1bmN0aW9uIGNoZWNrRm9yVmlvbGF0aW9uKGlkKSB7CisgICAgICAgIGlmIChSRVNUUklD
VEVELmluZGV4T2YoaWQubmFtZSkgPiAtMSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
aWQsICJTaGFkb3dpbmcgb2YgZ2xvYmFsIHByb3BlcnR5IFwiIiArIGlkLm5hbWUgKyAiXCIuIik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNs
YXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JWaW9sYXRpb24o
bm9kZS5pZCk7CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pZCkgeworICAgICAgICAgICAgICAg
IGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
W10ubWFwLmNhbGwobm9kZS5wYXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKKyAgICAgICAgfSwK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLmlkKTsKKyAgICAgICAgICAgIFtdLm1hcC5jYWxs
KG5vZGUucGFyYW1zLCBjaGVja0ZvclZpb2xhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgICJD
YXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0
aW9uKG5vZGUucGFyYW0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTA4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgb24gZGVjbGFyaW5nIHZhcmlhYmxlcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRo
ZSBvdXRlciBzY29wZQorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIHZhcmlhYmxlIGlzIGNvbnRhaW5l
ZCBpbiB0aGUgbGlzdCBvZiBnaXZlbiBzY29wZSB2YXJpYWJsZXMuCisgICAgICogQHBhcmFtIHtP
YmplY3R9IHZhcmlhYmxlIFRoZSB2YXJpYWJsZSB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBzY29wZVZhcnMgVGhlIHNjb3BlIHZhcmlhYmxlcyB0byBsb29rIGZvci4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHZhcmlhYmxlIGlzIGNvbnRhaW5z
IGluIHRoZSBsaXN0IG9mIHNjb3BlIHZhcmlhYmxlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBp
c0NvbnRhaW5lZEluU2NvcGVWYXJzKHZhcmlhYmxlLCBzY29wZVZhcnMpIHsKKyAgICAgICAgcmV0
dXJuIHNjb3BlVmFycy5zb21lKGZ1bmN0aW9uIChzY29wZVZhcikgeworICAgICAgICAgICAgaWYg
KHNjb3BlVmFyLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFyaWFibGUubmFtZSA9PT0gc2NvcGVWYXIubmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIHNoYWRvd2VkIGluIHRoZSBnaXZl
biBzY29wZS4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZXMgVGhlIHZhcmlhYmxlcyB0
byBsb29rIGZvcgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBUaGUgc2NvcGUgdG8gYmUg
Y2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja1NoYWRvd3NJblNjb3BlKHZhcmlhYmxlcywgc2NvcGUpIHsKKyAgICAgICAgdmFyaWFibGVz
LmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAoaXNDb250YWlu
ZWRJblNjb3BlVmFycyh2YXJpYWJsZSwgc2NvcGUudmFyaWFibGVzKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KHZhcmlhYmxlLmlkZW50aWZpZXJzWzBdLCAie3thfX0gaXMgYWxy
ZWFkeSBkZWNsYXJlZCBpbiB0aGUgdXBwZXIgc2NvcGUuIiwge2E6IHZhcmlhYmxlLm5hbWV9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmls
dGVycyBhbGwgdmFyaWFibGVzIG9mIGEgbGlzdCB3aGljaCBhbHJlYWR5IG9jY3VyIGluIGFub3Ro
ZXIgbGlzdC4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2YXJpYWJsZUxpc3RBIExpc3Qgb2YgdmFy
aWFibGVzIHdoaWNoIHNob3VsZCBiZSBmaWx0ZXJlZC4KKyAgICAgKiBAcGFyYW0ge0FycmF5fSB2
YXJpYWJsZUxpc3RCIExpc3Qgb2YgdmFyaWFibGVzIHdoaWNoIHNob3VsZCBubyBvY2N1ciBpbiB2
YXJpYWJsZUxpc3RBLgorICAgICAqIEByZXR1cm5zIHtBcnJheX0gRmlsdGVyZWQgbGlzdCBvZiB2
YXJpYWJsZXMuCisgICAgICovCisgICAgZnVuY3Rpb24gZmlsdGVyVmFyaWFibGVMaXN0KHZhcmlh
YmxlTGlzdEEsIHZhcmlhYmxlTGlzdEIpIHsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlTGlzdEEu
ZmlsdGVyKGZ1bmN0aW9uICh2YXJpYWJsZUEpIHsKKyAgICAgICAgICAgIHJldHVybiAhdmFyaWFi
bGVMaXN0Qi5zb21lKGZ1bmN0aW9uICh2YXJpYWJsZUIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFyaWFibGVBLm5hbWUgPT09IHZhcmlhYmxlQi5uYW1lOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgZ2l2ZW4gbm9k
ZSBmb3Igc2hhZG93ZWQgdmFyaWFibGVzLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgQVNUIG5vZGUgb2YgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIG9yIEZ1bmN0aW9uRXhwcmVzc2lv
bi4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0Zv
clNoYWRvd3Mobm9kZSkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCks
CisgICAgICAgICAgICBhcmdzID0gbm9kZS5wYXJhbXMsCisgICAgICAgICAgICB2YXJpYWJsZXMg
PSBmaWx0ZXJWYXJpYWJsZUxpc3Qoc2NvcGUudmFyaWFibGVzLCBhcmdzKTsKKworICAgICAgICAv
LyBpdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5IG9mIHZhcmlhYmxlcyBhbmQgZmluZCBkdXBsaWNh
dGVzIHdpdGggdGhlIHVwcGVyIHNjb3BlCisgICAgICAgIHZhciB1cHBlciA9IHNjb3BlLnVwcGVy
OworICAgICAgICB3aGlsZSAodXBwZXIpIHsKKyAgICAgICAgICAgIGNoZWNrU2hhZG93c0luU2Nv
cGUodmFyaWFibGVzLCB1cHBlcik7CisgICAgICAgICAgICB1cHBlciA9IHVwcGVyLnVwcGVyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBjaGVja0ZvclNoYWRvd3MsCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBj
aGVja0ZvclNoYWRvd3MKKyAgICB9OworCit9OworCit9LHt9XSwxMDk6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWly
ZSB2YXJpYWJsZXMgZGVjbGFyZWQgd2l0aG91dCB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUgbGluZXMg
c2VtaWNvbG9uCisgKiBAYXV0aG9yIEpvbmF0aGFuIEtpbmdzdG9uCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICB2YXIgc2VtaWNvbG9uV2hpdGVzcGFjZSA9IC9cczskLzsKKworICAgIHJl
dHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUpOworICAgICAg
ICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlhYmxlIGRlY2xhcmVkIHdpdGggdHJhaWxp
bmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUpOworICAgICAgICAg
ICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cHJlc3Npb24gY2FsbGVkIHdpdGggdHJhaWxpbmcg
d2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworfTsKKworfSx7fV0sMTEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIHRoYXQgc3BhY2VkIGZ1bmN0
aW9uIGFwcGxpY2F0aW9uCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRk
dXZhbGwuY29tPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gZGV0ZWN0
T3BlblNwYWNlcyhub2RlKSB7CisgICAgICAgIHZhciBsYXN0Q2FsbGVlVG9rZW4gPSBjb250ZXh0
LmdldExhc3RUb2tlbihub2RlLmNhbGxlZSk7CisgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0
LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgdmFyIGkgPSB0b2tlbnMuaW5kZXhPZihsYXN0Q2Fs
bGVlVG9rZW4pLCBsID0gdG9rZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGkgPCBsICYmIHRv
a2Vuc1tpXS52YWx1ZSAhPT0gIigiKSB7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGkgPj0gbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIC8vIGxvb2sgZm9yIGEgc3BhY2UgYmV0d2VlbiB0aGUgY2FsbGVlIGFuZCB0aGUgb3BlbiBw
YXJlbgorICAgICAgICBpZiAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSAhPT0gdG9rZW5zW2ldLnJh
bmdlWzBdKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBz
cGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVuLiIpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZGV0ZWN0T3BlblNw
YWNlcywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkZXRlY3RPcGVuU3BhY2VzCisgICAgfTsK
KworfTsKKworfSx7fV0sMTExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzcGFyc2UgYXJyYXlzCisgKiBAYXV0aG9yIE5p
Y2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1
cm4geworCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBlbXB0eVNwb3QgPSBub2RlLmVsZW1lbnRzLmluZGV4T2YobnVsbCkgPiAt
MTsKKworICAgICAgICAgICAgaWYgKGVtcHR5U3BvdCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbW1hIGluIG1pZGRsZSBvZiBhcnJheS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTEyOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdob3NlIGlkZW50aWZpZXIgZW5kcyB3aXRoIHRo
ZSBzdHJpbmcgU3luYworICogQGF1dGhvciBNYXR0IER1VmFsbDxodHRwOi8vbWF0dGR1dmFsbC5j
b20vPgorICovCisKKy8qanNoaW50IG5vZGU6dHJ1ZSovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWUsCisg
ICAgICAgICAgICAgICAgc3luY1JlZ2V4ID0gLy4qU3luYyQvOworCisgICAgICAgICAgICBpZiAo
c3luY1JlZ2V4LmV4ZWMocHJvcGVydHlOYW1lKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHN5bmMgbWV0aG9kOiAnIiArIHByb3Bl
cnR5TmFtZSArICInLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMTEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHRlcm5hcnkgb3BlcmF0b3JzLgorICog
QGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGVybmFyeSBvcGVyYXRv
ciB1c2VkLiIpOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwxMTQ6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2Fs
bG93IHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGxpbmVzLgorICogQGF1dGhvciBOb2Rl
Y2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIHZhciBUUkFJTEVSID0gIlsgXHRcdTAwYTBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIw
MDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJcdTIwMjhcdTIwMjlc
dTMwMDBdKyQiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0i
OiBmdW5jdGlvbiBjaGVja1RyYWlsaW5nU3BhY2VzKG5vZGUpIHsKKworICAgICAgICAgICAgLy8g
TGV0J3MgaGFjay4gU2luY2UgRXNwcmltYSBkb2VzIG5vdCByZXR1cm4gd2hpdGVzcGFjZSBub2Rl
cywKKyAgICAgICAgICAgIC8vIGZldGNoIHRoZSBzb3VyY2UgY29kZSBhbmQgZG8gYmxhY2sgbWFn
aWMgdmlhIHJlZ2V4cHMuCisKKyAgICAgICAgICAgIHZhciBzcmMgPSBjb250ZXh0LmdldFNvdXJj
ZSgpLAorICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ0V4cChUUkFJTEVSLCAibWciKSwKKyAg
ICAgICAgICAgICAgICBtYXRjaCwgbGluZXMsIGxvY2F0aW9uOworCisgICAgICAgICAgICB3aGls
ZSAoKG1hdGNoID0gcmUuZXhlYyhzcmMpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxp
bmVzID0gc3JjLnNsaWNlKDAsIHJlLmxhc3RJbmRleCkuc3BsaXQoL1xyP1xuL2cpOworCisgICAg
ICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVz
Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsaW5lc1tsaW5lcy5sZW5ndGgg
LSAxXS5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGggKyAxCisgICAgICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgICAgIC8vIFBhc3Npbmcgbm9kZSBpcyBhIGJpdCBkaXJ0eSwgYmVjYXVzZSBt
ZXNzYWdlIGRhdGEgd2lsbCBjb250YWluCisgICAgICAgICAgICAgICAgLy8gYmlnIHRleHQgaW4g
YHNvdXJjZWAuIEJ1dC4uLiB3aG8gY2FyZXMgOikgPworICAgICAgICAgICAgICAgIC8vIE9uZSBt
b3JlIGtsdWRnZSB3aWxsIG5vdCBtYWtlIHdvcnNlIHRoZSBibG9vZHkgd2l6YXJkcnkgb2YgdGhp
cyBwbHVnaW4uCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24s
ICJUcmFpbGluZyBzcGFjZXMgbm90IGFsbG93ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgIH07Cit9OworCit9LHt9XSwxMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRpYWxp
emluZyB0byB1bmRlZmluZWQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3Ii
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUuaWQubmFtZTsK
KyAgICAgICAgICAgIHZhciBpbml0ID0gbm9kZS5pbml0ICYmIG5vZGUuaW5pdC5uYW1lOworCisg
ICAgICAgICAgICBpZiAoaW5pdCA9PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiSXQncyBub3QgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgJ3t7
bmFtZX19JyB0byB1bmRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE2OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgcmVmZXJl
bmNlcyB0byB1bmRlY2xhcmVkIHZhcmlhYmxlcy4KKyAqIEBhdXRob3IgTWFyayBNYWNkb25hbGQK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVy
cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gaXNJbXBsaWNpdEdsb2JhbCh2
YXJpYWJsZSkgeworICAgIHJldHVybiB2YXJpYWJsZS5kZWZzLmV2ZXJ5KGZ1bmN0aW9uKGRlZikg
eworICAgICAgICByZXR1cm4gZGVmLnR5cGUgPT09ICJJbXBsaWNpdEdsb2JhbFZhcmlhYmxlIjsK
KyAgICB9KTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBkZWNsYXJlZCB2YXJpYWJsZSwgZGVmaW5l
ZCBpbiBgc2NvcGVgLCB0aGF0IGByZWZgIHJlZmVycyB0by4KKyAqIEBwYXJhbSB7U2NvcGV9IHNj
b3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBzZWFyY2guCisgKiBAcGFyYW0ge1JlZmVyZW5jZX0g
cmVmIFRoZSByZWZlcmVuY2UgdG8gZmluZCBpbiB0aGUgc2NvcGUuCisgKiBAcmV0dXJucyB7VmFy
aWFibGV9IFRoZSB2YXJpYWJsZSwgb3IgbnVsbCBpZiByZWYgcmVmZXJzIHRvIGFuIHVuZGVjbGFy
ZWQgdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIGdldERlY2xhcmVkR2xvYmFsVmFyaWFibGUoc2Nv
cGUsIHJlZikgeworICAgIHZhciBkZWNsYXJlZEdsb2JhbCA9IG51bGw7CisgICAgc2NvcGUudmFy
aWFibGVzLnNvbWUoZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAgICAgaWYgKHZhcmlhYmxlLm5h
bWUgPT09IHJlZi5pZGVudGlmaWVyLm5hbWUpIHsKKyAgICAgICAgICAgIC8vIElmIGl0J3MgYW4g
aW1wbGljaXQgZ2xvYmFsLCBpdCBtdXN0IGhhdmUgYSBgd3JpdGVhYmxlYCBmaWVsZCAoaW5kaWNh
dGluZyBpdCB3YXMgZGVjbGFyZWQpCisgICAgICAgICAgICBpZiAoIWlzSW1wbGljaXRHbG9iYWwo
dmFyaWFibGUpIHx8IHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFibGUsICJ3cml0ZWFibGUi
KSkgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkR2xvYmFsID0gdmFyaWFibGU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBkZWNsYXJlZEdsb2JhbDsKK30KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oLypub2RlKi8pIHsKKwor
ICAgICAgICAgICAgdmFyIGdsb2JhbFNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworCisgICAg
ICAgICAgICBnbG9iYWxTY29wZS50aHJvdWdoLmZvckVhY2goZnVuY3Rpb24ocmVmKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0RGVjbGFyZWRHbG9iYWxWYXJpYWJsZShnbG9i
YWxTY29wZSwgcmVmKSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlZi5pZGVudGlmaWVy
Lm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChyZWYuaWRlbnRpZmllciwgIid7e25hbWV9fScgaXMgbm90IGRl
ZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVm
LmlzV3JpdGUoKSAmJiB2YXJpYWJsZS53cml0ZWFibGUgPT09IGZhbHNlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFtZX19JyBpcyBy
ZWFkIG9ubHkuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE3OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgcmVmZXJlbmNlcyB0byB0aGUgdW5kZWZpbmVkIHZhcmlhYmxlLgorICogQGF1dGhvciBNaWNo
YWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5uYW1l
ID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0
LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgICAgIGlmICghcGFyZW50IHx8IHBh
cmVudC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwgbm9kZSAhPT0gcGFyZW50LnByb3Bl
cnR5IHx8IHBhcmVudC5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgdW5kZWZpbmVkLiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEx
ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGluIHZhcmlhYmxlIGRlY2xhcmF0
aW9ucy4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+
CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBoYXNUcmFp
bGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgeworICAgICAgICB2YXIgbGVuID0gaWRlbnRpZmll
ci5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgIT09ICJfIiAmJiAoaWRlbnRp
ZmllclswXSA9PT0gIl8iIHx8IGlkZW50aWZpZXJbbGVuIC0gMV0gPT09ICJfIik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJGb3JNZW1iZXJFeHByZXNzaW9u
KGlkZW50aWZpZXIpIHsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT09ICJfX3Byb3RvX18i
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3BlY2lhbENhc2VJZGVudGlmaWVySW5WYXJpYWJs
ZUV4cHJlc3Npb24oaWRlbnRpZmllcikgeworICAgICAgICAvLyBDaGVja3MgZm9yIHRoZSB1bmRl
cnNjb3JlIGxpYnJhcnkgdXNhZ2UgaGVyZQorICAgICAgICByZXR1cm4gaWRlbnRpZmllciA9PT0g
Il8iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5G
dW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZpZXIgPSBub2Rl
LmlkLm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAidW5kZWZpbmVk
IiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50
aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9y
VHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJsZUV4cHJlc3Npb24obm9kZSkgeworICAgICAgICB2
YXIgaWRlbnRpZmllciA9IG5vZGUuaWQubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50
aWZpZXIgIT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVy
KSAmJgorICAgICAgICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlmaWVySW5WYXJpYWJsZUV4cHJl
c3Npb24oaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5N
ZW1iZXJFeHByZXNzaW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlkZW50aWZpZXIgPSBub2RlLnBy
b3BlcnR5Lm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAidW5kZWZp
bmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgJiYKKyAgICAgICAgICAg
ICFpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJlc3Npb24oaWRlbnRpZmllcikp
IHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5n
ICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBj
aGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAg
IlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJs
ZUV4cHJlc3Npb24sCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogY2hlY2tGb3JUcmFpbGlu
Z1VuZGVyc2NvcmVJbk1lbWJlckV4cHJlc3Npb24KKyAgICB9OworCit9OworCit9LHt9XSwxMTk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IENoZWNrcyBmb3IgdW5yZWFjaGFibGUgY29kZSBkdWUgdG8gcmV0dXJuLCB0aHJvd3MsIGJyZWFr
LCBhbmQgY29udGludWUuCisgKiBAYXV0aG9yIEpvZWwgRmVlbnN0cmEKKyAqLworInVzZSBzdHJp
Y3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworCitmdW5jdGlvbiByZXBvcnQoY29udGV4dCwgbm9kZSwgdW5yZWFjaGFi
bGVUeXBlKSB7CisgICAgdmFyIGtleXdvcmQ7CisgICAgc3dpdGNoICh1bnJlYWNoYWJsZVR5cGUp
IHsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9
ICJicmVhayI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ29udGludWVTdGF0
ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9ICJjb250aW51ZSI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKKyAgICAgICAgICAgIGtleXdv
cmQgPSAicmV0dXJuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJUaHJvd1N0
YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gInRocm93IjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgdW5leHBlY3RlZCBzdGF0ZW1lbnQgYWZ0ZXIgYSB7
e3R5cGV9fS4iLCB7IHR5cGU6IGtleXdvcmQgfSk7Cit9CisKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBDaGVj
a3MgaWYgYSBub2RlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igbm8tdW5yZWFjaGFibGUgYmVjYXVzZSBv
ZiB2YXJpYWJsZS9mdW5jdGlvbiBob2lzdGluZworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIHRo
ZSBub2RlIGRvZXNuJ3QgdHJpZ2dlciB1bnJlYWNoYWJsZQorICAgICAqIEBwcml2YXRlCisgICAg
ICovCisgICAgZnVuY3Rpb24gaXNVbnJlYWNoYWJsZUFsbG93ZWQobm9kZSkgeworICAgICAgICBy
ZXR1cm4gbm9kZS50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgfHwKKyAgICAgICAgICAg
IG5vZGUudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iICYmCisgICAgICAgICAgICBub2Rl
LmRlY2xhcmF0aW9ucy5ldmVyeShmdW5jdGlvbihkZWNsYXJhdGlvbikgeworICAgICAgICAgICAg
ICAgIHJldHVybiBkZWNsYXJhdGlvbi50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIiAmJiBk
ZWNsYXJhdGlvbi5pbml0ID09PSBudWxsOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyoKKyAgICAgKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiBub2RlIGlzIHRoZSBsYXN0IG5vZGUg
b3IgZm9sbG93ZWQgZXhjbHVzaXZlbHkgYnkKKyAgICAgKiBob2lzdGVkIGRlY2xhcmF0aW9ucwor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBOb2RlIHRoYXQgc2hvdWxkIGJlIHRoZSBsYXN0
IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGNoZWNrTm9kZShub2RlKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBjb250
ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICB2YXIgZmllbGQsIGksIHNpYmxpbmc7
CisKKyAgICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiU3dp
dGNoQ2FzZSI6CisgICAgICAgICAgICAgICAgZmllbGQgPSAiY29uc2VxdWVudCI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJQcm9ncmFtIjoKKyAgICAgICAgICAg
IGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKKyAgICAgICAgICAgICAgICBmaWVsZCA9ICJib2R5IjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gcGFyZW50W2ZpZWxk
XS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgc2libGluZyA9IHBhcmVu
dFtmaWVsZF1baV07CisgICAgICAgICAgICBpZiAoc2libGluZyA9PT0gbm9kZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gRm91bmQgdGhlIGxhc3QgcmVhY2hhYmxlIHN0YXRlbWVudCwg
YWxsIGRvbmUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc1VucmVhY2hhYmxl
QWxsb3dlZChzaWJsaW5nKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChjb250ZXh0LCBzaWJs
aW5nLCBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGNoZWNrTm9kZSwKKyAgICAgICAg
IlRocm93U3RhdGVtZW50IjogY2hlY2tOb2RlLAorICAgICAgICAiQ29udGludWVTdGF0ZW1lbnQi
OiBjaGVja05vZGUsCisgICAgICAgICJCcmVha1N0YXRlbWVudCI6IGNoZWNrTm9kZQorICAgIH07
CisKK307CisKK30se31dLDEyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgRmxhZyBleHByZXNzaW9ucyBpbiBzdGF0ZW1lbnQgcG9zaXRp
b24gdGhhdCBkbyBub3Qgc2lkZSBlZmZlY3QKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
LSBhbnkgbm9kZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiBu
b2RlIHN0cnVjdHVyYWxseSByZXByZXNlbnRzIGEgZGlyZWN0aXZlCisgICAgICovCisgICAgZnVu
Y3Rpb24gbG9va3NMaWtlRGlyZWN0aXZlKG5vZGUpIHsKKyAgICAgICByZXR1cm4gbm9kZS50eXBl
ID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgbm9kZS5leHByZXNzaW9u
LnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZhbHVlID09PSAi
c3RyaW5nIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVk
aWNhdGUgLSAoW2FdIC0+IEJvb2xlYW4pIHRoZSBmdW5jdGlvbiB1c2VkIHRvIG1ha2UgdGhlIGRl
dGVybWluYXRpb24KKyAgICAgKiBAcGFyYW0ge2FbXX0gbGlzdCAtIHRoZSBpbnB1dCBsaXN0Cisg
ICAgICogQHJldHVybnMge2FbXX0gdGhlIGxlYWRpbmcgc2VxdWVuY2Ugb2YgbWVtYmVycyBpbiB0
aGUgZ2l2ZW4gbGlzdCB0aGF0IHBhc3MgdGhlIGdpdmVuIHByZWRpY2F0ZQorICAgICAqLworICAg
IGZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUsIGxpc3QpIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgaWYgKCFw
cmVkaWNhdGUobGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChsaXN0LCAwLCBpKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBhIFByb2dy
YW0gb3IgQmxvY2tTdGF0ZW1lbnQgbm9kZQorICAgICAqIEByZXR1cm5zIHtBU1ROb2RlW119IHRo
ZSBsZWFkaW5nIHNlcXVlbmNlIG9mIGRpcmVjdGl2ZSBub2RlcyBpbiB0aGUgZ2l2ZW4gbm9kZSdz
IGJvZHkKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkaXJlY3RpdmVzKG5vZGUpIHsKKyAgICAgICAg
cmV0dXJuIHRha2VXaGlsZShsb29rc0xpa2VEaXJlY3RpdmUsIG5vZGUuYm9keSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYW55IG5vZGUKKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGVbXX0gYW5jZXN0b3JzIC0gdGhlIGdpdmVuIG5vZGUncyBhbmNlc3Rv
cnMKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBpcyBj
b25zaWRlcmVkIGEgZGlyZWN0aXZlIGluIGl0cyBjdXJyZW50IHBvc2l0aW9uCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNEaXJlY3RpdmUobm9kZSwgYW5jZXN0b3JzKSB7CisgICAgICAgIHZhciBw
YXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgZ3Jh
bmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDJdOworICAgICAgICByZXR1
cm4gKHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIgfHwgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0
YXRlbWVudCIgJiYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iIHx8
IGdyYW5kcGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikpICYmCisgICAgICAg
ICAgICBkaXJlY3RpdmVzKHBhcmVudCkuaW5kZXhPZihub2RlKSA+PSAwOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworCisgICAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUuZXhwcmVzc2lvbi50eXBlLAorICAgICAg
ICAgICAgICAgIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisKKyAgICAgICAg
ICAgIGlmICgKKyAgICAgICAgICAgICAgICAhL14oPzpBc3NpZ25tZW50fENhbGx8TmV3fFVwZGF0
ZSlFeHByZXNzaW9uJC8udGVzdCh0eXBlKSAmJgorICAgICAgICAgICAgICAgICh0eXBlICE9PSAi
VW5hcnlFeHByZXNzaW9uIiB8fCBbImRlbGV0ZSIsICJ2b2lkIl0uaW5kZXhPZihub2RlLmV4cHJl
c3Npb24ub3BlcmF0b3IpIDwgMCkgJiYKKyAgICAgICAgICAgICAgICAhaXNEaXJlY3RpdmUobm9k
ZSwgYW5jZXN0b3JzKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgb3IgZnVuY3Rpb24gY2FsbCBhbmQg
aW5zdGVhZCBzYXcgYW4gZXhwcmVzc2lvbi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKK307CisKK30se31dLDEyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGRlY2xhcmVkIGJ1dCB1bnVz
ZWQgdmFyaWFibGVzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICB2YXIgY29uZmlnID0geworICAgICAgICB2YXJzOiAiYWxsIiwKKyAgICAgICAgYXJn
czogImFmdGVyLXVzZWQiCisgICAgfTsKKworICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0pIHsK
KyAgICAgICAgaWYgKHR5cGVvZihjb250ZXh0Lm9wdGlvbnNbMF0pID09PSAic3RyaW5nIikgewor
ICAgICAgICAgICAgY29uZmlnLnZhcnMgPSBjb250ZXh0Lm9wdGlvbnNbMF07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9uc1swXS52YXJz
IHx8IGNvbmZpZy52YXJzOworICAgICAgICAgICAgY29uZmlnLmFyZ3MgPSBjb250ZXh0Lm9wdGlv
bnNbMF0uYXJncyB8fCBjb25maWcuYXJnczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBN
RVNTQUdFID0gInt7bmFtZX19IGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQiOworCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtSZWZlcmVuY2V9IHJlZiAtIGFuIGVzY29wZSBSZWZlcmVuY2UKKyAg
ICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gcmVmZXJlbmNlIHJlcHJl
c2VudHMgYSByZWFkIG9wZXJhdGlvbgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUmVhZFJlZihy
ZWYpIHsKKyAgICAgICAgcmV0dXJuIHJlZi5pc1JlYWQoKTsKKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1Njb3BlfSBzY29wZSAtIGFuIGVzY29wZSBTY29wZSBvYmplY3QKKyAgICAg
KiBAcmV0dXJucyB7VmFyaWFibGVbXX0gbW9zdCBvZiB0aGUgbG9jYWwgdmFyaWFibGVzIHdpdGgg
bm8gcmVhZCByZWZlcmVuY2VzCisgICAgICovCisgICAgZnVuY3Rpb24gdW51c2VkTG9jYWxzKHNj
b3BlKSB7CisgICAgICAgIHZhciB1bnVzZWQgPSBbXTsKKyAgICAgICAgdmFyIHZhcmlhYmxlcyA9
IHNjb3BlLnZhcmlhYmxlczsKKyAgICAgICAgaWYgKHNjb3BlLnR5cGUgIT09ICJnbG9iYWwiKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhcmlhYmxlcy5sZW5ndGg7IGkgPCBs
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFt
ZXMKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIHNraXAgaW1wbGljaXQgImFyZ3VtZW50cyIgdmFyaWFibGUKKyAgICAgICAg
ICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0gImZ1bmN0aW9uIiAmJiB2YXJpYWJsZXNbaV0ubmFt
ZSA9PT0gImFyZ3VtZW50cyIgJiYgdmFyaWFibGVzW2ldLmlkZW50aWZpZXJzLmxlbmd0aCA9PT0g
MCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB2YXJpYWJsZXNbaV0uZGVmc1swXS50eXBlOworICAg
ICAgICAgICAgICAgIC8vIHNraXAgY2F0Y2ggdmFyaWFibGVzCisgICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT09ICJDYXRjaENsYXVzZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGlmICJhcmdzIiBvcHRpb24g
aXMgIm5vbmUiLCBza2lwIGFueSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBpZiAoY29uZmln
LmFyZ3MgPT09ICJub25lIiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIikgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
aWYgImFyZ3MiIG9wdGlvbiBpcyAiYWZ0ZXItdXNlZCIsIHNraXAgYWxsIGJ1dCB0aGUgbGFzdCBw
YXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFyZ3MgPT09ICJhZnRlci11c2Vk
IiAmJiB0eXBlID09PSAiUGFyYW1ldGVyIiAmJiB2YXJpYWJsZXNbaV0uZGVmc1swXS5pbmRleCA8
IHZhcmlhYmxlc1tpXS5kZWZzWzBdLm5vZGUucGFyYW1zLmxlbmd0aCAtIDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZXNbaV0ucmVmZXJlbmNlcy5maWx0ZXIoaXNSZWFkUmVmKS5sZW5ndGggPT09
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2godmFyaWFibGVzW2ldKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFtdLmNvbmNhdC5hcHBseSh1bnVzZWQsIFtdLm1hcC5jYWxsKHNjb3BlLmNoaWxkU2NvcGVzLCB1
bnVzZWRMb2NhbHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6
IGZ1bmN0aW9uKHByb2dyYW1Ob2RlKSB7CisgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBj
b250ZXh0LmdldFNjb3BlKCk7CisgICAgICAgICAgICB2YXIgdW51c2VkID0gdW51c2VkTG9jYWxz
KGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhciBpLCBsOworCisgICAgICAgICAgICAvLyBk
ZXRlcm1pbmUgdW51c2VkIGdsb2JhbHMKKyAgICAgICAgICAgIGlmIChjb25maWcudmFycyA9PT0g
ImFsbCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdW5yZXNvbHZlZFJlZnMgPSBnbG9iYWxTY29w
ZS50aHJvdWdoLmZpbHRlcihpc1JlYWRSZWYpLm1hcChmdW5jdGlvbihyZWYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlZi5pZGVudGlmaWVyLm5hbWU7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGdsb2JhbFNjb3BlLnZhcmlhYmxl
cy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVucmVzb2x2
ZWRSZWZzLmluZGV4T2YoZ2xvYmFsU2NvcGUudmFyaWFibGVzW2ldLm5hbWUpIDwgMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW51c2VkLnB1c2goZ2xvYmFsU2NvcGUudmFyaWFibGVzW2ld
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHVudXNlZC5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAodW51c2VkW2ldLmVzbGludEV4cGxpY2l0R2xvYmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHByb2dyYW1Ob2RlLCBNRVNT
QUdFLCB1bnVzZWRbaV0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW51c2VkW2ldLmRl
ZnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh1bnVz
ZWRbaV0uaWRlbnRpZmllcnNbMF0sIE1FU1NBR0UsIHVudXNlZFtpXSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTIy
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgdXNlIG9mIHZhcmlhYmxlcyBiZWZvcmUgdGhleSBhcmUgZGVmaW5lZAor
ICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgTk9fRlVOQyA9ICJu
b2Z1bmMiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIGZpbmREZWNsYXJhdGlv
bihuYW1lLCBzY29wZSkgeworICAgICAgICAvLyB0cnkgc2VhcmNoaW5nIGluIHRoZSBjdXJyZW50
IHNjb3BlIGZpcnN0CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2NvcGUudmFyaWFibGVz
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjb3BlLnZhcmlhYmxlc1tp
XS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLnZhcmlhYmxl
c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBjaGVjayBpZiB0aGVy
ZSdzIHVwcGVyIHNjb3BlIGFuZCBjYWxsIHJlY3Vyc2l2bHkgdGlsbCB3ZSBmaW5kIHRoZSB2YXJp
YWJsZQorICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5k
RGVjbGFyYXRpb24obmFtZSwgc2NvcGUudXBwZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5n
ZXRTY29wZSgpOworICAgICAgICB2YXIgdHlwZU9wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXTsK
KworICAgICAgICBmdW5jdGlvbiBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgZGVj
bGFyYXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0eXBlT3B0aW9uICE9PSBOT19GVU5DIHx8IGRl
Y2xhcmF0aW9uLmRlZnNbMF0udHlwZSAhPT0gIkZ1bmN0aW9uTmFtZSIpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZGVjbGFyYXRpb24uaWRlbnRpZmllcnNbMF0ucmFuZ2VbMV0gPiByZWZlcmVuY2Uu
aWRlbnRpZmllci5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChyZWZlcmVuY2UuaWRlbnRpZmllciwgInt7YX19IHdhcyB1c2VkIGJlZm9yZSBpdCB3YXMgZGVm
aW5lZCIsIHthOiByZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lfSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNlcy5m
b3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkgeworICAgICAgICAgICAgLy8gaWYgdGhlIHJlZmVy
ZW5jZSBpcyByZXNvbHZlZCBjaGVjayBmb3IgZGVjbGFyYXRpb24gbG9jYXRpb24KKyAgICAgICAg
ICAgIC8vIGlmIG5vdCwgaXQgY291bGQgYmUgZnVuY3Rpb24gaW52b2NhdGlvbiwgdHJ5IHRvIGZp
bmQgbWFudWFsbHkKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2UucmVzb2x2ZWQgJiYgcmVmZXJl
bmNlLnJlc29sdmVkLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBj
aGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgcmVmZXJlbmNlLnJlc29sdmVkKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gZmlu
ZERlY2xhcmF0aW9uKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICAvLyBpZiB0aGVyZSdyZSBubyBpZGVudGlmaWVycywgdGhpcyBpcyBhIGdsb2JhbCBl
bnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbiAmJiBk
ZWNsYXJhdGlvbi5pZGVudGlmaWVycy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIGRlY2xhcmF0aW9uKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKKyAgICAgICAgIkZ1bmN0
aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9LHt9XSwxMjM6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlz
YWxsb3cgdXNlIG9mIHZvaWQgb3BlcmF0b3IuCisgKiBAYXV0aG9yIE1pa2UgU2lkb3JvdgorICog
QGNvcHlyaWdodCAyMDE0IE1pa2UgU2lkb3Jvdi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiVW5hcnlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3Ig
PT09ICJ2b2lkIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBl
Y3RlZCAndW5kZWZpbmVkJyBhbmQgaW5zdGVhZCBzYXcgJ3ZvaWQnLiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTI0OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRoYXQgd2FybnMg
YWJvdXQgdXNlZCB3YXJuaW5nIGNvbW1lbnRzCisgKiBAYXV0aG9yIEFsZXhhbmRlciBTY2htaWR0
IDxodHRwczovL2dpdGh1Yi5jb20vbHhhbmRlcnM+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHZhciBjb25maWd1cmF0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAg
ICB3YXJuaW5nVGVybXMgPSBjb25maWd1cmF0aW9uLnRlcm1zIHx8IFsidG9kbyIsICJmaXhtZSIs
ICJ4eHgiXSwKKyAgICAgICAgbG9jYXRpb24gPSBjb25maWd1cmF0aW9uLmxvY2F0aW9uIHx8ICJz
dGFydCI7CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIHNwZWNpZmllZCBjb21tZW50IGZv
ciBiZWluZyBjaGVja2VkLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50IFRoZSBjb21t
ZW50IHRvIHByZXBhcmUuCisgICAgICogQHJldHVybnMge1N0cmluZ30gVGhlIHNwZWNpZmllZCBj
b21tZW50IHByZXBhcmVkIGZvciBiZWluZyBjaGVja2VkLgorICAgICAqLworICAgIGZ1bmN0aW9u
IHByZXBhcmVDb21tZW50Rm9yQ2hlY2tpbmcoY29tbWVudCkgeworICAgICAgICB2YXIgY29tbWVu
dFRvQ2hlY2s7CisKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50LnRvTG93ZXJDYXNl
KCk7CisgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gY29tbWVudFRvQ2hlY2sudHJpbSgpOworCisg
ICAgICAgIHJldHVybiBjb21tZW50VG9DaGVjazsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIHNwZWNpZmllZCBjb21tZW50IHN0YXJ0cyB3aXRoIGEgc3BlY2lmaWVkIHRl
cm0uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnRUb0NoZWNrIFRoZSBjb21tZW50IHRv
IGNoZWNrLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsb3dlckNhc2VUZXJtIFRoZSB0ZXJtIHRv
IHNlYXJjaCBmb3IuCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbW1l
bnQgc3RhcnRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGVybSwgZWxzZSBmYWxzZS4KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2Vy
Q2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93ZXJD
YXNlVGVybSkgPT09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBz
cGVjaWZpZWQgY29tbWVudCBjb250YWlucyBhIHNwZWNpZmllZCB0ZXJtIGF0IGFueSBsb2NhdGlv
bi4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNvbW1lbnQgdG8g
Y2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhlIHRlcm0gdG8g
c2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGVybSB3
YXMgY29udGFpbmVkIGluIHRoZSBjb21tZW50LCBlbHNlIGZhbHNlLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGNvbW1lbnRDb250YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0p
IHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93ZXJDYXNlVGVybSkg
IT09IC0xOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBzcGVjaWZpZWQg
Y29tbWVudCBmb3IgbWF0Y2hlcyBvZiB0aGUgY29uZmlndXJlZCB3YXJuaW5nIHRlcm1zIGFuZCBy
ZXR1cm5zIHRoZSBtYXRjaGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50IFRoZSBj
b21tZW50IHdoaWNoIGlzIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge0FycmF5fSBBbGwgbWF0
Y2hlZCB3YXJuaW5nIHRlcm1zIGZvciB0aGlzIGNvbW1lbnQuCisgICAgICovCisgICAgZnVuY3Rp
b24gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0oY29tbWVudCkgeworICAgICAgICB2YXIgbWF0
Y2hlcyA9IFtdOworCisgICAgICAgIHdhcm5pbmdUZXJtcy5mb3JFYWNoKGZ1bmN0aW9uICh0ZXJt
KSB7CisgICAgICAgICAgICB2YXIgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKSwK
KyAgICAgICAgICAgICAgICBjb21tZW50VG9DaGVjayA9IHByZXBhcmVDb21tZW50Rm9yQ2hlY2tp
bmcoY29tbWVudCk7CisKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gInN0YXJ0Iikgewor
ICAgICAgICAgICAgICAgIGlmIChjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRvQ2hlY2ss
IGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCh0ZXJt
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0aW9uID09
PSAiYW55d2hlcmUiKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRDb250YWluc1Rlcm0o
Y29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMucHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENoZWNrcyB0aGUgc3BlY2lmaWVkIG5vZGUgZm9yIG1hdGNoaW5nIHdhcm5pbmcgY29tbWVu
dHMgYW5kIHJlcG9ydHMgdGhlbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFT
VCBub2RlIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5lZC4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NvbW1lbnQobm9kZSkgeworICAgICAgICB2YXIg
bWF0Y2hlcyA9IGNvbW1lbnRDb250YWluc1dhcm5pbmdUZXJtKG5vZGUudmFsdWUpOworCisgICAg
ICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlZFRlcm0pIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkICIgKyBtYXRjaGVkVGVybSArICIgY29t
bWVudC4iKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkJs
b2NrQ29tbWVudCI6IGNoZWNrQ29tbWVudCwKKyAgICAgICAgIkxpbmVDb21tZW50IjogY2hlY2tD
b21tZW50CisgICAgfTsKK307CisKK30se31dLDEyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB3aXRo
IHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVk
IHVzZSBvZiAnd2l0aCcgc3RhdGVtZW50LiIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKwor
fSx7fV0sMTI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd3JhcHBpbmcgbm9uZS1pZmZlIGluIHBhcmVucworICog
QGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAg
ICAgICAgICAgIHByZXZpb3VzVG9rZW4sIG5leHRUb2tlbjsKKworICAgICAgICAgICAgaWYgKCEv
Q2FsbEV4cHJlc3Npb258TmV3RXhwcmVzc2lvbi8udGVzdChhbmNlc3RvcnMucG9wKCkudHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9y
ZShub2RlKTsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0
ZXIobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIo
IiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIpIikgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24gbGl0ZXJhbHMgaW4g
cGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEyNzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3Vy
ZSB0aGUgdXNlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZhciBmdW5jdGlvblN0YWNrID0gW107CisKKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goZmFsc2UpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGVuZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnBvcCgpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGVjbGFyYXRpb25zKG5vZGUpIHsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIkNvbWJpbmUgdGhpcyB3aXRoIHRoZSBwcmV2aW91cyAndmFy
JyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdW5jdGlvblN0
YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gPSB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IHN0YXJ0RnVu
Y3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisKKyAgICAgICAgIlZh
cmlhYmxlRGVjbGFyYXRpb24iOiBjaGVja0RlY2xhcmF0aW9ucywKKworICAgICAgICAiUHJvZ3Jh
bTpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQi
OiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVu
Y3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwxMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1cmUgYmxhbmsg
bGluZXMgd2l0aGluIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNrIDxodHRwczov
L2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFzIFNjaHJlY2su
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgdmFyIHJlcXVp
cmVQYWRkaW5nID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOworCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBoYXMgYSBibGFu
ayBsaW5lIGJlZm9yZSBpdHMgZmlyc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBzdGFydHMgd2l0aCBhIGJsYW5r
IGxpbmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5v
ZGUpIHsKKyAgICAgICAgdmFyIGJsb2NrU3RhcnQgPSBub2RlLmxvYy5zdGFydC5saW5lLAorICAg
ICAgICAgICAgZmlyc3QgPSBub2RlLmJvZHlbMF0sCisgICAgICAgICAgICBmaXJzdExpbmUgPSBm
aXJzdC5sb2Muc3RhcnQubGluZSwKKyAgICAgICAgICAgIGV4cGVjdGVkRmlyc3RMaW5lID0gYmxv
Y2tTdGFydCArIDIsCisgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGZpcnN0KS5sZWFkaW5nOworCisgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgZmlyc3RMaW5lID0gbGVhZGluZ0NvbW1lbnRzWzBdLmxv
Yy5zdGFydC5saW5lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cGVjdGVkRmlyc3RM
aW5lIDw9IGZpcnN0TGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhl
IGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBhIGJsYW5rIGxpbmUgYWZ0ZXIgaXRzIGxh
c3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2Rl
IG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIg
b3Igbm90IHRoZSBibG9jayBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzTm9uRW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKSB7CisgICAgICAgIHZhciBi
bG9ja0VuZCA9IG5vZGUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgbGFzdCA9IG5vZGUuYm9k
eVtub2RlLmJvZHkubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICBsYXN0TGluZSA9IGxhc3QubG9j
LmVuZC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRMYXN0TGluZSA9IGJsb2NrRW5kIC0gMiwK
KyAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENvbW1lbnRzKGxhc3Qp
LnRyYWlsaW5nOworCisgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsK
KyAgICAgICAgICAgIGxhc3RMaW5lID0gdHJhaWxpbmdDb21tZW50c1t0cmFpbGluZ0NvbW1lbnRz
Lmxlbmd0aCAtIDFdLmxvYy5lbmQubGluZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBs
YXN0TGluZSA8PSBleHBlY3RlZExhc3RMaW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENo
ZWNrcyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIEFORCBlbmRzIHdp
dGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5v
ZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhl
ciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkgeworICAgICAg
ICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpICYmIGlzTm9uRW1wdHlCbG9j
a0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYg
dGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIHN0YXJ0cyBPUiBlbmRzIHdpdGggYSBibGFu
ayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBC
bG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qg
dGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBoYXNOb25FbXB0eUJsb2NrRXh0cmFQYWRkaW5nKG5vZGUpIHsKKyAgICAgICAg
cmV0dXJuIGlzTm9uRW1wdHlCbG9ja1RvcFBhZGRlZChub2RlKSB8fCBpc05vbkVtcHR5QmxvY2tC
b3R0b21QYWRkZWQobm9kZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBn
aXZlbiBCbG9ja1N0YXRlbWVudCBub2RlIHRvIGJlIHBhZGRlZCBpZiB0aGUgYmxvY2sgaXMgbm90
IGVtcHR5LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBC
bG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVkLgorICAgICAq
LworICAgIGZ1bmN0aW9uIGNoZWNrUGFkZGluZyhub2RlKSB7CisgICAgICAgIGlmIChub2RlLmJv
ZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVQYWRkaW5nKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3QgYmUgcGFkZGVkIGJ5
IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRpbmcobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3Qg
bm90IGJlIHBhZGRlZCBieSBibGFuayBsaW5lcy4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmxv
Y2tTdGF0ZW1lbnQiOiBjaGVja1BhZGRpbmcKKyAgICB9OworCit9OworCit9LHt9XSwxMjk6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyBub24tcXVvdGVkIHByb3BlcnR5IG5hbWVzIGluIG9iamVjdCBsaXRlcmFscy4K
KyAqIEBhdXRob3IgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4KKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCit2YXIgZXNwcmltYSA9IHJlcXVpcmUoImVzcHJpbWEiKTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICB2YXIgTU9ERSA9IGNvbnRleHQub3B0aW9uc1swXTsKKworICAgIHN3aXRjaCAoTU9E
RSkgeworCisgICAgICAgIGNhc2UgImFzLW5lZWRlZCI6CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIFByb3BlcnR5OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBrZXkgPSBub2RlLmtleTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgYW55IHF1b3RlZCBwcm9wZXJ0eSBuYW1lcyByZXF1aXJlZCBxdW90aW5nCisgICAgICAg
ICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBrZXkudmFs
dWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBlc3ByaW1hLnRva2VuaXplKGtleS52
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggIT09
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9
IHRva2Vuc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09ICJJZGVudGlmaWVyIiB8fCB0
LnR5cGUgPT09ICJOdWxsIiB8fCB0LnR5cGUgPT09ICJCb29sZWFuIiB8fCB0LnR5cGUgPT09ICJO
dW1lcmljIiAmJiAiIiArICt0LnZhbHVlID09PSB0LnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJpbHkgcXVvdGVkIHBy
b3BlcnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYWxsIHByb3Bl
cnR5IG5hbWVzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50eXBlICE9
PSAiTGl0ZXJhbCIgfHwgdHlwZW9mIGtleS52YWx1ZSAhPT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbnF1b3RlZCBwcm9wZXJ0eSBg
e3tuYW1lfX1gIGZvdW5kLiIsIGtleSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHsiZXNwcmltYSI6
Nn1dLDEzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgQSBydWxlIHRvIGNob29zZSBiZXR3ZWVuIHNpbmdsZSBhbmQgZG91YmxlIHF1b3Rl
IG1hcmtzCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29t
Lz4sIEJyYW5kb24gUGF5dG9uCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENv
bnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFFVT1RFX1NFVFRJTkdTID0g
eworICAgICJkb3VibGUiOiB7CisgICAgICAgIHF1b3RlOiAiXCIiLAorICAgICAgICBhbHRlcm5h
dGVRdW90ZTogIiciLAorICAgICAgICBkZXNjcmlwdGlvbjogImRvdWJsZXF1b3RlIgorICAgIH0s
CisgICAgInNpbmdsZSI6IHsKKyAgICAgICAgcXVvdGU6ICInIiwKKyAgICAgICAgYWx0ZXJuYXRl
UXVvdGU6ICJcIiIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAic2luZ2xlcXVvdGUiCisgICAgfQor
fTsKKwordmFyIEFWT0lEX0VTQ0FQRSA9ICJhdm9pZC1lc2NhcGUiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoYXQgYSBzdHJpbmcgcGFzc2VkIGluIGlz
IHN1cnJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIKKyAgICAgKiBAcGFyYW0gIHtz
dHJpbmd9IHZhbCBUaGUgdGV4dCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNo
YXJhY3RlciBUaGUgY2hhcmFjdGVyIHRvIHNlZSBpZiBpdCdzIHN1cnJvdW5kZWQgYnkuCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRleHQgaXMgc3Vycm91bmRlZCBieSB0
aGUgY2hhcmFjdGVyLCBmYWxzZSBpZiBub3QuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTdXJy
b3VuZGVkQnkodmFsLCBjaGFyYWN0ZXIpIHsKKyAgICAgICAgcmV0dXJuIHZhbFswXSA9PT0gY2hh
cmFjdGVyICYmIHZhbFt2YWwubGVuZ3RoIC0gMV0gPT09IGNoYXJhY3RlcjsKKyAgICB9CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgdmFyIHZhbCA9IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3VmFsID0gbm9k
ZS5yYXcsCisgICAgICAgICAgICAgICAgcXVvdGVPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0s
CisgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBRVU9URV9TRVRUSU5HU1txdW90ZU9wdGlvbl0s
CisgICAgICAgICAgICAgICAgYXZvaWRFc2NhcGUgPSBjb250ZXh0Lm9wdGlvbnNbMV0gPT09IEFW
T0lEX0VTQ0FQRSwKKyAgICAgICAgICAgICAgICBpc1ZhbGlkOworCisgICAgICAgICAgICBpZiAo
c2V0dGluZ3MgJiYgdHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICBp
c1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5xdW90ZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgYXZvaWRFc2NhcGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaXNWYWxpZCA9IGlzU3Vycm91bmRlZEJ5KHJhd1ZhbCwgc2V0dGluZ3MuYWx0ZXJuYXRl
UXVvdGUpICYmIHJhd1ZhbC5pbmRleE9mKHNldHRpbmdzLnF1b3RlKSA+PSAwOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU3RyaW5ncyBtdXN0IHVzZSAiICsgc2V0dGlu
Z3MuZGVzY3JpcHRpb24gKyAiLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEzMTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBv
ZiBwYXJzZUludCB3aXRob3V0IGEgcmFkaXggYXJndW1lbnQKKyAqIEBhdXRob3IgSmFtZXMgQWxs
YXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAi
Q2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciByYWRp
eDsKKworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJwYXJzZUludCIpIHsK
KworICAgICAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPCAyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHJhZGl4IHBhcmFt
ZXRlci4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAg
IHJhZGl4ID0gbm9kZS5hcmd1bWVudHNbMV07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZG9u
J3QgYWxsb3cgbm9uLW51bWVyaWMgbGl0ZXJhbHMgb3IgdW5kZWZpbmVkCisgICAgICAgICAgICAg
ICAgICAgIGlmICgocmFkaXgudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiByYWRpeC52YWx1
ZSAhPT0gIm51bWJlciIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocmFkaXgudHlwZSA9
PT0gIklkZW50aWZpZXIiICYmIHJhZGl4Lm5hbWUgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICAg
ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJJbnZhbGlkIHJhZGl4IHBhcmFtZXRlci4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sMTMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbWlzc2luZyBzZW1pY29sb25zLgorICogQGF1
dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBPUFRfT1VU
X1BBVFRFUk4gPSAvW1xbXChcL1wrXC1dLzsKKworICAgIHZhciBhbHdheXMgPSBjb250ZXh0Lm9w
dGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
SGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNr
cyBhIG5vZGUgdG8gc2VlIGlmIGl0J3MgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24uCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2VtaWNvbG9uKG5vZGUpIHsK
KyAgICAgICAgdmFyIGxhc3RUb2tlbiA9IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5vZGUpLAorICAg
ICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworCisgICAg
ICAgIGlmIChhbHdheXMpIHsKKyAgICAgICAgICAgIGlmIChsYXN0VG9rZW4udHlwZSAhPT0gIlB1
bmN0dWF0b3IiIHx8IGxhc3RUb2tlbi52YWx1ZSAhPT0gIjsiKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgbGFzdFRva2VuLmxvYy5lbmQsICJNaXNzaW5nIHNlbWljb2xv
bi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChs
YXN0VG9rZW4udHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmIGxhc3RUb2tlbi52YWx1ZSA9PT0gIjsi
KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoIW5leHRUb2tlbiB8fCAhKE9QVF9PVVRfUEFUVEVS
Ti50ZXN0KG5leHRUb2tlbi52YWx1ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsIG5vZGUubG9jLmVuZCwgIkV4dHJhIHNlbWljb2xvbi4iKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrcyB0byBzZWUgaWYgdGhlcmUncyBhIHNlbWljb2xvbiBhZnRlciBhIHZhcmlh
YmxlIGRlY2xhcmF0aW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0
byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkgeworCisgICAgICAg
IHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgcGFy
ZW50SW5kZXggPSBhbmNlc3RvcnMubGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIHBhcmVudCA9IGFu
Y2VzdG9yc1twYXJlbnRJbmRleF07CisKKyAgICAgICAgaWYgKChwYXJlbnQudHlwZSAhPT0gIkZv
clN0YXRlbWVudCIgfHwgcGFyZW50LmluaXQgIT09IG5vZGUpICYmCisgICAgICAgICAgICAocGFy
ZW50LnR5cGUgIT09ICJGb3JJblN0YXRlbWVudCIgfHwgcGFyZW50LmxlZnQgIT09IG5vZGUpCisg
ICAgICAgICkgeworICAgICAgICAgICAgY2hlY2tGb3JTZW1pY29sb24obm9kZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRpb24iOiBjaGVja0ZvclNlbWljb2xvbkZvclZhcmlhYmxlRGVjbGFyYXRpb24s
CisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAg
ICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkRlYnVn
Z2VyU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJCcmVha1N0YXRlbWVu
dCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiQ29udGludWVTdGF0ZW1lbnQiOiBjaGVj
a0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkVtcHR5U3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgICAgICAgIHZhciBuZXh0VG9rZW47CisKKyAgICAgICAgICAgIGlmICghYWx3YXlz
KSB7CisgICAgICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5v
ZGUpIHx8IGNvbnRleHQuZ2V0TGFzdFRva2VuKG5vZGUpOworCisgICAgICAgICAgICAgICAgaWYg
KCEoT1BUX09VVF9QQVRURVJOLnRlc3QobmV4dFRva2VuLnZhbHVlKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4dHJhIHNlbWljb2xvbi4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMTMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIHJlcXVpcmUgc29ydGluZyBvZiB2YXJpYWJsZXMgd2l0aGlu
IGEgc2luZ2xlIFZhcmlhYmxlIERlY2xhcmF0aW9uIGJsb2NrCisgKiBAYXV0aG9yIElseWEgVm9s
b2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBj
b250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisgICAgICAgIGlnbm9yZUNhc2UgPSBjb25maWd1cmF0
aW9uLmlnbm9yZUNhc2UgfHwgZmFsc2U7CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFi
bGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIG5vZGUuZGVjbGFy
YXRpb25zLnJlZHVjZShmdW5jdGlvbihtZW1vLCBkZWNsKSB7CisgICAgICAgICAgICAgICAgdmFy
IGxhc3RWYXJpYWJsZU5hbWUgPSBtZW1vLmlkLm5hbWUsCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlblZhcmlhYmxlTmFtZSA9IGRlY2wuaWQubmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChp
Z25vcmVDYXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RWYXJpYWJsZU5hbWUgPSBsYXN0
VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlblZh
cmlhYmxlTmFtZSA9IGN1cnJlblZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW5WYXJpYWJsZU5hbWUgPCBsYXN0
VmFyaWFibGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGRlY2ws
ICJWYXJpYWJsZXMgd2l0aGluIHRoZSBzYW1lIGRlY2xhcmF0aW9uIGJsb2NrIHNob3VsZCBiZSBz
b3J0ZWQgYWxwaGFiZXRpY2FsbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW87
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRl
Y2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgbm9kZS5kZWNsYXJhdGlvbnNb
MF0pOworICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDEzNDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNl
IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAqIEBhdXRob3Ig
TmljayBGaXNoZXIKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vIHVubGVzcyB0aGUgZmlyc3Qg
b3B0aW9uIGlzIGAibmV2ZXIiYCwgdGhlbiBhIHNwYWNlIGlzIHJlcXVpcmVkCisgICAgdmFyIHJl
cXVpcmVzU3BhY2UgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciIsCisgICAgICAgIGNv
bmZpZyA9IGNvbnRleHQub3B0aW9uc1sxXSB8fCB7IGNoZWNrRnVuY3Rpb25LZXl3b3JkOiBmYWxz
ZSB9OworCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIHNlcGFyYXRpb24gb2YgdHdvIGFk
amFjZW50IHRva2VucyBtZWV0cyB0aGUgc3BhY2luZyBydWxlcywgYW5kIHJlcG9ydCBhIHByb2Js
ZW0gaWYgbm90LgorICAgICAqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlICBUaGUgbm9k
ZSB0byB3aGljaCB0aGUgcG90ZW50aWFsIHByb2JsZW0gYmVsb25ncy4KKyAgICAgKiBAcGFyYW0g
e1Rva2VufSBsZWZ0ICAgIFRoZSBmaXJzdCB0b2tlbi4KKyAgICAgKiBAcGFyYW0ge1Rva2VufSBy
aWdodCAgIFRoZSBzZWNvbmQgdG9rZW4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjaGVja1Rva2Vucyhub2RlLCBsZWZ0LCByaWdodCkgeworICAgICAgICB2
YXIgaGFzU3BhY2UgPSBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF0sCisgICAgICAgICAg
ICB2YWx1ZSA9IGxlZnQudmFsdWU7CisKKyAgICAgICAgaWYgKGhhc1NwYWNlICE9PSByZXF1aXJl
c1NwYWNlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiS2V5d29yZCBcInt7
dmFsdWV9fVwiIG11c3Qge3tub3R9fWJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIiwgeworICAg
ICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBub3Q6IHJlcXVpcmVz
U3BhY2UgPyAiIiA6ICJub3QgIgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gbm9kZSAoYGlmYCwgYGZvcmAsIGB3
aGlsZWAsIGV0YyksIGhhcyB0aGUgY29ycmVjdCBzcGFjaW5nIGFmdGVyIGl0LgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7
dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIHZhciB0
b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpOworICAgICAgICBjaGVja1Rv
a2Vucyhub2RlLCB0b2tlbnNbMF0sIHRva2Vuc1sxXSk7CisgICAgfQorCisgICAgcmV0dXJuIHsK
KyAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGNo
ZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGBlbHNlYAorICAgICAgICAgICAg
aWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVu
dCIpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLmFsdGVybmF0ZSwgY29udGV4
dC5nZXRUb2tlbkJlZm9yZShub2RlLmFsdGVybmF0ZSksIGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihu
b2RlLmFsdGVybmF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9y
U3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJGb3JPZlN0YXRlbWVudCI6IGNoZWNrLAorICAg
ICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIldoaWxlU3RhdGVtZW50Ijog
Y2hlY2ssCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKKyAg
ICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGB3aGlsZWAK
KyAgICAgICAgICAgIHZhciB3aGlsZVRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5v
ZGUudGVzdCwgMik7CisgICAgICAgICAgICBjaGVja1Rva2Vucyhub2RlLCB3aGlsZVRva2Vuc1sw
XSwgd2hpbGVUb2tlbnNbMV0pOworICAgICAgICB9LAorICAgICAgICAiU3dpdGNoU3RhdGVtZW50
IjogY2hlY2ssCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUgYGZpbmFsbHlg
CisgICAgICAgICAgICBpZiAobm9kZS5maW5hbGl6ZXIpIHsKKyAgICAgICAgICAgICAgICBjaGVj
a1Rva2Vucyhub2RlLmZpbmFsaXplciwgY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLmZpbmFs
aXplciksIGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLmZpbmFsaXplcikpOworICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICAiQ2F0Y2hTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAg
ICAgIldpdGhTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6
IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoY29uZmlnLmNoZWNrRnVuY3Rpb25L
ZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTM1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZW5zdXJlIHdoaXRl
c3BhY2UgYmVmb3JlIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hyZWNrIDxodHRwczov
L2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRoaWFzIFNjaHJlY2su
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgdmFyIHJlcXVp
cmVTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAgIC8qKgorICAg
ICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRl
c3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxl
ZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdo
dCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90
IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8
IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hl
dGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxp
bmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAg
ICAgICByZXR1cm4gbGVmdC5sb2Muc3RhcnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7
CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBnaXZlbiBCbG9ja1N0YXRlbWVu
dCBub2RlIGhhcyBhIHByZWNlZGluZyBzcGFjZSBpZiBpdCBkb2VzbuKAmXQgc3RhcnQgb24gYSBu
ZXcgbGluZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEg
QmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5lZC4KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBjaGVja1ByZWNlZGluZ1NwYWNlKG5vZGUpIHsKKyAgICAgICAgdmFy
IHByZWNlZGluZ1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKKyAgICAgICAg
ICAgIGhhc1NwYWNlOworCisgICAgICAgIGlmIChwcmVjZWRpbmdUb2tlbiAmJiBpc1NhbWVMaW5l
KHByZWNlZGluZ1Rva2VuLCBub2RlKSkgeworICAgICAgICAgICAgaGFzU3BhY2UgPSBpc1NwYWNl
ZChwcmVjZWRpbmdUb2tlbiwgbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChyZXF1aXJlU3BhY2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIHNwYWNlIGJlZm9yZSBvcGVuaW5nIGJyYWNl
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGhhc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIHNwYWNlIGJlZm9yZSBvcGVuaW5nIGJyYWNlLiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB7CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGNoZWNrUHJlY2VkaW5nU3BhY2UKKyAgICB9
OworCit9OworCit9LHt9XSwxMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBvciBlbmZvcmNlcyBzcGFjZXMgaW5zaWRl
IG9mIGJyYWNrZXRzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKiBAY29weXJp
Z2h0IDIwMTQgQnJhbmR5biBCZW5uZXR0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQGNvcHly
aWdodCAyMDE0IE1pY2hhZWwgRmljYXJyYS4gTm8gcmlnaHRzIHJlc2VydmVkLgorICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIHNwYWNlZDogY29udGV4dC5v
cHRpb25zWzBdID09PSAiYWx3YXlzIiwKKyAgICAgICAgc2luZ2xlRWxlbWVudEV4Y2VwdGlvbjog
Y29udGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uc2luZ2xl
VmFsdWUsCisgICAgICAgIG9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4dC5vcHRpb25z
WzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0ub2JqZWN0c0luQXJyYXlzLAorICAg
ICAgICBhcnJheXNJbkFycmF5c0V4Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFdICE9IG51bGwg
JiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uYXJyYXlzSW5BcnJheXMsCisgICAgICAgIHByb3BlcnR5
TmFtZTogY29udGV4dC5vcHRpb25zWzFdID09IG51bGwgfHwgY29udGV4dC5vcHRpb25zWzFdLnBy
b3BlcnR5TmFtZSA9PSBudWxsIHx8ICEhY29udGV4dC5vcHRpb25zWzFdLnByb3BlcnR5TmFtZQor
ICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0
d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRlc3BhY2UgYmV0d2VlbiB0aGVtLgorICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICog
QHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4g
dGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkg
eworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdOworICAgIH0K
KworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5z
IGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhl
IGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSBy
aWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Ig
bm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgICovCisgICAgZnVuY3Rp
b24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5sb2Muc3Rh
cnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7CisgICAgfQorCisgICAgLyoqCisgICAg
KiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgc3BhY2UgYWZ0ZXIgdGhlIGZpcnN0
IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byByZXBvcnQg
aW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICogQHBhcmFtIHtPYmplY3RbXX0gdG9rZW5z
IC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5nLgorICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUs
IHRva2VucykgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNbMF0ubG9jLnN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlIGFmdGVy
ICciICsgdG9rZW5zWzBdLnZhbHVlICsgIiciKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJl
cG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzcGFjZSBiZWZvcmUgdGhlIGxhc3QgdG9r
ZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0
aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFyYW0ge09iamVjdFtdfSB0b2tlbnMgLSBU
aGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCisgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5z
KSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0g
MV0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNw
YWNlIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udmFsdWUgKyAiJyIpOwor
ICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIHNw
YWNlIGFmdGVyIHRoZSBmaXJzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0g
VGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJh
bSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2lu
Zy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0UmVx
dWlyZWRCZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgdG9rZW5zWzBdLmxvYy5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgIkEgc3Bh
Y2UgaXMgcmVxdWlyZWQgYWZ0ZXIgJyIgKyB0b2tlbnNbMF0udmFsdWUgKyAiJyIpOworICAgIH0K
KworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIHNwYWNlIGJl
Zm9yZSB0aGUgbGFzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5v
ZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJhbSB7T2Jq
ZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4KKyAg
ICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0UmVxdWlyZWRF
bmRpbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
dG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAg
ICJBIHNwYWNlIGlzIHJlcXVpcmVkIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0g
MV0udmFsdWUgKyAiJyIpOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgTWVtYmVyRXhwcmVzc2lvbjogb3B0aW9ucy5wcm9wZXJ0eU5hbWUgPyBmdW5jdGlvbiBj
aGVja01lbWJlcihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5jb21wdXRlZCkgeworICAg
ICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2RlLnByb3BlcnR5
LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB2YXIgdG9rZW5BID0gdG9rZW5zWzBdLCB0b2tlbkIg
PSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMu
bGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07CisgICAgICAg
ICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9r
ZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNwYWNlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikg
JiYgaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2Vk
KHRva2VuQywgdG9rZW5EKSAmJiBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9r
ZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkEsIHRva2Vu
QikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNl
KG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IDogZnVuY3Rpb24oKSB7fSwKKworICAgICAg
ICBBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2Rl
KTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9IHRva2Vuc1sx
XSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdLCB0
b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworCisgICAgICAgICAgICB2YXIgb3Bl
bmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgPQorICAgICAgICAgICAgICAgIG9wdGlvbnMub2JqZWN0
c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQi52YWx1ZSA9PT0gInsiIHx8CisgICAgICAgICAg
ICAgICAgb3B0aW9ucy5hcnJheXNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkIudmFsdWUgPT09
ICJbIiB8fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuc2luZ2xlRWxlbWVudEV4Y2VwdGlvbiAm
JiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMQorICAgICAgICAgICAgICAgID8gIW9wdGlvbnMu
c3BhY2VkIDogb3B0aW9ucy5zcGFjZWQ7CisKKyAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tl
dE11c3RCZVNwYWNlZCA9CisgICAgICAgICAgICAgICAgb3B0aW9ucy5vYmplY3RzSW5BcnJheXNF
eGNlcHRpb24gJiYgdG9rZW5DLnZhbHVlID09PSAifSIgfHwKKyAgICAgICAgICAgICAgICBvcHRp
b25zLmFycmF5c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQy52YWx1ZSA9PT0gIl0iIHx8Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucy5zaW5nbGVFbGVtZW50RXhjZXB0aW9uICYmIG5vZGUuZWxl
bWVudHMubGVuZ3RoID09PSAxCisgICAgICAgICAgICAgICAgPyAhb3B0aW9ucy5zcGFjZWQgOiBv
cHRpb25zLnNwYWNlZDsKKworICAgICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0b2tl
bkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG9wZW5pbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmICFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdTcGFjZShub2Rl
LCB0b2tlbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wZW5pbmdCcmFja2V0TXVz
dEJlU3BhY2VkICYmIGlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChjbG9zaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiAh
aXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJl
cXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCFjbG9zaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiBpc1NwYWNlZCh0b2tlbkMsIHRva2Vu
RCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tl
bnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAg
ICAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vu
cyhub2RlKTsKKyAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9IHRv
a2Vuc1sxXSwKKyAgICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAt
IDJdLCB0b2tlbkQgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgaWYg
KGlzU2FtZUxpbmUodG9rZW5BLCB0b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3BhY2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tl
bkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkRW5k
aW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkEs
IHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5nU3Bh
Y2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
IH07CisKK307CisKK30se31dLDEzNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVuZm9yY2VzIHNwYWNlcyBpbnNp
ZGUgb2YgcGFyZW50aGVzZXMuCisgKiBAYXV0aG9yIEpvbmF0aGFuIFJhamF2dW9yaQorICogQGNv
cHlyaWdodCAyMDE0IEpvbmF0aGFuIFJhamF2dW9yaS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
LworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBSRSwgTUVTU0FHRTsKKworICAgIGlmIChjb250ZXh0
Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiKSB7CisgICAgICAgIFJFID0gL1woW14gXCldfFteIFwo
XVwpL21nOworICAgICAgICBNRVNTQUdFID0gIlRoZXJlIG11c3QgYmUgYSBzcGFjZSBpbnNpZGUg
dGhpcyBwYXJlbi4iOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFID0gL1woIHwgXCkvbWc7Cisg
ICAgICAgIE1FU1NBR0UgPSAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlcyBpbnNpZGUgdGhpcyBw
YXJlbi4iOworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBl
cnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgc2tpcFJhbmdlcyA9IFtdOwor
CisgICAgLyoqCisgICAgICogQWRkcyB0aGUgcmFuZ2Ugb2YgYSBub2RlIHRvIHRoZSBzZXQgdG8g
YmUgc2tpcHBlZCB3aGVuIGNoZWNraW5nIHBhcmVucworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSBUaGUgbm9kZSB0byBza2lwCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHBy
aXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhZGRTa2lwUmFuZ2Uobm9kZSkgeworICAgICAg
ICBza2lwUmFuZ2VzLnB1c2gobm9kZS5yYW5nZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
U29ydHMgdGhlIHNraXBSYW5nZXMgYXJyYXkuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzaG91bGRT
a2lwCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBzb3J0U2tpcFJhbmdlcygpIHsKKyAgICAgICAgc2tpcFJhbmdlcy5zb3J0KGZ1
bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF07CisgICAgICAg
IH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIGNlcnRhaW4gcG9zaXRp
b24gaW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc2tpcHBlZAorICAgICAqIEBwYXJhbSB7TnVtYmVy
fSBwb3MgVGhlIDAtYmFzZWQgaW5kZXggaW4gdGhlIHNvdXJjZQorICAgICAqIEByZXR1cm5zIHti
b29sZWFufSB3aGV0aGVyIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgc2tpcHBlZAorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gc2hvdWxkU2tpcChwb3MpIHsKKyAgICAgICAg
dmFyIGksIGxlbiwgcmFuZ2U7CisgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHNraXBSYW5nZXMu
bGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgIHJhbmdlID0gc2tpcFJhbmdl
c1tpXTsKKyAgICAgICAgICAgIGlmIChwb3MgPCByYW5nZVswXSkgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPCByYW5nZVsxXSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
UHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAg
ICAiUHJvZ3JhbTpleGl0IjogZnVuY3Rpb24gY2hlY2tQYXJlblNwYWNlcyhub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBtYXRjaCwKKyAgICAgICAgICAgICAgICBuZXh0TGluZSwKKyAgICAgICAg
ICAgICAgICBjb2x1bW4sCisgICAgICAgICAgICAgICAgbGluZSA9IDEsCisgICAgICAgICAgICAg
ICAgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2UoKSwKKyAgICAgICAgICAgICAgICBwb3MgPSAw
OworCisgICAgICAgICAgICBzb3J0U2tpcFJhbmdlcygpOworCisgICAgICAgICAgICB3aGlsZSAo
KG1hdGNoID0gUkUuZXhlYyhzb3VyY2UpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UuY2hhckF0KG1hdGNoLmluZGV4KSAhPT0gIigiKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE1hdGNoZWQgYSBjbG9zaW5nIHBhcmVuIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2guaW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoIXNob3VsZFNraXAobWF0Y2guaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlICgobmV4dExpbmUgPSBzb3VyY2UuaW5kZXhPZigiXG4iLCBwb3MpKSAhPT0gLTEgJiYgbmV4
dExpbmUgPCBtYXRjaC5pbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gbmV4
dExpbmUgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZSArPSAxOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1hdGNoLmluZGV4IC0g
cG9zOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHsgbGluZTog
bGluZSwgY29sdW1uOiBjb2x1bW4gfSwgTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgIH0sCisKKworICAgICAgICAvLyBUaGVzZSBub2RlcyBjYW4g
Y29udGFpbiBwYXJlbnRoZXNlcyB0aGF0IHRoaXMgcnVsZSBkb2Vzbid0IGNhcmUgYWJvdXQKKwor
ICAgICAgICBMaW5lQ29tbWVudDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIEJsb2NrQ29tbWVu
dDogYWRkU2tpcFJhbmdlLAorCisgICAgICAgIExpdGVyYWw6IGFkZFNraXBSYW5nZQorCisgICAg
fTsKKworfTsKKworfSx7fV0sMTM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBhcm91bmQgaW5maXggb3BlcmF0
b3JzCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
dmFyIE9QRVJBVE9SUyA9IFsKKyAgICAgICAgIioiLCAiLyIsICIlIiwgIisiLCAiLSIsICI8PCIs
ICI+PiIsICI+Pj4iLCAiPCIsICI8PSIsICI+IiwgIj49IiwgImluIiwKKyAgICAgICAgImluc3Rh
bmNlb2YiLCAiPT0iLCAiIT0iLCAiPT09IiwgIiE9PSIsICImIiwgIl4iLCAifCIsICImJiIsICJ8
fCIsICI9IiwKKyAgICAgICAgIis9IiwgIi09IiwgIio9IiwgIi89IiwgIiU9IiwgIjw8PSIsICI+
Pj0iLCAiPj4+PSIsICImPSIsICJePSIsICJ8PSIsCisgICAgICAgICI/IiwgIjoiLCAiLCIKKyAg
ICBdOworCisgICAgZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFy
IG9wLCB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCBy
aWdodC5yYW5nZVswXV19LCAxLCAxKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tl
bnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgb3AgPSB0b2tlbnNbaV07
CisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgb3AudHlwZSA9PT0gIlB1bmN0dWF0
b3IiICYmCisgICAgICAgICAgICAgICAgT1BFUkFUT1JTLmluZGV4T2Yob3AudmFsdWUpID49IDAg
JiYKKyAgICAgICAgICAgICAgICAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSA+PSBvcC5yYW5nZVsw
XSB8fCBvcC5yYW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdKQorICAgICAgICAgICAg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmlnaHRT
cGFjZWQobGVmdCwgcmlnaHQpIHsKKyAgICAgICAgdmFyIG9wLCB0b2tlbnMgPSBjb250ZXh0Lmdl
dFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCByaWdodC5yYW5nZVswXV19LCAxLCAxKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsr
aSkgeworICAgICAgICAgICAgb3AgPSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAoCisgICAg
ICAgICAgICAgICAgb3AudHlwZSA9PT0gIlB1bmN0dWF0b3IiICYmCisgICAgICAgICAgICAgICAg
T1BFUkFUT1JTLmluZGV4T2Yob3AudmFsdWUpID49IDAgJiYKKyAgICAgICAgICAgICAgICBvcC5y
YW5nZVsxXSA+PSB0b2tlbnNbaSArIDFdLnJhbmdlWzBdCisgICAgICAgICAgICApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkluZml4IG9wZXJhdG9ycyBtdXN0IGJlIHNwYWNl
ZC4iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0JpbmFyeShub2RlKSB7CisgICAgICAg
IGlmICghaXNTcGFjZWQobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KSkgeworICAgICAgICAgICAgcmVw
b3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tTZXF1ZW5j
ZShub2RlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5leHByZXNzaW9ucy5s
ZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmlnaHRTcGFjZWQo
bm9kZS5leHByZXNzaW9uc1tpXSwgbm9kZS5leHByZXNzaW9uc1tpICsgMV0pKSB7CisgICAgICAg
ICAgICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tDb25kaXRpb25hbChu
b2RlKSB7CisgICAgICAgIGlmICghaXNTcGFjZWQobm9kZS50ZXN0LCBub2RlLmNvbnNlcXVlbnQp
IHx8ICFpc1NwYWNlZChub2RlLmNvbnNlcXVlbnQsIG5vZGUuYWx0ZXJuYXRlKSkgeworICAgICAg
ICAgICAgcmVwb3J0KG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tWYXIobm9kZSkgeworICAgICAgICBpZiAobm9kZS5pbml0ICYmICFpc1NwYWNlZChub2RlLmlk
LCBub2RlLmluaXQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBjaGVj
a0JpbmFyeSwKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBjaGVja0JpbmFyeSwKKyAgICAg
ICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCisgICAgICAgICJDb25kaXRpb25h
bEV4cHJlc3Npb24iOiBjaGVja0NvbmRpdGlvbmFsLAorICAgICAgICAiU2VxdWVuY2VFeHByZXNz
aW9uIjogY2hlY2tTZXF1ZW5jZSwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNr
VmFyCisgICAgfTsKKworfTsKKworfSx7fV0sMTM5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBmb2xsb3dpbmcg
cmV0dXJuLCB0aHJvdywgYW5kIGNhc2UKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAgIHZhciB0
b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpLAorICAgICAgICAgICAgdmFs
dWUgPSB0b2tlbnNbMF0udmFsdWU7CisKKyAgICAgICAgaWYgKHRva2Vuc1swXS5yYW5nZVsxXSA+
PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJLZXl3b3JkIFwiIiArIHZhbHVlICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFj
ZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJSZXR1cm5T
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVu
dCkgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorICAgICAgICAiU3dpdGNoQ2FzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3RhdGVtZW50IjogY2hlY2sKKyAgICB9
OworCit9OworCit9LHt9XSwxNDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGZvbGxvd2luZyB1bmFyeSB3b3Jk
IG9wZXJhdG9ycworICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2VuczsKKyAgICAg
ICAgdG9rZW5zID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAyKTsKKyAgICAgICAgaWYg
KHRva2Vuc1swXS5yYW5nZVsxXSA+PSB0b2tlbnNbMV0ucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
IHN3aXRjaCAodG9rZW5zWzBdLnZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAiZGVsZXRl
IjoKKyAgICAgICAgICAgICAgICBjYXNlICJuZXciOgorICAgICAgICAgICAgICAgIGNhc2UgInR5
cGVvZiI6CisgICAgICAgICAgICAgICAgY2FzZSAidm9pZCI6CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmFyeSB3b3JkIG9wZXJhdG9yIFwiIiArIHRva2Vuc1sw
XS52YWx1ZSArICJcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJOZXdF
eHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBjaGVjaworICAg
IH07CisKK307CisKK30se31dLDE0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRW5mb3JjZXMgb3IgZGlzYWxsb3dzIGEgc3BhY2UgYmVn
aW5uaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4KKyAqIEBhdXRob3IgR3JlZyBDb2NoYXJkCisg
KiBAY29weXJpZ2h0IDIwMTQgR3JlZyBDb2NoYXJkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgLy8gVW5sZXNzIHRoZSBmaXJzdCBvcHRpb24gaXMgbmV2ZXIs
IHJlcXVpcmUgYSBzcGFjZQorICAgIHZhciByZXF1aXJlU3BhY2UgPSBjb250ZXh0Lm9wdGlvbnNb
MF0gIT09ICJuZXZlciI7CisKKyAgICAvLyBEZWZhdWx0IHRvIG1hdGNoIGFueXRoaW5nLCBzbyBh
bGwgd2lsbCBmYWlsIGlmIHRoZXJlIGFyZSBubyBleGNlcHRpb25zCisgICAgdmFyIGV4Y2VwdGlv
bk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIgIik7CisKKyAgICAvLyBHcmFiIHRoZSBleGNlcHRpb25z
IGFycmF5IGFuZCBidWlsZCBhIFJlZ0V4cCBtYXRjaGVyIGZvciBpdAorICAgIHZhciBoYXNFeGNl
cHRpb25zID0gY29udGV4dC5vcHRpb25zLmxlbmd0aCA9PT0gMjsKKyAgICB2YXIgdW5lc2NhcGVk
RXhjZXB0aW9ucyA9IGhhc0V4Y2VwdGlvbnMgPyBjb250ZXh0Lm9wdGlvbnNbMV0uZXhjZXB0aW9u
cyA6IFtdOworICAgIHZhciBleGNlcHRpb25zOworCisgICAgaWYgKHVuZXNjYXBlZEV4Y2VwdGlv
bnMubGVuZ3RoKSB7CisgICAgICAgIGV4Y2VwdGlvbnMgPSB1bmVzY2FwZWRFeGNlcHRpb25zLm1h
cChmdW5jdGlvbihzKSB7CisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC8oWy4qKz8ke30o
KXxcXlxbXF1cL1xcXSkvZywgIlxcJDEiKTsKKyAgICAgICAgfSk7CisgICAgICAgIGV4Y2VwdGlv
bk1hdGNoZXIgPSBuZXcgUmVnRXhwKCIoXigiICsgZXhjZXB0aW9ucy5qb2luKCIpKyQpfCheKCIp
ICsgIikrJCkiKTsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJMaW5lQ29tbWVudCI6IGZ1bmN0aW9uIGNoZWNrQ29tbWVudEZvclNwYWNlKG5vZGUpIHsKKwor
ICAgICAgICAgICAgaWYgKG5vZGUubG9jLnN0YXJ0LmxpbmUgPT09IDEgJiYgL14jIS8udGVzdChj
b250ZXh0LmdldFNvdXJjZUxpbmVzKClbMF0pKSB7CisKKyAgICAgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgICAgICAqIEhBQ0s6IHJldHVybiBpZiB3ZSBhcmUgb24gdGhlIGZpcnN0IGxpbmUg
YW5kCisgICAgICAgICAgICAgICAgICogZW5jb3VudGVyIGEgc2hlYmFuZyBhdCB0aGUgYmVnaW5u
aW5nLgorICAgICAgICAgICAgICAgICAqIEl0IHNlZW1zIHRoZSBwYXJzZXIgd2lsbCByZXR1cm4g
dGhpcyBhcyBhCisgICAgICAgICAgICAgICAgICogY29tbWVudCBhbmQgZmlsdGVyIG91dCB0aGUg
IyBzbyB3ZSBtdXN0IGZldGNoCisgICAgICAgICAgICAgICAgICogdGhlIGFjdHVhbCBzb3VyY2Ug
bGluZS4gSXMgdGhpcyBiZWluZyBjYXVzZWQKKyAgICAgICAgICAgICAgICAgKiBieSBlc3ByaW1h
IG9yIGVzbGludD8gU29tZXRoaW5nIGVsc2U/CisgICAgICAgICAgICAgICAgICovCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVxdWly
ZVNwYWNlKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTcGFjZSBleHBlY3RlZCBhbmQgbm90IGZv
dW5kCisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUuaW5kZXhPZigiICIpICE9PSAwKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogRG8gdHdv
IHRlc3RzOyBvbmUgZm9yIHNwYWNlIHN0YXJ0aW5nIHRoZSBsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgKiBhbmQgb25lIGZvciBhIGNvbW1lbnQgY29tcHJpc2VkIG9ubHkgb2YgZXhjZXB0aW9u
cworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0V4
Y2VwdGlvbnMgJiYgIWV4Y2VwdGlvbk1hdGNoZXIudGVzdChub2RlLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGV4Y2VwdGlv
biBibG9jayBvciBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFoYXNFeGNlcHRpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgLy8gaW4gY29tbWVu
dC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnZhbHVlLmluZGV4T2Yo
IiAiKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKK307CisKK30se31dLDE0Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBlbnN1cmUgY29kZSBpcyBydW5uaW5nIGluIHN0cmljdCBtb2RlLgorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICogQGNvcHlyaWdodCAyMDEzLTIwMTQgTmljaG9sYXMgQy4g
WmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
c2NvcGVzID0gW107CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gbm9k
ZSBpcyAidXNlIHN0cmljdCIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2RlIGlz
IGEgc3RyaWN0IHByYWdtYSwgZmFsc2UgaWYgbm90LgorICAgICAqIEB2b2lkCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNTdHJpY3RQcmFnbWEobm9kZSkgeworICAgICAgICByZXR1cm4gKG5vZGUg
JiYgbm9kZS50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAg
ICBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJ1c2Ugc3RyaWN0Iik7CisgICAgfQorCisgICAg
LyoqCisgICAgICogV2hlbiB5b3UgZW50ZXIgYSBzY29wZSwgcHVzaCB0aGUgc3RyaWN0IHZhbHVl
IGZyb20gdGhlIHByZXZpb3VzIHNjb3BlCisgICAgICogb250byB0aGUgc3RhY2suCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBiZWluZyBjaGVja2VkLgorICAgICAq
IEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24g
ZW50ZXJTY29wZShub2RlKSB7CisKKyAgICAgICAgdmFyIGlzU3RyaWN0ID0gZmFsc2UsCisgICAg
ICAgICAgICBpc1Byb2dyYW0gPSAobm9kZS50eXBlID09PSAiUHJvZ3JhbSIpLAorICAgICAgICAg
ICAgaXNQYXJlbnRHbG9iYWwgPSBzY29wZXMubGVuZ3RoID09PSAxLAorICAgICAgICAgICAgaXNQ
YXJlbnRTdHJpY3QgPSBzY29wZXMubGVuZ3RoID8gc2NvcGVzW3Njb3Blcy5sZW5ndGggLSAxXSA6
IGZhbHNlOworCisgICAgICAgIC8vIGxvb2sgZm9yIHRoZSAidXNlIHN0cmljdCIgcHJhZ21hCisg
ICAgICAgIGlmIChpc1Byb2dyYW0pIHsKKyAgICAgICAgICAgIGlzU3RyaWN0ID0gaXNTdHJpY3RQ
cmFnbWEobm9kZS5ib2R5WzBdKSB8fCBpc1BhcmVudFN0cmljdDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlzU3RyaWN0ID0gaXNTdHJpY3RQcmFnbWEobm9kZS5ib2R5LmJvZHlbMF0p
IHx8IGlzUGFyZW50U3RyaWN0OworICAgICAgICB9CisKKyAgICAgICAgc2NvcGVzLnB1c2goaXNT
dHJpY3QpOworCisgICAgICAgIC8vIG5ldmVyIHdhcm4gaWYgdGhlIHBhcmVudCBpcyBzdHJpY3Qg
b3IgdGhlIGZ1bmN0aW9uIGlzIHN0cmljdAorICAgICAgICBpZiAoIWlzUGFyZW50U3RyaWN0ICYm
ICFpc1N0cmljdCAmJiBpc1BhcmVudEdsb2JhbCkgeworICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIk1pc3NpbmcgXCJ1c2Ugc3RyaWN0XCIgc3RhdGVtZW50LiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogV2hlbiB5b3UgZXhpdCBhIHNjb3BlLCBwb3Agb2Zm
IHRoZSB0b3Agc2NvcGUgYW5kIHNlZSBpZiBpdCdzIHRydWUgb3IKKyAgICAgKiBmYWxzZS4KKyAg
ICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIGV4aXRTY29wZSgpIHsKKyAgICAgICAgc2NvcGVzLnBvcCgpOworICAgIH0KKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBlbnRlclNjb3BlLAorICAgICAgICAiRnVuY3Rp
b25EZWNsYXJhdGlvbiI6IGVudGVyU2NvcGUsCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24i
OiBlbnRlclNjb3BlLAorCisgICAgICAgICJQcm9ncmFtOmV4aXQiOiBleGl0U2NvcGUsCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBleGl0U2NvcGUsCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb246ZXhpdCI6IGV4aXRTY29wZQorICAgIH07CisKK307CisKK30se31dLDE0
MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIGNvbXBhcmlzb25zIHRvIHRoZSB2YWx1ZSBOYU4KKyAqIEBhdXRob3Ig
SmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
ICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgaWYgKCEvXlt8Jl5dJC8udGVzdChub2RlLm9wZXJhdG9yKSAmJiBub2RlLmxlZnQubmFtZSA9
PT0gIk5hTiIgfHwgbm9kZS5yaWdodC5uYW1lID09PSAiTmFOIikgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGlzTmFOIGZ1bmN0aW9uIHRvIGNvbXBhcmUg
d2l0aCBOYU4uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSwxNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFZhbGlkYXRlcyBKU0RvYyBjb21tZW50cyBhcmUgc3ludGFjdGljYWxseSBjb3Jy
ZWN0CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcXVpcmVtZW50cworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwordmFyIGRvY3RyaW5lID0gcmVxdWlyZSgiZG9jdHJpbmUiKTsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
b3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKKyAgICAgICAgcHJlZmVyID0gb3B0
aW9ucy5wcmVmZXIgfHwge30sCisKKyAgICAgICAgLy8gdGhlc2UgYm90aCBkZWZhdWx0IHRvIHRy
dWUsIHNvIHlvdSBoYXZlIHRvIGV4cGxpY2l0bHkgbWFrZSB0aGVtIGZhbHNlCisgICAgICAgIHJl
cXVpcmVSZXR1cm4gPSBvcHRpb25zLnJlcXVpcmVSZXR1cm4gPT09IGZhbHNlID8gZmFsc2UgOiB0
cnVlLAorICAgICAgICByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbiA9IG9wdGlvbnMucmVxdWlyZVBh
cmFtRGVzY3JpcHRpb24gPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAvLyBVc2luZyBhIHN0YWNrIHRvIHN0b3JlIGlmIGEgZnVuY3Rpb24gcmV0dXJucyBvciBub3Qg
KGhhbmRsaW5nIG5lc3RlZCBmdW5jdGlvbnMpCisgICAgdmFyIGZucyA9IFtdOworCisgICAgLyoq
CisgICAgICogV2hlbiBwYXJzaW5nIGEgbmV3IGZ1bmN0aW9uLCBzdG9yZSBpdCBpbiBvdXIgZnVu
Y3Rpb24gc3RhY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmbnMucHVzaCh7
cmV0dXJuUHJlc2VudDogZmFsc2V9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmRpY2F0
ZSB0aGF0IHJldHVybiBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4KKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIHJldHVybiBub2RlLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gYWRkUmV0
dXJuKG5vZGUpIHsKKyAgICAgICAgdmFyIGZ1bmN0aW9uU3RhdGUgPSBmbnNbZm5zLmxlbmd0aCAt
IDFdOworCisgICAgICAgIGlmIChmdW5jdGlvblN0YXRlICYmIG5vZGUuYXJndW1lbnQgIT09IG51
bGwpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uU3RhdGUucmV0dXJuUHJlc2VudCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZSB0aGUgSlNEb2Mgbm9k
ZSBhbmQgb3V0cHV0IHdhcm5pbmdzIGlmIGFueXRoaW5nIGlzIHdyb25nLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0pTRG9j
KG5vZGUpIHsKKyAgICAgICAgdmFyIGpzZG9jTm9kZSA9IGNvbnRleHQuZ2V0SlNEb2NDb21tZW50
KG5vZGUpLAorICAgICAgICAgICAgZnVuY3Rpb25EYXRhID0gZm5zLnBvcCgpLAorICAgICAgICAg
ICAgaGFzUmV0dXJucyA9IGZhbHNlLAorICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSBmYWxz
ZSwKKyAgICAgICAgICAgIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCksCisgICAgICAgICAg
ICBqc2RvYzsKKworICAgICAgICAvLyBtYWtlIHN1cmUgb25seSB0byB2YWxpZGF0ZSBKU0RvYyBj
b21tZW50cworICAgICAgICBpZiAoanNkb2NOb2RlKSB7CisKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAganNkb2MgPSBkb2N0cmluZS5wYXJzZShqc2RvY05vZGUudmFsdWUsIHsK
KyAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICB1
bndyYXA6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHNsb3BweTogdHJ1ZQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKKworICAgICAgICAgICAgICAg
IGlmICgvYnJhY2VzL2kudGVzdChleC5tZXNzYWdlKSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJKU0RvYyB0eXBlIG1pc3NpbmcgYnJhY2UuIik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoanNkb2NOb2RlLCAiSlNEb2Mgc3ludGF4IGVycm9yLiIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
anNkb2MudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykgeworCisgICAgICAgICAgICAgICAgc3dp
dGNoICh0YWcudGl0bGUpIHsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJwYXJhbSI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZy50eXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyBwYXJh
bWV0ZXIgdHlwZSBmb3IgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1lIH0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhZy5k
ZXNjcmlwdGlvbiAmJiByZXF1aXJlUGFyYW1EZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcGFy
YW1ldGVyIGRlc2NyaXB0aW9uIGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwYXJhbXNbdGFnLm5hbWVdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQoanNkb2NOb2RlLCAiRHVwbGljYXRlIEpTRG9jIHBhcmFtZXRlciAne3tuYW1lfX0n
LiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZy5uYW1lLmluZGV4T2YoIi4iKSA9PT0gLSAxKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW3RhZy5uYW1lXSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBj
YXNlICJyZXR1cm4iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXR1cm5zIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc1JldHVybnMgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXJlcXVpcmVSZXR1cm4gJiYgIWZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVzZW50
ICYmIHRhZy50eXBlLm5hbWUgIT09ICJ2b2lkIiAmJiB0YWcudHlwZS5uYW1lICE9PSAidW5kZWZp
bmVkIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9j
Tm9kZSwgIlVuZXhwZWN0ZWQgQCIgKyB0YWcudGl0bGUgKyAiIHRhZzsgZnVuY3Rpb24gaGFzIG5v
IHJldHVybiBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBK
U0RvYyByZXR1cm4gdHlwZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnR5cGUubmFtZSAhPT0gInZvaWQiICYm
ICF0YWcuZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyByZXR1cm4gZGVzY3JpcHRpb24u
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICBjYXNlICJjb25zdHJ1Y3RvciI6CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25z
dHJ1Y3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgdGFnIHByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgaWYgKHBy
ZWZlci5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIlVzZSBAe3tuYW1lfX0gaW5zdGVhZC4iLCB7IG5hbWU6
IHByZWZlclt0YWcudGl0bGVdIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGZvciBmdW5jdGlvbnMgbWlzc2luZyBAcmV0dXJu
cworICAgICAgICAgICAgaWYgKCFoYXNSZXR1cm5zICYmICFoYXNDb25zdHJ1Y3RvcikgeworICAg
ICAgICAgICAgICAgIGlmIChyZXF1aXJlUmV0dXJuIHx8IGZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVz
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1p
c3NpbmcgSlNEb2MgQHJldHVybnMgZm9yIGZ1bmN0aW9uLiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtZXRlcnMKKyAg
ICAgICAgICAgIHZhciBqc2RvY1BhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7CisKKyAgICAg
ICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocGFyYW0sIGkpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbmFtZSA9IHBhcmFtLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoanNk
b2NQYXJhbXNbaV0gJiYgKG5hbWUgIT09IGpzZG9jUGFyYW1zW2ldKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJFeHBlY3RlZCBKU0RvYyBmb3IgJ3t7
bmFtZX19JyBidXQgZm91bmQgJ3t7anNkb2NOYW1lfX0nLiIsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBqc2RvY05hbWU6IGpz
ZG9jUGFyYW1zW2ldCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIXBhcmFtc1tuYW1lXSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIGZvciBwYXJhbWV0ZXIgJ3t7bmFtZX19Jy4i
LCB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0K
KworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBz
dGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBjaGVja0pT
RG9jLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogY2hlY2tKU0RvYywKKyAg
ICAgICAgIlJldHVyblN0YXRlbWVudCI6IGFkZFJldHVybgorICAgIH07CisKK307CisKK30seyJk
b2N0cmluZSI6NH1dLDE0NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgRW5zdXJlcyB0aGF0IHRoZSByZXN1bHRzIG9mIHR5cGVvZiBhcmUg
Y29tcGFyZWQgYWdhaW5zdCBhIHZhbGlkIHN0cmluZworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFu
IE15ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgVkFMSURfVFlQRVMgPSBbInN5bWJv
bCIsICJ1bmRlZmluZWQiLCAib2JqZWN0IiwgImJvb2xlYW4iLCAibnVtYmVyIiwgInN0cmluZyIs
ICJmdW5jdGlvbiJdLAorICAgICAgICBPUEVSQVRPUlMgPSBbIj09IiwgIj09PSIsICIhPSIsICIh
PT0iXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Np
b24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBhcmVudCwgc2libGluZzsK
KworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiKSB7CisgICAgICAg
ICAgICAgICAgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkJpbmFyeUV4cHJlc3Npb24iICYmIE9QRVJB
VE9SUy5pbmRleE9mKHBhcmVudC5vcGVyYXRvcikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNpYmxpbmcgPSBwYXJlbnQubGVmdCA9PT0gbm9kZSA/IHBhcmVudC5yaWdodCA6IHBhcmVu
dC5sZWZ0OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICJMaXRl
cmFsIiAmJiBWQUxJRF9UWVBFUy5pbmRleE9mKHNpYmxpbmcudmFsdWUpID09PSAtMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoc2libGluZywgIkludmFsaWQgdHlw
ZW9mIGNvbXBhcmlzb24gdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sMTQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGVuZm9yY2UgdmFyIGRlY2xhcmF0aW9ucyBhcmUgb25seSBhdCB0aGUg
dG9wIG9mIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIERhbm55IEZyaXR6CisgKiBAYXV0aG9yIEd5
YW5kZWVwIFNpbmdoCisgKiBAY29weXJpZ2h0IDIwMTQgRGFubnkgRnJpdHouIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQgR3lhbmRlZXAgU2luZ2guIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgIHZhciBlcnJvck1lc3NhZ2UgPSAiQWxs
IFwidmFyXCIgZGVjbGFyYXRpb25zIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24g
c2NvcGUuIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIC0gYW55IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2
ZW4gbm9kZSBzdHJ1Y3R1cmFsbHkgcmVwcmVzZW50cyBhIGRpcmVjdGl2ZQorICAgICAqLworICAg
IGZ1bmN0aW9uIGxvb2tzTGlrZURpcmVjdGl2ZShub2RlKSB7CisgICAgICAgcmV0dXJuIG5vZGUu
dHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgIG5vZGUuZXhwcmVz
c2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9
PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhp
cyB2YXJpYWJsZSBpcyBvbiB0b3Agb2YgdGhlIGJsb2NrIGJvZHkKKyAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSB7QVNUTm9kZVtd
fSBzdGF0ZW1lbnRzIC0gY29sbGVjdGlvbiBvZiBBU1ROb2RlcyBmb3IgdGhlIHBhcmVudCBub2Rl
IGJsb2NrCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdmFyIGlzIG9uIHRvcCBv
dGhlcndpc2UgZmFsc2UKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Zhck9uVG9wIChub2RlLCBz
dGF0ZW1lbnRzKSB7CisgICAgICAgIHZhciBpID0gMCwgbCA9IHN0YXRlbWVudHMubGVuZ3RoOwor
CisgICAgICAgIC8vIHNraXAgb3ZlciBkaXJlY3RpdmVzCisgICAgICAgIGZvciAoOyBpIDwgbDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoIWxvb2tzTGlrZURpcmVjdGl2ZShzdGF0ZW1lbnRzW2ld
KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZm9yICg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRz
W2ldLnR5cGUgIT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRzW2ld
ID09PSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJp
YWJsZSBpcyBvbiB0b3AgYXQgdGhlIGdsb2JhbCBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJl
bnQgLSBQYXJlbnQgb2YgdGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBnbG9iYWxWYXJDaGVjayAobm9kZSwgcGFyZW50KSB7CisgICAgICAgIGlm
ICghaXNWYXJPblRvcChub2RlLCBwYXJlbnQuYm9keSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJpYWJsZSBpcyBvbiB0b3AgYXQgZnVuY3Rpb25hbCBi
bG9jayBzY29wZSBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2Rl
IHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQgLSBQYXJlbnQgb2YgdGhl
IG5vZGUKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGdyYW5kUGFyZW50IC0gUGFyZW50IG9mIHRo
ZSBub2RlJ3MgcGFyZW50CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gYmxvY2tTY29wZVZhckNoZWNrIChub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KSB7Cisg
ICAgICAgIGlmICghKChncmFuZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIK
KyAgICAgICAgICAgIHx8IGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24i
KQorICAgICAgICAgICAgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIKKyAgICAg
ICAgICAgICYmIGlzVmFyT25Ub3Aobm9kZSwgcGFyZW50LmJvZHkpKSkgeworICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24i
OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQu
Z2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgp
OworICAgICAgICAgICAgdmFyIGdyYW5kUGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworCisgICAg
ICAgICAgICBpZiAobm9kZS5raW5kID09PSAidmFyIikgey8vIGNoZWNrIHZhcmlhYmxlIGlzIGB2
YXJgIHR5cGUgYW5kIG5vdCBgbGV0YCBvciBgY29uc3RgCisgICAgICAgICAgICAgICAgaWYgKHBh
cmVudC50eXBlID09PSAiUHJvZ3JhbSIpIHsvLyBUaGF0IG1lYW5zIGl0cyBhIGdsb2JhbCB2YXJp
YWJsZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJDaGVjayhub2RlLCBwYXJlbnQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrU2NvcGVW
YXJDaGVjayhub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB3aGVuIElJRkUgaXMgbm90IHdyYXBwZWQgaW4gcGFyZW5zCisgKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciBzdHlsZSA9IGNvbnRl
eHQub3B0aW9uc1swXSB8fCAib3V0c2lkZSI7CisKKyAgICBmdW5jdGlvbiB3cmFwcGVkKG5vZGUp
IHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5v
ZGUpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUp
OworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBwcmV2aW91c1Rva2VuLnZhbHVlID09
PSAiKCIgJiYKKyAgICAgICAgICAgIG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIp
IjsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiRnVu
Y3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHZhciBjYWxsRXhwcmVzc2lvbldy
YXBwZWQgPSB3cmFwcGVkKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkV4cHJl
c3Npb25XcmFwcGVkID0gd3JhcHBlZChub2RlLmNhbGxlZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWNhbGxFeHByZXNzaW9uV3JhcHBlZCAmJiAhZnVuY3Rpb25FeHByZXNzaW9uV3JhcHBlZCkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcCBhbiBpbW1l
ZGlhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiBwYXJlbnRoZXNlcy4iKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAiaW5zaWRlIiAmJiAhZnVuY3Rpb25FeHByZXNzaW9u
V3JhcHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3Jh
cCBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIGluIHBhcmVucy4iKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAib3V0c2lkZSIgJiYgIWNhbGxFeHByZXNzaW9uV3Jh
cHBlZCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTW92ZSB0
aGUgaW52b2NhdGlvbiBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBmdW5jdGlvbi4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHJlZ2V4IGxpdGVyYWxzIGFyZSBu
b3Qgd3JhcHBlZCBpbiBwYXJlbnMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cu
bWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRv
a2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUpLAorICAgICAgICAgICAgICAgIG5vZGVU
eXBlID0gdG9rZW4udHlwZSwKKyAgICAgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICAg
ICAgZ3JhbmRwYXJlbnQsCisgICAgICAgICAgICAgICAgYW5jZXN0b3JzOworCisgICAgICAgICAg
ICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2UgPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpOworICAgICAgICAgICAgICAg
IGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICAgICAgZ3Jh
bmRwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdOworCisgICAgICAgICAg
ICAgICAgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBncmFu
ZHBhcmVudC5vYmplY3QgPT09IG5vZGUgJiYKKyAgICAgICAgICAgICAgICAgICAgKCFzb3VyY2Ug
fHwgc291cmNlLnZhbHVlICE9PSAiKCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJXcmFwIHRoZSByZWdleHAgbGl0ZXJhbCBpbiBwYXJlbnMgdG8gZGlzYW1i
aWd1YXRlIHRoZSBzbGFzaC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBvciBk
aXNhbGxvdyB5b2RhIGNvbXBhcmlzb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbiAoY29udGV4dCkgeworCisgICAgLy8gRGVmYXVsdCB0byAibmV2ZXIiICghYWx3YXlzKSBp
ZiBubyBvcHRpb24KKworICAgIHZhciBhbHdheXMgPSAoY29udGV4dC5vcHRpb25zWzBdID09PSAi
YWx3YXlzIik7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhl
ciBhbiBvcGVyYXRvciBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtT
dHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7
Qm9vbGVhbn0gV2hldGhlciBvciBub3QgaXQgaXMgYSBjb21wYXJpc29uIG9wZXJhdG9yLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGlzQ29tcGFyaXNvbk9wZXJhdG9yKG9wZXJhdG9yKSB7CisgICAg
ICAgIHJldHVybiAoL14oPT18PT09fCE9fCE9PXw8fD58PD18Pj0pJC8pLnRlc3Qob3BlcmF0b3Ip
OworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGFsd2F5cykgewor
CisgICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBhbHdheXMgYmUgeW9kYS1zdHls
ZTogaWYgKCJibHVlIiA9PT0gY29sb3IpCisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yaWdo
dC50eXBlID09PSAiTGl0ZXJhbCIgJiYgaXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRv
cikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVk
IGxpdGVyYWwgdG8gYmUgb24gdGhlIGxlZnQgc2lkZSBvZiAiICsgbm9kZS5vcGVyYXRvciArICIu
Iik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAg
ICAgICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBuZXZlciBiZSB5b2RhLXN0eWxlIChkZWZhdWx0
KQorCisgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYg
aXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGxpdGVyYWwgdG8gYmUgb24gdGhlIHJp
Z2h0IHNpZGUgb2YgIiArIG5vZGUub3BlcmF0b3IgKyAiLiIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDE1
MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgQ29tbW9uIHV0aWxpdGllcy4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8qKgorICogTWVyZ2VzIHR3byBvYmplY3RzIHRvZ2V0aGVyIGFuZCBhc3NpZ25zIHRoZSByZXN1
bHQgdG8gdGhlIGluaXRpYWwgb2JqZWN0LiBDYW4gYmUgdXNlZCBmb3Igc2hhbGxvdyBjbG9uaW5n
LgorICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBvZiB0aGUgY2xvbmluZyBvcGVyYXRpb24KKyAq
IEBwYXJhbSB7T2JqZWN0fSBzb3VyY2Ugb2JqZWN0CisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLwor
ZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7CisgICAgT2JqZWN0Lmtl
eXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICB0YXJnZXRba2V5XSA9
IHNvdXJjZVtrZXldOworICAgIH0pOworfTsKKworLyoqCisgKiBNZXJnZXMgdHdvIGNvbmZpZyBv
YmplY3RzLiBUaGlzIHdpbGwgbm90IG9ubHkgYWRkIG1pc3Npbmcga2V5cywgYnV0IHdpbGwgYWxz
byBtb2RpZnkgdmFsdWVzIHRvIG1hdGNoLgorICogQHBhcmFtIHtPYmplY3R9IGJhc2UgY29uZmln
IG9iamVjdAorICogQHBhcmFtIHtPYmplY3R9IGN1c3RvbSBjb25maWcgb2JqZWN0LiBPdmVycmlk
ZXMgaW4gdGhpcyBjb25maWcgb2JqZWN0IHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIGJhc2UuCisg
KiBAcmV0dXJucyB7T2JqZWN0fSBtZXJnZWQgY29uZmlnIG9iamVjdC4KKyAqLworZXhwb3J0cy5t
ZXJnZUNvbmZpZ3MgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoYmFzZSwgY3VzdG9tKSB7CisKKyAg
ICBPYmplY3Qua2V5cyhjdXN0b20pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2
YXIgcHJvcGVydHkgPSBjdXN0b21ba2V5XTsKKworICAgICAgICBpZiAoa2V5ID09PSAicGx1Z2lu
cyIpIHsKKyAgICAgICAgICAgIGlmICghYmFzZVtrZXldKSB7CisgICAgICAgICAgICAgICAgYmFz
ZVtrZXldID0gW107CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3BlcnR5LmZvckVh
Y2goZnVuY3Rpb24gKHBsdWdpbikgeworICAgICAgICAgICAgICAgIC8vIHNraXAgZHVwbGljYXRl
cworICAgICAgICAgICAgICAgIGlmIChiYXNlW2tleV0uaW5kZXhPZihwbHVnaW4pID09PSAtMSkg
eworICAgICAgICAgICAgICAgICAgICBiYXNlW2tleV0ucHVzaChwbHVnaW4pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZVtrZXldKSAmJiAhQXJyYXkuaXNBcnJh
eShwcm9wZXJ0eSkgJiYgdHlwZW9mIHByb3BlcnR5ID09PSAibnVtYmVyIikgeworICAgICAgICAg
ICAgLy8gYXNzdW1lIHRoYXQgd2UgYXJlIGp1c3Qgb3ZlcnJpZGluZyBmaXJzdCBhdHRyaWJ1dGUK
KyAgICAgICAgICAgIGJhc2Vba2V5XVswXSA9IGN1c3RvbVtrZXldOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gIm9iamVj
dCIgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7CisgICAgICAgICAgICAvLyBiYXNlW2tl
eV0gbWlnaHQgbm90IGV4aXN0LCBzbyBiZSBjYXJlZnVsIHdpdGggcmVjdXJzaW9uIGhlcmUKKyAg
ICAgICAgICAgIGJhc2Vba2V5XSA9IG1lcmdlQ29uZmlncyhiYXNlW2tleV0gfHwge30sIGN1c3Rv
bVtrZXldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2Vba2V5XSA9IGN1c3Rv
bVtrZXldOworICAgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gYmFzZTsKK307CisKK30s
e31dfSx7fSxbOV0pKDkpCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>