<?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>171448</bug_id>
          
          <creation_ts>2017-04-28 13:51:20 -0700</creation_ts>
          <short_desc>Speedometer: Add an ES2015 TodoMVC implementation</short_desc>
          <delta_ts>2017-05-11 20:02:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302771</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 13:51:20 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), add an ES2015 TodoMVC implementation that uses native classes, template literals, fat-arrows and other modern JS features. This allows the benchmark to independently track both strict ES5 code (we have an ES5 vanilla implem) as well as more modern code in an untranspiled form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302775</commentid>
    <comment_count>1</comment_count>
      <attachid>308593</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 13:57:36 -0700</bug_when>
    <thetext>Created attachment 308593
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302910</commentid>
    <comment_count>2</comment_count>
      <attachid>308634</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 17:43:19 -0700</bug_when>
    <thetext>Created attachment 308634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306279</commentid>
    <comment_count>3</comment_count>
      <attachid>308634</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-08 23:22:05 -0700</bug_when>
    <thetext>Comment on attachment 308634
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=308634&amp;action=review

&gt; PerformanceTests/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +        Adds ES2015 TodoMVC implementation for Speedometer

Again, please add a blank line between Reviewed by and this description.

&gt; PerformanceTests/ChangeLog:11
&gt; +        (html,):

And remove these inline comments since we&apos;re just importing files and not adding any inline comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307673</commentid>
    <comment_count>4</comment_count>
      <attachid>309847</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 19:15:22 -0700</bug_when>
    <thetext>Created attachment 309847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307676</commentid>
    <comment_count>5</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 19:17:50 -0700</bug_when>
    <thetext>Addressed comments. PTAL when you get a chance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307705</commentid>
    <comment_count>6</comment_count>
      <attachid>309847</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:52:47 -0700</bug_when>
    <thetext>Comment on attachment 309847
Patch

Clearing flags on attachment: 309847

Committed r216718: &lt;http://trac.webkit.org/changeset/216718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307706</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 19:52:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308593</attachid>
            <date>2017-04-28 13:57:36 -0700</date>
            <delta_ts>2017-04-28 17:43:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171448-20170428135735.patch</filename>
            <type>text/plain</type>
            <size>668537</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTM3CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmJkY2VmMmQ3OTY3NTE0Nzk3ZGYxNzIyY2Rm
OTkxODVjMzVjNDgwZjggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzA5IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRVMyMDE1IFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQ0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBTcGVlZG9tZXRlcjogQWRkcyBhbiBF
UzIwMTUgVG9kb01WQyBpbXBsZW1lbnRhdGlvbgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qczog
QWRkZWQuCisgICAgICAgIChhcHAuVXRpbHMudXVpZCk6CisgICAgICAgIChhcHAuVXRpbHMucGx1
cmFsaXplKToKKyAgICAgICAgKGFwcC5VdGlscy5leHRlbmQpOgorICAgICAgICAoYXBwLlRvZG9N
b2RlbCk6CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zdWJzY3JpYmUpOgorICAg
ICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuaW5mb3JtKToKKyAgICAgICAgKGFwcC5Ub2Rv
TW9kZWwucHJvdG90eXBlLmFkZFRvZG8pOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5
cGUudG9nZ2xlQWxsKToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2dsZSk6
CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5kZXN0cm95KToKKyAgICAgICAgKGFw
cC5Ub2RvTW9kZWwucHJvdG90eXBlLnNhdmUpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90
b3R5cGUuY2xlYXJDb21wbGV0ZWQpOgorICAgICAgICAoVG9kb0Zvb3Rlci5SZWFjdC5jcmVhdGVD
bGFzcy5yZW5kZXIpOgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxl
U3VibWl0KToKKyAgICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLmhhbmRsZUVkaXQp
OgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlS2V5RG93bik6Cisg
ICAgICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5oYW5kbGVDaGFuZ2UpOgorICAgICAg
ICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MuZ2V0SW5pdGlhbFN0YXRlKToKKyAgICAgICAg
KFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLnNob3VsZENvbXBvbmVudFVwZGF0ZSk6CisgICAg
ICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5jb21wb25lbnREaWRVcGRhdGUpOgorICAg
ICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3MucmVuZGVyKToKKyAgICAgICAgKFRvZG9B
cHAuUmVhY3QuY3JlYXRlQ2xhc3MuZ2V0SW5pdGlhbFN0YXRlKToKKyAgICAgICAgKFRvZG9BcHAu
UmVhY3QuY3JlYXRlQ2xhc3MuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAoVG9kb0FwcC5S
ZWFjdC5jcmVhdGVDbGFzcy5oYW5kbGVDaGFuZ2UpOgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5j
cmVhdGVDbGFzcy5oYW5kbGVOZXdUb2RvS2V5RG93bik6CisgICAgICAgIChUb2RvQXBwLlJlYWN0
LmNyZWF0ZUNsYXNzLnRvZ2dsZUFsbCk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNs
YXNzLnRvZ2dsZSk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmRlc3Ryb3kp
OgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5lZGl0KToKKyAgICAgICAgKFRv
ZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3Muc2F2ZSk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNy
ZWF0ZUNsYXNzLmNhbmNlbCk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmNs
ZWFyQ29tcGxldGVkKToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MucmVuZGVy
KToKKyAgICAgICAgKHJlbmRlcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9qcy9hcHAuanN4OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbGljZW5zZS5tZDogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQuanM6IEFkZGVkLgorICAg
ICAgICAoY2xhc3NOYW1lcyk6CisgICAgICAgIChlbHNlKToKKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL2NsYXNzbmFtZXMvZGVkdXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKF9wYXJzZUFycmF5KToK
KyAgICAgICAgKF9wYXJzZU51bWJlcik6CisgICAgICAgIChfcGFyc2VPYmplY3QpOgorICAgICAg
ICAoX3BhcnNlU3RyaW5nKToKKyAgICAgICAgKF9wYXJzZSk6CisgICAgICAgIChfY2xhc3NOYW1l
cyk6CisgICAgICAgIChjbGFzc05hbWVzKToKKyAgICAgICAgKGVsc2UpOgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qczogQWRkZWQuCisgICAgICAgIChjbGFzc05h
bWVzKToKKyAgICAgICAgKGVsc2UpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9t
L2Rpc3QvcmVhY3QtZG9tLm1pbi5qczogQWRkZWQuCisgICAgICAgIChyZXR1cm4ubyk6CisgICAg
ICAgIChyZXR1cm4ucmV0dXJuLmUpOgorICAgICAgICAocmV0dXJuLik6CisgICAgICAgIChyZXR1
cm4pOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9u
cy5qczogQWRkZWQuCisgICAgICAgIChlbHNlKToKKyAgICAgICAgKGVsc2UuZWxzZSk6CisgICAg
ICAgIChzKToKKyAgICAgICAgKHJldHVybi5lKToKKyAgICAgICAgKG1ha2VQcmVmaXhNYXApOgor
ICAgICAgICAoZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUpOgorICAgICAgICAoMSk6CisgICAg
ICAgIChlc2NhcGUpOgorICAgICAgICAodW5lc2NhcGUpOgorICAgICAgICAoMik6CisgICAgICAg
IChMaW5rZWRTdGF0ZU1peGluLmxpbmtTdGF0ZSk6CisgICAgICAgICgzKToKKyAgICAgICAgKG9u
ZUFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKHR3b0FyZ3VtZW50UG9vbGVyKToKKyAgICAgICAg
KHRocmVlQXJndW1lbnRQb29sZXIpOgorICAgICAgICAoZm91ckFyZ3VtZW50UG9vbGVyKToKKyAg
ICAgICAgKHN0YW5kYXJkUmVsZWFzZXIpOgorICAgICAgICAoYWRkUG9vbGluZ1RvKToKKyAgICAg
ICAgKDQpOgorICAgICAgICAoX19zcHJlYWQpOgorICAgICAgICAoUmVhY3QuY3JlYXRlTWl4aW4p
OgorICAgICAgICAoZ2V0UmVhY3RET00pOgorICAgICAgICAoZXhwb3J0cy5nZXRSZWFjdFBlcmYp
OgorICAgICAgICAoZXhwb3J0cy5nZXRSZWFjdFRlc3RVdGlscyk6CisgICAgICAgICg2KToKKyAg
ICAgICAgKF9jbGFzc0NhbGxDaGVjayk6CisgICAgICAgIChfcG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybik6CisgICAgICAgIChfaW5oZXJpdHMpOgorICAgICAgICAoY3JlYXRlVHJhbnNpdGlvblRp
bWVvdXRQcm9wVmFsaWRhdG9yKToKKyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwKToK
KyAgICAgICAgKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5yZW5kZXIpOgorICAg
ICAgICAoNyk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLik6CisgICAg
ICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkKToKKyAgICAgICAgKFJlYWN0Q1NTVHJh
bnNpdGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCk6CisgICAgICAg
IChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3Vu
dCk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21w
b25lbnRXaWxsVW5tb3VudCk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxk
LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoOCk6CisgICAgICAgIChlc2NhcGVVc2VyUHJv
dmlkZWRLZXkpOgorICAgICAgICAoRm9yRWFjaEJvb2tLZWVwaW5nKToKKyAgICAgICAgKEZvckVh
Y2hCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChmb3JFYWNoU2lu
Z2xlQ2hpbGQpOgorICAgICAgICAoZm9yRWFjaENoaWxkcmVuKToKKyAgICAgICAgKE1hcEJvb2tL
ZWVwaW5nKToKKyAgICAgICAgKE1hcEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yKToK
KyAgICAgICAgKG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQpOgorICAgICAgICAobWFwSW50b1dp
dGhLZXlQcmVmaXhJbnRlcm5hbCk6CisgICAgICAgIChtYXBDaGlsZHJlbik6CisgICAgICAgIChm
b3JFYWNoU2luZ2xlQ2hpbGREdW1teSk6CisgICAgICAgIChjb3VudENoaWxkcmVuKToKKyAgICAg
ICAgKHRvQXJyYXkpOgorICAgICAgICAoOSk6CisgICAgICAgIChpZGVudGl0eSk6CisgICAgICAg
IChSRVNFUlZFRF9TUEVDX0tFWVMuZGlzcGxheU5hbWUpOgorICAgICAgICAoUkVTRVJWRURfU1BF
Q19LRVlTLm1peGlucyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuY2hpbGRDb250ZXh0
VHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmNvbnRleHRUeXBlcyk6CisgICAg
ICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuZ2V0RGVmYXVsdFByb3BzKToKKyAgICAgICAgKFJFU0VS
VkVEX1NQRUNfS0VZUy5wcm9wVHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLnN0
YXRpY3MpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmF1dG9iaW5kKToKKyAgICAgICAg
KHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUpOgorICAgICAgICAobWl4U3BlY0ludG9Db21wb25lbnQp
OgorICAgICAgICAobWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQpOgorICAgICAgICAobWVyZ2VJ
bnRvV2l0aE5vRHVwbGljYXRlS2V5cyk6CisgICAgICAgIChyZXR1cm4ubWVyZ2VkUmVzdWx0KToK
KyAgICAgICAgKGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKToKKyAgICAgICAgKHJldHVybi5j
aGFpbmVkRnVuY3Rpb24pOgorICAgICAgICAoY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKToKKyAgICAg
ICAgKGJvdW5kTWV0aG9kLmJpbmQpOgorICAgICAgICAoYmluZEF1dG9CaW5kTWV0aG9kKToKKyAg
ICAgICAgKGJpbmRBdXRvQmluZE1ldGhvZHMpOgorICAgICAgICAoUmVhY3RDbGFzc01peGluLnJl
cGxhY2VTdGF0ZSk6CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4uaXNNb3VudGVkKToKKyAgICAg
ICAgKFJlYWN0Q2xhc3NDb21wb25lbnQpOgorICAgICAgICAoUmVhY3RDbGFzcy5jcmVhdGVDbGFz
cyk6CisgICAgICAgIChSZWFjdENsYXNzLmluamVjdGlvbi5pbmplY3RNaXhpbik6CisgICAgICAg
ICgxMCk6CisgICAgICAgIChSZWFjdENvbXBvbmVudCk6CisgICAgICAgIChSZWFjdENvbXBvbmVu
dC5wcm90b3R5cGUuc2V0U3RhdGUpOgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBl
LmZvcmNlVXBkYXRlKToKKyAgICAgICAgKGRlZmluZURlcHJlY2F0aW9uV2FybmluZyk6CisgICAg
ICAgIChnZXQgZm9yKToKKyAgICAgICAgKDExKToKKyAgICAgICAgKGlzTmF0aXZlKToKKyAgICAg
ICAgKDEyKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1h
ZGRvbnMubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKG8pOgorICAgICAgICAocmV0dXJuLmUpOgor
ICAgICAgICAocik6CisgICAgICAgICgxKToKKyAgICAgICAgKDIpOgorICAgICAgICAoaS5saW5r
U3RhdGUpOgorICAgICAgICAoMyk6CisgICAgICAgIChpKToKKyAgICAgICAgKGEpOgorICAgICAg
ICAocyk6CisgICAgICAgICh1KToKKyAgICAgICAgKHApOgorICAgICAgICAoNCk6CisgICAgICAg
IChtLmNyZWF0ZU1peGluKToKKyAgICAgICAgKDUpOgorICAgICAgICAoNik6CisgICAgICAgICh0
LmkuX3dyYXBDaGlsZCk6CisgICAgICAgICh0LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAo
ZCk6CisgICAgICAgICg3KToKKyAgICAgICAgKHQuYyk6CisgICAgICAgICh0LmkudHJhbnNpdGlv
bik6CisgICAgICAgICh0LmkucXVldWVDbGFzc0FuZE5vZGUpOgorICAgICAgICAodC5pLmZsdXNo
Q2xhc3NOYW1lQW5kTm9kZVF1ZXVlKToKKyAgICAgICAgKHQuaS5jb21wb25lbnRXaWxsQXBwZWFy
KToKKyAgICAgICAgKHQuaS5jb21wb25lbnRXaWxsRW50ZXIpOgorICAgICAgICAodC5pLmNvbXBv
bmVudFdpbGxMZWF2ZSk6CisgICAgICAgICh0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQp
OgorICAgICAgICAodC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAodC5w
cm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQpOgorICAgICAgICAoaCk6CisgICAgICAgICg4
KToKKyAgICAgICAgKGwpOgorICAgICAgICAoZik6CisgICAgICAgIChvLnByb3RvdHlwZS5kZXN0
cnVjdG9yKToKKyAgICAgICAgKHMucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAoOSk6
CisgICAgICAgIChjKToKKyAgICAgICAgKF8uZGlzcGxheU5hbWUpOgorICAgICAgICAoXy5taXhp
bnMpOgorICAgICAgICAoXy5jaGlsZENvbnRleHRUeXBlcyk6CisgICAgICAgIChfLmNvbnRleHRU
eXBlcyk6CisgICAgICAgIChfLmdldERlZmF1bHRQcm9wcyk6CisgICAgICAgIChfLnByb3BUeXBl
cyk6CisgICAgICAgIChfLnN0YXRpY3MpOgorICAgICAgICAoXy5hdXRvYmluZCk6CisgICAgICAg
ICh3LnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICh3LmlzTW91bnRlZCk6CisgICAgICAgIChBKToK
KyAgICAgICAgKFQuY3JlYXRlQ2xhc3MpOgorICAgICAgICAoVC5pbmplY3Rpb24uaW5qZWN0TWl4
aW4pOgorICAgICAgICAoMTApOgorICAgICAgICAoci5wcm90b3R5cGUuc2V0U3RhdGUpOgorICAg
ICAgICAoci5wcm90b3R5cGUuZm9yY2VVcGRhdGUpOgorICAgICAgICAoMTEpOgorICAgICAgICAo
by5zaG91bGRDb21wb25lbnRVcGRhdGUpOgorICAgICAgICAoMTIpOgorICAgICAgICAoMTMpOgor
ICAgICAgICAoMTQpOgorICAgICAgICAocC5jcmVhdGVFbGVtZW50KToKKyAgICAgICAgKHAuY3Jl
YXRlRmFjdG9yeSk6CisgICAgICAgIChwLmNsb25lQW5kUmVwbGFjZUtleSk6CisgICAgICAgIChw
LmNsb25lRWxlbWVudCk6CisgICAgICAgIChwLmlzVmFsaWRFbGVtZW50KToKKyAgICAgICAgKDE1
KToKKyAgICAgICAgKDE2KToKKyAgICAgICAgKDE3KToKKyAgICAgICAgKDE4KToKKyAgICAgICAg
KDE5KToKKyAgICAgICAgKDIwKToKKyAgICAgICAgKDIxKToKKyAgICAgICAgKHQuZXhwb3J0cy5p
KToKKyAgICAgICAgKDIyKToKKyAgICAgICAgKG8uY3JlYXRlU3RhdGVTZXR0ZXIpOgorICAgICAg
ICAoby5jcmVhdGVTdGF0ZUtleVNldHRlcik6CisgICAgICAgIChvLk1peGluLmNyZWF0ZVN0YXRl
U2V0dGVyKToKKyAgICAgICAgKG8uTWl4aW4uY3JlYXRlU3RhdGVLZXlTZXR0ZXIpOgorICAgICAg
ICAoMjMpOgorICAgICAgICAoby5nZXRDaGlsZE1hcHBpbmcpOgorICAgICAgICAoby4pOgorICAg
ICAgICAoby5tZXJnZUNoaWxkTWFwcGluZ3MpOgorICAgICAgICAoMjQpOgorICAgICAgICAodS5h
ZGRFbmRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKHUucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgICgyNSk6CisgICAgICAgICh0LmkucGVyZm9ybUFwcGVhcik6CisgICAgICAgICh0
LmkuX2hhbmRsZURvbmVBcHBlYXJpbmcpOgorICAgICAgICAodC5pLnBlcmZvcm1FbnRlcik6Cisg
ICAgICAgICh0LmkuX2hhbmRsZURvbmVFbnRlcmluZyk6CisgICAgICAgICh0LmkucGVyZm9ybUxl
YXZlKToKKyAgICAgICAgKHQuaS5faGFuZGxlRG9uZUxlYXZpbmcpOgorICAgICAgICAodC5wcm90
b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyk6CisgICAgICAgICh0LnByb3RvdHlwZS5j
b21wb25lbnREaWRVcGRhdGUpOgorICAgICAgICAoMjYpOgorICAgICAgICAoMjcpOgorICAgICAg
ICAoMjgpOgorICAgICAgICAoMjkpOgorICAgICAgICAoMzApOgorICAgICAgICAoMzEpOgorICAg
ICAgICAoY2FsbCk6CisgICAgICAgICgzMik6CisgICAgICAgICgzMyk6CisgICAgICAgICgzNCk6
CisgICAgICAgICgzNSk6CisgICAgICAgICgzNik6CisgICAgICAgICgzNyk6CisgICAgICAgIChp
LmFkZENsYXNzKToKKyAgICAgICAgKGkucmVtb3ZlQ2xhc3MpOgorICAgICAgICAoaS5jb25kaXRp
b25DbGFzcyk6CisgICAgICAgIChpLmhhc0NsYXNzKToKKyAgICAgICAgKGkubWF0Y2hlc1NlbGVj
dG9yKToKKyAgICAgICAgKDM4KToKKyAgICAgICAgKDM5KToKKyAgICAgICAgKG8udGhhdFJldHVy
bnNUaGlzKToKKyAgICAgICAgKG8udGhhdFJldHVybnNBcmd1bWVudCk6CisgICAgICAgICg0MCk6
CisgICAgICAgICg0MSk6CisgICAgICAgICg0Mik6CisgICAgICAgICg0Myk6CisgICAgICAgICg0
NCk6CisgICAgICAgICh0cnkpOgorICAgICAgICAodC5leHBvcnRzKToKKyAgICAgICAgKE9iamVj
dC5hc3NpZ24pOgorICAgICAgICAoNDUpOgorICAgICAgICAoNDYpOgorICAgICAgICAoNDcpOgor
ICAgICAgICAocmV0dXJuLnIpOgorICAgICAgICAoYy5uKToKKyAgICAgICAgKHAudCk6CisgICAg
ICAgIChsLnQpOgorICAgICAgICAoZi50KToKKyAgICAgICAgKGQudCk6CisgICAgICAgIChoLnQp
OgorICAgICAgICAoeS50KToKKyAgICAgICAgKHkpOgorICAgICAgICAodi50KToKKyAgICAgICAg
KHYpOgorICAgICAgICAobSk6CisgICAgICAgIChFKToKKyAgICAgICAgKGIpOgorICAgICAgICAo
Xyk6CisgICAgICAgICh4LmFueSk6CisgICAgICAgICh4Lik6CisgICAgICAgICh4LmVsZW1lbnQp
OgorICAgICAgICAoeC5ub2RlKToKKyAgICAgICAgKDQ4KToKKyAgICAgICAgKDQ5KToKKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
cmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3QuanM6IEFkZGVkLgorICAgICAgICAo
ZWxzZSk6CisgICAgICAgIChlbHNlLmVsc2UpOgorICAgICAgICAocyk6CisgICAgICAgIChyZXR1
cm4uZSk6CisgICAgICAgIChlc2NhcGUpOgorICAgICAgICAodW5lc2NhcGUpOgorICAgICAgICAo
MSk6CisgICAgICAgIChvbmVBcmd1bWVudFBvb2xlcik6CisgICAgICAgICh0d29Bcmd1bWVudFBv
b2xlcik6CisgICAgICAgICh0aHJlZUFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAgKGZvdXJBcmd1
bWVudFBvb2xlcik6CisgICAgICAgIChzdGFuZGFyZFJlbGVhc2VyKToKKyAgICAgICAgKGFkZFBv
b2xpbmdUbyk6CisgICAgICAgICgyKToKKyAgICAgICAgKF9fc3ByZWFkKToKKyAgICAgICAgKFJl
YWN0LmNyZWF0ZU1peGluKToKKyAgICAgICAgKGVzY2FwZVVzZXJQcm92aWRlZEtleSk6CisgICAg
ICAgIChGb3JFYWNoQm9va0tlZXBpbmcpOgorICAgICAgICAoRm9yRWFjaEJvb2tLZWVwaW5nLnBy
b3RvdHlwZS5kZXN0cnVjdG9yKToKKyAgICAgICAgKGZvckVhY2hTaW5nbGVDaGlsZCk6CisgICAg
ICAgIChmb3JFYWNoQ2hpbGRyZW4pOgorICAgICAgICAoTWFwQm9va0tlZXBpbmcpOgorICAgICAg
ICAoTWFwQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAobWFwU2lu
Z2xlQ2hpbGRJbnRvQ29udGV4dCk6CisgICAgICAgIChtYXBJbnRvV2l0aEtleVByZWZpeEludGVy
bmFsKToKKyAgICAgICAgKG1hcENoaWxkcmVuKToKKyAgICAgICAgKGZvckVhY2hTaW5nbGVDaGls
ZER1bW15KToKKyAgICAgICAgKGNvdW50Q2hpbGRyZW4pOgorICAgICAgICAodG9BcnJheSk6Cisg
ICAgICAgICg0KToKKyAgICAgICAgKGlkZW50aXR5KToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNf
S0VZUy5kaXNwbGF5TmFtZSk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKToK
KyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5jaGlsZENvbnRleHRUeXBlcyk6CisgICAgICAg
IChSRVNFUlZFRF9TUEVDX0tFWVMuY29udGV4dFR5cGVzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQ
RUNfS0VZUy5nZXREZWZhdWx0UHJvcHMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLnBy
b3BUeXBlcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuc3RhdGljcyk6CisgICAgICAg
IChSRVNFUlZFRF9TUEVDX0tFWVMuYXV0b2JpbmQpOgorICAgICAgICAodmFsaWRhdGVNZXRob2RP
dmVycmlkZSk6CisgICAgICAgIChtaXhTcGVjSW50b0NvbXBvbmVudCk6CisgICAgICAgIChtaXhT
dGF0aWNTcGVjSW50b0NvbXBvbmVudCk6CisgICAgICAgIChtZXJnZUludG9XaXRoTm9EdXBsaWNh
dGVLZXlzKToKKyAgICAgICAgKHJldHVybi5tZXJnZWRSZXN1bHQpOgorICAgICAgICAoY3JlYXRl
TWVyZ2VkUmVzdWx0RnVuY3Rpb24pOgorICAgICAgICAocmV0dXJuLmNoYWluZWRGdW5jdGlvbik6
CisgICAgICAgIChjcmVhdGVDaGFpbmVkRnVuY3Rpb24pOgorICAgICAgICAoYm91bmRNZXRob2Qu
YmluZCk6CisgICAgICAgIChiaW5kQXV0b0JpbmRNZXRob2QpOgorICAgICAgICAoYmluZEF1dG9C
aW5kTWV0aG9kcyk6CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4ucmVwbGFjZVN0YXRlKToKKyAg
ICAgICAgKFJlYWN0Q2xhc3NNaXhpbi5pc01vdW50ZWQpOgorICAgICAgICAoUmVhY3RDbGFzc0Nv
bXBvbmVudCk6CisgICAgICAgIChSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKToKKyAgICAgICAgKFJl
YWN0Q2xhc3MuaW5qZWN0aW9uLmluamVjdE1peGluKToKKyAgICAgICAgKDUpOgorICAgICAgICAo
UmVhY3RDb21wb25lbnQpOgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0
YXRlKToKKyAgICAgICAgKFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSk6Cisg
ICAgICAgIChkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAoZ2V0IGZvcik6Cisg
ICAgICAgICg2KToKKyAgICAgICAgKGlzTmF0aXZlKToKKyAgICAgICAgKDcpOgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5taW4uanM6IEFkZGVkLgorICAgICAgICAo
byk6CisgICAgICAgIChyZXR1cm4udCk6CisgICAgICAgIChyKToKKyAgICAgICAgKDEpOgorICAg
ICAgICAoaSk6CisgICAgICAgICh1KToKKyAgICAgICAgKGEpOgorICAgICAgICAocyk6CisgICAg
ICAgIChsKToKKyAgICAgICAgKDIpOgorICAgICAgICAobS5jcmVhdGVNaXhpbik6CisgICAgICAg
ICgzKToKKyAgICAgICAgKGYpOgorICAgICAgICAocCk6CisgICAgICAgIChkKToKKyAgICAgICAg
KG8ucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAoYS5wcm90b3R5cGUuZGVzdHJ1Y3Rv
cik6CisgICAgICAgICg0KToKKyAgICAgICAgKGMpOgorICAgICAgICAoeC5kaXNwbGF5TmFtZSk6
CisgICAgICAgICh4Lm1peGlucyk6CisgICAgICAgICh4LmNoaWxkQ29udGV4dFR5cGVzKToKKyAg
ICAgICAgKHguY29udGV4dFR5cGVzKToKKyAgICAgICAgKHguZ2V0RGVmYXVsdFByb3BzKToKKyAg
ICAgICAgKHgucHJvcFR5cGVzKToKKyAgICAgICAgKHguc3RhdGljcyk6CisgICAgICAgICh4LmF1
dG9iaW5kKToKKyAgICAgICAgKF8ucmVwbGFjZVN0YXRlKToKKyAgICAgICAgKF8uaXNNb3VudGVk
KToKKyAgICAgICAgKFApOgorICAgICAgICAody5jcmVhdGVDbGFzcyk6CisgICAgICAgICh3Lmlu
amVjdGlvbi5pbmplY3RNaXhpbik6CisgICAgICAgICg1KToKKyAgICAgICAgKHIucHJvdG90eXBl
LnNldFN0YXRlKToKKyAgICAgICAgKHIucHJvdG90eXBlLmZvcmNlVXBkYXRlKToKKyAgICAgICAg
KDYpOgorICAgICAgICAoNyk6CisgICAgICAgICg4KToKKyAgICAgICAgKGwuY3JlYXRlRWxlbWVu
dCk6CisgICAgICAgIChsLmNyZWF0ZUZhY3RvcnkpOgorICAgICAgICAobC5jbG9uZUFuZFJlcGxh
Y2VLZXkpOgorICAgICAgICAobC5jbG9uZUVsZW1lbnQpOgorICAgICAgICAobC5pc1ZhbGlkRWxl
bWVudCk6CisgICAgICAgICg5KToKKyAgICAgICAgKDEwKToKKyAgICAgICAgKDExKToKKyAgICAg
ICAgKDEyKToKKyAgICAgICAgKDEzKToKKyAgICAgICAgKGUuZXhwb3J0cy5pKToKKyAgICAgICAg
KDE0KToKKyAgICAgICAgKDE1KToKKyAgICAgICAgKDE2KToKKyAgICAgICAgKDE3KToKKyAgICAg
ICAgKDE4KToKKyAgICAgICAgKDE5KToKKyAgICAgICAgKDIwKToKKyAgICAgICAgKDIxKToKKyAg
ICAgICAgKG8udGhhdFJldHVybnNUaGlzKToKKyAgICAgICAgKG8udGhhdFJldHVybnNBcmd1bWVu
dCk6CisgICAgICAgICgyMik6CisgICAgICAgICgyMyk6CisgICAgICAgICgyNCk6CisgICAgICAg
ICgyNSk6CisgICAgICAgICh0cnkpOgorICAgICAgICAoZS5leHBvcnRzKToKKyAgICAgICAgKE9i
amVjdC5hc3NpZ24pOgorICAgICAgICAoMjYpOgorICAgICAgICAoMjcpOgorICAgICAgICAoMjgp
OgorICAgICAgICAocmV0dXJuLnIpOgorICAgICAgICAoYy5uKToKKyAgICAgICAgKGwuZSk6Cisg
ICAgICAgIChmLmUpOgorICAgICAgICAocC5lKToKKyAgICAgICAgKGQuZSk6CisgICAgICAgICh5
LmUpOgorICAgICAgICAoeSk6CisgICAgICAgIChoLmUpOgorICAgICAgICAoaCk6CisgICAgICAg
ICh2LmUpOgorICAgICAgICAodik6CisgICAgICAgIChtKToKKyAgICAgICAgKGIpOgorICAgICAg
ICAoRSk6CisgICAgICAgICh4KToKKyAgICAgICAgKE4uYW55KToKKyAgICAgICAgKE4uKToKKyAg
ICAgICAgKE4uZWxlbWVudCk6CisgICAgICAgIChOLm5vZGUpOgorICAgICAgICAoMjkpOgorICAg
ICAgICAoMzApOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4
LmNzczogQWRkZWQuCisgICAgICAgIChodG1sLCk6CisgICAgICAgIChidXR0b24pOgorICAgICAg
ICAoYm9keSk6CisgICAgICAgICg6Zm9jdXMpOgorICAgICAgICAoLmhpZGRlbik6CisgICAgICAg
ICgudG9kb2FwcCk6CisgICAgICAgICgudG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFj
ZWhvbGRlcik6CisgICAgICAgICgudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcik6Cisg
ICAgICAgICgudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRv
ZG9hcHAgaDEpOgorICAgICAgICAoLm5ldy10b2RvLCk6CisgICAgICAgICgubmV3LXRvZG8pOgor
ICAgICAgICAoLm1haW4pOgorICAgICAgICAoLnRvZ2dsZS1hbGwpOgorICAgICAgICAoLnRvZ2ds
ZS1hbGwgKyBsYWJlbCk6CisgICAgICAgICgudG9nZ2xlLWFsbCArIGxhYmVsOmJlZm9yZSk6Cisg
ICAgICAgICgudG9nZ2xlLWFsbDpjaGVja2VkICsgbGFiZWw6YmVmb3JlKToKKyAgICAgICAgKC50
b2RvLWxpc3QpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSk6CisgICAgICAgICgudG9kby1saXN0
IGxpOmxhc3QtY2hpbGQpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nKToKKyAgICAg
ICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRpdCk6CisgICAgICAgICgudG9kby1saXN0IGxp
LmVkaXRpbmcgLnZpZXcpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlKToKKyAgICAg
ICAgKC50b2RvLWxpc3QgbGkgLnRvZ2dsZSArIGxhYmVsKToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGkgLnRvZ2dsZTpjaGVja2VkICsgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSBsYWJl
bCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCk6CisgICAgICAgICgu
dG9kby1saXN0IGxpIC5kZXN0cm95KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6
aG92ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcik6CisgICAgICAg
ICgudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkg
LmVkaXQpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQpOgorICAg
ICAgICAoLmZvb3Rlcik6CisgICAgICAgICguZm9vdGVyOmJlZm9yZSk6CisgICAgICAgICgudG9k
by1jb3VudCk6CisgICAgICAgICgudG9kby1jb3VudCBzdHJvbmcpOgorICAgICAgICAoLmZpbHRl
cnMpOgorICAgICAgICAoLmZpbHRlcnMgbGkpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYSk6Cisg
ICAgICAgICguZmlsdGVycyBsaSBhOmhvdmVyKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEuc2Vs
ZWN0ZWQpOgorICAgICAgICAoLmNsZWFyLWNvbXBsZXRlZCwpOgorICAgICAgICAoLmNsZWFyLWNv
bXBsZXRlZDpob3Zlcik6CisgICAgICAgICguaW5mbyk6CisgICAgICAgICguaW5mbyBwKToKKyAg
ICAgICAgKC5pbmZvIGEpOgorICAgICAgICAoLmluZm8gYTpob3Zlcik6CisgICAgICAgIChAbWVk
aWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApKToKKyAgICAg
ICAgKC50b2dnbGUtYWxsLCk6CisgICAgICAgIChAbWVkaWEgKG1heC13aWR0aDogNDMwcHgpKToK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4K
KyAgICAgICAgKGhyKToKKyAgICAgICAgKC5sZWFybiBhKToKKyAgICAgICAgKC5sZWFybiBhOmhv
dmVyKToKKyAgICAgICAgKC5sZWFybiBoMywpOgorICAgICAgICAoLmxlYXJuIGgzKToKKyAgICAg
ICAgKC5sZWFybiBoNCk6CisgICAgICAgICgubGVhcm4gaDUpOgorICAgICAgICAoLmxlYXJuIHVs
KToKKyAgICAgICAgKC5sZWFybiBsaSk6CisgICAgICAgICgubGVhcm4gcCk6CisgICAgICAgICgj
aXNzdWUtY291bnQpOgorICAgICAgICAoLnF1b3RlKToKKyAgICAgICAgKC5xdW90ZSBwKToKKyAg
ICAgICAgKC5xdW90ZSBwOmJlZm9yZSk6CisgICAgICAgICgucXVvdGUgcDphZnRlcik6CisgICAg
ICAgICgucXVvdGUgZm9vdGVyKToKKyAgICAgICAgKC5xdW90ZSBmb290ZXIgaW1nKToKKyAgICAg
ICAgKC5xdW90ZSBmb290ZXIgYSk6CisgICAgICAgICguc3BlZWNoLWJ1YmJsZSk6CisgICAgICAg
ICguc3BlZWNoLWJ1YmJsZTphZnRlcik6CisgICAgICAgICgubGVhcm4tYmFyID4gLmxlYXJuKToK
KyAgICAgICAgKEBtZWRpYSAobWluLXdpZHRoOiA4OTlweCkpOgorICAgICAgICAoLmxlYXJuLWJh
cik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzOiBBZGRl
ZC4KKyAgICAgICAgKF8uZGVmYXVsdHMpOgorICAgICAgICAodGVtcGxhdGUpOgorICAgICAgICAo
ZXNjYXBlci5fLnRlbXBsYXRlKToKKyAgICAgICAgKF8pOgorICAgICAgICAobG9jYXRpb24uaG9z
dG5hbWUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuaS5yLmkucik6CisgICAgICAgIChyZWRpcmVjdCk6
CisgICAgICAgIChmaW5kUm9vdCk6CisgICAgICAgICh4aHIub25sb2FkKToKKyAgICAgICAgKGdl
dEZpbGUpOgorICAgICAgICAoTGVhcm4pOgorICAgICAgICAoTGVhcm4ucHJvdG90eXBlLmFwcGVu
ZCk6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50KToKKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3QvbnBtLXNocmlua3dyYXAuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbjog
QWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAoaHRtbCwpOgorICAgICAg
ICAoYnV0dG9uKToKKyAgICAgICAgKGJvZHkpOgorICAgICAgICAoYnV0dG9uLCk6CisgICAgICAg
ICguaGlkZGVuKToKKyAgICAgICAgKC50b2RvYXBwKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0
Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojot
bW96LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhv
bGRlcik6CisgICAgICAgICgudG9kb2FwcCBoMSk6CisgICAgICAgICgubmV3LXRvZG8sKToKKyAg
ICAgICAgKC5uZXctdG9kbyk6CisgICAgICAgICgubWFpbik6CisgICAgICAgIChsYWJlbFtmb3I9
J3RvZ2dsZS1hbGwnXSk6CisgICAgICAgICgudG9nZ2xlLWFsbCk6CisgICAgICAgICgudG9nZ2xl
LWFsbDpiZWZvcmUpOgorICAgICAgICAoLnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUpOgorICAg
ICAgICAoLnRvZG8tbGlzdCk6CisgICAgICAgICgudG9kby1saXN0IGxpKToKKyAgICAgICAgKC50
b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcp
OgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0KToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkuZWRpdGluZyAudmlldyk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUp
OgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyKToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkg
bGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0
cm95OmhvdmVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIpOgorICAg
ICAgICAoLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0
IGxpIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkKToK
KyAgICAgICAgKC5mb290ZXIpOgorICAgICAgICAoLmZvb3RlcjpiZWZvcmUpOgorICAgICAgICAo
LnRvZG8tY291bnQpOgorICAgICAgICAoLnRvZG8tY291bnQgc3Ryb25nKToKKyAgICAgICAgKC5m
aWx0ZXJzKToKKyAgICAgICAgKC5maWx0ZXJzIGxpKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEp
OgorICAgICAgICAoLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCwpOgorICAgICAgICAoLmZpbHRlcnMg
bGkgYS5zZWxlY3RlZCk6CisgICAgICAgICguY2xlYXItY29tcGxldGVkLCk6CisgICAgICAgICgu
Y2xlYXItY29tcGxldGVkOmhvdmVyKToKKyAgICAgICAgKC5pbmZvKToKKyAgICAgICAgKC5pbmZv
IHApOgorICAgICAgICAoLmluZm8gYSk6CisgICAgICAgICguaW5mbyBhOmhvdmVyKToKKyAgICAg
ICAgKEBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkp
OgorICAgICAgICAoLnRvZ2dsZS1hbGwsKToKKyAgICAgICAgKEBtZWRpYSAobWF4LXdpZHRoOiA0
MzBweCkpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29u
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5tZDog
QWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRl
ZC4KKyAgICAgICAgKGhyKToKKyAgICAgICAgKC5sZWFybiBhKToKKyAgICAgICAgKC5sZWFybiBh
OmhvdmVyKToKKyAgICAgICAgKC5sZWFybiBoMywpOgorICAgICAgICAoLmxlYXJuIGgzKToKKyAg
ICAgICAgKC5sZWFybiBoNCk6CisgICAgICAgICgubGVhcm4gaDUpOgorICAgICAgICAoLmxlYXJu
IHVsKToKKyAgICAgICAgKC5sZWFybiBsaSk6CisgICAgICAgICgubGVhcm4gcCk6CisgICAgICAg
ICgjaXNzdWUtY291bnQpOgorICAgICAgICAoLnF1b3RlKToKKyAgICAgICAgKC5xdW90ZSBwKToK
KyAgICAgICAgKC5xdW90ZSBwOmJlZm9yZSk6CisgICAgICAgICgucXVvdGUgcDphZnRlcik6Cisg
ICAgICAgICgucXVvdGUgZm9vdGVyKToKKyAgICAgICAgKC5xdW90ZSBmb290ZXIgaW1nKToKKyAg
ICAgICAgKC5xdW90ZSBmb290ZXIgYSk6CisgICAgICAgICguc3BlZWNoLWJ1YmJsZSk6CisgICAg
ICAgICguc3BlZWNoLWJ1YmJsZTphZnRlcik6CisgICAgICAgICgubGVhcm4tYmFyID4gLmxlYXJu
KToKKyAgICAgICAgKEBtZWRpYSAobWluLXdpZHRoOiA4OTlweCkpOgorICAgICAgICAoLmxlYXJu
LWJhcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IEFkZGVk
LgorICAgICAgICAoXy5kZWZhdWx0cyk6CisgICAgICAgICh0ZW1wbGF0ZSk6CisgICAgICAgIChl
c2NhcGVyLl8udGVtcGxhdGUpOgorICAgICAgICAoXyk6CisgICAgICAgIChsb2NhdGlvbi5ob3N0
bmFtZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pLnIuaS5yKToKKyAgICAgICAgKHJlZGlyZWN0KToK
KyAgICAgICAgKGZpbmRSb290KToKKyAgICAgICAgKHhoci5vbmxvYWQpOgorICAgICAgICAoZ2V0
RmlsZSk6CisgICAgICAgIChMZWFybik6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUuYXBwZW5k
KToKKyAgICAgICAgKExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQpOgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3BhY2th
Z2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5qc2hpbnRyYzogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3Jj
L2FwcC5qczogQWRkZWQuCisgICAgICAgIChUb2RvKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvY29udHJvbGxlci5q
czogQWRkZWQuCisgICAgICAgIChDb250cm9sbGVyKToKKyAgICAgICAgKENvbnRyb2xsZXIucHJv
dG90eXBlLnNldFZpZXcpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FsbCk6
CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5zaG93QWN0aXZlKToKKyAgICAgICAgKENv
bnRyb2xsZXIucHJvdG90eXBlLnNob3dDb21wbGV0ZWQpOgorICAgICAgICAoQ29udHJvbGxlci5w
cm90b3R5cGUuYWRkSXRlbSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRl
bSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbVNhdmUpOgorICAgICAg
ICAoQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW1DYW5jZWwpOgorICAgICAgICAoQ29udHJv
bGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlw
ZS5yZW1vdmVDb21wbGV0ZWRJdGVtcyk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS50
b2dnbGVDb21wbGV0ZSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwp
OgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuX3VwZGF0ZUNvdW50KToKKyAgICAgICAg
KENvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90
b3R5cGUuX3VwZGF0ZUZpbHRlcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2hlbHBlcnMuanM6IEFkZGVkLgorICAg
ICAgICAocXMpOgorICAgICAgICAocXNhKToKKyAgICAgICAgKG9uKToKKyAgICAgICAgKGRlbGVn
YXRlKToKKyAgICAgICAgKHBhcmVudCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL21vZGVsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKE1vZGVsKToKKyAgICAgICAgKE1vZGVsLnByb3RvdHlwZS5jcmVhdGUpOgorICAgICAg
ICAoTW9kZWwucHJvdG90eXBlLnJlYWQpOgorICAgICAgICAoTW9kZWwucHJvdG90eXBlLnVwZGF0
ZSk6CisgICAgICAgIChNb2RlbC5wcm90b3R5cGUucmVtb3ZlKToKKyAgICAgICAgKE1vZGVsLnBy
b3RvdHlwZS5yZW1vdmVBbGwpOgorICAgICAgICAoTW9kZWwucHJvdG90eXBlLmdldENvdW50KToK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9zcmMvc3RvcmUuanM6IEFkZGVkLgorICAgICAgICAoU3RvcmUpOgorICAgICAgICAo
U3RvcmUucHJvdG90eXBlLmZpbmQpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLmZpbmRBbGwp
OgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLnNhdmUpOgorICAgICAgICAoU3RvcmUucHJvdG90
eXBlLnJlbW92ZSk6CisgICAgICAgIChTdG9yZS5wcm90b3R5cGUuZHJvcCk6CisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3Jj
L3RlbXBsYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKFRlbXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBs
YXRlLmxpLmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVkX2hlcmUuZGl2LmlucHV0KToKKyAgICAgICAg
KFRlbXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBsYXRlLmxpLmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVk
X2hlcmUuZGl2KToKKyAgICAgICAgKFRlbXBsYXRlLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAg
KFRlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291bnRlcik6CisgICAgICAgIChUZW1wbGF0ZS5wcm90
b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy92aWV3LmpzOiBBZGRlZC4K
KyAgICAgICAgKGxldC5fZWxlbWVudENvbXBsZXRlKToKKyAgICAgICAgKGxldC5fZWRpdEl0ZW0p
OgorICAgICAgICAoVmlldyk6CisgICAgICAgIChWaWV3LnByb3RvdHlwZS5fcmVtb3ZlSXRlbSk6
CisgICAgICAgIChWaWV3LnByb3RvdHlwZS5fY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAgICAg
ICAoVmlldy5wcm90b3R5cGUuX2VkaXRJdGVtRG9uZSk6CisgICAgICAgIChWaWV3LnByb3RvdHlw
ZS5yZW5kZXIpOgorICAgICAgICAoVmlldy5wcm90b3R5cGUuX2JpbmRJdGVtRWRpdERvbmUpOgor
ICAgICAgICAoVmlldy5wcm90b3R5cGUuX2JpbmRJdGVtRWRpdENhbmNlbCk6CisgICAgICAgIChW
aWV3LnByb3RvdHlwZS5iaW5kKToKKwogMjAxNy0wNC0yNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYmFjayB0ZXN0cyBpbmFkdmVydGVudGx5IGRl
bGV0ZWQgaW4gcjIwNTAzMi4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1p
bi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzVlYWYy
NDNiMmNkYTIwZjVjMTBhODM3M2NlNjJiODc3ZTk4OTBiCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3QvYnVpbGQubWluLmpzCkBAIC0wLDAgKzEgQEAKK3ZhciBhcHA9YXBwfHx7
fTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7YXBwLkFMTF9UT0RPUz0iYWxsIjthcHAuQUNUSVZF
X1RPRE9TPSJhY3RpdmUiO2FwcC5DT01QTEVURURfVE9ET1M9ImNvbXBsZXRlZCI7YXBwLlV0aWxz
PXt1dWlkOmZ1bmN0aW9uKCl7dmFyIGkscmFuZG9tO3ZhciB1dWlkPSIiO2ZvcihpPTA7aTwzMjtp
Kyspe3JhbmRvbT1NYXRoLnJhbmRvbSgpKjE2fDA7aWYoaT09PTh8fGk9PT0xMnx8aT09PTE2fHxp
PT09MjApe3V1aWQrPSItIn11dWlkKz0oaT09PTEyPzQ6aT09PTE2P3JhbmRvbSYzfDg6cmFuZG9t
KS50b1N0cmluZygxNil9cmV0dXJuIHV1aWR9LHBsdXJhbGl6ZTpmdW5jdGlvbihjb3VudCx3b3Jk
KXtyZXR1cm4gY291bnQ9PT0xP3dvcmQ6d29yZCsicyJ9LGV4dGVuZDpmdW5jdGlvbigpe3ZhciBu
ZXdPYmo9e307Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG9iaj1hcmd1
bWVudHNbaV07Zm9yKHZhciBrZXkgaW4gb2JqKXtpZihvYmouaGFzT3duUHJvcGVydHkoa2V5KSl7
bmV3T2JqW2tleV09b2JqW2tleV19fX1yZXR1cm4gbmV3T2JqfX07dmFyIFV0aWxzPWFwcC5VdGls
czthcHAuVG9kb01vZGVsPWZ1bmN0aW9uKGtleSl7dGhpcy5rZXk9a2V5O3RoaXMudG9kb3M9W107
dGhpcy5vbkNoYW5nZXM9W119O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnN1YnNjcmliZT1mdW5j
dGlvbihvbkNoYW5nZSl7dGhpcy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSl9O2FwcC5Ub2RvTW9k
ZWwucHJvdG90eXBlLmluZm9ybT1mdW5jdGlvbigpe3RoaXMub25DaGFuZ2VzLmZvckVhY2goZnVu
Y3Rpb24oY2Ipe2NiKCl9KX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuYWRkVG9kbz1mdW5jdGlv
bih0aXRsZSl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLmNvbmNhdCh7aWQ6VXRpbHMudXVpZCgpLHRp
dGxlOnRpdGxlLGNvbXBsZXRlZDpmYWxzZX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLnRvZ2dsZUFsbD1mdW5jdGlvbihjaGVja2VkKXt0aGlzLnRvZG9zPXRoaXMudG9k
b3MubWFwKGZ1bmN0aW9uKHRvZG8pe3JldHVybiBVdGlscy5leHRlbmQoe30sdG9kbyx7Y29tcGxl
dGVkOmNoZWNrZWR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRv
Z2dsZT1mdW5jdGlvbih0b2RvVG9Ub2dnbGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5tYXAoZnVu
Y3Rpb24odG9kbyl7cmV0dXJuIHRvZG8hPT10b2RvVG9Ub2dnbGU/dG9kbzpVdGlscy5leHRlbmQo
e30sdG9kbyx7Y29tcGxldGVkOiF0b2RvLmNvbXBsZXRlZH0pfSk7dGhpcy5pbmZvcm0oKX07YXBw
LlRvZG9Nb2RlbC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0b2RvKXt0aGlzLnRvZG9zPXRo
aXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uKGNhbmRpZGF0ZSl7cmV0dXJuIGNhbmRpZGF0ZSE9PXRv
ZG99KTt0aGlzLmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9u
KHRvZG9Ub1NhdmUsdGV4dCl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2Rv
KXtyZXR1cm4gdG9kbyE9PXRvZG9Ub1NhdmU/dG9kbzpVdGlscy5leHRlbmQoe30sdG9kbyx7dGl0
bGU6dGV4dH0pfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuY2xlYXJD
b21wbGV0ZWQ9ZnVuY3Rpb24oKXt0aGlzLnRvZG9zPXRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9u
KHRvZG8pe3JldHVybiF0b2RvLmNvbXBsZXRlZH0pO3RoaXMuaW5mb3JtKCl9O3ZhciBUb2RvRm9v
dGVyPVJlYWN0LmNyZWF0ZUNsYXNzKHtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgYWN0aXZlVG9kb1dv
cmQ9YXBwLlV0aWxzLnBsdXJhbGl6ZSh0aGlzLnByb3BzLmNvdW50LCJpdGVtIik7dmFyIGNsZWFy
QnV0dG9uPW51bGw7aWYodGhpcy5wcm9wcy5jb21wbGV0ZWRDb3VudD4wKXtjbGVhckJ1dHRvbj1S
ZWFjdC5jcmVhdGVFbGVtZW50KCJidXR0b24iLHtjbGFzc05hbWU6ImNsZWFyLWNvbXBsZXRlZCIs
b25DbGljazp0aGlzLnByb3BzLm9uQ2xlYXJDb21wbGV0ZWR9LCJDbGVhciBjb21wbGV0ZWQiKX12
YXIgbm93U2hvd2luZz10aGlzLnByb3BzLm5vd1Nob3dpbmc7cmV0dXJuIFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImZvb3RlciIse2NsYXNzTmFtZToiZm9vdGVyIn0sUmVhY3QuY3JlYXRlRWxlbWVudCgi
c3BhbiIse2NsYXNzTmFtZToidG9kby1jb3VudCJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoInN0cm9u
ZyIsbnVsbCx0aGlzLnByb3BzLmNvdW50KSwiICIsYWN0aXZlVG9kb1dvcmQsIiBsZWZ0IiksUmVh
Y3QuY3JlYXRlRWxlbWVudCgidWwiLHtjbGFzc05hbWU6ImZpbHRlcnMifSxSZWFjdC5jcmVhdGVF
bGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy8iLGNsYXNz
TmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkFMTF9UT0RPU30pfSwi
QWxsIikpLCIgIixSZWFjdC5jcmVhdGVFbGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVt
ZW50KCJhIix7aHJlZjoiIy9hY3RpdmUiLGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpu
b3dTaG93aW5nPT09YXBwLkFDVElWRV9UT0RPU30pfSwiQWN0aXZlIikpLCIgIixSZWFjdC5jcmVh
dGVFbGVtZW50KCJsaSIsbnVsbCxSZWFjdC5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiIy9jb21w
bGV0ZWQiLGNsYXNzTmFtZTpjbGFzc05hbWVzKHtzZWxlY3RlZDpub3dTaG93aW5nPT09YXBwLkNP
TVBMRVRFRF9UT0RPU30pfSwiQ29tcGxldGVkIikpKSxjbGVhckJ1dHRvbil9fSk7dmFyIEVTQ0FQ
RV9LRVk9Mjc7dmFyIEVOVEVSX0tFWT0xMzt2YXIgVG9kb0l0ZW09UmVhY3QuY3JlYXRlQ2xhc3Mo
e2hhbmRsZVN1Ym1pdDpmdW5jdGlvbihldmVudCl7dmFyIHZhbD10aGlzLnN0YXRlLmVkaXRUZXh0
LnRyaW0oKTtpZih2YWwpe3RoaXMucHJvcHMub25TYXZlKHZhbCk7dGhpcy5zZXRTdGF0ZSh7ZWRp
dFRleHQ6dmFsfSl9ZWxzZXt0aGlzLnByb3BzLm9uRGVzdHJveSgpfX0saGFuZGxlRWRpdDpmdW5j
dGlvbigpe3RoaXMucHJvcHMub25FZGl0KCk7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5w
cm9wcy50b2RvLnRpdGxlfSl9LGhhbmRsZUtleURvd246ZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50
LndoaWNoPT09RVNDQVBFX0tFWSl7dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6dGhpcy5wcm9wcy50
b2RvLnRpdGxlfSk7dGhpcy5wcm9wcy5vbkNhbmNlbChldmVudCl9ZWxzZSBpZihldmVudC53aGlj
aD09PUVOVEVSX0tFWSl7dGhpcy5oYW5kbGVTdWJtaXQoZXZlbnQpfX0saGFuZGxlQ2hhbmdlOmZ1
bmN0aW9uKGV2ZW50KXtpZih0aGlzLnByb3BzLmVkaXRpbmcpe3RoaXMuc2V0U3RhdGUoe2VkaXRU
ZXh0OmV2ZW50LnRhcmdldC52YWx1ZX0pfX0sZ2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0
dXJue2VkaXRUZXh0OnRoaXMucHJvcHMudG9kby50aXRsZX19LHNob3VsZENvbXBvbmVudFVwZGF0
ZTpmdW5jdGlvbihuZXh0UHJvcHMsbmV4dFN0YXRlKXtyZXR1cm4gbmV4dFByb3BzLnRvZG8hPT10
aGlzLnByb3BzLnRvZG98fG5leHRQcm9wcy5lZGl0aW5nIT09dGhpcy5wcm9wcy5lZGl0aW5nfHxu
ZXh0U3RhdGUuZWRpdFRleHQhPT10aGlzLnN0YXRlLmVkaXRUZXh0fSxjb21wb25lbnREaWRVcGRh
dGU6ZnVuY3Rpb24ocHJldlByb3BzKXtpZighcHJldlByb3BzLmVkaXRpbmcmJnRoaXMucHJvcHMu
ZWRpdGluZyl7dmFyIG5vZGU9UmVhY3QuZmluZERPTU5vZGUodGhpcy5yZWZzLmVkaXRGaWVsZCk7
bm9kZS5mb2N1cygpO25vZGUuc2V0U2VsZWN0aW9uUmFuZ2Uobm9kZS52YWx1ZS5sZW5ndGgsbm9k
ZS52YWx1ZS5sZW5ndGgpfX0scmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImxpIix7Y2xhc3NOYW1lOmNsYXNzTmFtZXMoe2NvbXBsZXRlZDp0aGlzLnByb3BzLnRv
ZG8uY29tcGxldGVkLGVkaXRpbmc6dGhpcy5wcm9wcy5lZGl0aW5nfSl9LFJlYWN0LmNyZWF0ZUVs
ZW1lbnQoImRpdiIse2NsYXNzTmFtZToidmlldyJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iix7Y2xhc3NOYW1lOiJ0b2dnbGUiLHR5cGU6ImNoZWNrYm94IixjaGVja2VkOnRoaXMucHJvcHMu
dG9kby5jb21wbGV0ZWQsb25DaGFuZ2U6dGhpcy5wcm9wcy5vblRvZ2dsZX0pLFJlYWN0LmNyZWF0
ZUVsZW1lbnQoImxhYmVsIix7b25Eb3VibGVDbGljazp0aGlzLmhhbmRsZUVkaXR9LHRoaXMucHJv
cHMudG9kby50aXRsZSksUmVhY3QuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJk
ZXN0cm95IixvbkNsaWNrOnRoaXMucHJvcHMub25EZXN0cm95fSkpLFJlYWN0LmNyZWF0ZUVsZW1l
bnQoImlucHV0Iix7cmVmOiJlZGl0RmllbGQiLGNsYXNzTmFtZToiZWRpdCIsdmFsdWU6dGhpcy5z
dGF0ZS5lZGl0VGV4dCxvbkJsdXI6dGhpcy5oYW5kbGVTdWJtaXQsb25DaGFuZ2U6dGhpcy5oYW5k
bGVDaGFuZ2Usb25LZXlEb3duOnRoaXMuaGFuZGxlS2V5RG93bn0pKX19KTt2YXIgRU5URVJfS0VZ
PTEzO3ZhciBUb2RvQXBwPVJlYWN0LmNyZWF0ZUNsYXNzKHtnZXRJbml0aWFsU3RhdGU6ZnVuY3Rp
b24oKXtyZXR1cm57bm93U2hvd2luZzphcHAuQUxMX1RPRE9TLGVkaXRpbmc6bnVsbCxuZXdUb2Rv
OiIifX0sY29tcG9uZW50RGlkTW91bnQ6ZnVuY3Rpb24oKXt2YXIgc2V0U3RhdGU9dGhpcy5zZXRT
dGF0ZTt2YXIgcm91dGVyPVJvdXRlcih7Ii8iOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2lu
ZzphcHAuQUxMX1RPRE9TfSksIi9hY3RpdmUiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93U2hvd2lu
ZzphcHAuQUNUSVZFX1RPRE9TfSksIi9jb21wbGV0ZWQiOnNldFN0YXRlLmJpbmQodGhpcyx7bm93
U2hvd2luZzphcHAuQ09NUExFVEVEX1RPRE9TfSl9KTtyb3V0ZXIuaW5pdCgiLyIpfSxoYW5kbGVD
aGFuZ2U6ZnVuY3Rpb24oZXZlbnQpe3RoaXMuc2V0U3RhdGUoe25ld1RvZG86ZXZlbnQudGFyZ2V0
LnZhbHVlfSl9LGhhbmRsZU5ld1RvZG9LZXlEb3duOmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5r
ZXlDb2RlIT09RU5URVJfS0VZKXtyZXR1cm59ZXZlbnQucHJldmVudERlZmF1bHQoKTt2YXIgdmFs
PXRoaXMuc3RhdGUubmV3VG9kby50cmltKCk7aWYodmFsKXt0aGlzLnByb3BzLm1vZGVsLmFkZFRv
ZG8odmFsKTt0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiIifSl9fSx0b2dnbGVBbGw6ZnVuY3Rpb24o
ZXZlbnQpe3ZhciBjaGVja2VkPWV2ZW50LnRhcmdldC5jaGVja2VkO3RoaXMucHJvcHMubW9kZWwu
dG9nZ2xlQWxsKGNoZWNrZWQpfSx0b2dnbGU6ZnVuY3Rpb24odG9kb1RvVG9nZ2xlKXt0aGlzLnBy
b3BzLm1vZGVsLnRvZ2dsZSh0b2RvVG9Ub2dnbGUpfSxkZXN0cm95OmZ1bmN0aW9uKHRvZG8pe3Ro
aXMucHJvcHMubW9kZWwuZGVzdHJveSh0b2RvKX0sZWRpdDpmdW5jdGlvbih0b2RvKXt0aGlzLnNl
dFN0YXRlKHtlZGl0aW5nOnRvZG8uaWR9KX0sc2F2ZTpmdW5jdGlvbih0b2RvVG9TYXZlLHRleHQp
e3RoaXMucHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9TYXZlLHRleHQpO3RoaXMuc2V0U3RhdGUoe2Vk
aXRpbmc6bnVsbH0pfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLnNldFN0YXRlKHtlZGl0aW5nOm51
bGx9KX0sY2xlYXJDb21wbGV0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm1vZGVsLmNsZWFyQ29t
cGxldGVkKCl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBmb290ZXI7dmFyIG1haW47dmFyIHRvZG9z
PXRoaXMucHJvcHMubW9kZWwudG9kb3M7dmFyIHNob3duVG9kb3M9dG9kb3MuZmlsdGVyKGZ1bmN0
aW9uKHRvZG8pe3N3aXRjaCh0aGlzLnN0YXRlLm5vd1Nob3dpbmcpe2Nhc2UgYXBwLkFDVElWRV9U
T0RPUzpyZXR1cm4hdG9kby5jb21wbGV0ZWQ7Y2FzZSBhcHAuQ09NUExFVEVEX1RPRE9TOnJldHVy
biB0b2RvLmNvbXBsZXRlZDtkZWZhdWx0OnJldHVybiB0cnVlfX0sdGhpcyk7dmFyIHRvZG9JdGVt
cz1zaG93blRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVu
dChUb2RvSXRlbSx7a2V5OnRvZG8uaWQsdG9kbzp0b2RvLG9uVG9nZ2xlOnRoaXMudG9nZ2xlLmJp
bmQodGhpcyx0b2RvKSxvbkRlc3Ryb3k6dGhpcy5kZXN0cm95LmJpbmQodGhpcyx0b2RvKSxvbkVk
aXQ6dGhpcy5lZGl0LmJpbmQodGhpcyx0b2RvKSxlZGl0aW5nOnRoaXMuc3RhdGUuZWRpdGluZz09
PXRvZG8uaWQsb25TYXZlOnRoaXMuc2F2ZS5iaW5kKHRoaXMsdG9kbyksb25DYW5jZWw6dGhpcy5j
YW5jZWx9KX0sdGhpcyk7dmFyIGFjdGl2ZVRvZG9Db3VudD10b2Rvcy5yZWR1Y2UoZnVuY3Rpb24o
YWNjdW0sdG9kbyl7cmV0dXJuIHRvZG8uY29tcGxldGVkP2FjY3VtOmFjY3VtKzF9LDApO3ZhciBj
b21wbGV0ZWRDb3VudD10b2Rvcy5sZW5ndGgtYWN0aXZlVG9kb0NvdW50O2lmKGFjdGl2ZVRvZG9D
b3VudHx8Y29tcGxldGVkQ291bnQpe2Zvb3Rlcj1SZWFjdC5jcmVhdGVFbGVtZW50KFRvZG9Gb290
ZXIse2NvdW50OmFjdGl2ZVRvZG9Db3VudCxjb21wbGV0ZWRDb3VudDpjb21wbGV0ZWRDb3VudCxu
b3dTaG93aW5nOnRoaXMuc3RhdGUubm93U2hvd2luZyxvbkNsZWFyQ29tcGxldGVkOnRoaXMuY2xl
YXJDb21wbGV0ZWR9KX1pZih0b2Rvcy5sZW5ndGgpe21haW49UmVhY3QuY3JlYXRlRWxlbWVudCgi
c2VjdGlvbiIse2NsYXNzTmFtZToibWFpbiJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7
Y2xhc3NOYW1lOiJ0b2dnbGUtYWxsIix0eXBlOiJjaGVja2JveCIsb25DaGFuZ2U6dGhpcy50b2dn
bGVBbGwsY2hlY2tlZDphY3RpdmVUb2RvQ291bnQ9PT0wfSksUmVhY3QuY3JlYXRlRWxlbWVudCgi
dWwiLHtjbGFzc05hbWU6InRvZG8tbGlzdCJ9LHRvZG9JdGVtcykpfXJldHVybiBSZWFjdC5jcmVh
dGVFbGVtZW50KCJkaXYiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiaGVhZGVyIix7Y2xhc3NO
YW1lOiJoZWFkZXIifSxSZWFjdC5jcmVhdGVFbGVtZW50KCJoMSIsbnVsbCwidG9kb3MiKSxSZWFj
dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToibmV3LXRvZG8iLHBsYWNlaG9sZGVy
OiJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/Iix2YWx1ZTp0aGlzLnN0YXRlLm5ld1RvZG8sb25LZXlE
b3duOnRoaXMuaGFuZGxlTmV3VG9kb0tleURvd24sb25DaGFuZ2U6dGhpcy5oYW5kbGVDaGFuZ2Us
YXV0b0ZvY3VzOnRydWV9KSksbWFpbixmb290ZXIpfX0pO3ZhciBtb2RlbD1uZXcgYXBwLlRvZG9N
b2RlbCgicmVhY3QtdG9kb3MiKTtmdW5jdGlvbiByZW5kZXIoKXtSZWFjdERPTS5yZW5kZXIoUmVh
Y3QuY3JlYXRlRWxlbWVudChUb2RvQXBwLHttb2RlbDptb2RlbH0pLGRvY3VtZW50LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoInRvZG9hcHAiKVswXSl9bW9kZWwuc3Vic2NyaWJlKHJlbmRlcik7cmVu
ZGVyKCl9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI5ZTU2MTZiYWE2MDM2YTY1YmVhZmM4ZjBmMDA5MzlhYjVkMGNlN2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMjIg
QEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJyZWFj
dCI+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAg
PHRpdGxlPlJlYWN0IOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAg
ICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvaW5kZXguY3NzIj4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzZWN0
aW9uIGNsYXNzPSJ0b2RvYXBwIj48L3NlY3Rpb24+CisgICAgICAgIDxmb290ZXIgY2xhc3M9Imlu
Zm8iPgorICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAg
ICAgICAgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8
L2E+PC9wPgorICAgICAgICA8L2Zvb3Rlcj4KKworICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVs
ZXMvY2xhc3NuYW1lcy9pbmRleC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Im5vZGVf
bW9kdWxlcy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Im5vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLm1pbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlzdC9y
ZWFjdC1kb20ubWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iYnVpbGQubWluLmpz
Ij48L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9qcy9hcHAuanN4IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeApuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZDg5NWU1MTA1ODRmYzlkZWQxNjZiNDQ0MzkyNjc4M2YxNTA0MmI0Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeApAQCAtMCwwICsxLDQ0MiBAQAor
Lypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKy8qanNoaW50IHdoaXRlOmZhbHNlICovCisvKmpz
aGludCB0cmFpbGluZzpmYWxzZSAqLworLypqc2hpbnQgbmV3Y2FwOmZhbHNlICovCisvKmdsb2Jh
bCBSZWFjdCwgUm91dGVyKi8KK3ZhciBhcHAgPSBhcHAgfHwge307CisKKyhmdW5jdGlvbiAoKSB7
CisJJ3VzZSBzdHJpY3QnOworCisJYXBwLkFMTF9UT0RPUyA9ICdhbGwnOworCWFwcC5BQ1RJVkVf
VE9ET1MgPSAnYWN0aXZlJzsKKwlhcHAuQ09NUExFVEVEX1RPRE9TID0gJ2NvbXBsZXRlZCc7CisK
KyAgYXBwLlV0aWxzID0geworICAgIHV1aWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIC8qanNoaW50
IGJpdHdpc2U6ZmFsc2UgKi8KKyAgICAgIHZhciBpLCByYW5kb207CisgICAgICB2YXIgdXVpZCA9
ICcnOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAgICAgICByYW5kb20g
PSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOworICAgICAgICBpZiAoaSA9PT0gOCB8fCBpID09PSAx
MiB8fCBpID09PSAxNiB8fCBpID09PSAyMCkgeworICAgICAgICAgIHV1aWQgKz0gJy0nOworICAg
ICAgICB9CisgICAgICAgIHV1aWQgKz0gKGkgPT09IDEyID8gNCA6IChpID09PSAxNiA/IChyYW5k
b20gJiAzIHwgOCkgOiByYW5kb20pKQorICAgICAgICAgIC50b1N0cmluZygxNik7CisgICAgICB9
CisKKyAgICAgIHJldHVybiB1dWlkOworICAgIH0sCisKKyAgICBwbHVyYWxpemU6IGZ1bmN0aW9u
IChjb3VudCwgd29yZCkgeworICAgICAgcmV0dXJuIGNvdW50ID09PSAxID8gd29yZCA6IHdvcmQg
KyAncyc7CisgICAgfSwKKworICAgIGV4dGVuZDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG5l
d09iaiA9IHt9OworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgdmFyIG9iaiA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgZm9yICh2YXIg
a2V5IGluIG9iaikgeworICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewor
ICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdPYmo7CisgICAgfQorICB9OworCisgIHZhciBV
dGlscyA9IGFwcC5VdGlsczsKKyAgLy8gR2VuZXJpYyAibW9kZWwiIG9iamVjdC4gWW91IGNhbiB1
c2Ugd2hhdGV2ZXIKKyAgLy8gZnJhbWV3b3JrIHlvdSB3YW50LiBGb3IgdGhpcyBhcHBsaWNhdGlv
biBpdAorICAvLyBtYXkgbm90IGV2ZW4gYmUgd29ydGggc2VwYXJhdGluZyB0aGlzIGxvZ2ljCisg
IC8vIG91dCwgYnV0IHdlIGRvIHRoaXMgdG8gZGVtb25zdHJhdGUgb25lIHdheSB0bworICAvLyBz
ZXBhcmF0ZSBvdXQgcGFydHMgb2YgeW91ciBhcHBsaWNhdGlvbi4KKyAgYXBwLlRvZG9Nb2RlbCA9
IGZ1bmN0aW9uIChrZXkpIHsKKyAgICB0aGlzLmtleSA9IGtleTsKKyAgICB0aGlzLnRvZG9zID0g
W107CisgICAgdGhpcy5vbkNoYW5nZXMgPSBbXTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnBy
b3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob25DaGFuZ2UpIHsKKyAgICB0aGlzLm9uQ2hh
bmdlcy5wdXNoKG9uQ2hhbmdlKTsKKyAgfTsKKworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5p
bmZvcm0gPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy5vbkNoYW5nZXMuZm9yRWFjaChmdW5jdGlv
biAoY2IpIHsgY2IoKTsgfSk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuYWRk
VG9kbyA9IGZ1bmN0aW9uICh0aXRsZSkgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmNv
bmNhdCh7CisgICAgICBpZDogVXRpbHMudXVpZCgpLAorICAgICAgdGl0bGU6IHRpdGxlLAorICAg
ICAgY29tcGxldGVkOiBmYWxzZQorICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsK
KworICBhcHAuVG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbiAoY2hlY2tl
ZCkgeworICAgIC8vIE5vdGU6IGl0J3MgdXN1YWxseSBiZXR0ZXIgdG8gdXNlIGltbXV0YWJsZSBk
YXRhIHN0cnVjdHVyZXMgc2luY2UgdGhleSdyZQorICAgIC8vIGVhc2llciB0byByZWFzb24gYWJv
dXQgYW5kIFJlYWN0IHdvcmtzIHZlcnkgd2VsbCB3aXRoIHRoZW0uIFRoYXQncyB3aHkKKyAgICAv
LyB3ZSB1c2UgbWFwKCkgYW5kIGZpbHRlcigpIGV2ZXJ5d2hlcmUgaW5zdGVhZCBvZiBtdXRhdGlu
ZyB0aGUgYXJyYXkgb3IKKyAgICAvLyB0b2RvIGl0ZW1zIHRoZW1zZWx2ZXMuCisgICAgdGhpcy50
b2RvcyA9IHRoaXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICByZXR1cm4gVXRp
bHMuZXh0ZW5kKHt9LCB0b2RvLCB7Y29tcGxldGVkOiBjaGVja2VkfSk7CisgICAgfSk7CisKKyAg
ICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2ds
ZSA9IGZ1bmN0aW9uICh0b2RvVG9Ub2dnbGUpIHsKKyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rv
cy5tYXAoZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgIHJldHVybiB0b2RvICE9PSB0b2RvVG9Ub2dn
bGUgPworICAgICAgICB0b2RvIDoKKyAgICAgICAgVXRpbHMuZXh0ZW5kKHt9LCB0b2RvLCB7Y29t
cGxldGVkOiAhdG9kby5jb21wbGV0ZWR9KTsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3JtKCk7
CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICh0
b2RvKSB7CisgICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uIChjYW5k
aWRhdGUpIHsKKyAgICAgIHJldHVybiBjYW5kaWRhdGUgIT09IHRvZG87CisgICAgfSk7CisKKyAg
ICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnNhdmUg
PSBmdW5jdGlvbiAodG9kb1RvU2F2ZSwgdGV4dCkgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRv
ZG9zLm1hcChmdW5jdGlvbiAodG9kbykgeworICAgICAgcmV0dXJuIHRvZG8gIT09IHRvZG9Ub1Nh
dmUgPyB0b2RvIDogVXRpbHMuZXh0ZW5kKHt9LCB0b2RvLCB7dGl0bGU6IHRleHR9KTsKKyAgICB9
KTsKKworICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5
cGUuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy50b2RvcyA9IHRoaXMu
dG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICByZXR1cm4gIXRvZG8uY29tcGxl
dGVkOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworCisgIHZhciBUb2Rv
Rm9vdGVyID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewor
ICAgICAgdmFyIGFjdGl2ZVRvZG9Xb3JkID0gYXBwLlV0aWxzLnBsdXJhbGl6ZSh0aGlzLnByb3Bz
LmNvdW50LCAnaXRlbScpOworICAgICAgdmFyIGNsZWFyQnV0dG9uID0gbnVsbDsKKworICAgICAg
aWYgKHRoaXMucHJvcHMuY29tcGxldGVkQ291bnQgPiAwKSB7CisgICAgICAgIGNsZWFyQnV0dG9u
ID0gKAorICAgICAgICAgIDxidXR0b24KKyAgICAgICAgICAgIGNsYXNzTmFtZT0iY2xlYXItY29t
cGxldGVkIgorICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsZWFyQ29tcGxldGVk
fT4KKyAgICAgICAgICAgIENsZWFyIGNvbXBsZXRlZAorICAgICAgICAgIDwvYnV0dG9uPgorICAg
ICAgICApOworICAgICAgfQorCisgICAgICB2YXIgbm93U2hvd2luZyA9IHRoaXMucHJvcHMubm93
U2hvd2luZzsKKyAgICAgIHJldHVybiAoCisgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPSJmb290
ZXIiPgorICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0idG9kby1jb3VudCI+CisgICAgICAgICAg
ICA8c3Ryb25nPnt0aGlzLnByb3BzLmNvdW50fTwvc3Ryb25nPiB7YWN0aXZlVG9kb1dvcmR9IGxl
ZnQKKyAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPHVsIGNsYXNzTmFtZT0iZmlsdGVycyI+
CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhCisgICAgICAgICAgICAgICAgaHJl
Zj0iIy8iCisgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHtzZWxlY3RlZDog
bm93U2hvd2luZyA9PT0gYXBwLkFMTF9UT0RPU30pfT4KKyAgICAgICAgICAgICAgICAgIEFsbAor
ICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgeycgJ30K
KyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEKKyAgICAgICAgICAgICAgICBocmVm
PSIjL2FjdGl2ZSIKKyAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe3NlbGVj
dGVkOiBub3dTaG93aW5nID09PSBhcHAuQUNUSVZFX1RPRE9TfSl9PgorICAgICAgICAgICAgICAg
ICAgQWN0aXZlCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgICB7JyAnfQorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YQorICAgICAgICAg
ICAgICAgIGhyZWY9IiMvY29tcGxldGVkIgorICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xh
c3NOYW1lcyh7c2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5DT01QTEVURURfVE9ET1N9KX0+
CisgICAgICAgICAgICAgICAgICBDb21wbGV0ZWQKKyAgICAgICAgICAgICAgPC9hPgorICAgICAg
ICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIHtjbGVhckJ1dHRvbn0KKyAg
ICAgICAgPC9mb290ZXI+CisgICAgICApOworICAgIH0KKyAgfSk7CisKKyAgdmFyIEVTQ0FQRV9L
RVkgPSAyNzsKKyAgdmFyIEVOVEVSX0tFWSA9IDEzOworCisgIHZhciBUb2RvSXRlbSA9IFJlYWN0
LmNyZWF0ZUNsYXNzKHsKKyAgICBoYW5kbGVTdWJtaXQ6IGZ1bmN0aW9uIChldmVudCkgeworICAg
ICAgdmFyIHZhbCA9IHRoaXMuc3RhdGUuZWRpdFRleHQudHJpbSgpOworICAgICAgaWYgKHZhbCkg
eworICAgICAgICB0aGlzLnByb3BzLm9uU2F2ZSh2YWwpOworICAgICAgICB0aGlzLnNldFN0YXRl
KHtlZGl0VGV4dDogdmFsfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnByb3BzLm9u
RGVzdHJveSgpOworICAgICAgfQorICAgIH0sCisKKyAgICBoYW5kbGVFZGl0OiBmdW5jdGlvbiAo
KSB7CisgICAgICB0aGlzLnByb3BzLm9uRWRpdCgpOworICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRp
dFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX0pOworICAgIH0sCisKKyAgICBoYW5kbGVLZXlE
b3duOiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC53aGljaCA9PT0gRVNDQVBF
X0tFWSkgeworICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDogdGhpcy5wcm9wcy50b2Rv
LnRpdGxlfSk7CisgICAgICAgIHRoaXMucHJvcHMub25DYW5jZWwoZXZlbnQpOworICAgICAgfSBl
bHNlIGlmIChldmVudC53aGljaCA9PT0gRU5URVJfS0VZKSB7CisgICAgICAgIHRoaXMuaGFuZGxl
U3VibWl0KGV2ZW50KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgaGFuZGxlQ2hhbmdlOiBmdW5j
dGlvbiAoZXZlbnQpIHsKKyAgICAgIGlmICh0aGlzLnByb3BzLmVkaXRpbmcpIHsKKyAgICAgICAg
dGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IGV2ZW50LnRhcmdldC52YWx1ZX0pOworICAgICAgfQor
ICAgIH0sCisKKyAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVy
biB7ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX07CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIFRoaXMgaXMgYSBjb21wbGV0ZWx5IG9wdGlvbmFsIHBlcmZvcm1hbmNlIGVuaGFuY2Vt
ZW50IHRoYXQgeW91IGNhbgorICAgICAqIGltcGxlbWVudCBvbiBhbnkgUmVhY3QgY29tcG9uZW50
LiBJZiB5b3Ugd2VyZSB0byBkZWxldGUgdGhpcyBtZXRob2QKKyAgICAgKiB0aGUgYXBwIHdvdWxk
IHN0aWxsIHdvcmsgY29ycmVjdGx5IChhbmQgc3RpbGwgYmUgdmVyeSBwZXJmb3JtYW50ISksIHdl
CisgICAgICoganVzdCB1c2UgaXQgYXMgYW4gZXhhbXBsZSBvZiBob3cgbGl0dGxlIGNvZGUgaXQg
dGFrZXMgdG8gZ2V0IGFuIG9yZGVyCisgICAgICogb2YgbWFnbml0dWRlIHBlcmZvcm1hbmNlIGlt
cHJvdmVtZW50LgorICAgICAqLworICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24g
KG5leHRQcm9wcywgbmV4dFN0YXRlKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICBuZXh0UHJv
cHMudG9kbyAhPT0gdGhpcy5wcm9wcy50b2RvIHx8CisgICAgICAgIG5leHRQcm9wcy5lZGl0aW5n
ICE9PSB0aGlzLnByb3BzLmVkaXRpbmcgfHwKKyAgICAgICAgbmV4dFN0YXRlLmVkaXRUZXh0ICE9
PSB0aGlzLnN0YXRlLmVkaXRUZXh0CisgICAgICApOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBTYWZlbHkgbWFuaXB1bGF0ZSB0aGUgRE9NIGFmdGVyIHVwZGF0aW5nIHRoZSBzdGF0ZSB3aGVu
IGludm9raW5nCisgICAgICogYHRoaXMucHJvcHMub25FZGl0KClgIGluIHRoZSBgaGFuZGxlRWRp
dGAgbWV0aG9kIGFib3ZlLgorICAgICAqIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gbm90ZXMgYXQg
aHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9jb21wb25lbnQtYXBpLmh0bWwj
c2V0c3RhdGUKKyAgICAgKiBhbmQgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9j
cy9jb21wb25lbnQtc3BlY3MuaHRtbCN1cGRhdGluZy1jb21wb25lbnRkaWR1cGRhdGUKKyAgICAg
Ki8KKyAgICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uIChwcmV2UHJvcHMpIHsKKyAgICAg
IGlmICghcHJldlByb3BzLmVkaXRpbmcgJiYgdGhpcy5wcm9wcy5lZGl0aW5nKSB7CisgICAgICAg
IHZhciBub2RlID0gUmVhY3QuZmluZERPTU5vZGUodGhpcy5yZWZzLmVkaXRGaWVsZCk7CisgICAg
ICAgIG5vZGUuZm9jdXMoKTsKKyAgICAgICAgbm9kZS5zZXRTZWxlY3Rpb25SYW5nZShub2RlLnZh
bHVlLmxlbmd0aCwgbm9kZS52YWx1ZS5sZW5ndGgpOworICAgICAgfQorICAgIH0sCisKKyAgICBy
ZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiAoCisgICAgICAgIDxsaSBjbGFzc05h
bWU9e2NsYXNzTmFtZXMoeworICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy5wcm9wcy50b2RvLmNv
bXBsZXRlZCwKKyAgICAgICAgICBlZGl0aW5nOiB0aGlzLnByb3BzLmVkaXRpbmcKKyAgICAgICAg
fSl9PgorICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSJ2aWV3Ij4KKyAgICAgICAgICAgIDxpbnB1
dAorICAgICAgICAgICAgICBjbGFzc05hbWU9InRvZ2dsZSIKKyAgICAgICAgICAgICAgdHlwZT0i
Y2hlY2tib3giCisgICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucHJvcHMudG9kby5jb21wbGV0
ZWR9CisgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uVG9nZ2xlfQorICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgIDxsYWJlbCBvbkRvdWJsZUNsaWNrPXt0aGlzLmhhbmRsZUVk
aXR9PgorICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50b2RvLnRpdGxlfQorICAgICAgICAgICAg
PC9sYWJlbD4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSJkZXN0cm95IiBvbkNsaWNr
PXt0aGlzLnByb3BzLm9uRGVzdHJveX0gLz4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8
aW5wdXQKKyAgICAgICAgICAgIHJlZj0iZWRpdEZpZWxkIgorICAgICAgICAgICAgY2xhc3NOYW1l
PSJlZGl0IgorICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZWRpdFRleHR9CisgICAgICAg
ICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlU3VibWl0fQorICAgICAgICAgICAgb25DaGFuZ2U9e3Ro
aXMuaGFuZGxlQ2hhbmdlfQorICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleURv
d259CisgICAgICAgICAgLz4KKyAgICAgICAgPC9saT4KKyAgICAgICk7CisgICAgfQorICB9KTsK
KworCXZhciBFTlRFUl9LRVkgPSAxMzsKKworCXZhciBUb2RvQXBwID0gUmVhY3QuY3JlYXRlQ2xh
c3MoeworCQlnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHsKKwkJCXJldHVybiB7CisJCQkJ
bm93U2hvd2luZzogYXBwLkFMTF9UT0RPUywKKwkJCQllZGl0aW5nOiBudWxsLAorCQkJCW5ld1Rv
ZG86ICcnCisJCQl9OworCQl9LAorCisJCWNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiAoKSB7
CisJCQl2YXIgc2V0U3RhdGUgPSB0aGlzLnNldFN0YXRlOworCQkJdmFyIHJvdXRlciA9IFJvdXRl
cih7CisJCQkJJy8nOiBzZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBhcHAuQUxMX1RP
RE9TfSksCisJCQkJJy9hY3RpdmUnOiBzZXRTdGF0ZS5iaW5kKHRoaXMsIHtub3dTaG93aW5nOiBh
cHAuQUNUSVZFX1RPRE9TfSksCisJCQkJJy9jb21wbGV0ZWQnOiBzZXRTdGF0ZS5iaW5kKHRoaXMs
IHtub3dTaG93aW5nOiBhcHAuQ09NUExFVEVEX1RPRE9TfSkKKwkJCX0pOworCQkJcm91dGVyLmlu
aXQoJy8nKTsKKwkJfSwKKworCQloYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeworCQkJ
dGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzogZXZlbnQudGFyZ2V0LnZhbHVlfSk7CisJCX0sCisKKwkJ
aGFuZGxlTmV3VG9kb0tleURvd246IGZ1bmN0aW9uIChldmVudCkgeworCQkJaWYgKGV2ZW50Lmtl
eUNvZGUgIT09IEVOVEVSX0tFWSkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKworCQkJdmFyIHZhbCA9IHRoaXMuc3RhdGUubmV3VG9kby50cmltKCk7
CisKKwkJCWlmICh2YWwpIHsKKwkJCQl0aGlzLnByb3BzLm1vZGVsLmFkZFRvZG8odmFsKTsKKwkJ
CQl0aGlzLnNldFN0YXRlKHtuZXdUb2RvOiAnJ30pOworCQkJfQorCQl9LAorCisJCXRvZ2dsZUFs
bDogZnVuY3Rpb24gKGV2ZW50KSB7CisJCQl2YXIgY2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVj
a2VkOworCQkJdGhpcy5wcm9wcy5tb2RlbC50b2dnbGVBbGwoY2hlY2tlZCk7CisJCX0sCisKKwkJ
dG9nZ2xlOiBmdW5jdGlvbiAodG9kb1RvVG9nZ2xlKSB7CisJCQl0aGlzLnByb3BzLm1vZGVsLnRv
Z2dsZSh0b2RvVG9Ub2dnbGUpOworCQl9LAorCisJCWRlc3Ryb3k6IGZ1bmN0aW9uICh0b2RvKSB7
CisJCQl0aGlzLnByb3BzLm1vZGVsLmRlc3Ryb3kodG9kbyk7CisJCX0sCisKKwkJZWRpdDogZnVu
Y3Rpb24gKHRvZG8pIHsKKwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IHRvZG8uaWR9KTsKKwkJ
fSwKKworCQlzYXZlOiBmdW5jdGlvbiAodG9kb1RvU2F2ZSwgdGV4dCkgeworCQkJdGhpcy5wcm9w
cy5tb2RlbC5zYXZlKHRvZG9Ub1NhdmUsIHRleHQpOworCQkJdGhpcy5zZXRTdGF0ZSh7ZWRpdGlu
ZzogbnVsbH0pOworCQl9LAorCisJCWNhbmNlbDogZnVuY3Rpb24gKCkgeworCQkJdGhpcy5zZXRT
dGF0ZSh7ZWRpdGluZzogbnVsbH0pOworCQl9LAorCisJCWNsZWFyQ29tcGxldGVkOiBmdW5jdGlv
biAoKSB7CisJCQl0aGlzLnByb3BzLm1vZGVsLmNsZWFyQ29tcGxldGVkKCk7CisJCX0sCisKKwkJ
cmVuZGVyOiBmdW5jdGlvbiAoKSB7CisJCQl2YXIgZm9vdGVyOworCQkJdmFyIG1haW47CisJCQl2
YXIgdG9kb3MgPSB0aGlzLnByb3BzLm1vZGVsLnRvZG9zOworCisJCQl2YXIgc2hvd25Ub2RvcyA9
IHRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgeworCQkJCXN3aXRjaCAodGhpcy5zdGF0ZS5u
b3dTaG93aW5nKSB7CisJCQkJY2FzZSBhcHAuQUNUSVZFX1RPRE9TOgorCQkJCQlyZXR1cm4gIXRv
ZG8uY29tcGxldGVkOworCQkJCWNhc2UgYXBwLkNPTVBMRVRFRF9UT0RPUzoKKwkJCQkJcmV0dXJu
IHRvZG8uY29tcGxldGVkOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0K
KwkJCX0sIHRoaXMpOworCisJCQl2YXIgdG9kb0l0ZW1zID0gc2hvd25Ub2Rvcy5tYXAoZnVuY3Rp
b24gKHRvZG8pIHsKKwkJCQlyZXR1cm4gKAorCQkJCQk8VG9kb0l0ZW0KKwkJCQkJCWtleT17dG9k
by5pZH0KKwkJCQkJCXRvZG89e3RvZG99CisJCQkJCQlvblRvZ2dsZT17dGhpcy50b2dnbGUuYmlu
ZCh0aGlzLCB0b2RvKX0KKwkJCQkJCW9uRGVzdHJveT17dGhpcy5kZXN0cm95LmJpbmQodGhpcywg
dG9kbyl9CisJCQkJCQlvbkVkaXQ9e3RoaXMuZWRpdC5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJ
ZWRpdGluZz17dGhpcy5zdGF0ZS5lZGl0aW5nID09PSB0b2RvLmlkfQorCQkJCQkJb25TYXZlPXt0
aGlzLnNhdmUuYmluZCh0aGlzLCB0b2RvKX0KKwkJCQkJCW9uQ2FuY2VsPXt0aGlzLmNhbmNlbH0K
KwkJCQkJLz4KKwkJCQkpOworCQkJfSwgdGhpcyk7CisKKwkJCXZhciBhY3RpdmVUb2RvQ291bnQg
PSB0b2Rvcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtLCB0b2RvKSB7CisJCQkJcmV0dXJuIHRvZG8u
Y29tcGxldGVkID8gYWNjdW0gOiBhY2N1bSArIDE7CisJCQl9LCAwKTsKKworCQkJdmFyIGNvbXBs
ZXRlZENvdW50ID0gdG9kb3MubGVuZ3RoIC0gYWN0aXZlVG9kb0NvdW50OworCisJCQlpZiAoYWN0
aXZlVG9kb0NvdW50IHx8IGNvbXBsZXRlZENvdW50KSB7CisJCQkJZm9vdGVyID0KKwkJCQkJPFRv
ZG9Gb290ZXIKKwkJCQkJCWNvdW50PXthY3RpdmVUb2RvQ291bnR9CisJCQkJCQljb21wbGV0ZWRD
b3VudD17Y29tcGxldGVkQ291bnR9CisJCQkJCQlub3dTaG93aW5nPXt0aGlzLnN0YXRlLm5vd1No
b3dpbmd9CisJCQkJCQlvbkNsZWFyQ29tcGxldGVkPXt0aGlzLmNsZWFyQ29tcGxldGVkfQorCQkJ
CQkvPjsKKwkJCX0KKworCQkJaWYgKHRvZG9zLmxlbmd0aCkgeworCQkJCW1haW4gPSAoCisJCQkJ
CTxzZWN0aW9uIGNsYXNzTmFtZT0ibWFpbiI+CisJCQkJCQk8aW5wdXQKKwkJCQkJCQljbGFzc05h
bWU9InRvZ2dsZS1hbGwiCisJCQkJCQkJdHlwZT0iY2hlY2tib3giCisJCQkJCQkJb25DaGFuZ2U9
e3RoaXMudG9nZ2xlQWxsfQorCQkJCQkJCWNoZWNrZWQ9e2FjdGl2ZVRvZG9Db3VudCA9PT0gMH0K
KwkJCQkJCS8+CisJCQkJCQk8dWwgY2xhc3NOYW1lPSJ0b2RvLWxpc3QiPgorCQkJCQkJCXt0b2Rv
SXRlbXN9CisJCQkJCQk8L3VsPgorCQkJCQk8L3NlY3Rpb24+CisJCQkJKTsKKwkJCX0KKworCQkJ
cmV0dXJuICgKKwkJCQk8ZGl2PgorCQkJCQk8aGVhZGVyIGNsYXNzTmFtZT0iaGVhZGVyIj4KKwkJ
CQkJCTxoMT50b2RvczwvaDE+CisJCQkJCQk8aW5wdXQKKwkJCQkJCQljbGFzc05hbWU9Im5ldy10
b2RvIgorCQkJCQkJCXBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IgorCQkJCQkJ
CXZhbHVlPXt0aGlzLnN0YXRlLm5ld1RvZG99CisJCQkJCQkJb25LZXlEb3duPXt0aGlzLmhhbmRs
ZU5ld1RvZG9LZXlEb3dufQorCQkJCQkJCW9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0KKwkJ
CQkJCQlhdXRvRm9jdXM9e3RydWV9CisJCQkJCQkvPgorCQkJCQk8L2hlYWRlcj4KKwkJCQkJe21h
aW59CisJCQkJCXtmb290ZXJ9CisJCQkJPC9kaXY+CisJCQkpOworCQl9CisJfSk7CisKKwl2YXIg
bW9kZWwgPSBuZXcgYXBwLlRvZG9Nb2RlbCgncmVhY3QtdG9kb3MnKTsKKworCWZ1bmN0aW9uIHJl
bmRlcigpIHsKKwkJUmVhY3RET00ucmVuZGVyKAorCQkJPFRvZG9BcHAgbW9kZWw9e21vZGVsfS8+
LAorCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndG9kb2FwcCcpWzBdCisJCSk7
CisJfQorCisJbW9kZWwuc3Vic2NyaWJlKHJlbmRlcik7CisJcmVuZGVyKCk7Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbGljZW5zZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L2xpY2Vuc2UubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJmYTJlMzg5ZWQ4Y2NkODdiM2Q1OWQyMjYxYTdhZDYz
NTRmYzM3NAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vuc2UubWQK
QEAgLTAsMCArMSwyMCBAQAorRXZlcnl0aGluZyBpbiB0aGlzIHJlcG8gaXMgTUlUIExpY2Vuc2Ug
dW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuCisKK0NvcHlyaWdodCAoYykgQWRkeSBPc21hbmks
IFNpbmRyZSBTb3JodXMsIFBhc2NhbCBIYXJ0aWcsIFN0ZXBoZW4gU2F3Y2h1ay4KKworUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg
dG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mCit0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCitzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs
Citjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
UyBPUgorQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU
V0FSRS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9iaW5kLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOGFlMTNiOTU0
OTllMGE4MTI1NDZiMTRmMmQ1ZjU2ZGNkOTFiNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvYmluZC5qcwpAQCAtMCwwICsxLDQ4
IEBACisvKiEKKyAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uCisgIExpY2Vuc2VkIHVu
ZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCisgIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHVi
LmlvL2NsYXNzbmFtZXMKKyovCisvKiBnbG9iYWwgZGVmaW5lICovCisKKyhmdW5jdGlvbiAoKSB7
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5
OworCisgICAgZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7CisgICAgICAgIHZhciBjbGFzc2VzID0g
W107CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAo
IWFyZykgY29udGludWU7CisKKyAgICAgICAgICAgIHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZzsK
KworICAgICAgICAgICAgaWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdu
dW1iZXInKSB7CisgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMgJiYgdGhpc1thcmdd
IHx8IGFyZyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkgewor
ICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWVzLmFwcGx5KHRoaXMsIGFyZykp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0JykgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMgJiYgdGhpc1trZXldIHx8IGtleSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7CisgICAgfQorCisgICAgaWYgKHR5
cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgICAg
IG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lczsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRl
ZmluZS5hbWQpIHsKKyAgICAgICAgLy8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0
ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZQorICAgICAgICBkZWZpbmUoJ2NsYXNzbmFtZXMnLCBb
XSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZXM7CisgICAgICAg
IH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1l
czsKKyAgICB9Cit9KCkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL2NsYXNzbmFtZXMvZGVkdXBlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L2NsYXNzbmFtZXMvZGVkdXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1NDZmOGUzYTEwZjQxYmMxMWEyZmI4
ZjcyZmQ0ZTJlNmUwYTIxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvY2xhc3NuYW1lcy9kZWR1cGUuanMKQEAgLTAsMCArMSwxMDkgQEAKKy8qIQor
ICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi4KKyAgTGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBMaWNlbnNlIChNSVQpLCBzZWUKKyAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3Nu
YW1lcworKi8KKy8qIGdsb2JhbCBkZWZpbmUgKi8KKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNl
IHN0cmljdCc7CisKKyAgICB2YXIgY2xhc3NOYW1lcyA9IChmdW5jdGlvbiAoKSB7CisgICAgICAg
IC8vIGRvbid0IGluaGVyaXQgZnJvbSBPYmplY3Qgc28gd2UgY2FuIHNraXAgaGFzT3duUHJvcGVy
dHkgY2hlY2sgbGF0ZXIKKyAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0
aW9ucy8xNTUxODMyOC9jcmVhdGluZy1qcy1vYmplY3Qtd2l0aC1vYmplY3QtY3JlYXRlbnVsbCNh
bnN3ZXItMjEwNzkyMzIKKyAgICAgICAgZnVuY3Rpb24gU3RvcmFnZU9iamVjdCgpIHt9CisgICAg
ICAgIFN0b3JhZ2VPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKworICAg
ICAgICBmdW5jdGlvbiBfcGFyc2VBcnJheSAocmVzdWx0U2V0LCBhcnJheSkgeworICAgICAgICAg
ICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIF9wYXJzZShyZXN1bHRTZXQs
IGFycmF5W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBoYXNP
d24gPSB7fS5oYXNPd25Qcm9wZXJ0eTsKKworICAgICAgICBmdW5jdGlvbiBfcGFyc2VOdW1iZXIg
KHJlc3VsdFNldCwgbnVtKSB7CisgICAgICAgICAgICByZXN1bHRTZXRbbnVtXSA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBfcGFyc2VPYmplY3QgKHJlc3VsdFNldCwgb2Jq
ZWN0KSB7CisgICAgICAgICAgICBmb3IgKHZhciBrIGluIG9iamVjdCkgeworICAgICAgICAgICAg
ICAgIGlmIChoYXNPd24uY2FsbChvYmplY3QsIGspKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IHNldCB2YWx1ZSB0byBmYWxzZSBpbnN0ZWFkIG9mIGRlbGV0aW5nIGl0IHRvIGF2b2lkIGNoYW5n
aW5nIG9iamVjdCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cu
c21hc2hpbmdtYWdhemluZS5jb20vMjAxMi8xMS93cml0aW5nLWZhc3QtbWVtb3J5LWVmZmljaWVu
dC1qYXZhc2NyaXB0LyNkZS1yZWZlcmVuY2luZy1taXNjb25jZXB0aW9ucworICAgICAgICAgICAg
ICAgICAgICByZXN1bHRTZXRba10gPSAhIW9iamVjdFtrXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgU1BBQ0UgPSAvXHMrLzsKKyAg
ICAgICAgZnVuY3Rpb24gX3BhcnNlU3RyaW5nIChyZXN1bHRTZXQsIHN0cikgeworICAgICAgICAg
ICAgdmFyIGFycmF5ID0gc3RyLnNwbGl0KFNQQUNFKTsKKyAgICAgICAgICAgIHZhciBsZW5ndGgg
PSBhcnJheS5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRTZXRbYXJyYXlbaV1dID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIF9wYXJzZSAocmVzdWx0
U2V0LCBhcmcpIHsKKyAgICAgICAgICAgIGlmICghYXJnKSByZXR1cm47CisgICAgICAgICAgICB2
YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7CisKKyAgICAgICAgICAgIC8vICdmb28gYmFyJworICAg
ICAgICAgICAgaWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgX3Bh
cnNlU3RyaW5nKHJlc3VsdFNldCwgYXJnKTsKKworICAgICAgICAgICAgLy8gWydmb28nLCAnYmFy
JywgLi4uXQorICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHsKKyAg
ICAgICAgICAgICAgICBfcGFyc2VBcnJheShyZXN1bHRTZXQsIGFyZyk7CisKKyAgICAgICAgICAg
IC8vIHsgJ2Zvbyc6IHRydWUsIC4uLiB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUg
PT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgX3BhcnNlT2JqZWN0KHJlc3VsdFNldCwg
YXJnKTsKKworICAgICAgICAgICAgLy8gJzEzMCcKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJn
VHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgICAgICBfcGFyc2VOdW1iZXIocmVzdWx0
U2V0LCBhcmcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
X2NsYXNzTmFtZXMgKCkgeworICAgICAgICAgICAgLy8gZG9uJ3QgbGVhayBhcmd1bWVudHMKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvd2lr
aS9PcHRpbWl6YXRpb24ta2lsbGVycyMzMi1sZWFraW5nLWFyZ3VtZW50cworICAgICAgICAgICAg
dmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5
KGxlbik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdmFyIGNsYXNzU2V0ID0gbmV3IFN0b3JhZ2VPYmplY3QoKTsKKyAgICAgICAgICAg
IF9wYXJzZUFycmF5KGNsYXNzU2V0LCBhcmdzKTsKKworICAgICAgICAgICAgdmFyIGxpc3QgPSBb
XTsKKworICAgICAgICAgICAgZm9yICh2YXIgayBpbiBjbGFzc1NldCkgeworICAgICAgICAgICAg
ICAgIGlmIChjbGFzc1NldFtrXSkgeworICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goaykK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBs
aXN0LmpvaW4oJyAnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBfY2xhc3NOYW1lczsK
KyAgICB9KSgpOworCisgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1v
ZHVsZS5leHBvcnRzKSB7CisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lczsKKyAg
ICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmlu
ZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHsKKyAgICAgICAgLy8gcmVnaXN0ZXIg
YXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZQorICAgICAg
ICBkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuIGNsYXNzTmFtZXM7CisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRv
dy5jbGFzc05hbWVzID0gY2xhc3NOYW1lczsKKyAgICB9Cit9KCkpOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
OGYwZmYyYmY5MGEyOTNmNDMwZmU5NzhkOTRmYTBiNTdlYWM4NTE4Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMKQEAg
LTAsMCArMSw0OCBAQAorLyohCisgIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLgorICBM
aWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQorICBodHRwOi8vamVkd2F0
c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCisqLworLyogZ2xvYmFsIGRlZmluZSAqLworCisoZnVu
Y3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBoYXNPd24gPSB7fS5oYXNP
d25Qcm9wZXJ0eTsKKworICAgIGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkgeworICAgICAgICB2YXIg
Y2xhc3NlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOworICAgICAg
ICAgICAgaWYgKCFhcmcpIGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIgYXJnVHlwZSA9IHR5
cGVvZiBhcmc7CisKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdU
eXBlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChhcmcpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHsKKyAgICAgICAgICAg
ICAgICBjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBrZXkgaW4gYXJnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24uY2Fs
bChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
ZXMucHVzaChrZXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbign
ICcpOworICAgIH0KKworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBt
b2R1bGUuZXhwb3J0cykgeworICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7Cisg
ICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZp
bmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIC8vIHJlZ2lzdGVy
IGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWUKKyAgICAg
ICAgZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBjbGFzc05hbWVzOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW5k
b3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7CisgICAgfQorfSgpKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC1kb20vZGlzdC9yZWFjdC1kb20ubWlu
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0
LWRvbS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI2MWVkZGQ2NjAyM2E5ZjgyMjVmOTUxOGYyYjc5NDI2
NDQ2OWJlNQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxl
cy9yZWFjdC1kb20vZGlzdC9yZWFjdC1kb20ubWluLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8qKgor
ICogUmVhY3RET00gdjE1LjUuNAorICoKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKyFmdW5j
dGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2Yg
bW9kdWxlKW1vZHVsZS5leHBvcnRzPWUocmVxdWlyZSgicmVhY3QiKSk7ZWxzZSBpZigiZnVuY3Rp
b24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbInJlYWN0Il0sZSk7ZWxzZXt2
YXIgdDt0PSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlw
ZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyx0LlJl
YWN0RE9NPWUodC5SZWFjdCl9fShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJu
IGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIG8oYSxzKXtpZigh
blthXSl7aWYoIXRbYV0pe3ZhciB1PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJl
O2lmKCFzJiZ1KXJldHVybiB1KGEsITApO2lmKGkpcmV0dXJuIGkoYSwhMCk7dmFyIGw9bmV3IEVy
cm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrYSsiJyIpO3Rocm93IGwuY29kZT0iTU9EVUxFX05P
VF9GT1VORCIsbH12YXIgYz1uW2FdPXtleHBvcnRzOnt9fTt0W2FdWzBdLmNhbGwoYy5leHBvcnRz
LGZ1bmN0aW9uKGUpe3ZhciBuPXRbYV1bMV1bZV07cmV0dXJuIG8obnx8ZSl9LGMsYy5leHBvcnRz
LGUsdCxuLHIpfXJldHVybiBuW2FdLmV4cG9ydHN9Zm9yKHZhciBpPSJmdW5jdGlvbiI9PXR5cGVv
ZiByZXF1aXJlJiZyZXF1aXJlLGE9MDthPHIubGVuZ3RoO2ErKylvKHJbYV0pO3JldHVybiBvfSh7
MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17UHJvcGVydGllczp7ImFyaWEt
Y3VycmVudCI6MCwiYXJpYS1kZXRhaWxzIjowLCJhcmlhLWRpc2FibGVkIjowLCJhcmlhLWhpZGRl
biI6MCwiYXJpYS1pbnZhbGlkIjowLCJhcmlhLWtleXNob3J0Y3V0cyI6MCwiYXJpYS1sYWJlbCI6
MCwiYXJpYS1yb2xlZGVzY3JpcHRpb24iOjAsImFyaWEtYXV0b2NvbXBsZXRlIjowLCJhcmlhLWNo
ZWNrZWQiOjAsImFyaWEtZXhwYW5kZWQiOjAsImFyaWEtaGFzcG9wdXAiOjAsImFyaWEtbGV2ZWwi
OjAsImFyaWEtbW9kYWwiOjAsImFyaWEtbXVsdGlsaW5lIjowLCJhcmlhLW11bHRpc2VsZWN0YWJs
ZSI6MCwiYXJpYS1vcmllbnRhdGlvbiI6MCwiYXJpYS1wbGFjZWhvbGRlciI6MCwiYXJpYS1wcmVz
c2VkIjowLCJhcmlhLXJlYWRvbmx5IjowLCJhcmlhLXJlcXVpcmVkIjowLCJhcmlhLXNlbGVjdGVk
IjowLCJhcmlhLXNvcnQiOjAsImFyaWEtdmFsdWVtYXgiOjAsImFyaWEtdmFsdWVtaW4iOjAsImFy
aWEtdmFsdWVub3ciOjAsImFyaWEtdmFsdWV0ZXh0IjowLCJhcmlhLWF0b21pYyI6MCwiYXJpYS1i
dXN5IjowLCJhcmlhLWxpdmUiOjAsImFyaWEtcmVsZXZhbnQiOjAsImFyaWEtZHJvcGVmZmVjdCI6
MCwiYXJpYS1ncmFiYmVkIjowLCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiOjAsImFyaWEtY29sY291
bnQiOjAsImFyaWEtY29saW5kZXgiOjAsImFyaWEtY29sc3BhbiI6MCwiYXJpYS1jb250cm9scyI6
MCwiYXJpYS1kZXNjcmliZWRieSI6MCwiYXJpYS1lcnJvcm1lc3NhZ2UiOjAsImFyaWEtZmxvd3Rv
IjowLCJhcmlhLWxhYmVsbGVkYnkiOjAsImFyaWEtb3ducyI6MCwiYXJpYS1wb3NpbnNldCI6MCwi
YXJpYS1yb3djb3VudCI6MCwiYXJpYS1yb3dpbmRleCI6MCwiYXJpYS1yb3dzcGFuIjowLCJhcmlh
LXNldHNpemUiOjB9LERPTUF0dHJpYnV0ZU5hbWVzOnt9LERPTVByb3BlcnR5TmFtZXM6e319O3Qu
ZXhwb3J0cz1yfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMz
KSxvPWUoMTMxKSxpPXtmb2N1c0RPTUNvbXBvbmVudDpmdW5jdGlvbigpe28oci5nZXROb2RlRnJv
bUluc3RhbmNlKHRoaXMpKX19O3QuZXhwb3J0cz1pfSx7MTMxOjEzMSwzMzozM31dLDM6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4oZS5jdHJsS2V5fHxl
LmFsdEtleXx8ZS5tZXRhS2V5KSYmIShlLmN0cmxLZXkmJmUuYWx0S2V5KX1mdW5jdGlvbiBvKGUp
e3N3aXRjaChlKXtjYXNlInRvcENvbXBvc2l0aW9uU3RhcnQiOnJldHVybiBULmNvbXBvc2l0aW9u
U3RhcnQ7Y2FzZSJ0b3BDb21wb3NpdGlvbkVuZCI6cmV0dXJuIFQuY29tcG9zaXRpb25FbmQ7Y2Fz
ZSJ0b3BDb21wb3NpdGlvblVwZGF0ZSI6cmV0dXJuIFQuY29tcG9zaXRpb25VcGRhdGV9fWZ1bmN0
aW9uIGkoZSx0KXtyZXR1cm4idG9wS2V5RG93biI9PT1lJiZ0LmtleUNvZGU9PT15fWZ1bmN0aW9u
IGEoZSx0KXtzd2l0Y2goZSl7Y2FzZSJ0b3BLZXlVcCI6cmV0dXJuLTEhPT1nLmluZGV4T2YodC5r
ZXlDb2RlKTtjYXNlInRvcEtleURvd24iOnJldHVybiB0LmtleUNvZGUhPT15O2Nhc2UidG9wS2V5
UHJlc3MiOmNhc2UidG9wTW91c2VEb3duIjpjYXNlInRvcEJsdXIiOnJldHVybiEwO2RlZmF1bHQ6
cmV0dXJuITF9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5kZXRhaWw7cmV0dXJuIm9iamVjdCI9PXR5
cGVvZiB0JiYiZGF0YSJpbiB0P3QuZGF0YTpudWxsfWZ1bmN0aW9uIHUoZSx0LG4scil7dmFyIHUs
bDtpZihfP3U9byhlKTpQP2EoZSxuKSYmKHU9VC5jb21wb3NpdGlvbkVuZCk6aShlLG4pJiYodT1U
LmNvbXBvc2l0aW9uU3RhcnQpLCF1KXJldHVybiBudWxsO0UmJihQfHx1IT09VC5jb21wb3NpdGlv
blN0YXJ0P3U9PT1ULmNvbXBvc2l0aW9uRW5kJiZQJiYobD1QLmdldERhdGEoKSk6UD1oLmdldFBv
b2xlZChyKSk7dmFyIGM9bS5nZXRQb29sZWQodSx0LG4scik7aWYobCljLmRhdGE9bDtlbHNle3Zh
ciBwPXMobik7bnVsbCE9PXAmJihjLmRhdGE9cCl9cmV0dXJuIGQuYWNjdW11bGF0ZVR3b1BoYXNl
RGlzcGF0Y2hlcyhjKSxjfWZ1bmN0aW9uIGwoZSx0KXtzd2l0Y2goZSl7Y2FzZSJ0b3BDb21wb3Np
dGlvbkVuZCI6cmV0dXJuIHModCk7Y2FzZSJ0b3BLZXlQcmVzcyI6cmV0dXJuIHQud2hpY2ghPT14
P251bGw6KGs9ITAsdyk7Y2FzZSJ0b3BUZXh0SW5wdXQiOnZhciBuPXQuZGF0YTtyZXR1cm4gbj09
PXcmJms/bnVsbDpuO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGMoZSx0KXtpZihQKXtp
ZigidG9wQ29tcG9zaXRpb25FbmQiPT09ZXx8IV8mJmEoZSx0KSl7dmFyIG49UC5nZXREYXRhKCk7
cmV0dXJuIGgucmVsZWFzZShQKSxQPW51bGwsbn1yZXR1cm4gbnVsbH1zd2l0Y2goZSl7Y2FzZSJ0
b3BQYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJ0b3BLZXlQcmVzcyI6cmV0dXJuIHQud2hpY2gmJiFy
KHQpP1N0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCk6bnVsbDtjYXNlInRvcENvbXBvc2l0aW9u
RW5kIjpyZXR1cm4gRT9udWxsOnQuZGF0YTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBw
KGUsdCxuLHIpe3ZhciBvO2lmKCEobz1iP2woZSxuKTpjKGUsbikpKXJldHVybiBudWxsO3ZhciBp
PXYuZ2V0UG9vbGVkKFQuYmVmb3JlSW5wdXQsdCxuLHIpO3JldHVybiBpLmRhdGE9byxkLmFjY3Vt
dWxhdGVUd29QaGFzZURpc3BhdGNoZXMoaSksaX12YXIgZD1lKDE5KSxmPWUoMTIzKSxoPWUoMjAp
LG09ZSg3OCksdj1lKDgyKSxnPVs5LDEzLDI3LDMyXSx5PTIyOSxfPWYuY2FuVXNlRE9NJiYiQ29t
cG9zaXRpb25FdmVudCJpbiB3aW5kb3csQz1udWxsO2YuY2FuVXNlRE9NJiYiZG9jdW1lbnRNb2Rl
ImluIGRvY3VtZW50JiYoQz1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBiPWYuY2FuVXNlRE9N
JiYiVGV4dEV2ZW50ImluIHdpbmRvdyYmIUMmJiFmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5vcGVy
YTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnZlcnNpb24m
JnBhcnNlSW50KGUudmVyc2lvbigpLDEwKTw9MTJ9KCksRT1mLmNhblVzZURPTSYmKCFffHxDJiZD
PjgmJkM8PTExKSx4PTMyLHc9U3RyaW5nLmZyb21DaGFyQ29kZSh4KSxUPXtiZWZvcmVJbnB1dDp7
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQmVmb3JlSW5wdXQiLGNhcHR1cmVk
OiJvbkJlZm9yZUlucHV0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcENvbXBvc2l0aW9uRW5k
IiwidG9wS2V5UHJlc3MiLCJ0b3BUZXh0SW5wdXQiLCJ0b3BQYXN0ZSJdfSxjb21wb3NpdGlvbkVu
ZDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25FbmQiLGNh
cHR1cmVkOiJvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIi
LCJ0b3BDb21wb3NpdGlvbkVuZCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVw
IiwidG9wTW91c2VEb3duIl19LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5h
bWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uU3RhcnQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9u
U3RhcnRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENvbXBvc2l0aW9uU3Rh
cnQiLCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJd
fSxjb21wb3NpdGlvblVwZGF0ZTp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9u
Q29tcG9zaXRpb25VcGRhdGUiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZSJ9
LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb21wb3NpdGlvblVwZGF0ZSIsInRvcEtleURv
d24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9wTW91c2VEb3duIl19fSxrPSExLFA9bnVs
bCxTPXtldmVudFR5cGVzOlQsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm5b
dShlLHQsbixyKSxwKGUsdCxuLHIpXX19O3QuZXhwb3J0cz1TfSx7MTIzOjEyMywxOToxOSwyMDoy
MCw3ODo3OCw4Mjo4Mn1dLDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cihlLHQpe3JldHVybiBlK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSl9
dmFyIG89e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJv
cmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhH
cm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsZmxleDohMCxmbGV4R3Jv
dzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9y
ZGVyOiEwLGdyaWRSb3c6ITAsZ3JpZENvbHVtbjohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDoh
MCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEw
LHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6
ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAs
c3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxpPVsi
V2Via2l0IiwibXMiLCJNb3oiLCJPIl07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihl
KXtpLmZvckVhY2goZnVuY3Rpb24odCl7b1tyKHQsZSldPW9bZV19KX0pO3ZhciBhPXtiYWNrZ3Jv
dW5kOntiYWNrZ3JvdW5kQXR0YWNobWVudDohMCxiYWNrZ3JvdW5kQ29sb3I6ITAsYmFja2dyb3Vu
ZEltYWdlOiEwLGJhY2tncm91bmRQb3NpdGlvblg6ITAsYmFja2dyb3VuZFBvc2l0aW9uWTohMCxi
YWNrZ3JvdW5kUmVwZWF0OiEwfSxiYWNrZ3JvdW5kUG9zaXRpb246e2JhY2tncm91bmRQb3NpdGlv
blg6ITAsYmFja2dyb3VuZFBvc2l0aW9uWTohMH0sYm9yZGVyOntib3JkZXJXaWR0aDohMCxib3Jk
ZXJTdHlsZTohMCxib3JkZXJDb2xvcjohMH0sYm9yZGVyQm90dG9tOntib3JkZXJCb3R0b21XaWR0
aDohMCxib3JkZXJCb3R0b21TdHlsZTohMCxib3JkZXJCb3R0b21Db2xvcjohMH0sYm9yZGVyTGVm
dDp7Ym9yZGVyTGVmdFdpZHRoOiEwLGJvcmRlckxlZnRTdHlsZTohMCxib3JkZXJMZWZ0Q29sb3I6
ITB9LGJvcmRlclJpZ2h0Ontib3JkZXJSaWdodFdpZHRoOiEwLGJvcmRlclJpZ2h0U3R5bGU6ITAs
Ym9yZGVyUmlnaHRDb2xvcjohMH0sYm9yZGVyVG9wOntib3JkZXJUb3BXaWR0aDohMCxib3JkZXJU
b3BTdHlsZTohMCxib3JkZXJUb3BDb2xvcjohMH0sZm9udDp7Zm9udFN0eWxlOiEwLGZvbnRWYXJp
YW50OiEwLGZvbnRXZWlnaHQ6ITAsZm9udFNpemU6ITAsbGluZUhlaWdodDohMCxmb250RmFtaWx5
OiEwfSxvdXRsaW5lOntvdXRsaW5lV2lkdGg6ITAsb3V0bGluZVN0eWxlOiEwLG91dGxpbmVDb2xv
cjohMH19LHM9e2lzVW5pdGxlc3NOdW1iZXI6byxzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6
YX07dC5leHBvcnRzPXN9LHt9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBy
PWUoNCksbz1lKDEyMyksaT0oZSg1OCksZSgxMjUpLGUoOTQpKSxhPWUoMTM2KSxzPWUoMTQwKSx1
PShlKDE0MikscyhmdW5jdGlvbihlKXtyZXR1cm4gYShlKX0pKSxsPSExLGM9ImNzc0Zsb2F0Ijtp
ZihvLmNhblVzZURPTSl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7
dHJ5e3AuZm9udD0iIn1jYXRjaChlKXtsPSEwfXZvaWQgMD09PWRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5zdHlsZS5jc3NGbG9hdCYmKGM9InN0eWxlRmxvYXQiKX12YXIgZD17Y3JlYXRlTWFya3Vw
Rm9yU3R5bGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpaWYoZS5oYXNP
d25Qcm9wZXJ0eShyKSl7dmFyIG89ZVtyXTtudWxsIT1vJiYobis9dShyKSsiOiIsbis9aShyLG8s
dCkrIjsiKX1yZXR1cm4gbnx8bnVsbH0sc2V0VmFsdWVGb3JTdHlsZXM6ZnVuY3Rpb24oZSx0LG4p
e3ZhciBvPWUuc3R5bGU7Zm9yKHZhciBhIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSl7dmFy
IHM9aShhLHRbYV0sbik7aWYoImZsb2F0IiE9PWEmJiJjc3NGbG9hdCIhPT1hfHwoYT1jKSxzKW9b
YV09cztlbHNle3ZhciB1PWwmJnIuc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zW2FdO2lmKHUp
Zm9yKHZhciBwIGluIHUpb1twXT0iIjtlbHNlIG9bYV09IiJ9fX19O3QuZXhwb3J0cz1kfSx7MTIz
OjEyMywxMjU6MTI1LDEzNjoxMzYsMTQwOjE0MCwxNDI6MTQyLDQ6NCw1ODo1OCw5NDo5NH1dLDY6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0
YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm
dW5jdGlvbiIpfXZhciBvPWUoMTEyKSxpPWUoMjQpLGE9KGUoMTM3KSxmdW5jdGlvbigpe2Z1bmN0
aW9uIGUodCl7cih0aGlzLGUpLHRoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2NvbnRleHRzPW51
bGwsdGhpcy5fYXJnPXR9cmV0dXJuIGUucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSx0KXt0
aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHxbXSx0aGlzLl9jYWxsYmFja3MucHVzaChl
KSx0aGlzLl9jb250ZXh0cz10aGlzLl9jb250ZXh0c3x8W10sdGhpcy5fY29udGV4dHMucHVzaCh0
KX0sZS5wcm90b3R5cGUubm90aWZ5QWxsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2FsbGJhY2tz
LHQ9dGhpcy5fY29udGV4dHMsbj10aGlzLl9hcmc7aWYoZSYmdCl7ZS5sZW5ndGghPT10Lmxlbmd0
aCYmbygiMjQiKSx0aGlzLl9jYWxsYmFja3M9bnVsbCx0aGlzLl9jb250ZXh0cz1udWxsO2Zvcih2
YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0uY2FsbCh0W3JdLG4pO2UubGVuZ3RoPTAsdC5sZW5n
dGg9MH19LGUucHJvdG90eXBlLmNoZWNrcG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2Fs
bGJhY2tzP3RoaXMuX2NhbGxiYWNrcy5sZW5ndGg6MH0sZS5wcm90b3R5cGUucm9sbGJhY2s9ZnVu
Y3Rpb24oZSl7dGhpcy5fY2FsbGJhY2tzJiZ0aGlzLl9jb250ZXh0cyYmKHRoaXMuX2NhbGxiYWNr
cy5sZW5ndGg9ZSx0aGlzLl9jb250ZXh0cy5sZW5ndGg9ZSl9LGUucHJvdG90eXBlLnJlc2V0PWZ1
bmN0aW9uKCl7dGhpcy5fY2FsbGJhY2tzPW51bGwsdGhpcy5fY29udGV4dHM9bnVsbH0sZS5wcm90
b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sZX0oKSk7dC5leHBvcnRz
PWkuYWRkUG9vbGluZ1RvKGEpfSx7MTEyOjExMiwxMzc6MTM3LDI0OjI0fV0sNzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubm9kZU5hbWUmJmUubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4ic2VsZWN0Ij09PXR8fCJpbnB1dCI9PT10JiYiZmls
ZSI9PT1lLnR5cGV9ZnVuY3Rpb24gbyhlKXt2YXIgdD13LmdldFBvb2xlZChTLmNoYW5nZSxNLGUs
VChlKSk7Qy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHQpLHguYmF0Y2hlZFVwZGF0ZXMo
aSx0KX1mdW5jdGlvbiBpKGUpe18uZW5xdWV1ZUV2ZW50cyhlKSxfLnByb2Nlc3NFdmVudFF1ZXVl
KCExKX1mdW5jdGlvbiBhKGUsdCl7Tj1lLE09dCxOLmF0dGFjaEV2ZW50KCJvbmNoYW5nZSIsbyl9
ZnVuY3Rpb24gcygpe04mJihOLmRldGFjaEV2ZW50KCJvbmNoYW5nZSIsbyksTj1udWxsLE09bnVs
bCl9ZnVuY3Rpb24gdShlLHQpe2lmKCJ0b3BDaGFuZ2UiPT09ZSlyZXR1cm4gdH1mdW5jdGlvbiBs
KGUsdCxuKXsidG9wRm9jdXMiPT09ZT8ocygpLGEodCxuKSk6InRvcEJsdXIiPT09ZSYmcygpfWZ1
bmN0aW9uIGMoZSx0KXtOPWUsTT10LEk9ZS52YWx1ZSxPPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsInZhbHVlIiksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KE4sInZhbHVlIixEKSxOLmF0dGFjaEV2ZW50P04uYXR0YWNoRXZlbnQoIm9ucHJvcGVy
dHljaGFuZ2UiLGQpOk4uYWRkRXZlbnRMaXN0ZW5lcigicHJvcGVydHljaGFuZ2UiLGQsITEpfWZ1
bmN0aW9uIHAoKXtOJiYoZGVsZXRlIE4udmFsdWUsTi5kZXRhY2hFdmVudD9OLmRldGFjaEV2ZW50
KCJvbnByb3BlcnR5Y2hhbmdlIixkKTpOLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb3BlcnR5Y2hh
bmdlIixkLCExKSxOPW51bGwsTT1udWxsLEk9bnVsbCxPPW51bGwpfWZ1bmN0aW9uIGQoZSl7aWYo
InZhbHVlIj09PWUucHJvcGVydHlOYW1lKXt2YXIgdD1lLnNyY0VsZW1lbnQudmFsdWU7dCE9PUkm
JihJPXQsbyhlKSl9fWZ1bmN0aW9uIGYoZSx0KXtpZigidG9wSW5wdXQiPT09ZSlyZXR1cm4gdH1m
dW5jdGlvbiBoKGUsdCxuKXsidG9wRm9jdXMiPT09ZT8ocCgpLGModCxuKSk6InRvcEJsdXIiPT09
ZSYmcCgpfWZ1bmN0aW9uIG0oZSx0KXtpZigoInRvcFNlbGVjdGlvbkNoYW5nZSI9PT1lfHwidG9w
S2V5VXAiPT09ZXx8InRvcEtleURvd24iPT09ZSkmJk4mJk4udmFsdWUhPT1JKXJldHVybiBJPU4u
dmFsdWUsTX1mdW5jdGlvbiB2KGUpe3JldHVybiBlLm5vZGVOYW1lJiYiaW5wdXQiPT09ZS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWUudHlwZXx8InJhZGlvIj09PWUudHlw
ZSl9ZnVuY3Rpb24gZyhlLHQpe2lmKCJ0b3BDbGljayI9PT1lKXJldHVybiB0fWZ1bmN0aW9uIHko
ZSx0KXtpZihudWxsIT1lKXt2YXIgbj1lLl93cmFwcGVyU3RhdGV8fHQuX3dyYXBwZXJTdGF0ZTtp
ZihuJiZuLmNvbnRyb2xsZWQmJiJudW1iZXIiPT09dC50eXBlKXt2YXIgcj0iIit0LnZhbHVlO3Qu
Z2V0QXR0cmlidXRlKCJ2YWx1ZSIpIT09ciYmdC5zZXRBdHRyaWJ1dGUoInZhbHVlIixyKX19fXZh
ciBfPWUoMTYpLEM9ZSgxOSksYj1lKDEyMyksRT1lKDMzKSx4PWUoNzEpLHc9ZSg4MCksVD1lKDEw
Miksaz1lKDEwOSksUD1lKDExMCksUz17Y2hhbmdlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7
YnViYmxlZDoib25DaGFuZ2UiLGNhcHR1cmVkOiJvbkNoYW5nZUNhcHR1cmUifSxkZXBlbmRlbmNp
ZXM6WyJ0b3BCbHVyIiwidG9wQ2hhbmdlIiwidG9wQ2xpY2siLCJ0b3BGb2N1cyIsInRvcElucHV0
IiwidG9wS2V5RG93biIsInRvcEtleVVwIiwidG9wU2VsZWN0aW9uQ2hhbmdlIl19fSxOPW51bGws
TT1udWxsLEk9bnVsbCxPPW51bGwsUj0hMTtiLmNhblVzZURPTSYmKFI9aygiY2hhbmdlIikmJigh
ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+OCkpO3ZhciBBPSEx
O2IuY2FuVXNlRE9NJiYoQT1rKCJpbnB1dCIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9j
dW1lbnQuZG9jdW1lbnRNb2RlPjExKSk7dmFyIEQ9e2dldDpmdW5jdGlvbigpe3JldHVybiBPLmdl
dC5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oZSl7ST0iIitlLE8uc2V0LmNhbGwodGhpcyxlKX19
LEw9e2V2ZW50VHlwZXM6UyxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpLGEs
cz10P0UuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0KTp3aW5kb3c7aWYocihzKT9SP2k9dTphPWw6UChz
KT9BP2k9ZjooaT1tLGE9aCk6dihzKSYmKGk9ZyksaSl7dmFyIGM9aShlLHQpO2lmKGMpe3ZhciBw
PXcuZ2V0UG9vbGVkKFMuY2hhbmdlLGMsbixvKTtyZXR1cm4gcC50eXBlPSJjaGFuZ2UiLEMuYWNj
dW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhwKSxwfX1hJiZhKGUscyx0KSwidG9wQmx1ciI9PT1l
JiZ5KHQscyl9fTt0LmV4cG9ydHM9TH0sezEwMjoxMDIsMTA5OjEwOSwxMTA6MTEwLDEyMzoxMjMs
MTY6MTYsMTk6MTksMzM6MzMsNzE6NzEsODA6ODB9XSw4OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKHQ9dFsxXSks
dD90Lm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZH1mdW5jdGlvbiBvKGUsdCxuKXtjLmluc2VydFRy
ZWVCZWZvcmUoZSx0LG4pfWZ1bmN0aW9uIGkoZSx0LG4pe0FycmF5LmlzQXJyYXkodCk/cyhlLHRb
MF0sdFsxXSxuKTptKGUsdCxuKX1mdW5jdGlvbiBhKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7
dmFyIG49dFsxXTt0PXRbMF0sdShlLHQsbiksZS5yZW1vdmVDaGlsZChuKX1lLnJlbW92ZUNoaWxk
KHQpfWZ1bmN0aW9uIHMoZSx0LG4scil7Zm9yKHZhciBvPXQ7Oyl7dmFyIGk9by5uZXh0U2libGlu
ZztpZihtKGUsbyxyKSxvPT09bilicmVhaztvPWl9fWZ1bmN0aW9uIHUoZSx0LG4pe2Zvcig7Oyl7
dmFyIHI9dC5uZXh0U2libGluZztpZihyPT09bilicmVhaztlLnJlbW92ZUNoaWxkKHIpfX1mdW5j
dGlvbiBsKGUsdCxuKXt2YXIgcj1lLnBhcmVudE5vZGUsbz1lLm5leHRTaWJsaW5nO289PT10P24m
Jm0ocixkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSxvKTpuPyhoKG8sbiksdShyLG8sdCkpOnUo
cixlLHQpfXZhciBjPWUoOSkscD1lKDEzKSxkPShlKDMzKSxlKDU4KSxlKDkzKSksZj1lKDExNCks
aD1lKDExNSksbT1kKGZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSksdj1wLmRh
bmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLGc9e2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVX
aXRoTWFya3VwOnYscmVwbGFjZURlbGltaXRlZFRleHQ6bCxwcm9jZXNzVXBkYXRlczpmdW5jdGlv
bihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcz10W25dO3N3aXRjaChzLnR5
cGUpe2Nhc2UiSU5TRVJUX01BUktVUCI6byhlLHMuY29udGVudCxyKGUscy5hZnRlck5vZGUpKTti
cmVhaztjYXNlIk1PVkVfRVhJU1RJTkciOmkoZSxzLmZyb21Ob2RlLHIoZSxzLmFmdGVyTm9kZSkp
O2JyZWFrO2Nhc2UiU0VUX01BUktVUCI6ZihlLHMuY29udGVudCk7YnJlYWs7Y2FzZSJURVhUX0NP
TlRFTlQiOmgoZSxzLmNvbnRlbnQpO2JyZWFrO2Nhc2UiUkVNT1ZFX05PREUiOmEoZSxzLmZyb21O
b2RlKX19fX07dC5leHBvcnRzPWd9LHsxMTQ6MTE0LDExNToxMTUsMTM6MTMsMzM6MzMsNTg6NTgs
OTo5LDkzOjkzfV0sOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e2lmKGgpe3ZhciB0PWUubm9kZSxuPWUuY2hpbGRyZW47aWYobi5sZW5ndGgpZm9yKHZhciByPTA7
cjxuLmxlbmd0aDtyKyspbSh0LG5bcl0sbnVsbCk7ZWxzZSBudWxsIT1lLmh0bWw/cCh0LGUuaHRt
bCk6bnVsbCE9ZS50ZXh0JiZmKHQsZS50ZXh0KX19ZnVuY3Rpb24gbyhlLHQpe2UucGFyZW50Tm9k
ZS5yZXBsYWNlQ2hpbGQodC5ub2RlLGUpLHIodCl9ZnVuY3Rpb24gaShlLHQpe2g/ZS5jaGlsZHJl
bi5wdXNoKHQpOmUubm9kZS5hcHBlbmRDaGlsZCh0Lm5vZGUpfWZ1bmN0aW9uIGEoZSx0KXtoP2Uu
aHRtbD10OnAoZS5ub2RlLHQpfWZ1bmN0aW9uIHMoZSx0KXtoP2UudGV4dD10OmYoZS5ub2RlLHQp
fWZ1bmN0aW9uIHUoKXtyZXR1cm4gdGhpcy5ub2RlLm5vZGVOYW1lfWZ1bmN0aW9uIGwoZSl7cmV0
dXJue25vZGU6ZSxjaGlsZHJlbjpbXSxodG1sOm51bGwsdGV4dDpudWxsLHRvU3RyaW5nOnV9fXZh
ciBjPWUoMTApLHA9ZSgxMTQpLGQ9ZSg5MyksZj1lKDExNSksaD0idW5kZWZpbmVkIiE9dHlwZW9m
IGRvY3VtZW50JiYibnVtYmVyIj09dHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZXx8InVuZGVm
aW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJiJzdHJpbmciPT10eXBlb2YgbmF2aWdhdG9yLnVzZXJB
Z2VudCYmL1xiRWRnZVwvXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT1kKGZ1bmN0aW9u
KGUsdCxuKXsxMT09PXQubm9kZS5ub2RlVHlwZXx8MT09PXQubm9kZS5ub2RlVHlwZSYmIm9iamVj
dCI9PT10Lm5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKG51bGw9PXQubm9kZS5uYW1lc3Bh
Y2VVUkl8fHQubm9kZS5uYW1lc3BhY2VVUkk9PT1jLmh0bWwpPyhyKHQpLGUuaW5zZXJ0QmVmb3Jl
KHQubm9kZSxuKSk6KGUuaW5zZXJ0QmVmb3JlKHQubm9kZSxuKSxyKHQpKX0pO2wuaW5zZXJ0VHJl
ZUJlZm9yZT1tLGwucmVwbGFjZUNoaWxkV2l0aFRyZWU9byxsLnF1ZXVlQ2hpbGQ9aSxsLnF1ZXVl
SFRNTD1hLGwucXVldWVUZXh0PXMsdC5leHBvcnRzPWx9LHsxMDoxMCwxMTQ6MTE0LDExNToxMTUs
OTM6OTN9XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17aHRtbDoiaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbWF0aG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4
L01hdGgvTWF0aE1MIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn07dC5leHBvcnRz
PXJ9LHt9XSwxMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7
cmV0dXJuKGUmdCk9PT10fXZhciBvPWUoMTEyKSxpPShlKDEzNykse01VU1RfVVNFX1BST1BFUlRZ
OjEsSEFTX0JPT0xFQU5fVkFMVUU6NCxIQVNfTlVNRVJJQ19WQUxVRTo4LEhBU19QT1NJVElWRV9O
VU1FUklDX1ZBTFVFOjI0LEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU6MzIsaW5qZWN0RE9N
UHJvcGVydHlDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9aSxuPWUuUHJvcGVydGllc3x8e30sYT1l
LkRPTUF0dHJpYnV0ZU5hbWVzcGFjZXN8fHt9LHU9ZS5ET01BdHRyaWJ1dGVOYW1lc3x8e30sbD1l
LkRPTVByb3BlcnR5TmFtZXN8fHt9LGM9ZS5ET01NdXRhdGlvbk1ldGhvZHN8fHt9O2UuaXNDdXN0
b21BdHRyaWJ1dGUmJnMuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goZS5pc0N1c3Rv
bUF0dHJpYnV0ZSk7Zm9yKHZhciBwIGluIG4pe3MucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShw
KSYmbygiNDgiLHApO3ZhciBkPXAudG9Mb3dlckNhc2UoKSxmPW5bcF0saD17YXR0cmlidXRlTmFt
ZTpkLGF0dHJpYnV0ZU5hbWVzcGFjZTpudWxsLHByb3BlcnR5TmFtZTpwLG11dGF0aW9uTWV0aG9k
Om51bGwsbXVzdFVzZVByb3BlcnR5OnIoZix0Lk1VU1RfVVNFX1BST1BFUlRZKSxoYXNCb29sZWFu
VmFsdWU6cihmLHQuSEFTX0JPT0xFQU5fVkFMVUUpLGhhc051bWVyaWNWYWx1ZTpyKGYsdC5IQVNf
TlVNRVJJQ19WQUxVRSksaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6cihmLHQuSEFTX1BPU0lUSVZF
X05VTUVSSUNfVkFMVUUpLGhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU6cihmLHQuSEFTX09WRVJM
T0FERURfQk9PTEVBTl9WQUxVRSl9O2lmKGguaGFzQm9vbGVhblZhbHVlK2guaGFzTnVtZXJpY1Zh
bHVlK2guaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZTw9MXx8bygiNTAiLHApLHUuaGFzT3duUHJv
cGVydHkocCkpe3ZhciBtPXVbcF07aC5hdHRyaWJ1dGVOYW1lPW19YS5oYXNPd25Qcm9wZXJ0eShw
KSYmKGguYXR0cmlidXRlTmFtZXNwYWNlPWFbcF0pLGwuaGFzT3duUHJvcGVydHkocCkmJihoLnBy
b3BlcnR5TmFtZT1sW3BdKSxjLmhhc093blByb3BlcnR5KHApJiYoaC5tdXRhdGlvbk1ldGhvZD1j
W3BdKSxzLnByb3BlcnRpZXNbcF09aH19fSksYT0iOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUw
MEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZc
XHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3
RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQiLHM9e0lEX0FUVFJJQlVURV9OQU1FOiJk
YXRhLXJlYWN0aWQiLFJPT1RfQVRUUklCVVRFX05BTUU6ImRhdGEtcmVhY3Ryb290IixBVFRSSUJV
VEVfTkFNRV9TVEFSVF9DSEFSOmEsQVRUUklCVVRFX05BTUVfQ0hBUjphKyJcXC0uMC05XFx1MDBC
N1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MCIscHJvcGVydGllczp7fSxnZXRQb3NzaWJs
ZVN0YW5kYXJkTmFtZTpudWxsLF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczpbXSxpc0N1c3Rv
bUF0dHJpYnV0ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHMuX2lzQ3VzdG9tQXR0cmlidXRl
RnVuY3Rpb25zLmxlbmd0aDt0KyspaWYoKDAscy5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnNb
dF0pKGUpKXJldHVybiEwO3JldHVybiExfSxpbmplY3Rpb246aX07dC5leHBvcnRzPXN9LHsxMTI6
MTEyLDEzNzoxMzd9XSwxMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUpe3JldHVybiEhbC5oYXNPd25Qcm9wZXJ0eShlKXx8IXUuaGFzT3duUHJvcGVydHkoZSkmJihz
LnRlc3QoZSk/KGxbZV09ITAsITApOih1W2VdPSEwLCExKSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVy
biBudWxsPT10fHxlLmhhc0Jvb2xlYW5WYWx1ZSYmIXR8fGUuaGFzTnVtZXJpY1ZhbHVlJiZpc05h
Tih0KXx8ZS5oYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSYmdDwxfHxlLmhhc092ZXJsb2FkZWRCb29s
ZWFuVmFsdWUmJiExPT09dH12YXIgaT1lKDExKSxhPShlKDMzKSxlKDU4KSxlKDExMSkpLHM9KGUo
MTQyKSxuZXcgUmVnRXhwKCJeWyIraS5BVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSKyJdWyIraS5B
VFRSSUJVVEVfTkFNRV9DSEFSKyJdKiQiKSksdT17fSxsPXt9LGM9e2NyZWF0ZU1hcmt1cEZvcklE
OmZ1bmN0aW9uKGUpe3JldHVybiBpLklEX0FUVFJJQlVURV9OQU1FKyI9IithKGUpfSxzZXRBdHRy
aWJ1dGVGb3JJRDpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKGkuSURfQVRUUklCVVRFX05B
TUUsdCl9LGNyZWF0ZU1hcmt1cEZvclJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gaS5ST09UX0FUVFJJ
QlVURV9OQU1FKyc9IiInfSxzZXRBdHRyaWJ1dGVGb3JSb290OmZ1bmN0aW9uKGUpe2Uuc2V0QXR0
cmlidXRlKGkuUk9PVF9BVFRSSUJVVEVfTkFNRSwiIil9LGNyZWF0ZU1hcmt1cEZvclByb3BlcnR5
OmZ1bmN0aW9uKGUsdCl7dmFyIG49aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGUpP2kucHJv
cGVydGllc1tlXTpudWxsO2lmKG4pe2lmKG8obix0KSlyZXR1cm4iIjt2YXIgcj1uLmF0dHJpYnV0
ZU5hbWU7cmV0dXJuIG4uaGFzQm9vbGVhblZhbHVlfHxuLmhhc092ZXJsb2FkZWRCb29sZWFuVmFs
dWUmJiEwPT09dD9yKyc9IiInOnIrIj0iK2EodCl9cmV0dXJuIGkuaXNDdXN0b21BdHRyaWJ1dGUo
ZSk/bnVsbD09dD8iIjplKyI9IithKHQpOm51bGx9LGNyZWF0ZU1hcmt1cEZvckN1c3RvbUF0dHJp
YnV0ZTpmdW5jdGlvbihlLHQpe3JldHVybiByKGUpJiZudWxsIT10P2UrIj0iK2EodCk6IiJ9LHNl
dFZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkucHJvcGVydGllcy5oYXNP
d25Qcm9wZXJ0eSh0KT9pLnByb3BlcnRpZXNbdF06bnVsbDtpZihyKXt2YXIgYT1yLm11dGF0aW9u
TWV0aG9kO2lmKGEpYShlLG4pO2Vsc2V7aWYobyhyLG4pKXJldHVybiB2b2lkIHRoaXMuZGVsZXRl
VmFsdWVGb3JQcm9wZXJ0eShlLHQpO2lmKHIubXVzdFVzZVByb3BlcnR5KWVbci5wcm9wZXJ0eU5h
bWVdPW47ZWxzZXt2YXIgcz1yLmF0dHJpYnV0ZU5hbWUsdT1yLmF0dHJpYnV0ZU5hbWVzcGFjZTt1
P2Uuc2V0QXR0cmlidXRlTlModSxzLCIiK24pOnIuaGFzQm9vbGVhblZhbHVlfHxyLmhhc092ZXJs
b2FkZWRCb29sZWFuVmFsdWUmJiEwPT09bj9lLnNldEF0dHJpYnV0ZShzLCIiKTplLnNldEF0dHJp
YnV0ZShzLCIiK24pfX19ZWxzZSBpZihpLmlzQ3VzdG9tQXR0cmlidXRlKHQpKXJldHVybiB2b2lk
IGMuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZSx0LG4pfSxzZXRWYWx1ZUZvckF0dHJpYnV0ZTpmdW5j
dGlvbihlLHQsbil7cih0KSYmKG51bGw9PW4/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6ZS5zZXRBdHRy
aWJ1dGUodCwiIituKSl9LGRlbGV0ZVZhbHVlRm9yQXR0cmlidXRlOmZ1bmN0aW9uKGUsdCl7ZS5y
ZW1vdmVBdHRyaWJ1dGUodCl9LGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2
YXIgbj1pLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51bGw7
aWYobil7dmFyIHI9bi5tdXRhdGlvbk1ldGhvZDtpZihyKXIoZSx2b2lkIDApO2Vsc2UgaWYobi5t
dXN0VXNlUHJvcGVydHkpe3ZhciBvPW4ucHJvcGVydHlOYW1lO24uaGFzQm9vbGVhblZhbHVlP2Vb
b109ITE6ZVtvXT0iIn1lbHNlIGUucmVtb3ZlQXR0cmlidXRlKG4uYXR0cmlidXRlTmFtZSl9ZWxz
ZSBpLmlzQ3VzdG9tQXR0cmlidXRlKHQpJiZlLnJlbW92ZUF0dHJpYnV0ZSh0KX19O3QuZXhwb3J0
cz1jfSx7MTE6MTEsMTExOjExMSwxNDI6MTQyLDMzOjMzLDU4OjU4fV0sMTM6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89ZSg5KSxpPWUoMTIzKSxhPWUoMTI4KSxz
PWUoMTI5KSx1PShlKDEzNykse2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOmZ1bmN0
aW9uKGUsdCl7aWYoaS5jYW5Vc2VET018fHIoIjU2IiksdHx8cigiNTciKSwiSFRNTCI9PT1lLm5v
ZGVOYW1lJiZyKCI1OCIpLCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIG49YSh0LHMpWzBdO2UucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQobixlKX1lbHNlIG8ucmVwbGFjZUNoaWxkV2l0aFRyZWUoZSx0
KX19KTt0LmV4cG9ydHM9dX0sezExMjoxMTIsMTIzOjEyMywxMjg6MTI4LDEyOToxMjksMTM3OjEz
Nyw5Ojl9XSwxNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1bIlJlc3BvbmRl
ckV2ZW50UGx1Z2luIiwiU2ltcGxlRXZlbnRQbHVnaW4iLCJUYXBFdmVudFBsdWdpbiIsIkVudGVy
TGVhdmVFdmVudFBsdWdpbiIsIkNoYW5nZUV2ZW50UGx1Z2luIiwiU2VsZWN0RXZlbnRQbHVnaW4i
LCJCZWZvcmVJbnB1dEV2ZW50UGx1Z2luIl07dC5leHBvcnRzPXJ9LHt9XSwxNTpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDE5KSxvPWUoMzMpLGk9ZSg4NCksYT17bW91c2VF
bnRlcjp7cmVnaXN0cmF0aW9uTmFtZToib25Nb3VzZUVudGVyIixkZXBlbmRlbmNpZXM6WyJ0b3BN
b3VzZU91dCIsInRvcE1vdXNlT3ZlciJdfSxtb3VzZUxlYXZlOntyZWdpc3RyYXRpb25OYW1lOiJv
bk1vdXNlTGVhdmUiLGRlcGVuZGVuY2llczpbInRvcE1vdXNlT3V0IiwidG9wTW91c2VPdmVyIl19
fSxzPXtldmVudFR5cGVzOmEsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixzKXtpZigidG9w
TW91c2VPdmVyIj09PWUmJihuLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpKXJldHVybiBu
dWxsO2lmKCJ0b3BNb3VzZU91dCIhPT1lJiYidG9wTW91c2VPdmVyIiE9PWUpcmV0dXJuIG51bGw7
dmFyIHU7aWYocy53aW5kb3c9PT1zKXU9cztlbHNle3ZhciBsPXMub3duZXJEb2N1bWVudDt1PWw/
bC5kZWZhdWx0Vmlld3x8bC5wYXJlbnRXaW5kb3c6d2luZG93fXZhciBjLHA7aWYoInRvcE1vdXNl
T3V0Ij09PWUpe2M9dDt2YXIgZD1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50O3A9ZD9vLmdl
dENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGQpOm51bGx9ZWxzZSBjPW51bGwscD10O2lmKGM9PT1w
KXJldHVybiBudWxsO3ZhciBmPW51bGw9PWM/dTpvLmdldE5vZGVGcm9tSW5zdGFuY2UoYyksaD1u
dWxsPT1wP3U6by5nZXROb2RlRnJvbUluc3RhbmNlKHApLG09aS5nZXRQb29sZWQoYS5tb3VzZUxl
YXZlLGMsbixzKTttLnR5cGU9Im1vdXNlbGVhdmUiLG0udGFyZ2V0PWYsbS5yZWxhdGVkVGFyZ2V0
PWg7dmFyIHY9aS5nZXRQb29sZWQoYS5tb3VzZUVudGVyLHAsbixzKTtyZXR1cm4gdi50eXBlPSJt
b3VzZWVudGVyIix2LnRhcmdldD1oLHYucmVsYXRlZFRhcmdldD1mLHIuYWNjdW11bGF0ZUVudGVy
TGVhdmVEaXNwYXRjaGVzKG0sdixjLHApLFttLHZdfX07dC5leHBvcnRzPXN9LHsxOToxOSwzMzoz
Myw4NDo4NH1dLDE2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7
cmV0dXJuImJ1dHRvbiI9PT1lfHwiaW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEi
PT09ZX1mdW5jdGlvbiBvKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xp
Y2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUi
OmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VN
b3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3Vz
ZVVwQ2FwdHVyZSI6cmV0dXJuISghbi5kaXNhYmxlZHx8IXIodCkpO2RlZmF1bHQ6cmV0dXJuITF9
fXZhciBpPWUoMTEyKSxhPWUoMTcpLHM9ZSgxOCksdT1lKDUwKSxsPWUoOTEpLGM9ZSg5OCkscD0o
ZSgxMzcpLHt9KSxkPW51bGwsZj1mdW5jdGlvbihlLHQpe2UmJihzLmV4ZWN1dGVEaXNwYXRjaGVz
SW5PcmRlcihlLHQpLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKSl9
LGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwhMCl9LG09ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSwh
MSl9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIi4iK2UuX3Jvb3ROb2RlSUR9LGc9e2luamVjdGlvbjp7
aW5qZWN0RXZlbnRQbHVnaW5PcmRlcjphLmluamVjdEV2ZW50UGx1Z2luT3JkZXIsaW5qZWN0RXZl
bnRQbHVnaW5zQnlOYW1lOmEuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfSxwdXRMaXN0ZW5lcjpm
dW5jdGlvbihlLHQsbil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJmkoIjk0Iix0LHR5cGVvZiBuKTt2
YXIgcj12KGUpOyhwW3RdfHwocFt0XT17fSkpW3JdPW47dmFyIG89YS5yZWdpc3RyYXRpb25OYW1l
TW9kdWxlc1t0XTtvJiZvLmRpZFB1dExpc3RlbmVyJiZvLmRpZFB1dExpc3RlbmVyKGUsdCxuKX0s
Z2V0TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1wW3RdO2lmKG8odCxlLl9jdXJyZW50RWxl
bWVudC50eXBlLGUuX2N1cnJlbnRFbGVtZW50LnByb3BzKSlyZXR1cm4gbnVsbDt2YXIgcj12KGUp
O3JldHVybiBuJiZuW3JdfSxkZWxldGVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3ZhciBuPWEucmVn
aXN0cmF0aW9uTmFtZU1vZHVsZXNbdF07biYmbi53aWxsRGVsZXRlTGlzdGVuZXImJm4ud2lsbERl
bGV0ZUxpc3RlbmVyKGUsdCk7dmFyIHI9cFt0XTtyJiZkZWxldGUgclt2KGUpXX0sZGVsZXRlQWxs
TGlzdGVuZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PXYoZSk7Zm9yKHZhciBuIGluIHApaWYocC5oYXNP
d25Qcm9wZXJ0eShuKSYmcFtuXVt0XSl7dmFyIHI9YS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tu
XTtyJiZyLndpbGxEZWxldGVMaXN0ZW5lciYmci53aWxsRGVsZXRlTGlzdGVuZXIoZSxuKSxkZWxl
dGUgcFtuXVt0XX19LGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvLGk9
YS5wbHVnaW5zLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIHU9aVtzXTtpZih1KXt2YXIgYz11LmV4
dHJhY3RFdmVudHMoZSx0LG4scik7YyYmKG89bChvLGMpKX19cmV0dXJuIG99LGVucXVldWVFdmVu
dHM6ZnVuY3Rpb24oZSl7ZSYmKGQ9bChkLGUpKX0scHJvY2Vzc0V2ZW50UXVldWU6ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZDtkPW51bGwsZT9jKHQsaCk6Yyh0LG0pLGQmJmkoIjk1IiksdS5yZXRocm93Q2F1
Z2h0RXJyb3IoKX0sX19wdXJnZTpmdW5jdGlvbigpe3A9e319LF9fZ2V0TGlzdGVuZXJCYW5rOmZ1
bmN0aW9uKCl7cmV0dXJuIHB9fTt0LmV4cG9ydHM9Z30sezExMjoxMTIsMTM3OjEzNywxNzoxNywx
ODoxOCw1MDo1MCw5MTo5MSw5ODo5OH1dLDE3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoKXtpZihzKWZvcih2YXIgZSBpbiB1KXt2YXIgdD11W2VdLG49cy5pbmRleE9m
KGUpO2lmKG4+LTF8fGEoIjk2IixlKSwhbC5wbHVnaW5zW25dKXt0LmV4dHJhY3RFdmVudHN8fGEo
Ijk3IixlKSxsLnBsdWdpbnNbbl09dDt2YXIgcj10LmV2ZW50VHlwZXM7Zm9yKHZhciBpIGluIHIp
byhyW2ldLHQsaSl8fGEoIjk4IixpLGUpfX19ZnVuY3Rpb24gbyhlLHQsbil7bC5ldmVudE5hbWVE
aXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkobikmJmEoIjk5IixuKSxsLmV2ZW50TmFtZURp
c3BhdGNoQ29uZmlnc1tuXT1lO3ZhciByPWUucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7aWYocil7
Zm9yKHZhciBvIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIHM9cltvXTtpKHMsdCxu
KX1yZXR1cm4hMH1yZXR1cm4hIWUucmVnaXN0cmF0aW9uTmFtZSYmKGkoZS5yZWdpc3RyYXRpb25O
YW1lLHQsbiksITApfWZ1bmN0aW9uIGkoZSx0LG4pe2wucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNb
ZV0mJmEoIjEwMCIsZSksbC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tlXT10LGwucmVnaXN0cmF0
aW9uTmFtZURlcGVuZGVuY2llc1tlXT10LmV2ZW50VHlwZXNbbl0uZGVwZW5kZW5jaWVzfXZhciBh
PWUoMTEyKSxzPShlKDEzNyksbnVsbCksdT17fSxsPXtwbHVnaW5zOltdLGV2ZW50TmFtZURpc3Bh
dGNoQ29uZmlnczp7fSxyZWdpc3RyYXRpb25OYW1lTW9kdWxlczp7fSxyZWdpc3RyYXRpb25OYW1l
RGVwZW5kZW5jaWVzOnt9LHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6bnVsbCxpbmplY3RFdmVu
dFBsdWdpbk9yZGVyOmZ1bmN0aW9uKGUpe3MmJmEoIjEwMSIpLHM9QXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoZSkscigpfSxpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6ZnVuY3Rpb24oZSl7dmFy
IHQ9ITE7Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIG89ZVtuXTt1
Lmhhc093blByb3BlcnR5KG4pJiZ1W25dPT09b3x8KHVbbl0mJmEoIjEwMiIsbiksdVtuXT1vLHQ9
ITApfXQmJnIoKX0sZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5k
aXNwYXRjaENvbmZpZztpZih0LnJlZ2lzdHJhdGlvbk5hbWUpcmV0dXJuIGwucmVnaXN0cmF0aW9u
TmFtZU1vZHVsZXNbdC5yZWdpc3RyYXRpb25OYW1lXXx8bnVsbDtpZih2b2lkIDAhPT10LnBoYXNl
ZFJlZ2lzdHJhdGlvbk5hbWVzKXt2YXIgbj10LnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO2Zvcih2
YXIgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikpe3ZhciBvPWwucmVnaXN0cmF0aW9uTmFt
ZU1vZHVsZXNbbltyXV07aWYobylyZXR1cm4gb319cmV0dXJuIG51bGx9LF9yZXNldEV2ZW50UGx1
Z2luczpmdW5jdGlvbigpe3M9bnVsbDtmb3IodmFyIGUgaW4gdSl1Lmhhc093blByb3BlcnR5KGUp
JiZkZWxldGUgdVtlXTtsLnBsdWdpbnMubGVuZ3RoPTA7dmFyIHQ9bC5ldmVudE5hbWVEaXNwYXRj
aENvbmZpZ3M7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZGVsZXRlIHRbbl07
dmFyIHI9bC5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztmb3IodmFyIG8gaW4gcilyLmhhc093blBy
b3BlcnR5KG8pJiZkZWxldGUgcltvXX19O3QuZXhwb3J0cz1sfSx7MTEyOjExMiwxMzc6MTM3fV0s
MTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4idG9w
TW91c2VVcCI9PT1lfHwidG9wVG91Y2hFbmQiPT09ZXx8InRvcFRvdWNoQ2FuY2VsIj09PWV9ZnVu
Y3Rpb24gbyhlKXtyZXR1cm4idG9wTW91c2VNb3ZlIj09PWV8fCJ0b3BUb3VjaE1vdmUiPT09ZX1m
dW5jdGlvbiBpKGUpe3JldHVybiJ0b3BNb3VzZURvd24iPT09ZXx8InRvcFRvdWNoU3RhcnQiPT09
ZX1mdW5jdGlvbiBhKGUsdCxuLHIpe3ZhciBvPWUudHlwZXx8InVua25vd24tZXZlbnQiO2UuY3Vy
cmVudFRhcmdldD1nLmdldE5vZGVGcm9tSW5zdGFuY2UociksdD9tLmludm9rZUd1YXJkZWRDYWxs
YmFja1dpdGhDYXRjaChvLG4sZSk6bS5pbnZva2VHdWFyZGVkQ2FsbGJhY2sobyxuLGUpLGUuY3Vy
cmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1lLl9kaXNwYXRjaExpc3RlbmVy
cyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTA7
bzxuLmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtvKyspYShlLHQsbltvXSxyW29d
KTtlbHNlIG4mJmEoZSx0LG4scik7ZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCxlLl9kaXNwYXRj
aEluc3RhbmNlcz1udWxsfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMs
bj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9MDty
PHQubGVuZ3RoJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO3IrKylpZih0W3JdKGUsbltyXSkp
cmV0dXJuIG5bcl19ZWxzZSBpZih0JiZ0KGUsbikpcmV0dXJuIG47cmV0dXJuIG51bGx9ZnVuY3Rp
b24gbChlKXt2YXIgdD11KGUpO3JldHVybiBlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsLGUuX2Rp
c3BhdGNoTGlzdGVuZXJzPW51bGwsdH1mdW5jdGlvbiBjKGUpe3ZhciB0PWUuX2Rpc3BhdGNoTGlz
dGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7QXJyYXkuaXNBcnJheSh0KSYmaCgiMTAzIiks
ZS5jdXJyZW50VGFyZ2V0PXQ/Zy5nZXROb2RlRnJvbUluc3RhbmNlKG4pOm51bGw7dmFyIHI9dD90
KGUpOm51bGw7cmV0dXJuIGUuY3VycmVudFRhcmdldD1udWxsLGUuX2Rpc3BhdGNoTGlzdGVuZXJz
PW51bGwsZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbCxyfWZ1bmN0aW9uIHAoZSl7cmV0dXJuISFl
Ll9kaXNwYXRjaExpc3RlbmVyc312YXIgZCxmLGg9ZSgxMTIpLG09ZSg1MCksdj0oZSgxMzcpLGUo
MTQyKSx7aW5qZWN0Q29tcG9uZW50VHJlZTpmdW5jdGlvbihlKXtkPWV9LGluamVjdFRyZWVUcmF2
ZXJzYWw6ZnVuY3Rpb24oZSl7Zj1lfX0pLGc9e2lzRW5kaXNoOnIsaXNNb3ZlaXNoOm8saXNTdGFy
dGlzaDppLGV4ZWN1dGVEaXJlY3REaXNwYXRjaDpjLGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcjpz
LGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6bCxoYXNEaXNwYXRjaGVzOnAsZ2V0
SW5zdGFuY2VGcm9tTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZC5nZXRJbnN0YW5jZUZyb21Ob2Rl
KGUpfSxnZXROb2RlRnJvbUluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiBkLmdldE5vZGVGcm9t
SW5zdGFuY2UoZSl9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5pc0FuY2VzdG9y
KGUsdCl9LGdldExvd2VzdENvbW1vbkFuY2VzdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYuZ2V0
TG93ZXN0Q29tbW9uQW5jZXN0b3IoZSx0KX0sZ2V0UGFyZW50SW5zdGFuY2U6ZnVuY3Rpb24oZSl7
cmV0dXJuIGYuZ2V0UGFyZW50SW5zdGFuY2UoZSl9LHRyYXZlcnNlVHdvUGhhc2U6ZnVuY3Rpb24o
ZSx0LG4pe3JldHVybiBmLnRyYXZlcnNlVHdvUGhhc2UoZSx0LG4pfSx0cmF2ZXJzZUVudGVyTGVh
dmU6ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gZi50cmF2ZXJzZUVudGVyTGVhdmUoZSx0LG4s
cixvKX0saW5qZWN0aW9uOnZ9O3QuZXhwb3J0cz1nfSx7MTEyOjExMiwxMzc6MTM3LDE0MjoxNDIs
NTA6NTB9XSwxOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxu
KXt2YXIgcj10LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW25dO3JldHVy
biBnKGUscil9ZnVuY3Rpb24gbyhlLHQsbil7dmFyIG89cihlLG4sdCk7byYmKG4uX2Rpc3BhdGNo
TGlzdGVuZXJzPW0obi5fZGlzcGF0Y2hMaXN0ZW5lcnMsbyksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9
bShuLl9kaXNwYXRjaEluc3RhbmNlcyxlKSl9ZnVuY3Rpb24gaShlKXtlJiZlLmRpc3BhdGNoQ29u
ZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzJiZoLnRyYXZlcnNlVHdvUGhhc2UoZS5fdGFyZ2V0
SW5zdCxvLGUpfWZ1bmN0aW9uIGEoZSl7aWYoZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdp
c3RyYXRpb25OYW1lcyl7dmFyIHQ9ZS5fdGFyZ2V0SW5zdCxuPXQ/aC5nZXRQYXJlbnRJbnN0YW5j
ZSh0KTpudWxsO2gudHJhdmVyc2VUd29QaGFzZShuLG8sZSl9fWZ1bmN0aW9uIHMoZSx0LG4pe2lm
KG4mJm4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSl7dmFyIHI9bi5kaXNwYXRjaENv
bmZpZy5yZWdpc3RyYXRpb25OYW1lLG89ZyhlLHIpO28mJihuLl9kaXNwYXRjaExpc3RlbmVycz1t
KG4uX2Rpc3BhdGNoTGlzdGVuZXJzLG8pLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPW0obi5fZGlzcGF0
Y2hJbnN0YW5jZXMsZSkpfX1mdW5jdGlvbiB1KGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0
cmF0aW9uTmFtZSYmcyhlLl90YXJnZXRJbnN0LG51bGwsZSl9ZnVuY3Rpb24gbChlKXt2KGUsaSl9
ZnVuY3Rpb24gYyhlKXt2KGUsYSl9ZnVuY3Rpb24gcChlLHQsbixyKXtoLnRyYXZlcnNlRW50ZXJM
ZWF2ZShuLHIscyxlLHQpfWZ1bmN0aW9uIGQoZSl7dihlLHUpfXZhciBmPWUoMTYpLGg9ZSgxOCks
bT1lKDkxKSx2PWUoOTgpLGc9KGUoMTQyKSxmLmdldExpc3RlbmVyKSx5PXthY2N1bXVsYXRlVHdv
UGhhc2VEaXNwYXRjaGVzOmwsYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQ6
YyxhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlczpkLGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0
Y2hlczpwfTt0LmV4cG9ydHM9eX0sezE0MjoxNDIsMTY6MTYsMTg6MTgsOTE6OTEsOTg6OTh9XSwy
MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RoaXMuX3Jvb3Q9
ZSx0aGlzLl9zdGFydFRleHQ9dGhpcy5nZXRUZXh0KCksdGhpcy5fZmFsbGJhY2tUZXh0PW51bGx9
dmFyIG89ZSgxNDMpLGk9ZSgyNCksYT1lKDEwNik7byhyLnByb3RvdHlwZSx7ZGVzdHJ1Y3Rvcjpm
dW5jdGlvbigpe3RoaXMuX3Jvb3Q9bnVsbCx0aGlzLl9zdGFydFRleHQ9bnVsbCx0aGlzLl9mYWxs
YmFja1RleHQ9bnVsbH0sZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiJ2YWx1ZSJpbiB0aGlzLl9y
b290P3RoaXMuX3Jvb3QudmFsdWU6dGhpcy5fcm9vdFthKCldfSxnZXREYXRhOmZ1bmN0aW9uKCl7
aWYodGhpcy5fZmFsbGJhY2tUZXh0KXJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7dmFyIGUsdCxu
PXRoaXMuX3N0YXJ0VGV4dCxyPW4ubGVuZ3RoLG89dGhpcy5nZXRUZXh0KCksaT1vLmxlbmd0aDtm
b3IoZT0wO2U8ciYmbltlXT09PW9bZV07ZSsrKTt2YXIgYT1yLWU7Zm9yKHQ9MTt0PD1hJiZuW3It
dF09PT1vW2ktdF07dCsrKTt2YXIgcz10PjE/MS10OnZvaWQgMDtyZXR1cm4gdGhpcy5fZmFsbGJh
Y2tUZXh0PW8uc2xpY2UoZSxzKSx0aGlzLl9mYWxsYmFja1RleHR9fSksaS5hZGRQb29saW5nVG8o
ciksdC5leHBvcnRzPXJ9LHsxMDY6MTA2LDE0MzoxNDMsMjQ6MjR9XSwyMTpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExKSxvPXIuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BF
UlRZLGk9ci5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUsYT1yLmluamVjdGlvbi5IQVNfTlVN
RVJJQ19WQUxVRSxzPXIuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLHU9ci5p
bmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxsPXtpc0N1c3RvbUF0dHJpYnV0
ZTpSZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZChuZXcgUmVnRXhwKCJeKGRhdGF8YXJpYSktWyIr
ci5BVFRSSUJVVEVfTkFNRV9DSEFSKyJdKiQiKSksUHJvcGVydGllczp7YWNjZXB0OjAsYWNjZXB0
Q2hhcnNldDowLGFjY2Vzc0tleTowLGFjdGlvbjowLGFsbG93RnVsbFNjcmVlbjppLGFsbG93VHJh
bnNwYXJlbmN5OjAsYWx0OjAsYXM6MCxhc3luYzppLGF1dG9Db21wbGV0ZTowLGF1dG9QbGF5Omks
Y2FwdHVyZTppLGNlbGxQYWRkaW5nOjAsY2VsbFNwYWNpbmc6MCxjaGFyU2V0OjAsY2hhbGxlbmdl
OjAsY2hlY2tlZDpvfGksY2l0ZTowLGNsYXNzSUQ6MCxjbGFzc05hbWU6MCxjb2xzOnMsY29sU3Bh
bjowLGNvbnRlbnQ6MCxjb250ZW50RWRpdGFibGU6MCxjb250ZXh0TWVudTowLGNvbnRyb2xzOmks
Y29vcmRzOjAsY3Jvc3NPcmlnaW46MCxkYXRhOjAsZGF0ZVRpbWU6MCxkZWZhdWx0OmksZGVmZXI6
aSxkaXI6MCxkaXNhYmxlZDppLGRvd25sb2FkOnUsZHJhZ2dhYmxlOjAsZW5jVHlwZTowLGZvcm06
MCxmb3JtQWN0aW9uOjAsZm9ybUVuY1R5cGU6MCxmb3JtTWV0aG9kOjAsZm9ybU5vVmFsaWRhdGU6
aSxmb3JtVGFyZ2V0OjAsZnJhbWVCb3JkZXI6MCxoZWFkZXJzOjAsaGVpZ2h0OjAsaGlkZGVuOmks
aGlnaDowLGhyZWY6MCxocmVmTGFuZzowLGh0bWxGb3I6MCxodHRwRXF1aXY6MCxpY29uOjAsaWQ6
MCxpbnB1dE1vZGU6MCxpbnRlZ3JpdHk6MCxpczowLGtleVBhcmFtczowLGtleVR5cGU6MCxraW5k
OjAsbGFiZWw6MCxsYW5nOjAsbGlzdDowLGxvb3A6aSxsb3c6MCxtYW5pZmVzdDowLG1hcmdpbkhl
aWdodDowLG1hcmdpbldpZHRoOjAsbWF4OjAsbWF4TGVuZ3RoOjAsbWVkaWE6MCxtZWRpYUdyb3Vw
OjAsbWV0aG9kOjAsbWluOjAsbWluTGVuZ3RoOjAsbXVsdGlwbGU6b3xpLG11dGVkOm98aSxuYW1l
OjAsbm9uY2U6MCxub1ZhbGlkYXRlOmksb3BlbjppLG9wdGltdW06MCxwYXR0ZXJuOjAscGxhY2Vo
b2xkZXI6MCxwbGF5c0lubGluZTppLHBvc3RlcjowLHByZWxvYWQ6MCxwcm9maWxlOjAscmFkaW9H
cm91cDowLHJlYWRPbmx5OmkscmVmZXJyZXJQb2xpY3k6MCxyZWw6MCxyZXF1aXJlZDppLHJldmVy
c2VkOmkscm9sZTowLHJvd3M6cyxyb3dTcGFuOmEsc2FuZGJveDowLHNjb3BlOjAsc2NvcGVkOmks
c2Nyb2xsaW5nOjAsc2VhbWxlc3M6aSxzZWxlY3RlZDpvfGksc2hhcGU6MCxzaXplOnMsc2l6ZXM6
MCxzcGFuOnMsc3BlbGxDaGVjazowLHNyYzowLHNyY0RvYzowLHNyY0xhbmc6MCxzcmNTZXQ6MCxz
dGFydDphLHN0ZXA6MCxzdHlsZTowLHN1bW1hcnk6MCx0YWJJbmRleDowLHRhcmdldDowLHRpdGxl
OjAsdHlwZTowLHVzZU1hcDowLHZhbHVlOjAsd2lkdGg6MCx3bW9kZTowLHdyYXA6MCxhYm91dDow
LGRhdGF0eXBlOjAsaW5saXN0OjAscHJlZml4OjAscHJvcGVydHk6MCxyZXNvdXJjZTowLHR5cGVv
ZjowLHZvY2FiOjAsYXV0b0NhcGl0YWxpemU6MCxhdXRvQ29ycmVjdDowLGF1dG9TYXZlOjAsY29s
b3I6MCxpdGVtUHJvcDowLGl0ZW1TY29wZTppLGl0ZW1UeXBlOjAsaXRlbUlEOjAsaXRlbVJlZjow
LHJlc3VsdHM6MCxzZWN1cml0eTowLHVuc2VsZWN0YWJsZTowfSxET01BdHRyaWJ1dGVOYW1lczp7
YWNjZXB0Q2hhcnNldDoiYWNjZXB0LWNoYXJzZXQiLGNsYXNzTmFtZToiY2xhc3MiLGh0bWxGb3I6
ImZvciIsaHR0cEVxdWl2OiJodHRwLWVxdWl2In0sRE9NUHJvcGVydHlOYW1lczp7fSxET01NdXRh
dGlvbk1ldGhvZHM6e3ZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYobnVsbD09dClyZXR1cm4gZS5yZW1v
dmVBdHRyaWJ1dGUoInZhbHVlIik7Im51bWJlciIhPT1lLnR5cGV8fCExPT09ZS5oYXNBdHRyaWJ1
dGUoInZhbHVlIik/ZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KTplLnZhbGlkaXR5JiYhZS52
YWxpZGl0eS5iYWRJbnB1dCYmZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1lJiZlLnNl
dEF0dHJpYnV0ZSgidmFsdWUiLCIiK3QpfX19O3QuZXhwb3J0cz1sfSx7MTE6MTF9XSwyMjpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXsiPSI6Ij0wIiwi
OiI6Ij0yIn07cmV0dXJuIiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0
dXJuIHRbZV19KX1mdW5jdGlvbiBvKGUpe3ZhciB0PXsiPTAiOiI9IiwiPTIiOiI6In07cmV0dXJu
KCIiKygiLiI9PT1lWzBdJiYiJCI9PT1lWzFdP2Uuc3Vic3RyaW5nKDIpOmUuc3Vic3RyaW5nKDEp
KSkucmVwbGFjZSgvKD0wfD0yKS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9dmFyIGk9e2Vz
Y2FwZTpyLHVuZXNjYXBlOm99O3QuZXhwb3J0cz1pfSx7fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtudWxsIT1lLmNoZWNrZWRMaW5rJiZudWxsIT1lLnZh
bHVlTGluayYmcygiODciKX1mdW5jdGlvbiBvKGUpe3IoZSksKG51bGwhPWUudmFsdWV8fG51bGwh
PWUub25DaGFuZ2UpJiZzKCI4OCIpfWZ1bmN0aW9uIGkoZSl7cihlKSwobnVsbCE9ZS5jaGVja2Vk
fHxudWxsIT1lLm9uQ2hhbmdlKSYmcygiODkiKX1mdW5jdGlvbiBhKGUpe2lmKGUpe3ZhciB0PWUu
Z2V0TmFtZSgpO2lmKHQpcmV0dXJuIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJg
LiJ9cmV0dXJuIiJ9dmFyIHM9ZSgxMTIpLHU9ZSg2NCksbD1lKDE0NSksYz1lKDEyMCkscD1sKGMu
aXNWYWxpZEVsZW1lbnQpLGQ9KGUoMTM3KSxlKDE0Mikse2J1dHRvbjohMCxjaGVja2JveDohMCxp
bWFnZTohMCxoaWRkZW46ITAscmFkaW86ITAscmVzZXQ6ITAsc3VibWl0OiEwfSksZj17dmFsdWU6
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiFlW3RdfHxkW2UudHlwZV18fGUub25DaGFuZ2V8fGUucmVh
ZE9ubHl8fGUuZGlzYWJsZWQ/bnVsbDpuZXcgRXJyb3IoIllvdSBwcm92aWRlZCBhIGB2YWx1ZWAg
cHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMg
d2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0
YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2Vg
IG9yIGByZWFkT25seWAuIil9LGNoZWNrZWQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiFlW3RdfHxl
Lm9uQ2hhbmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9yKCJZb3UgcHJv
dmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFu
Z2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBm
aWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCBz
ZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4iKX0sb25DaGFuZ2U6cC5mdW5jfSxo
PXt9LG09e2NoZWNrUHJvcFR5cGVzOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIgaW4gZil7aWYo
Zi5oYXNPd25Qcm9wZXJ0eShyKSl2YXIgbz1mW3JdKHQscixlLCJwcm9wIixudWxsLHUpO28gaW5z
dGFuY2VvZiBFcnJvciYmIShvLm1lc3NhZ2UgaW4gaCkmJihoW28ubWVzc2FnZV09ITAsYShuKSl9
fSxnZXRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxp
bmsudmFsdWUpOmUudmFsdWV9LGdldENoZWNrZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hlY2tl
ZExpbms/KGkoZSksZS5jaGVja2VkTGluay52YWx1ZSk6ZS5jaGVja2VkfSxleGVjdXRlT25DaGFu
Z2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZUxpbms/KG8oZSksZS52YWx1ZUxpbmsucmVx
dWVzdENoYW5nZSh0LnRhcmdldC52YWx1ZSkpOmUuY2hlY2tlZExpbms/KGkoZSksZS5jaGVja2Vk
TGluay5yZXF1ZXN0Q2hhbmdlKHQudGFyZ2V0LmNoZWNrZWQpKTplLm9uQ2hhbmdlP2Uub25DaGFu
Z2UuY2FsbCh2b2lkIDAsdCk6dm9pZCAwfX07dC5leHBvcnRzPW19LHsxMTI6MTEyLDEyMDoxMjAs
MTM3OjEzNywxNDI6MTQyLDE0NToxNDUsNjQ6NjR9XSwyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj1lKDExMiksbz0oZSgxMzcpLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYo
dC5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbj10Lmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4g
dC5jYWxsKG4sZSksbn1yZXR1cm4gbmV3IHQoZSl9KSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhp
cztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3Jl
dHVybiBuLmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LGE9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9v
bC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5ldyByKGUsdCxuKX0scz1m
dW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzO2lmKG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFy
IGk9by5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG8uY2FsbChpLGUsdCxuLHIpLGl9cmV0dXJu
IG5ldyBvKGUsdCxuLHIpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSBpbnN0YW5jZW9mIHR8
fHIoIjI1IiksZS5kZXN0cnVjdG9yKCksdC5pbnN0YW5jZVBvb2wubGVuZ3RoPHQucG9vbFNpemUm
JnQuaW5zdGFuY2VQb29sLnB1c2goZSl9LGw9byxjPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtyZXR1
cm4gbi5pbnN0YW5jZVBvb2w9W10sbi5nZXRQb29sZWQ9dHx8bCxuLnBvb2xTaXplfHwobi5wb29s
U2l6ZT0xMCksbi5yZWxlYXNlPXUsbn0scD17YWRkUG9vbGluZ1RvOmMsb25lQXJndW1lbnRQb29s
ZXI6byx0d29Bcmd1bWVudFBvb2xlcjppLHRocmVlQXJndW1lbnRQb29sZXI6YSxmb3VyQXJndW1l
bnRQb29sZXI6c307dC5leHBvcnRzPXB9LHsxMTI6MTEyLDEzNzoxMzd9XSwyNTpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwoZSxtKXx8KGVbbV09ZisrLHBbZVttXV09e30pLHBbZVttXV19
dmFyIG8saT1lKDE0MyksYT1lKDE3KSxzPWUoNTEpLHU9ZSg5MCksbD1lKDEwNyksYz1lKDEwOSks
cD17fSxkPSExLGY9MCxoPXt0b3BBYm9ydDoiYWJvcnQiLHRvcEFuaW1hdGlvbkVuZDpsKCJhbmlt
YXRpb25lbmQiKXx8ImFuaW1hdGlvbmVuZCIsdG9wQW5pbWF0aW9uSXRlcmF0aW9uOmwoImFuaW1h
dGlvbml0ZXJhdGlvbiIpfHwiYW5pbWF0aW9uaXRlcmF0aW9uIix0b3BBbmltYXRpb25TdGFydDps
KCJhbmltYXRpb25zdGFydCIpfHwiYW5pbWF0aW9uc3RhcnQiLHRvcEJsdXI6ImJsdXIiLHRvcENh
blBsYXk6ImNhbnBsYXkiLHRvcENhblBsYXlUaHJvdWdoOiJjYW5wbGF5dGhyb3VnaCIsdG9wQ2hh
bmdlOiJjaGFuZ2UiLHRvcENsaWNrOiJjbGljayIsdG9wQ29tcG9zaXRpb25FbmQ6ImNvbXBvc2l0
aW9uZW5kIix0b3BDb21wb3NpdGlvblN0YXJ0OiJjb21wb3NpdGlvbnN0YXJ0Iix0b3BDb21wb3Np
dGlvblVwZGF0ZToiY29tcG9zaXRpb251cGRhdGUiLHRvcENvbnRleHRNZW51OiJjb250ZXh0bWVu
dSIsdG9wQ29weToiY29weSIsdG9wQ3V0OiJjdXQiLHRvcERvdWJsZUNsaWNrOiJkYmxjbGljayIs
dG9wRHJhZzoiZHJhZyIsdG9wRHJhZ0VuZDoiZHJhZ2VuZCIsdG9wRHJhZ0VudGVyOiJkcmFnZW50
ZXIiLHRvcERyYWdFeGl0OiJkcmFnZXhpdCIsdG9wRHJhZ0xlYXZlOiJkcmFnbGVhdmUiLHRvcERy
YWdPdmVyOiJkcmFnb3ZlciIsdG9wRHJhZ1N0YXJ0OiJkcmFnc3RhcnQiLHRvcERyb3A6ImRyb3Ai
LHRvcER1cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIs
dG9wRW5jcnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9y
IiwKK3RvcEZvY3VzOiJmb2N1cyIsdG9wSW5wdXQ6ImlucHV0Iix0b3BLZXlEb3duOiJrZXlkb3du
Iix0b3BLZXlQcmVzczoia2V5cHJlc3MiLHRvcEtleVVwOiJrZXl1cCIsdG9wTG9hZGVkRGF0YToi
bG9hZGVkZGF0YSIsdG9wTG9hZGVkTWV0YWRhdGE6ImxvYWRlZG1ldGFkYXRhIix0b3BMb2FkU3Rh
cnQ6ImxvYWRzdGFydCIsdG9wTW91c2VEb3duOiJtb3VzZWRvd24iLHRvcE1vdXNlTW92ZToibW91
c2Vtb3ZlIix0b3BNb3VzZU91dDoibW91c2VvdXQiLHRvcE1vdXNlT3ZlcjoibW91c2VvdmVyIix0
b3BNb3VzZVVwOiJtb3VzZXVwIix0b3BQYXN0ZToicGFzdGUiLHRvcFBhdXNlOiJwYXVzZSIsdG9w
UGxheToicGxheSIsdG9wUGxheWluZzoicGxheWluZyIsdG9wUHJvZ3Jlc3M6InByb2dyZXNzIix0
b3BSYXRlQ2hhbmdlOiJyYXRlY2hhbmdlIix0b3BTY3JvbGw6InNjcm9sbCIsdG9wU2Vla2VkOiJz
ZWVrZWQiLHRvcFNlZWtpbmc6InNlZWtpbmciLHRvcFNlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9u
Y2hhbmdlIix0b3BTdGFsbGVkOiJzdGFsbGVkIix0b3BTdXNwZW5kOiJzdXNwZW5kIix0b3BUZXh0
SW5wdXQ6InRleHRJbnB1dCIsdG9wVGltZVVwZGF0ZToidGltZXVwZGF0ZSIsdG9wVG91Y2hDYW5j
ZWw6InRvdWNoY2FuY2VsIix0b3BUb3VjaEVuZDoidG91Y2hlbmQiLHRvcFRvdWNoTW92ZToidG91
Y2htb3ZlIix0b3BUb3VjaFN0YXJ0OiJ0b3VjaHN0YXJ0Iix0b3BUcmFuc2l0aW9uRW5kOmwoInRy
YW5zaXRpb25lbmQiKXx8InRyYW5zaXRpb25lbmQiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hh
bmdlIix0b3BXYWl0aW5nOiJ3YWl0aW5nIix0b3BXaGVlbDoid2hlZWwifSxtPSJfcmVhY3RMaXN0
ZW5lcnNJRCIrU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpLHY9aSh7fSxzLHtSZWFjdEV2
ZW50TGlzdGVuZXI6bnVsbCxpbmplY3Rpb246e2luamVjdFJlYWN0RXZlbnRMaXN0ZW5lcjpmdW5j
dGlvbihlKXtlLnNldEhhbmRsZVRvcExldmVsKHYuaGFuZGxlVG9wTGV2ZWwpLHYuUmVhY3RFdmVu
dExpc3RlbmVyPWV9fSxzZXRFbmFibGVkOmZ1bmN0aW9uKGUpe3YuUmVhY3RFdmVudExpc3RlbmVy
JiZ2LlJlYWN0RXZlbnRMaXN0ZW5lci5zZXRFbmFibGVkKGUpfSxpc0VuYWJsZWQ6ZnVuY3Rpb24o
KXtyZXR1cm4hKCF2LlJlYWN0RXZlbnRMaXN0ZW5lcnx8IXYuUmVhY3RFdmVudExpc3RlbmVyLmlz
RW5hYmxlZCgpKX0sbGlzdGVuVG86ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dCxvPXIobiksaT1h
LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbZV0scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIg
dT1pW3NdO28uaGFzT3duUHJvcGVydHkodSkmJm9bdV18fCgidG9wV2hlZWwiPT09dT9jKCJ3aGVl
bCIpP3YuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcFdoZWVsIiwid2hl
ZWwiLG4pOmMoIm1vdXNld2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2
ZW50KCJ0b3BXaGVlbCIsIm1vdXNld2hlZWwiLG4pOnYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBC
dWJibGVkRXZlbnQoInRvcFdoZWVsIiwiRE9NTW91c2VTY3JvbGwiLG4pOiJ0b3BTY3JvbGwiPT09
dT9jKCJzY3JvbGwiLCEwKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgi
dG9wU2Nyb2xsIiwic2Nyb2xsIixuKTp2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2
ZW50KCJ0b3BTY3JvbGwiLCJzY3JvbGwiLHYuUmVhY3RFdmVudExpc3RlbmVyLldJTkRPV19IQU5E
TEUpOiJ0b3BGb2N1cyI9PT11fHwidG9wQmx1ciI9PT11PyhjKCJmb2N1cyIsITApPyh2LlJlYWN0
RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudCgidG9wRm9jdXMiLCJmb2N1cyIsbiksdi5S
ZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcEJsdXIiLCJibHVyIixuKSk6
YygiZm9jdXNpbiIpJiYodi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9w
Rm9jdXMiLCJmb2N1c2luIixuKSx2LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50
KCJ0b3BCbHVyIiwiZm9jdXNvdXQiLG4pKSxvLnRvcEJsdXI9ITAsby50b3BGb2N1cz0hMCk6aC5o
YXNPd25Qcm9wZXJ0eSh1KSYmdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCh1
LGhbdV0sbiksb1t1XT0hMCl9fSx0cmFwQnViYmxlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChlLHQsbil9LHRyYXBDYXB0
dXJlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5SZWFjdEV2ZW50TGlzdGVuZXIudHJh
cENhcHR1cmVkRXZlbnQoZSx0LG4pfSxzdXBwb3J0c0V2ZW50UGFnZVhZOmZ1bmN0aW9uKCl7aWYo
IWRvY3VtZW50LmNyZWF0ZUV2ZW50KXJldHVybiExO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUV2ZW50
KCJNb3VzZUV2ZW50Iik7cmV0dXJuIG51bGwhPWUmJiJwYWdlWCJpbiBlfSxlbnN1cmVTY3JvbGxW
YWx1ZU1vbml0b3Jpbmc6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1vJiYobz12LnN1cHBvcnRzRXZl
bnRQYWdlWFkoKSksIW8mJiFkKXt2YXIgZT11LnJlZnJlc2hTY3JvbGxWYWx1ZXM7di5SZWFjdEV2
ZW50TGlzdGVuZXIubW9uaXRvclNjcm9sbFZhbHVlKGUpLGQ9ITB9fX0pO3QuZXhwb3J0cz12fSx7
MTA3OjEwNywxMDk6MTA5LDE0MzoxNDMsMTc6MTcsNTE6NTEsOTA6OTB9XSwyNjpbZnVuY3Rpb24o
ZSx0LG4peyhmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXt2YXIg
bz12b2lkIDA9PT1lW25dO251bGwhPXQmJm8mJihlW25dPWkodCwhMCkpfXZhciBvPWUoNjYpLGk9
ZSgxMDgpLGE9KGUoMjIpLGUoMTE2KSkscz1lKDExNyk7ZSgxNDIpO3ZvaWQgMCE9PW4mJm4uZW52
O3ZhciB1PXtpbnN0YW50aWF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuLG8pe2lmKG51bGw9PWUp
cmV0dXJuIG51bGw7dmFyIGk9e307cmV0dXJuIHMoZSxyLGkpLGl9LHVwZGF0ZUNoaWxkcmVuOmZ1
bmN0aW9uKGUsdCxuLHIscyx1LGwsYyxwKXtpZih0fHxlKXt2YXIgZCxmO2ZvcihkIGluIHQpaWYo
dC5oYXNPd25Qcm9wZXJ0eShkKSl7Zj1lJiZlW2RdO3ZhciBoPWYmJmYuX2N1cnJlbnRFbGVtZW50
LG09dFtkXTtpZihudWxsIT1mJiZhKGgsbSkpby5yZWNlaXZlQ29tcG9uZW50KGYsbSxzLGMpLHRb
ZF09ZjtlbHNle2YmJihyW2RdPW8uZ2V0SG9zdE5vZGUoZiksby51bm1vdW50Q29tcG9uZW50KGYs
ITEpKTt2YXIgdj1pKG0sITApO3RbZF09djt2YXIgZz1vLm1vdW50Q29tcG9uZW50KHYscyx1LGws
YyxwKTtuLnB1c2goZyl9fWZvcihkIGluIGUpIWUuaGFzT3duUHJvcGVydHkoZCl8fHQmJnQuaGFz
T3duUHJvcGVydHkoZCl8fChmPWVbZF0scltkXT1vLmdldEhvc3ROb2RlKGYpLG8udW5tb3VudENv
bXBvbmVudChmLCExKSl9fSx1bm1vdW50Q2hpbGRyZW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4g
aW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1lW25dO28udW5tb3VudENvbXBvbmVu
dChyLHQpfX19O3QuZXhwb3J0cz11fSkuY2FsbCh0aGlzLHZvaWQgMCl9LHsxMDg6MTA4LDExNjox
MTYsMTE3OjExNywxNDI6MTQyLDIyOjIyLDY2OjY2fV0sMjc6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ZSg4KSxvPWUoMzcpLGk9e3Byb2Nlc3NDaGlsZHJlblVwZGF0ZXM6by5k
YW5nZXJvdXNseVByb2Nlc3NDaGlsZHJlblVwZGF0ZXMscmVwbGFjZU5vZGVXaXRoTWFya3VwOnIu
ZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXB9O3QuZXhwb3J0cz1pfSx7Mzc6MzcsODo4
fV0sMjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3
KSwhMSksaT17cmVwbGFjZU5vZGVXaXRoTWFya3VwOm51bGwscHJvY2Vzc0NoaWxkcmVuVXBkYXRl
czpudWxsLGluamVjdGlvbjp7aW5qZWN0RW52aXJvbm1lbnQ6ZnVuY3Rpb24oZSl7byYmcigiMTA0
IiksaS5yZXBsYWNlTm9kZVdpdGhNYXJrdXA9ZS5yZXBsYWNlTm9kZVdpdGhNYXJrdXAsaS5wcm9j
ZXNzQ2hpbGRyZW5VcGRhdGVzPWUucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxvPSEwfX19O3QuZXhw
b3J0cz1pfSx7MTEyOjExMiwxMzc6MTM3fV0sMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXt9ZnVuY3Rpb24gbyhlKXtyZXR1cm4hKCFlLnByb3RvdHlwZXx8IWUu
cHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuISghZS5wcm90
b3R5cGV8fCFlLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCl9dmFyIGE9ZSgxMTIpLHM9
ZSgxNDMpLHU9ZSgxMjApLGw9ZSgyOCksYz1lKDExOSkscD1lKDUwKSxkPWUoNTcpLGY9KGUoNTgp
LGUoNjIpKSxoPWUoNjYpLG09ZSgxMzApLHY9KGUoMTM3KSxlKDE0MSkpLGc9ZSgxMTYpLHk9KGUo
MTQyKSx7SW1wdXJlQ2xhc3M6MCxQdXJlQ2xhc3M6MSxTdGF0ZWxlc3NGdW5jdGlvbmFsOjJ9KTty
LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1kLmdldCh0aGlzKS5fY3VycmVudEVs
ZW1lbnQudHlwZSx0PWUodGhpcy5wcm9wcyx0aGlzLmNvbnRleHQsdGhpcy51cGRhdGVyKTtyZXR1
cm4gdH07dmFyIF89MSxDPXtjb25zdHJ1Y3Q6ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVsZW1l
bnQ9ZSx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fY29tcG9zaXRlVHlwZT1udWxsLHRoaXMuX2lu
c3RhbmNlPW51bGwsdGhpcy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2hvc3RDb250YWluZXJJbmZv
PW51bGwsdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXI9bnVsbCx0aGlzLl9wZW5kaW5nRWxlbWVudD1u
dWxsLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0
ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5fcmVuZGVyZWROb2RlVHlwZT1u
dWxsLHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50PW51bGwsdGhpcy5fY29udGV4dD1udWxsLHRoaXMu
X21vdW50T3JkZXI9MCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCx0aGlzLl9wZW5kaW5nQ2Fs
bGJhY2tzPW51bGwsdGhpcy5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQ9ITF9LG1vdW50Q29t
cG9uZW50OmZ1bmN0aW9uKGUsdCxuLHMpe3RoaXMuX2NvbnRleHQ9cyx0aGlzLl9tb3VudE9yZGVy
PV8rKyx0aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5faG9zdENvbnRhaW5lckluZm89bjt2YXIgbCxj
PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLHA9dGhpcy5fcHJvY2Vzc0NvbnRleHQocyksZj10
aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLGg9ZS5nZXRVcGRhdGVRdWV1ZSgpLHY9byhmKSxnPXRo
aXMuX2NvbnN0cnVjdENvbXBvbmVudCh2LGMscCxoKTt2fHxudWxsIT1nJiZudWxsIT1nLnJlbmRl
cj9pKGYpP3RoaXMuX2NvbXBvc2l0ZVR5cGU9eS5QdXJlQ2xhc3M6dGhpcy5fY29tcG9zaXRlVHlw
ZT15LkltcHVyZUNsYXNzOihsPWcsbnVsbD09PWd8fCExPT09Z3x8dS5pc1ZhbGlkRWxlbWVudChn
KXx8YSgiMTA1IixmLmRpc3BsYXlOYW1lfHxmLm5hbWV8fCJDb21wb25lbnQiKSxnPW5ldyByKGYp
LHRoaXMuX2NvbXBvc2l0ZVR5cGU9eS5TdGF0ZWxlc3NGdW5jdGlvbmFsKSxnLnByb3BzPWMsZy5j
b250ZXh0PXAsZy5yZWZzPW0sZy51cGRhdGVyPWgsdGhpcy5faW5zdGFuY2U9ZyxkLnNldChnLHRo
aXMpO3ZhciBDPWcuc3RhdGU7dm9pZCAwPT09QyYmKGcuc3RhdGU9Qz1udWxsKSwoIm9iamVjdCIh
PXR5cGVvZiBDfHxBcnJheS5pc0FycmF5KEMpKSYmYSgiMTA2Iix0aGlzLmdldE5hbWUoKXx8IlJl
YWN0Q29tcG9zaXRlQ29tcG9uZW50IiksdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCx0aGlz
Ll9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMTt2YXIg
YjtyZXR1cm4gYj1nLnVuc3RhYmxlX2hhbmRsZUVycm9yP3RoaXMucGVyZm9ybUluaXRpYWxNb3Vu
dFdpdGhFcnJvckhhbmRsaW5nKGwsdCxuLGUscyk6dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGws
dCxuLGUscyksZy5jb21wb25lbnREaWRNb3VudCYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1
ZXVlKGcuY29tcG9uZW50RGlkTW91bnQsZyksYn0sX2NvbnN0cnVjdENvbXBvbmVudDpmdW5jdGlv
bihlLHQsbixyKXtyZXR1cm4gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGUs
dCxuLHIpfSxfY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyOmZ1bmN0aW9uKGUsdCxuLHIp
e3ZhciBvPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7cmV0dXJuIGU/bmV3IG8odCxuLHIpOm8o
dCxuLHIpfSxwZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmc6ZnVuY3Rpb24oZSx0
LG4scixvKXt2YXIgaSxhPXIuY2hlY2twb2ludCgpO3RyeXtpPXRoaXMucGVyZm9ybUluaXRpYWxN
b3VudChlLHQsbixyLG8pfWNhdGNoKHMpe3Iucm9sbGJhY2soYSksdGhpcy5faW5zdGFuY2UudW5z
dGFibGVfaGFuZGxlRXJyb3IocyksdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUmJih0aGlzLl9pbnN0
YW5jZS5zdGF0ZT10aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKHRoaXMuX2luc3RhbmNlLnByb3Bz
LHRoaXMuX2luc3RhbmNlLmNvbnRleHQpKSxhPXIuY2hlY2twb2ludCgpLHRoaXMuX3JlbmRlcmVk
Q29tcG9uZW50LnVubW91bnRDb21wb25lbnQoITApLHIucm9sbGJhY2soYSksaT10aGlzLnBlcmZv
cm1Jbml0aWFsTW91bnQoZSx0LG4scixvKX1yZXR1cm4gaX0scGVyZm9ybUluaXRpYWxNb3VudDpm
dW5jdGlvbihlLHQsbixyLG8pe3ZhciBpPXRoaXMuX2luc3RhbmNlO2kuY29tcG9uZW50V2lsbE1v
dW50JiYoaS5jb21wb25lbnRXaWxsTW91bnQoKSx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSYmKGku
c3RhdGU9dGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShpLnByb3BzLGkuY29udGV4dCkpKSx2b2lk
IDA9PT1lJiYoZT10aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoKSk7dmFyIGE9Zi5nZXRU
eXBlKGUpO3RoaXMuX3JlbmRlcmVkTm9kZVR5cGU9YTt2YXIgcz10aGlzLl9pbnN0YW50aWF0ZVJl
YWN0Q29tcG9uZW50KGUsYSE9PWYuRU1QVFkpO3JldHVybiB0aGlzLl9yZW5kZXJlZENvbXBvbmVu
dD1zLGgubW91bnRDb21wb25lbnQocyxyLHQsbix0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KG8p
LDApfSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBoLmdldEhvc3ROb2RlKHRoaXMuX3Jl
bmRlcmVkQ29tcG9uZW50KX0sdW5tb3VudENvbXBvbmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9y
ZW5kZXJlZENvbXBvbmVudCl7dmFyIHQ9dGhpcy5faW5zdGFuY2U7aWYodC5jb21wb25lbnRXaWxs
VW5tb3VudCYmIXQuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50KWlmKHQuX2NhbGxlZENvbXBv
bmVudFdpbGxVbm1vdW50PSEwLGUpe3ZhciBuPXRoaXMuZ2V0TmFtZSgpKyIuY29tcG9uZW50V2ls
bFVubW91bnQoKSI7cC5pbnZva2VHdWFyZGVkQ2FsbGJhY2sobix0LmNvbXBvbmVudFdpbGxVbm1v
dW50LmJpbmQodCkpfWVsc2UgdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO3RoaXMuX3JlbmRlcmVk
Q29tcG9uZW50JiYoaC51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LGUp
LHRoaXMuX3JlbmRlcmVkTm9kZVR5cGU9bnVsbCx0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1udWxs
LHRoaXMuX2luc3RhbmNlPW51bGwpLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5f
cGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhpcy5f
cGVuZGluZ0NhbGxiYWNrcz1udWxsLHRoaXMuX3BlbmRpbmdFbGVtZW50PW51bGwsdGhpcy5fY29u
dGV4dD1udWxsLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCxk
LnJlbW92ZSh0KX19LF9tYXNrQ29udGV4dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jdXJyZW50
RWxlbWVudC50eXBlLG49dC5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIG07dmFyIHI9e307Zm9y
KHZhciBvIGluIG4pcltvXT1lW29dO3JldHVybiByfSxfcHJvY2Vzc0NvbnRleHQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuX21hc2tDb250ZXh0KGUpfSxfcHJvY2Vzc0NoaWxkQ29udGV4dDpmdW5j
dGlvbihlKXt2YXIgdCxuPXRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUscj10aGlzLl9pbnN0YW5j
ZTtpZihyLmdldENoaWxkQ29udGV4dCYmKHQ9ci5nZXRDaGlsZENvbnRleHQoKSksdCl7Im9iamVj
dCIhPXR5cGVvZiBuLmNoaWxkQ29udGV4dFR5cGVzJiZhKCIxMDciLHRoaXMuZ2V0TmFtZSgpfHwi
UmVhY3RDb21wb3NpdGVDb21wb25lbnQiKTtmb3IodmFyIG8gaW4gdClvIGluIG4uY2hpbGRDb250
ZXh0VHlwZXN8fGEoIjEwOCIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCIsbyk7cmV0dXJuIHMoe30sZSx0KX1yZXR1cm4gZX0sX2NoZWNrQ29udGV4dFR5cGVzOmZ1bmN0
aW9uKGUsdCxuKXt9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMu
X2N1cnJlbnRFbGVtZW50LG89dGhpcy5fY29udGV4dDt0aGlzLl9wZW5kaW5nRWxlbWVudD1udWxs
LHRoaXMudXBkYXRlQ29tcG9uZW50KHQscixlLG8sbil9LHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2Fy
eTpmdW5jdGlvbihlKXtudWxsIT10aGlzLl9wZW5kaW5nRWxlbWVudD9oLnJlY2VpdmVDb21wb25l
bnQodGhpcyx0aGlzLl9wZW5kaW5nRWxlbWVudCxlLHRoaXMuX2NvbnRleHQpOm51bGwhPT10aGlz
Ll9wZW5kaW5nU3RhdGVRdWV1ZXx8dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlP3RoaXMudXBkYXRl
Q29tcG9uZW50KGUsdGhpcy5fY3VycmVudEVsZW1lbnQsdGhpcy5fY3VycmVudEVsZW1lbnQsdGhp
cy5fY29udGV4dCx0aGlzLl9jb250ZXh0KTp0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxsfSx1
cGRhdGVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzLl9pbnN0YW5jZTtu
dWxsPT1pJiZhKCIxMzYiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQi
KTt2YXIgcyx1PSExO3RoaXMuX2NvbnRleHQ9PT1vP3M9aS5jb250ZXh0OihzPXRoaXMuX3Byb2Nl
c3NDb250ZXh0KG8pLHU9ITApO3ZhciBsPXQucHJvcHMsYz1uLnByb3BzO3QhPT1uJiYodT0hMCks
dSYmaS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJv
cHMoYyxzKTt2YXIgcD10aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGMscyksZD0hMDt0aGlzLl9w
ZW5kaW5nRm9yY2VVcGRhdGV8fChpLnNob3VsZENvbXBvbmVudFVwZGF0ZT9kPWkuc2hvdWxkQ29t
cG9uZW50VXBkYXRlKGMscCxzKTp0aGlzLl9jb21wb3NpdGVUeXBlPT09eS5QdXJlQ2xhc3MmJihk
PSF2KGwsYyl8fCF2KGkuc3RhdGUscCkpKSx0aGlzLl91cGRhdGVCYXRjaE51bWJlcj1udWxsLGQ/
KHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZT0hMSx0aGlzLl9wZXJmb3JtQ29tcG9uZW50VXBkYXRl
KG4sYyxwLHMsZSxvKSk6KHRoaXMuX2N1cnJlbnRFbGVtZW50PW4sdGhpcy5fY29udGV4dD1vLGku
cHJvcHM9YyxpLnN0YXRlPXAsaS5jb250ZXh0PXMpfSxfcHJvY2Vzc1BlbmRpbmdTdGF0ZTpmdW5j
dGlvbihlLHQpe3ZhciBuPXRoaXMuX2luc3RhbmNlLHI9dGhpcy5fcGVuZGluZ1N0YXRlUXVldWUs
bz10aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlO2lmKHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9
ITEsdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU9bnVsbCwhcilyZXR1cm4gbi5zdGF0ZTtpZihvJiYx
PT09ci5sZW5ndGgpcmV0dXJuIHJbMF07Zm9yKHZhciBpPXMoe30sbz9yWzBdOm4uc3RhdGUpLGE9
bz8xOjA7YTxyLmxlbmd0aDthKyspe3ZhciB1PXJbYV07cyhpLCJmdW5jdGlvbiI9PXR5cGVvZiB1
P3UuY2FsbChuLGksZSx0KTp1KX1yZXR1cm4gaX0sX3BlcmZvcm1Db21wb25lbnRVcGRhdGU6ZnVu
Y3Rpb24oZSx0LG4scixvLGkpe3ZhciBhLHMsdSxsPXRoaXMuX2luc3RhbmNlLGM9Qm9vbGVhbihs
LmNvbXBvbmVudERpZFVwZGF0ZSk7YyYmKGE9bC5wcm9wcyxzPWwuc3RhdGUsdT1sLmNvbnRleHQp
LGwuY29tcG9uZW50V2lsbFVwZGF0ZSYmbC5jb21wb25lbnRXaWxsVXBkYXRlKHQsbixyKSx0aGlz
Ll9jdXJyZW50RWxlbWVudD1lLHRoaXMuX2NvbnRleHQ9aSxsLnByb3BzPXQsbC5zdGF0ZT1uLGwu
Y29udGV4dD1yLHRoaXMuX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50KG8saSksYyYmby5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKGwuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQobCxhLHMsdSks
bCl9LF91cGRhdGVSZW5kZXJlZENvbXBvbmVudDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3Jl
bmRlcmVkQ29tcG9uZW50LHI9bi5fY3VycmVudEVsZW1lbnQsbz10aGlzLl9yZW5kZXJWYWxpZGF0
ZWRDb21wb25lbnQoKTtpZihnKHIsbykpaC5yZWNlaXZlQ29tcG9uZW50KG4sbyxlLHRoaXMuX3By
b2Nlc3NDaGlsZENvbnRleHQodCkpO2Vsc2V7dmFyIGk9aC5nZXRIb3N0Tm9kZShuKTtoLnVubW91
bnRDb21wb25lbnQobiwhMSk7dmFyIGE9Zi5nZXRUeXBlKG8pO3RoaXMuX3JlbmRlcmVkTm9kZVR5
cGU9YTt2YXIgcz10aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG8sYSE9PWYuRU1QVFkp
O3RoaXMuX3JlbmRlcmVkQ29tcG9uZW50PXM7dmFyIHU9aC5tb3VudENvbXBvbmVudChzLGUsdGhp
cy5faG9zdFBhcmVudCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbyx0aGlzLl9wcm9jZXNzQ2hpbGRD
b250ZXh0KHQpLDApO3RoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChpLHUsbil9fSxfcmVwbGFj
ZU5vZGVXaXRoTWFya3VwOmZ1bmN0aW9uKGUsdCxuKXtsLnJlcGxhY2VOb2RlV2l0aE1hcmt1cChl
LHQsbil9LF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5faW5zdGFuY2UucmVuZGVyKCl9LF9yZW5kZXJWYWxpZGF0ZWRD
b21wb25lbnQ6ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLl9jb21wb3NpdGVUeXBlIT09eS5TdGF0
ZWxlc3NGdW5jdGlvbmFsKXtjLmN1cnJlbnQ9dGhpczt0cnl7ZT10aGlzLl9yZW5kZXJWYWxpZGF0
ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQoKX1maW5hbGx5e2MuY3VycmVudD1udWxs
fX1lbHNlIGU9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250
ZXh0KCk7cmV0dXJuIG51bGw9PT1lfHwhMT09PWV8fHUuaXNWYWxpZEVsZW1lbnQoZSl8fGEoIjEw
OSIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLGV9LGF0dGFjaFJl
ZjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKTtudWxsPT1uJiZh
KCIxMTAiKTt2YXIgcj10LmdldFB1YmxpY0luc3RhbmNlKCk7KG4ucmVmcz09PW0/bi5yZWZzPXt9
Om4ucmVmcylbZV09cn0sZGV0YWNoUmVmOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmdldFB1Ymxp
Y0luc3RhbmNlKCkucmVmc1tlXX0sZ2V0TmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2N1cnJl
bnRFbGVtZW50LnR5cGUsdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuY29uc3RydWN0
b3I7cmV0dXJuIGUuZGlzcGxheU5hbWV8fHQmJnQuZGlzcGxheU5hbWV8fGUubmFtZXx8dCYmdC5u
YW1lfHxudWxsfSxnZXRQdWJsaWNJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2luc3Rh
bmNlO3JldHVybiB0aGlzLl9jb21wb3NpdGVUeXBlPT09eS5TdGF0ZWxlc3NGdW5jdGlvbmFsP251
bGw6ZX0sX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6bnVsbH07dC5leHBvcnRzPUN9LHsxMTI6
MTEyLDExNjoxMTYsMTE5OjExOSwxMjA6MTIwLDEzMDoxMzAsMTM3OjEzNywxNDE6MTQxLDE0Mjox
NDIsMTQzOjE0MywyODoyOCw1MDo1MCw1Nzo1Nyw1ODo1OCw2Mjo2Miw2Njo2Nn1dLDMwOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzMpLG89ZSg0NyksaT1lKDYwKSxhPWUo
NjYpLHM9ZSg3MSksdT1lKDcyKSxsPWUoOTYpLGM9ZSgxMDMpLHA9ZSgxMTMpO2UoMTQyKTtvLmlu
amVjdCgpO3ZhciBkPXtmaW5kRE9NTm9kZTpsLHJlbmRlcjppLnJlbmRlcix1bm1vdW50Q29tcG9u
ZW50QXROb2RlOmkudW5tb3VudENvbXBvbmVudEF0Tm9kZSx2ZXJzaW9uOnUsdW5zdGFibGVfYmF0
Y2hlZFVwZGF0ZXM6cy5iYXRjaGVkVXBkYXRlcyx1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0Nv
bnRhaW5lcjpwfTsidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hP
T0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5p
bmplY3QmJl9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qoe0NvbXBvbmVudFRy
ZWU6e2dldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOnIuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5v
ZGUsZ2V0Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5fcmVuZGVyZWRDb21w
b25lbnQmJihlPWMoZSkpLGU/ci5nZXROb2RlRnJvbUluc3RhbmNlKGUpOm51bGx9fSxNb3VudDpp
LFJlY29uY2lsZXI6YX0pO3QuZXhwb3J0cz1kfSx7MTAzOjEwMywxMTM6MTEzLDE0MjoxNDIsMzM6
MzMsNDc6NDcsNjA6NjAsNjY6NjYsNzE6NzEsNzI6NzIsOTY6OTZ9XSwzMTpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVt
ZW50Ll9vd25lcnx8bnVsbDtpZih0KXt2YXIgbj10LmdldE5hbWUoKTtpZihuKXJldHVybiIgVGhp
cyBET00gbm9kZSB3YXMgcmVuZGVyZWQgYnkgYCIrbisiYC4ifX1yZXR1cm4iIn1mdW5jdGlvbiBv
KGUsdCl7dCYmKFlbZS5fdGFnXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3Vz
bHlTZXRJbm5lckhUTUwpJiZtKCIxMzciLGUuX3RhZyxlLl9jdXJyZW50RWxlbWVudC5fb3duZXI/
IiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAiK2UuX2N1cnJlbnRFbGVtZW50Ll9vd25lci5n
ZXROYW1lKCkrIi4iOiIiKSxudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYobnVsbCE9
dC5jaGlsZHJlbiYmbSgiNjAiKSwib2JqZWN0Ij09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5l
ckhUTUwmJkIgaW4gdC5kYW5nZXJvdXNseVNldElubmVySFRNTHx8bSgiNjEiKSksbnVsbCE9dC5z
dHlsZSYmIm9iamVjdCIhPXR5cGVvZiB0LnN0eWxlJiZtKCI2MiIscihlKSkpfWZ1bmN0aW9uIGko
ZSx0LG4scil7aWYoIShyIGluc3RhbmNlb2YgUikpe3ZhciBvPWUuX2hvc3RDb250YWluZXJJbmZv
LGk9by5fbm9kZSYmby5fbm9kZS5ub2RlVHlwZT09PUgscz1pP28uX25vZGU6by5fb3duZXJEb2N1
bWVudDtGKHQscyksci5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGEse2luc3Q6ZSxyZWdp
c3RyYXRpb25OYW1lOnQsbGlzdGVuZXI6bn0pfX1mdW5jdGlvbiBhKCl7dmFyIGU9dGhpczt4LnB1
dExpc3RlbmVyKGUuaW5zdCxlLnJlZ2lzdHJhdGlvbk5hbWUsZS5saXN0ZW5lcil9ZnVuY3Rpb24g
cygpe3ZhciBlPXRoaXM7Uy5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIHUoKXt2YXIgZT10
aGlzO0kucG9zdE1vdW50V3JhcHBlcihlKX1mdW5jdGlvbiBsKCl7dmFyIGU9dGhpcztOLnBvc3RN
b3VudFdyYXBwZXIoZSl9ZnVuY3Rpb24gYygpe3ZhciBlPXRoaXM7ZS5fcm9vdE5vZGVJRHx8bSgi
NjMiKTt2YXIgdD1VKGUpO3N3aXRjaCh0fHxtKCI2NCIpLGUuX3RhZyl7Y2FzZSJpZnJhbWUiOmNh
c2Uib2JqZWN0IjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZlbnQo
InRvcExvYWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6ZS5fd3Jh
cHBlclN0YXRlLmxpc3RlbmVycz1bXTtmb3IodmFyIG4gaW4gcSlxLmhhc093blByb3BlcnR5KG4p
JiZlLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzLnB1c2goVC50cmFwQnViYmxlZEV2ZW50KG4scVtu
XSx0KSk7YnJlYWs7Y2FzZSJzb3VyY2UiOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJh
cEJ1YmJsZWRFdmVudCgidG9wRXJyb3IiLCJlcnJvciIsdCldO2JyZWFrO2Nhc2UiaW1nIjplLl93
cmFwcGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZlbnQoInRvcEVycm9yIiwiZXJy
b3IiLHQpLFQudHJhcEJ1YmJsZWRFdmVudCgidG9wTG9hZCIsImxvYWQiLHQpXTticmVhaztjYXNl
ImZvcm0iOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJsZWRFdmVudCgidG9w
UmVzZXQiLCJyZXNldCIsdCksVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BTdWJtaXQiLCJzdWJtaXQi
LHQpXTticmVhaztjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6ZS5fd3Jh
cHBlclN0YXRlLmxpc3RlbmVycz1bVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BJbnZhbGlkIiwiaW52
YWxpZCIsdCldfX1mdW5jdGlvbiBwKCl7TS5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlv
biBkKGUpe0cuY2FsbChRLGUpfHwoWC50ZXN0KGUpfHxtKCI2NSIsZSksUVtlXT0hMCl9ZnVuY3Rp
b24gZihlLHQpe3JldHVybiBlLmluZGV4T2YoIi0iKT49MHx8bnVsbCE9dC5pc31mdW5jdGlvbiBo
KGUpe3ZhciB0PWUudHlwZTtkKHQpLHRoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fdGFnPXQu
dG9Mb3dlckNhc2UoKSx0aGlzLl9uYW1lc3BhY2VVUkk9bnVsbCx0aGlzLl9yZW5kZXJlZENoaWxk
cmVuPW51bGwsdGhpcy5fcHJldmlvdXNTdHlsZT1udWxsLHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5
PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5fcm9v
dE5vZGVJRD0wLHRoaXMuX2RvbUlEPTAsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlz
Ll93cmFwcGVyU3RhdGU9bnVsbCx0aGlzLl90b3BMZXZlbFdyYXBwZXI9bnVsbCx0aGlzLl9mbGFn
cz0wfXZhciBtPWUoMTEyKSx2PWUoMTQzKSxnPWUoMikseT1lKDUpLF89ZSg5KSxDPWUoMTApLGI9
ZSgxMSksRT1lKDEyKSx4PWUoMTYpLHc9ZSgxNyksVD1lKDI1KSxrPWUoMzIpLFA9ZSgzMyksUz1l
KDM4KSxOPWUoMzkpLE09ZSg0MCksST1lKDQzKSxPPShlKDU4KSxlKDYxKSksUj1lKDY4KSxBPShl
KDEyOSksZSg5NSkpLEQ9KGUoMTM3KSxlKDEwOSksZSgxNDEpLGUoMTE4KSxlKDE0MiksayksTD14
LmRlbGV0ZUxpc3RlbmVyLFU9UC5nZXROb2RlRnJvbUluc3RhbmNlLEY9VC5saXN0ZW5UbyxqPXcu
cmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsVj17c3RyaW5nOiEwLG51bWJlcjohMH0sQj0iX19odG1s
IixXPXtjaGlsZHJlbjpudWxsLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOm51bGwsc3VwcHJlc3ND
b250ZW50RWRpdGFibGVXYXJuaW5nOm51bGx9LEg9MTEscT17dG9wQWJvcnQ6ImFib3J0Iix0b3BD
YW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3VnaDoiY2FucGxheXRocm91Z2giLHRvcER1
cmF0aW9uQ2hhbmdlOiJkdXJhdGlvbmNoYW5nZSIsdG9wRW1wdGllZDoiZW1wdGllZCIsdG9wRW5j
cnlwdGVkOiJlbmNyeXB0ZWQiLHRvcEVuZGVkOiJlbmRlZCIsdG9wRXJyb3I6ImVycm9yIix0b3BM
b2FkZWREYXRhOiJsb2FkZWRkYXRhIix0b3BMb2FkZWRNZXRhZGF0YToibG9hZGVkbWV0YWRhdGEi
LHRvcExvYWRTdGFydDoibG9hZHN0YXJ0Iix0b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXki
LHRvcFBsYXlpbmc6InBsYXlpbmciLHRvcFByb2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5n
ZToicmF0ZWNoYW5nZSIsdG9wU2Vla2VkOiJzZWVrZWQiLHRvcFNlZWtpbmc6InNlZWtpbmciLHRv
cFN0YWxsZWQ6InN0YWxsZWQiLHRvcFN1c3BlbmQ6InN1c3BlbmQiLHRvcFRpbWVVcGRhdGU6InRp
bWV1cGRhdGUiLHRvcFZvbHVtZUNoYW5nZToidm9sdW1lY2hhbmdlIix0b3BXYWl0aW5nOiJ3YWl0
aW5nIn0sSz17YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6
ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAs
dHJhY2s6ITAsd2JyOiEwfSx6PXtsaXN0aW5nOiEwLHByZTohMCx0ZXh0YXJlYTohMH0sWT12KHtt
ZW51aXRlbTohMH0sSyksWD0vXlthLXpBLVpdW2EtekEtWjpfXC5cLVxkXSokLyxRPXt9LEc9e30u
aGFzT3duUHJvcGVydHksJD0xO2guZGlzcGxheU5hbWU9IlJlYWN0RE9NQ29tcG9uZW50IixoLk1p
eGluPXttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9yb290Tm9kZUlEPSQr
Kyx0aGlzLl9kb21JRD1uLl9pZENvdW50ZXIrKyx0aGlzLl9ob3N0UGFyZW50PXQsdGhpcy5faG9z
dENvbnRhaW5lckluZm89bjt2YXIgaT10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztzd2l0Y2go
dGhpcy5fdGFnKXtjYXNlImF1ZGlvIjpjYXNlImZvcm0iOmNhc2UiaWZyYW1lIjpjYXNlImltZyI6
Y2FzZSJsaW5rIjpjYXNlIm9iamVjdCI6Y2FzZSJzb3VyY2UiOmNhc2UidmlkZW8iOnRoaXMuX3dy
YXBwZXJTdGF0ZT17bGlzdGVuZXJzOm51bGx9LGUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1
ZShjLHRoaXMpO2JyZWFrO2Nhc2UiaW5wdXQiOlMubW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPVMu
Z2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhp
cyk7YnJlYWs7Y2FzZSJvcHRpb24iOk4ubW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPU4uZ2V0SG9z
dFByb3BzKHRoaXMsaSk7YnJlYWs7Y2FzZSJzZWxlY3QiOk0ubW91bnRXcmFwcGVyKHRoaXMsaSx0
KSxpPU0uZ2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVl
KGMsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6SS5tb3VudFdyYXBwZXIodGhpcyxpLHQpLGk9
SS5nZXRIb3N0UHJvcHModGhpcyxpKSxlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYyx0
aGlzKX1vKHRoaXMsaSk7dmFyIGEscDtudWxsIT10PyhhPXQuX25hbWVzcGFjZVVSSSxwPXQuX3Rh
Zyk6bi5fdGFnJiYoYT1uLl9uYW1lc3BhY2VVUkkscD1uLl90YWcpLChudWxsPT1hfHxhPT09Qy5z
dmcmJiJmb3JlaWdub2JqZWN0Ij09PXApJiYoYT1DLmh0bWwpLGE9PT1DLmh0bWwmJigic3ZnIj09
PXRoaXMuX3RhZz9hPUMuc3ZnOiJtYXRoIj09PXRoaXMuX3RhZyYmKGE9Qy5tYXRobWwpKSx0aGlz
Ll9uYW1lc3BhY2VVUkk9YTt2YXIgZDtpZihlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBmLGg9bi5f
b3duZXJEb2N1bWVudDtpZihhPT09Qy5odG1sKWlmKCJzY3JpcHQiPT09dGhpcy5fdGFnKXt2YXIg
bT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTttLmlu
bmVySFRNTD0iPCIrdisiPjwvIit2KyI+IixmPW0ucmVtb3ZlQ2hpbGQobS5maXJzdENoaWxkKX1l
bHNlIGY9aS5pcz9oLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxpLmlz
KTpoLmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7ZWxzZSBmPWguY3Jl
YXRlRWxlbWVudE5TKGEsdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7UC5wcmVjYWNoZU5vZGUo
dGhpcyxmKSx0aGlzLl9mbGFnc3w9RC5oYXNDYWNoZWRDaGlsZE5vZGVzLHRoaXMuX2hvc3RQYXJl
bnR8fEUuc2V0QXR0cmlidXRlRm9yUm9vdChmKSx0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51
bGwsaSxlKTt2YXIgeT1fKGYpO3RoaXMuX2NyZWF0ZUluaXRpYWxDaGlsZHJlbihlLGkscix5KSxk
PXl9ZWxzZXt2YXIgYj10aGlzLl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzKGUs
aSkseD10aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKGUsaSxyKTtkPSF4JiZLW3RoaXMuX3RhZ10/
YisiLz4iOmIrIj4iK3grIjwvIit0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKyI+In1zd2l0Y2go
dGhpcy5fdGFnKXtjYXNlImlucHV0IjplLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocyx0
aGlzKSxpLmF1dG9Gb2N1cyYmZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGcuZm9jdXNE
T01Db21wb25lbnQsdGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZS5nZXRSZWFjdE1vdW50UmVh
ZHkoKS5lbnF1ZXVlKHUsdGhpcyksaS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShnLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNl
ImJ1dHRvbiI6aS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShnLmZv
Y3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9uIjplLmdldFJlYWN0TW91bnRS
ZWFkeSgpLmVucXVldWUobCx0aGlzKX1yZXR1cm4gZH0sX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQ
dXRMaXN0ZW5lcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbj0iPCIrdGhpcy5fY3VycmVudEVsZW1lbnQu
dHlwZTtmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbz10W3JdO2lm
KG51bGwhPW8paWYoai5oYXNPd25Qcm9wZXJ0eShyKSlvJiZpKHRoaXMscixvLGUpO2Vsc2V7InN0
eWxlIj09PXImJihvJiYobz10aGlzLl9wcmV2aW91c1N0eWxlQ29weT12KHt9LHQuc3R5bGUpKSxv
PXkuY3JlYXRlTWFya3VwRm9yU3R5bGVzKG8sdGhpcykpO3ZhciBhPW51bGw7bnVsbCE9dGhpcy5f
dGFnJiZmKHRoaXMuX3RhZyx0KT9XLmhhc093blByb3BlcnR5KHIpfHwoYT1FLmNyZWF0ZU1hcmt1
cEZvckN1c3RvbUF0dHJpYnV0ZShyLG8pKTphPUUuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkocixv
KSxhJiYobis9IiAiK2EpfX1yZXR1cm4gZS5yZW5kZXJUb1N0YXRpY01hcmt1cD9uOih0aGlzLl9o
b3N0UGFyZW50fHwobis9IiAiK0UuY3JlYXRlTWFya3VwRm9yUm9vdCgpKSxuKz0iICIrRS5jcmVh
dGVNYXJrdXBGb3JJRCh0aGlzLl9kb21JRCkpfSxfY3JlYXRlQ29udGVudE1hcmt1cDpmdW5jdGlv
bihlLHQsbil7dmFyIHI9IiIsbz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8p
bnVsbCE9by5fX2h0bWwmJihyPW8uX19odG1sKTtlbHNle3ZhciBpPVZbdHlwZW9mIHQuY2hpbGRy
ZW5dP3QuY2hpbGRyZW46bnVsbCxhPW51bGwhPWk/bnVsbDp0LmNoaWxkcmVuO2lmKG51bGwhPWkp
cj1BKGkpO2Vsc2UgaWYobnVsbCE9YSl7dmFyIHM9dGhpcy5tb3VudENoaWxkcmVuKGEsZSxuKTty
PXMuam9pbigiIil9fXJldHVybiB6W3RoaXMuX3RhZ10mJiJcbiI9PT1yLmNoYXJBdCgwKT8iXG4i
K3I6cn0sX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10LmRh
bmdlcm91c2x5U2V0SW5uZXJIVE1MO2lmKG51bGwhPW8pbnVsbCE9by5fX2h0bWwmJl8ucXVldWVI
VE1MKHIsby5fX2h0bWwpO2Vsc2V7dmFyIGk9Vlt0eXBlb2YgdC5jaGlsZHJlbl0/dC5jaGlsZHJl
bjpudWxsLGE9bnVsbCE9aT9udWxsOnQuY2hpbGRyZW47aWYobnVsbCE9aSkiIiE9PWkmJl8ucXVl
dWVUZXh0KHIsaSk7ZWxzZSBpZihudWxsIT1hKWZvcih2YXIgcz10aGlzLm1vdW50Q2hpbGRyZW4o
YSxlLG4pLHU9MDt1PHMubGVuZ3RoO3UrKylfLnF1ZXVlQ2hpbGQocixzW3VdKX19LHJlY2VpdmVD
b21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2N1cnJlbnRFbGVtZW50O3RoaXMu
X2N1cnJlbnRFbGVtZW50PWUsdGhpcy51cGRhdGVDb21wb25lbnQodCxyLGUsbil9LHVwZGF0ZUNv
bXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10LnByb3BzLGE9dGhpcy5fY3VycmVudEVs
ZW1lbnQucHJvcHM7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6aT1TLmdldEhvc3RQcm9w
cyh0aGlzLGkpLGE9Uy5nZXRIb3N0UHJvcHModGhpcyxhKTticmVhaztjYXNlIm9wdGlvbiI6aT1O
LmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9Ti5nZXRIb3N0UHJvcHModGhpcyxhKTticmVhaztjYXNl
InNlbGVjdCI6aT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGE9TS5nZXRIb3N0UHJvcHModGhpcyxh
KTticmVhaztjYXNlInRleHRhcmVhIjppPUkuZ2V0SG9zdFByb3BzKHRoaXMsaSksYT1JLmdldEhv
c3RQcm9wcyh0aGlzLGEpfXN3aXRjaChvKHRoaXMsYSksdGhpcy5fdXBkYXRlRE9NUHJvcGVydGll
cyhpLGEsZSksdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4oaSxhLGUsciksdGhpcy5fdGFnKXtjYXNl
ImlucHV0IjpTLnVwZGF0ZVdyYXBwZXIodGhpcyk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6SS51cGRh
dGVXcmFwcGVyKHRoaXMpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLmdldFJlYWN0TW91bnRSZWFkeSgp
LmVucXVldWUocCx0aGlzKX19LF91cGRhdGVET01Qcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCxuKXt2
YXIgcixvLGE7Zm9yKHIgaW4gZSlpZighdC5oYXNPd25Qcm9wZXJ0eShyKSYmZS5oYXNPd25Qcm9w
ZXJ0eShyKSYmbnVsbCE9ZVtyXSlpZigic3R5bGUiPT09cil7dmFyIHM9dGhpcy5fcHJldmlvdXNT
dHlsZUNvcHk7Zm9yKG8gaW4gcylzLmhhc093blByb3BlcnR5KG8pJiYoYT1hfHx7fSxhW29dPSIi
KTt0aGlzLl9wcmV2aW91c1N0eWxlQ29weT1udWxsfWVsc2Ugai5oYXNPd25Qcm9wZXJ0eShyKT9l
W3JdJiZMKHRoaXMscik6Zih0aGlzLl90YWcsZSk/Vy5oYXNPd25Qcm9wZXJ0eShyKXx8RS5kZWxl
dGVWYWx1ZUZvckF0dHJpYnV0ZShVKHRoaXMpLHIpOihiLnByb3BlcnRpZXNbcl18fGIuaXNDdXN0
b21BdHRyaWJ1dGUocikpJiZFLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoVSh0aGlzKSxyKTtmb3Io
ciBpbiB0KXt2YXIgdT10W3JdLGw9InN0eWxlIj09PXI/dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk6
bnVsbCE9ZT9lW3JdOnZvaWQgMDtpZih0Lmhhc093blByb3BlcnR5KHIpJiZ1IT09bCYmKG51bGwh
PXV8fG51bGwhPWwpKWlmKCJzdHlsZSI9PT1yKWlmKHU/dT10aGlzLl9wcmV2aW91c1N0eWxlQ29w
eT12KHt9LHUpOnRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5PW51bGwsbCl7Zm9yKG8gaW4gbCkhbC5o
YXNPd25Qcm9wZXJ0eShvKXx8dSYmdS5oYXNPd25Qcm9wZXJ0eShvKXx8KGE9YXx8e30sYVtvXT0i
Iik7Zm9yKG8gaW4gdSl1Lmhhc093blByb3BlcnR5KG8pJiZsW29dIT09dVtvXSYmKGE9YXx8e30s
YVtvXT11W29dKX1lbHNlIGE9dTtlbHNlIGlmKGouaGFzT3duUHJvcGVydHkocikpdT9pKHRoaXMs
cix1LG4pOmwmJkwodGhpcyxyKTtlbHNlIGlmKGYodGhpcy5fdGFnLHQpKVcuaGFzT3duUHJvcGVy
dHkocil8fEUuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoVSh0aGlzKSxyLHUpO2Vsc2UgaWYoYi5wcm9w
ZXJ0aWVzW3JdfHxiLmlzQ3VzdG9tQXR0cmlidXRlKHIpKXt2YXIgYz1VKHRoaXMpO251bGwhPXU/
RS5zZXRWYWx1ZUZvclByb3BlcnR5KGMscix1KTpFLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoYyxy
KX19YSYmeS5zZXRWYWx1ZUZvclN0eWxlcyhVKHRoaXMpLGEsdGhpcyl9LF91cGRhdGVET01DaGls
ZHJlbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1WW3R5cGVvZiBlLmNoaWxkcmVuXT9lLmNoaWxk
cmVuOm51bGwsaT1WW3R5cGVvZiB0LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGwsYT1lLmRhbmdl
cm91c2x5U2V0SW5uZXJIVE1MJiZlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCxzPXQu
ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1s
LHU9bnVsbCE9bz9udWxsOmUuY2hpbGRyZW4sbD1udWxsIT1pP251bGw6dC5jaGlsZHJlbixjPW51
bGwhPW98fG51bGwhPWEscD1udWxsIT1pfHxudWxsIT1zO251bGwhPXUmJm51bGw9PWw/dGhpcy51
cGRhdGVDaGlsZHJlbihudWxsLG4scik6YyYmIXAmJnRoaXMudXBkYXRlVGV4dENvbnRlbnQoIiIp
LG51bGwhPWk/byE9PWkmJnRoaXMudXBkYXRlVGV4dENvbnRlbnQoIiIraSk6bnVsbCE9cz9hIT09
cyYmdGhpcy51cGRhdGVNYXJrdXAoIiIrcyk6bnVsbCE9bCYmdGhpcy51cGRhdGVDaGlsZHJlbihs
LG4scil9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9LHVubW91bnRDb21w
b25lbnQ6ZnVuY3Rpb24oZSl7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJhdWRpbyI6Y2FzZSJmb3Jt
IjpjYXNlImlmcmFtZSI6Y2FzZSJpbWciOmNhc2UibGluayI6Y2FzZSJvYmplY3QiOmNhc2Uic291
cmNlIjpjYXNlInZpZGVvIjp2YXIgdD10aGlzLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzO2lmKHQp
Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5yZW1vdmUoKTticmVhaztjYXNlImh0bWwi
OmNhc2UiaGVhZCI6Y2FzZSJib2R5IjptKCI2NiIsdGhpcy5fdGFnKX10aGlzLnVubW91bnRDaGls
ZHJlbihlKSxQLnVuY2FjaGVOb2RlKHRoaXMpLHguZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMpLHRo
aXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9kb21JRD0wLHRoaXMuX3dyYXBwZXJTdGF0ZT1udWxsfSxn
ZXRQdWJsaWNJbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiBVKHRoaXMpfX0sdihoLnByb3RvdHlw
ZSxoLk1peGluLE8uTWl4aW4pLHQuZXhwb3J0cz1ofSx7MTA6MTAsMTA5OjEwOSwxMToxMSwxMTI6
MTEyLDExODoxMTgsMTI6MTIsMTI5OjEyOSwxMzc6MTM3LDE0MToxNDEsMTQyOjE0MiwxNDM6MTQz
LDE2OjE2LDE3OjE3LDI6MiwyNToyNSwzMjozMiwzMzozMywzODozOCwzOTozOSw0MDo0MCw0Mzo0
Myw1OjUsNTg6NTgsNjE6NjEsNjg6NjgsOTo5LDk1Ojk1fV0sMzI6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9e2hhc0NhY2hlZENoaWxkTm9kZXM6MX07dC5leHBvcnRzPXJ9LHt9
XSwzMzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJu
IDE9PT1lLm5vZGVUeXBlJiZlLmdldEF0dHJpYnV0ZShoKT09PVN0cmluZyh0KXx8OD09PWUubm9k
ZVR5cGUmJmUubm9kZVZhbHVlPT09IiByZWFjdC10ZXh0OiAiK3QrIiAifHw4PT09ZS5ub2RlVHlw
ZSYmZS5ub2RlVmFsdWU9PT0iIHJlYWN0LWVtcHR5OiAiK3QrIiAifWZ1bmN0aW9uIG8oZSl7Zm9y
KHZhciB0O3Q9ZS5fcmVuZGVyZWRDb21wb25lbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBpKGUs
dCl7dmFyIG49byhlKTtuLl9ob3N0Tm9kZT10LHRbdl09bn1mdW5jdGlvbiBhKGUpe3ZhciB0PWUu
X2hvc3ROb2RlO3QmJihkZWxldGUgdFt2XSxlLl9ob3N0Tm9kZT1udWxsKX1mdW5jdGlvbiBzKGUs
dCl7aWYoIShlLl9mbGFncyZtLmhhc0NhY2hlZENoaWxkTm9kZXMpKXt2YXIgbj1lLl9yZW5kZXJl
ZENoaWxkcmVuLGE9dC5maXJzdENoaWxkO2U6Zm9yKHZhciBzIGluIG4paWYobi5oYXNPd25Qcm9w
ZXJ0eShzKSl7dmFyIHU9bltzXSxsPW8odSkuX2RvbUlEO2lmKDAhPT1sKXtmb3IoO251bGwhPT1h
O2E9YS5uZXh0U2libGluZylpZihyKGEsbCkpe2kodSxhKTtjb250aW51ZSBlfXAoIjMyIixsKX19
ZS5fZmxhZ3N8PW0uaGFzQ2FjaGVkQ2hpbGROb2Rlc319ZnVuY3Rpb24gdShlKXtpZihlW3ZdKXJl
dHVybiBlW3ZdO2Zvcih2YXIgdD1bXTshZVt2XTspe2lmKHQucHVzaChlKSwhZS5wYXJlbnROb2Rl
KXJldHVybiBudWxsO2U9ZS5wYXJlbnROb2RlfWZvcih2YXIgbixyO2UmJihyPWVbdl0pO2U9dC5w
b3AoKSluPXIsdC5sZW5ndGgmJnMocixlKTtyZXR1cm4gbn1mdW5jdGlvbiBsKGUpe3ZhciB0PXUo
ZSk7cmV0dXJuIG51bGwhPXQmJnQuX2hvc3ROb2RlPT09ZT90Om51bGx9ZnVuY3Rpb24gYyhlKXtp
Zih2b2lkIDA9PT1lLl9ob3N0Tm9kZSYmcCgiMzMiKSxlLl9ob3N0Tm9kZSlyZXR1cm4gZS5faG9z
dE5vZGU7Zm9yKHZhciB0PVtdOyFlLl9ob3N0Tm9kZTspdC5wdXNoKGUpLGUuX2hvc3RQYXJlbnR8
fHAoIjM0IiksZT1lLl9ob3N0UGFyZW50O2Zvcig7dC5sZW5ndGg7ZT10LnBvcCgpKXMoZSxlLl9o
b3N0Tm9kZSk7cmV0dXJuIGUuX2hvc3ROb2RlfXZhciBwPWUoMTEyKSxkPWUoMTEpLGY9ZSgzMiks
aD0oZSgxMzcpLGQuSURfQVRUUklCVVRFX05BTUUpLG09Zix2PSJfX3JlYWN0SW50ZXJuYWxJbnN0
YW5jZSQiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGc9e2dldENsb3Nlc3RJ
bnN0YW5jZUZyb21Ob2RlOnUsZ2V0SW5zdGFuY2VGcm9tTm9kZTpsLGdldE5vZGVGcm9tSW5zdGFu
Y2U6YyxwcmVjYWNoZUNoaWxkTm9kZXM6cyxwcmVjYWNoZU5vZGU6aSx1bmNhY2hlTm9kZTphfTt0
LmV4cG9ydHM9Z30sezExOjExLDExMjoxMTIsMTM3OjEzNywzMjozMn1dLDM0OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm57X3RvcExldmVsV3JhcHBl
cjplLF9pZENvdW50ZXI6MSxfb3duZXJEb2N1bWVudDp0P3Qubm9kZVR5cGU9PT1vP3Q6dC5vd25l
ckRvY3VtZW50Om51bGwsX25vZGU6dCxfdGFnOnQ/dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOm51
bGwsX25hbWVzcGFjZVVSSTp0P3QubmFtZXNwYWNlVVJJOm51bGx9fXZhciBvPShlKDExOCksOSk7
dC5leHBvcnRzPXJ9LHsxMTg6MTE4fV0sMzU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9ZSgxNDMpLG89ZSg5KSxpPWUoMzMpLGE9ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEVs
ZW1lbnQ9bnVsbCx0aGlzLl9ob3N0Tm9kZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVsbCx0aGlz
Ll9ob3N0Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX2RvbUlEPTB9O3IoYS5wcm90b3R5cGUse21v
dW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBhPW4uX2lkQ291bnRlcisrO3RoaXMu
X2RvbUlEPWEsdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW47dmFy
IHM9IiByZWFjdC1lbXB0eTogIit0aGlzLl9kb21JRCsiICI7aWYoZS51c2VDcmVhdGVFbGVtZW50
KXt2YXIgdT1uLl9vd25lckRvY3VtZW50LGw9dS5jcmVhdGVDb21tZW50KHMpO3JldHVybiBpLnBy
ZWNhY2hlTm9kZSh0aGlzLGwpLG8obCl9cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/IiI6
IjwhLS0iK3MrIi0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oKXt9LGdldEhvc3ROb2Rl
OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKX0sdW5tb3VudENv
bXBvbmVudDpmdW5jdGlvbigpe2kudW5jYWNoZU5vZGUodGhpcyl9fSksdC5leHBvcnRzPWF9LHsx
NDM6MTQzLDMzOjMzLDk6OX1dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBy
PXt1c2VDcmVhdGVFbGVtZW50OiEwLHVzZUZpYmVyOiExfTt0LmV4cG9ydHM9cn0se31dLDM3Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDMzKSxpPXtkYW5nZXJv
dXNseVByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldE5vZGVG
cm9tSW5zdGFuY2UoZSk7ci5wcm9jZXNzVXBkYXRlcyhuLHQpfX07dC5leHBvcnRzPWl9LHszMzoz
Myw4Ojh9XSwzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhp
cy5fcm9vdE5vZGVJRCYmZC51cGRhdGVXcmFwcGVyKHRoaXMpfWZ1bmN0aW9uIG8oZSl7cmV0dXJu
ImNoZWNrYm94Ij09PWUudHlwZXx8InJhZGlvIj09PWUudHlwZT9udWxsIT1lLmNoZWNrZWQ6bnVs
bCE9ZS52YWx1ZX1mdW5jdGlvbiBpKGUpe3ZhciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3Bz
LG49bC5leGVjdXRlT25DaGFuZ2UodCxlKTtwLmFzYXAocix0aGlzKTt2YXIgbz10Lm5hbWU7aWYo
InJhZGlvIj09PXQudHlwZSYmbnVsbCE9byl7Zm9yKHZhciBpPWMuZ2V0Tm9kZUZyb21JbnN0YW5j
ZSh0aGlzKSxzPWk7cy5wYXJlbnROb2RlOylzPXMucGFyZW50Tm9kZTtmb3IodmFyIHU9cy5xdWVy
eVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrbykrJ11bdHlwZT0i
cmFkaW8iXScpLGQ9MDtkPHUubGVuZ3RoO2QrKyl7dmFyIGY9dVtkXTtpZihmIT09aSYmZi5mb3Jt
PT09aS5mb3JtKXt2YXIgaD1jLmdldEluc3RhbmNlRnJvbU5vZGUoZik7aHx8YSgiOTAiKSxwLmFz
YXAocixoKX19fXJldHVybiBufXZhciBhPWUoMTEyKSxzPWUoMTQzKSx1PWUoMTIpLGw9ZSgyMyks
Yz1lKDMzKSxwPWUoNzEpLGQ9KGUoMTM3KSxlKDE0Mikse2dldEhvc3RQcm9wczpmdW5jdGlvbihl
LHQpe3ZhciBuPWwuZ2V0VmFsdWUodCkscj1sLmdldENoZWNrZWQodCk7cmV0dXJuIHMoe3R5cGU6
dm9pZCAwLHN0ZXA6dm9pZCAwLG1pbjp2b2lkIDAsbWF4OnZvaWQgMH0sdCx7ZGVmYXVsdENoZWNr
ZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6bnVsbCE9bj9uOmUuX3dyYXBwZXJT
dGF0ZS5pbml0aWFsVmFsdWUsY2hlY2tlZDpudWxsIT1yP3I6ZS5fd3JhcHBlclN0YXRlLmluaXRp
YWxDaGVja2VkLG9uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdyYXBw
ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZTtlLl93cmFwcGVyU3RhdGU9e2lu
aXRpYWxDaGVja2VkOm51bGwhPXQuY2hlY2tlZD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZCxp
bml0aWFsVmFsdWU6bnVsbCE9dC52YWx1ZT90LnZhbHVlOm4sbGlzdGVuZXJzOm51bGwsb25DaGFu
Z2U6aS5iaW5kKGUpLGNvbnRyb2xsZWQ6byh0KX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj10LmNoZWNrZWQ7bnVsbCE9biYmdS5zZXRW
YWx1ZUZvclByb3BlcnR5KGMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSwiY2hlY2tlZCIsbnx8ITEp
O3ZhciByPWMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxvPWwuZ2V0VmFsdWUodCk7aWYobnVsbCE9
bylpZigwPT09byYmIiI9PT1yLnZhbHVlKXIudmFsdWU9IjAiO2Vsc2UgaWYoIm51bWJlciI9PT10
LnR5cGUpe3ZhciBpPXBhcnNlRmxvYXQoci52YWx1ZSwxMCl8fDA7byE9aSYmKHIudmFsdWU9IiIr
byl9ZWxzZSBvIT1yLnZhbHVlJiYoci52YWx1ZT0iIitvKTtlbHNlIG51bGw9PXQudmFsdWUmJm51
bGwhPXQuZGVmYXVsdFZhbHVlJiZyLmRlZmF1bHRWYWx1ZSE9PSIiK3QuZGVmYXVsdFZhbHVlJiYo
ci5kZWZhdWx0VmFsdWU9IiIrdC5kZWZhdWx0VmFsdWUpLG51bGw9PXQuY2hlY2tlZCYmbnVsbCE9
dC5kZWZhdWx0Q2hlY2tlZCYmKHIuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX0s
cG9zdE1vdW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9w
cyxuPWMuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKTtzd2l0Y2godC50eXBlKXtjYXNlInN1Ym1pdCI6
Y2FzZSJyZXNldCI6YnJlYWs7Y2FzZSJjb2xvciI6Y2FzZSJkYXRlIjpjYXNlImRhdGV0aW1lIjpj
YXNlImRhdGV0aW1lLWxvY2FsIjpjYXNlIm1vbnRoIjpjYXNlInRpbWUiOmNhc2Uid2VlayI6bi52
YWx1ZT0iIixuLnZhbHVlPW4uZGVmYXVsdFZhbHVlO2JyZWFrO2RlZmF1bHQ6bi52YWx1ZT1uLnZh
bHVlfXZhciByPW4ubmFtZTsiIiE9PXImJihuLm5hbWU9IiIpLG4uZGVmYXVsdENoZWNrZWQ9IW4u
ZGVmYXVsdENoZWNrZWQsbi5kZWZhdWx0Q2hlY2tlZD0hbi5kZWZhdWx0Q2hlY2tlZCwiIiE9PXIm
JihuLm5hbWU9cil9fSk7dC5leHBvcnRzPWR9LHsxMTI6MTEyLDEyOjEyLDEzNzoxMzcsMTQyOjE0
MiwxNDM6MTQzLDIzOjIzLDMzOjMzLDcxOjcxfV0sMzk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0iIjtyZXR1cm4gaS5DaGlsZHJlbi5mb3JFYWNoKGUs
ZnVuY3Rpb24oZSl7bnVsbCE9ZSYmKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVv
ZiBlP3QrPWU6dXx8KHU9ITApKX0pLHR9dmFyIG89ZSgxNDMpLGk9ZSgxMjApLGE9ZSgzMykscz1l
KDQwKSx1PShlKDE0MiksITEpLGw9e21vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQsbil7dmFyIG89
bnVsbDtpZihudWxsIT1uKXt2YXIgaT1uOyJvcHRncm91cCI9PT1pLl90YWcmJihpPWkuX2hvc3RQ
YXJlbnQpLG51bGwhPWkmJiJzZWxlY3QiPT09aS5fdGFnJiYobz1zLmdldFNlbGVjdFZhbHVlQ29u
dGV4dChpKSl9dmFyIGE9bnVsbDtpZihudWxsIT1vKXt2YXIgdTtpZih1PW51bGwhPXQudmFsdWU/
dC52YWx1ZSsiIjpyKHQuY2hpbGRyZW4pLGE9ITEsQXJyYXkuaXNBcnJheShvKSl7Zm9yKHZhciBs
PTA7bDxvLmxlbmd0aDtsKyspaWYoIiIrb1tsXT09PXUpe2E9ITA7YnJlYWt9fWVsc2UgYT0iIitv
PT09dX1lLl93cmFwcGVyU3RhdGU9e3NlbGVjdGVkOmF9fSxwb3N0TW91bnRXcmFwcGVyOmZ1bmN0
aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzO251bGwhPXQudmFsdWUmJmEuZ2V0
Tm9kZUZyb21JbnN0YW5jZShlKS5zZXRBdHRyaWJ1dGUoInZhbHVlIix0LnZhbHVlKX0sZ2V0SG9z
dFByb3BzOmZ1bmN0aW9uKGUsdCl7dmFyIG49byh7c2VsZWN0ZWQ6dm9pZCAwLGNoaWxkcmVuOnZv
aWQgMH0sdCk7bnVsbCE9ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkJiYobi5zZWxlY3RlZD1lLl93
cmFwcGVyU3RhdGUuc2VsZWN0ZWQpO3ZhciBpPXIodC5jaGlsZHJlbik7cmV0dXJuIGkmJihuLmNo
aWxkcmVuPWkpLG59fTt0LmV4cG9ydHM9bH0sezEyMDoxMjAsMTQyOjE0MiwxNDM6MTQzLDMzOjMz
LDQwOjQwfV0sNDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lm
KHRoaXMuX3Jvb3ROb2RlSUQmJnRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKXt0aGlz
Ll93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMTt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVu
dC5wcm9wcyx0PXMuZ2V0VmFsdWUoZSk7bnVsbCE9dCYmbyh0aGlzLEJvb2xlYW4oZS5tdWx0aXBs
ZSksdCl9fWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciByLG8saT11LmdldE5vZGVGcm9tSW5zdGFuY2Uo
ZSkub3B0aW9ucztpZih0KXtmb3Iocj17fSxvPTA7bzxuLmxlbmd0aDtvKyspclsiIituW29dXT0h
MDtmb3Iobz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1yLmhhc093blByb3BlcnR5KGlbb10udmFs
dWUpO2lbb10uc2VsZWN0ZWQhPT1hJiYoaVtvXS5zZWxlY3RlZD1hKX19ZWxzZXtmb3Iocj0iIitu
LG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dLnZhbHVlPT09cilyZXR1cm4gdm9pZChpW29dLnNl
bGVjdGVkPSEwKTtpLmxlbmd0aCYmKGlbMF0uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBpKGUpe3Zh
ciB0PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49cy5leGVjdXRlT25DaGFuZ2UodCxlKTty
ZXR1cm4gdGhpcy5fcm9vdE5vZGVJRCYmKHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRl
PSEwKSxsLmFzYXAocix0aGlzKSxufXZhciBhPWUoMTQzKSxzPWUoMjMpLHU9ZSgzMyksbD1lKDcx
KSxjPShlKDE0MiksITEpLHA9e2dldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBhKHt9
LHQse29uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZSx2YWx1ZTp2b2lkIDB9KX0sbW91
bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cy5nZXRWYWx1ZSh0KTtlLl93cmFwcGVyU3Rh
dGU9e3BlbmRpbmdVcGRhdGU6ITEsaW5pdGlhbFZhbHVlOm51bGwhPW4/bjp0LmRlZmF1bHRWYWx1
ZSxsaXN0ZW5lcnM6bnVsbCxvbkNoYW5nZTppLmJpbmQoZSksd2FzTXVsdGlwbGU6Qm9vbGVhbih0
Lm11bHRpcGxlKX0sdm9pZCAwPT09dC52YWx1ZXx8dm9pZCAwPT09dC5kZWZhdWx0VmFsdWV8fGN8
fChjPSEwKX0sZ2V0U2VsZWN0VmFsdWVDb250ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBlLl93cmFw
cGVyU3RhdGUuaW5pdGlhbFZhbHVlfSxwb3N0VXBkYXRlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIg
dD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcztlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlPXZv
aWQgMDt2YXIgbj1lLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7ZS5fd3JhcHBlclN0YXRlLndh
c011bHRpcGxlPUJvb2xlYW4odC5tdWx0aXBsZSk7dmFyIHI9cy5nZXRWYWx1ZSh0KTtudWxsIT1y
PyhlLl93cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMSxvKGUsQm9vbGVhbih0Lm11bHRpcGxl
KSxyKSk6biE9PUJvb2xlYW4odC5tdWx0aXBsZSkmJihudWxsIT10LmRlZmF1bHRWYWx1ZT9vKGUs
Qm9vbGVhbih0Lm11bHRpcGxlKSx0LmRlZmF1bHRWYWx1ZSk6byhlLEJvb2xlYW4odC5tdWx0aXBs
ZSksdC5tdWx0aXBsZT9bXToiIikpfX07dC5leHBvcnRzPXB9LHsxNDI6MTQyLDE0MzoxNDMsMjM6
MjMsMzM6MzMsNzE6NzF9XSw0MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuLHIpe3JldHVybiBlPT09biYmdD09PXJ9ZnVuY3Rpb24gbyhlKXt2YXIgdD1kb2N1
bWVudC5zZWxlY3Rpb24sbj10LmNyZWF0ZVJhbmdlKCkscj1uLnRleHQubGVuZ3RoLG89bi5kdXBs
aWNhdGUoKTtvLm1vdmVUb0VsZW1lbnRUZXh0KGUpLG8uc2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQi
LG4pO3ZhciBpPW8udGV4dC5sZW5ndGg7cmV0dXJue3N0YXJ0OmksZW5kOmkrcn19ZnVuY3Rpb24g
aShlKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uJiZ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7aWYo
IXR8fDA9PT10LnJhbmdlQ291bnQpcmV0dXJuIG51bGw7dmFyIG49dC5hbmNob3JOb2RlLG89dC5h
bmNob3JPZmZzZXQsaT10LmZvY3VzTm9kZSxhPXQuZm9jdXNPZmZzZXQscz10LmdldFJhbmdlQXQo
MCk7dHJ5e3Muc3RhcnRDb250YWluZXIubm9kZVR5cGUscy5lbmRDb250YWluZXIubm9kZVR5cGV9
Y2F0Y2goZSl7cmV0dXJuIG51bGx9dmFyIHU9cih0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQs
dC5mb2N1c05vZGUsdC5mb2N1c09mZnNldCksbD11PzA6cy50b1N0cmluZygpLmxlbmd0aCxjPXMu
Y2xvbmVSYW5nZSgpO2Muc2VsZWN0Tm9kZUNvbnRlbnRzKGUpLGMuc2V0RW5kKHMuc3RhcnRDb250
YWluZXIscy5zdGFydE9mZnNldCk7dmFyIHA9cihjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZz
ZXQsYy5lbmRDb250YWluZXIsYy5lbmRPZmZzZXQpLGQ9cD8wOmMudG9TdHJpbmcoKS5sZW5ndGgs
Zj1kK2wsaD1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2guc2V0U3RhcnQobixvKSxoLnNldEVuZChp
LGEpO3ZhciBtPWguY29sbGFwc2VkO3JldHVybntzdGFydDptP2Y6ZCxlbmQ6bT9kOmZ9fWZ1bmN0
aW9uIGEoZSx0KXt2YXIgbixyLG89ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVw
bGljYXRlKCk7dm9pZCAwPT09dC5lbmQ/KG49dC5zdGFydCxyPW4pOnQuc3RhcnQ+dC5lbmQ/KG49
dC5lbmQscj10LnN0YXJ0KToobj10LnN0YXJ0LHI9dC5lbmQpLG8ubW92ZVRvRWxlbWVudFRleHQo
ZSksby5tb3ZlU3RhcnQoImNoYXJhY3RlciIsbiksby5zZXRFbmRQb2ludCgiRW5kVG9TdGFydCIs
byksby5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksby5zZWxlY3QoKX1mdW5jdGlvbiBzKGUsdCl7
aWYod2luZG93LmdldFNlbGVjdGlvbil7dmFyIG49d2luZG93LmdldFNlbGVjdGlvbigpLHI9ZVtj
KCldLmxlbmd0aCxvPU1hdGgubWluKHQuc3RhcnQsciksaT12b2lkIDA9PT10LmVuZD9vOk1hdGgu
bWluKHQuZW5kLHIpO2lmKCFuLmV4dGVuZCYmbz5pKXt2YXIgYT1pO2k9byxvPWF9dmFyIHM9bChl
LG8pLHU9bChlLGkpO2lmKHMmJnUpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7cC5zZXRT
dGFydChzLm5vZGUscy5vZmZzZXQpLG4ucmVtb3ZlQWxsUmFuZ2VzKCksbz5pPyhuLmFkZFJhbmdl
KHApLG4uZXh0ZW5kKHUubm9kZSx1Lm9mZnNldCkpOihwLnNldEVuZCh1Lm5vZGUsdS5vZmZzZXQp
LG4uYWRkUmFuZ2UocCkpfX19dmFyIHU9ZSgxMjMpLGw9ZSgxMDUpLGM9ZSgxMDYpLHA9dS5jYW5V
c2VET00mJiJzZWxlY3Rpb24iaW4gZG9jdW1lbnQmJiEoImdldFNlbGVjdGlvbiJpbiB3aW5kb3cp
LGQ9e2dldE9mZnNldHM6cD9vOmksc2V0T2Zmc2V0czpwP2E6c307dC5leHBvcnRzPWR9LHsxMDU6
MTA1LDEwNjoxMDYsMTIzOjEyM31dLDQyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPWUoMTEyKSxvPWUoMTQzKSxpPWUoOCksYT1lKDkpLHM9ZSgzMyksdT1lKDk1KSxsPShlKDEz
NyksZSgxMTgpLGZ1bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fc3RyaW5n
VGV4dD0iIitlLAordGhpcy5faG9zdE5vZGU9bnVsbCx0aGlzLl9ob3N0UGFyZW50PW51bGwsdGhp
cy5fZG9tSUQ9MCx0aGlzLl9tb3VudEluZGV4PTAsdGhpcy5fY2xvc2luZ0NvbW1lbnQ9bnVsbCx0
aGlzLl9jb21tZW50Tm9kZXM9bnVsbH0pO28obC5wcm90b3R5cGUse21vdW50Q29tcG9uZW50OmZ1
bmN0aW9uKGUsdCxuLHIpe3ZhciBvPW4uX2lkQ291bnRlcisrLGk9IiByZWFjdC10ZXh0OiAiK28r
IiAiO2lmKHRoaXMuX2RvbUlEPW8sdGhpcy5faG9zdFBhcmVudD10LGUudXNlQ3JlYXRlRWxlbWVu
dCl7dmFyIGw9bi5fb3duZXJEb2N1bWVudCxjPWwuY3JlYXRlQ29tbWVudChpKSxwPWwuY3JlYXRl
Q29tbWVudCgiIC9yZWFjdC10ZXh0ICIpLGQ9YShsLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7
cmV0dXJuIGEucXVldWVDaGlsZChkLGEoYykpLHRoaXMuX3N0cmluZ1RleHQmJmEucXVldWVDaGls
ZChkLGEobC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9zdHJpbmdUZXh0KSkpLGEucXVldWVDaGlsZChk
LGEocCkpLHMucHJlY2FjaGVOb2RlKHRoaXMsYyksdGhpcy5fY2xvc2luZ0NvbW1lbnQ9cCxkfXZh
ciBmPXUodGhpcy5fc3RyaW5nVGV4dCk7cmV0dXJuIGUucmVuZGVyVG9TdGF0aWNNYXJrdXA/Zjoi
PCEtLSIraSsiLS0+IitmKyI8IS0tIC9yZWFjdC10ZXh0IC0tPiJ9LHJlY2VpdmVDb21wb25lbnQ6
ZnVuY3Rpb24oZSx0KXtpZihlIT09dGhpcy5fY3VycmVudEVsZW1lbnQpe3RoaXMuX2N1cnJlbnRF
bGVtZW50PWU7dmFyIG49IiIrZTtpZihuIT09dGhpcy5fc3RyaW5nVGV4dCl7dGhpcy5fc3RyaW5n
VGV4dD1uO3ZhciByPXRoaXMuZ2V0SG9zdE5vZGUoKTtpLnJlcGxhY2VEZWxpbWl0ZWRUZXh0KHJb
MF0sclsxXSxuKX19fSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbW1lbnRO
b2RlcztpZihlKXJldHVybiBlO2lmKCF0aGlzLl9jbG9zaW5nQ29tbWVudClmb3IodmFyIHQ9cy5n
ZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpLG49dC5uZXh0U2libGluZzs7KXtpZihudWxsPT1uJiZy
KCI2NyIsdGhpcy5fZG9tSUQpLDg9PT1uLm5vZGVUeXBlJiYiIC9yZWFjdC10ZXh0ICI9PT1uLm5v
ZGVWYWx1ZSl7dGhpcy5fY2xvc2luZ0NvbW1lbnQ9bjticmVha31uPW4ubmV4dFNpYmxpbmd9cmV0
dXJuIGU9W3RoaXMuX2hvc3ROb2RlLHRoaXMuX2Nsb3NpbmdDb21tZW50XSx0aGlzLl9jb21tZW50
Tm9kZXM9ZSxlfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKCl7dGhpcy5fY2xvc2luZ0NvbW1l
bnQ9bnVsbCx0aGlzLl9jb21tZW50Tm9kZXM9bnVsbCxzLnVuY2FjaGVOb2RlKHRoaXMpfX0pLHQu
ZXhwb3J0cz1sfSx7MTEyOjExMiwxMTg6MTE4LDEzNzoxMzcsMTQzOjE0MywzMzozMyw4OjgsOTo5
LDk1Ojk1fV0sNDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe3Ro
aXMuX3Jvb3ROb2RlSUQmJmMudXBkYXRlV3JhcHBlcih0aGlzKX1mdW5jdGlvbiBvKGUpe3ZhciB0
PXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49cy5leGVjdXRlT25DaGFuZ2UodCxlKTtyZXR1
cm4gbC5hc2FwKHIsdGhpcyksbn12YXIgaT1lKDExMiksYT1lKDE0Mykscz1lKDIzKSx1PWUoMzMp
LGw9ZSg3MSksYz0oZSgxMzcpLGUoMTQyKSx7Z2V0SG9zdFByb3BzOmZ1bmN0aW9uKGUsdCl7cmV0
dXJuIG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJmkoIjkxIiksYSh7fSx0LHt2YWx1
ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjoiIitlLl93cmFwcGVyU3RhdGUu
aW5pdGlhbFZhbHVlLG9uQ2hhbmdlOmUuX3dyYXBwZXJTdGF0ZS5vbkNoYW5nZX0pfSxtb3VudFdy
YXBwZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmdldFZhbHVlKHQpLHI9bjtpZihudWxsPT1uKXt2
YXIgYT10LmRlZmF1bHRWYWx1ZSx1PXQuY2hpbGRyZW47bnVsbCE9dSYmKG51bGwhPWEmJmkoIjky
IiksQXJyYXkuaXNBcnJheSh1KSYmKHUubGVuZ3RoPD0xfHxpKCI5MyIpLHU9dVswXSksYT0iIit1
KSxudWxsPT1hJiYoYT0iIikscj1hfWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOiIiK3Is
bGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6by5iaW5kKGUpfX0sdXBkYXRlV3JhcHBlcjpmdW5jdGlv
bihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXUuZ2V0Tm9kZUZyb21JbnN0YW5j
ZShlKSxyPXMuZ2V0VmFsdWUodCk7aWYobnVsbCE9cil7dmFyIG89IiIrcjtvIT09bi52YWx1ZSYm
KG4udmFsdWU9byksbnVsbD09dC5kZWZhdWx0VmFsdWUmJihuLmRlZmF1bHRWYWx1ZT1vKX1udWxs
IT10LmRlZmF1bHRWYWx1ZSYmKG4uZGVmYXVsdFZhbHVlPXQuZGVmYXVsdFZhbHVlKX0scG9zdE1v
dW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSksbj10
LnRleHRDb250ZW50O249PT1lLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiYodC52YWx1ZT1u
KX19KTt0LmV4cG9ydHM9Y30sezExMjoxMTIsMTM3OjEzNywxNDI6MTQyLDE0MzoxNDMsMjM6MjMs
MzM6MzMsNzE6NzF9XSw0NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUsdCl7Il9ob3N0Tm9kZSJpbiBlfHx1KCIzMyIpLCJfaG9zdE5vZGUiaW4gdHx8dSgiMzMiKTtm
b3IodmFyIG49MCxyPWU7cjtyPXIuX2hvc3RQYXJlbnQpbisrO2Zvcih2YXIgbz0wLGk9dDtpO2k9
aS5faG9zdFBhcmVudClvKys7Zm9yKDtuLW8+MDspZT1lLl9ob3N0UGFyZW50LG4tLTtmb3IoO28t
bj4wOyl0PXQuX2hvc3RQYXJlbnQsby0tO2Zvcih2YXIgYT1uO2EtLTspe2lmKGU9PT10KXJldHVy
biBlO2U9ZS5faG9zdFBhcmVudCx0PXQuX2hvc3RQYXJlbnR9cmV0dXJuIG51bGx9ZnVuY3Rpb24g
byhlLHQpeyJfaG9zdE5vZGUiaW4gZXx8dSgiMzUiKSwiX2hvc3ROb2RlImluIHR8fHUoIjM1Iik7
Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10Ll9ob3N0UGFyZW50fXJldHVybiExfWZ1bmN0
aW9uIGkoZSl7cmV0dXJuIl9ob3N0Tm9kZSJpbiBlfHx1KCIzNiIpLGUuX2hvc3RQYXJlbnR9ZnVu
Y3Rpb24gYShlLHQsbil7Zm9yKHZhciByPVtdO2U7KXIucHVzaChlKSxlPWUuX2hvc3RQYXJlbnQ7
dmFyIG87Zm9yKG89ci5sZW5ndGg7by0tID4wOyl0KHJbb10sImNhcHR1cmVkIixuKTtmb3Iobz0w
O288ci5sZW5ndGg7bysrKXQocltvXSwiYnViYmxlZCIsbil9ZnVuY3Rpb24gcyhlLHQsbixvLGkp
e2Zvcih2YXIgYT1lJiZ0P3IoZSx0KTpudWxsLHM9W107ZSYmZSE9PWE7KXMucHVzaChlKSxlPWUu
X2hvc3RQYXJlbnQ7Zm9yKHZhciB1PVtdO3QmJnQhPT1hOyl1LnB1c2godCksdD10Ll9ob3N0UGFy
ZW50O3ZhciBsO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspbihzW2xdLCJidWJibGVkIixvKTtmb3Io
bD11Lmxlbmd0aDtsLS0gPjA7KW4odVtsXSwiY2FwdHVyZWQiLGkpfXZhciB1PWUoMTEyKTtlKDEz
Nyk7dC5leHBvcnRzPXtpc0FuY2VzdG9yOm8sZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3I6cixnZXRQ
YXJlbnRJbnN0YW5jZTppLHRyYXZlcnNlVHdvUGhhc2U6YSx0cmF2ZXJzZUVudGVyTGVhdmU6c319
LHsxMTI6MTEyLDEzNzoxMzd9XSw0NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDEyMCksbz1lKDMwKSxpPW87ci5hZGRvbnMmJihyLl9fU0VDUkVUX0lOSkVDVEVEX1JFQUNU
X0RPTV9ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPWkpLHQuZXhwb3J0cz1pfSx7MTIw
OjEyMCwzMDozMH1dLDQ2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
KXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCl9dmFyIG89ZSgxNDMpLGk9ZSg3MSksYT1l
KDg5KSxzPWUoMTI5KSx1PXtpbml0aWFsaXplOnMsY2xvc2U6ZnVuY3Rpb24oKXtkLmlzQmF0Y2hp
bmdVcGRhdGVzPSExfX0sbD17aW5pdGlhbGl6ZTpzLGNsb3NlOmkuZmx1c2hCYXRjaGVkVXBkYXRl
cy5iaW5kKGkpfSxjPVtsLHVdO28oci5wcm90b3R5cGUsYSx7Z2V0VHJhbnNhY3Rpb25XcmFwcGVy
czpmdW5jdGlvbigpe3JldHVybiBjfX0pO3ZhciBwPW5ldyByLGQ9e2lzQmF0Y2hpbmdVcGRhdGVz
OiExLGJhdGNoZWRVcGRhdGVzOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYT1kLmlzQmF0Y2hp
bmdVcGRhdGVzO3JldHVybiBkLmlzQmF0Y2hpbmdVcGRhdGVzPSEwLGE/ZSh0LG4scixvLGkpOnAu
cGVyZm9ybShlLG51bGwsdCxuLHIsbyxpKX19O3QuZXhwb3J0cz1kfSx7MTI5OjEyOSwxNDM6MTQz
LDcxOjcxLDg5Ojg5fV0sNDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cigpe3h8fCh4PSEwLHkuRXZlbnRFbWl0dGVyLmluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcihnKSx5
LkV2ZW50UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luT3JkZXIocykseS5FdmVudFBsdWdpblV0
aWxzLmluamVjdENvbXBvbmVudFRyZWUoZCkseS5FdmVudFBsdWdpblV0aWxzLmluamVjdFRyZWVU
cmF2ZXJzYWwoaCkseS5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1Np
bXBsZUV2ZW50UGx1Z2luOkUsRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOnUsQ2hhbmdlRXZlbnRQbHVn
aW46YSxTZWxlY3RFdmVudFBsdWdpbjpiLEJlZm9yZUlucHV0RXZlbnRQbHVnaW46aX0pLHkuSG9z
dENvbXBvbmVudC5pbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MocCkseS5Ib3N0Q29tcG9uZW50
LmluamVjdFRleHRDb21wb25lbnRDbGFzcyhtKSx5LkRPTVByb3BlcnR5LmluamVjdERPTVByb3Bl
cnR5Q29uZmlnKG8pLHkuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25maWcobCkseS5E
T01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhDKSx5LkVtcHR5Q29tcG9uZW50Lmlu
amVjdEVtcHR5Q29tcG9uZW50RmFjdG9yeShmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGYoZSl9KSx5
LlVwZGF0ZXMuaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb24oXykseS5VcGRhdGVzLmluamVjdEJh
dGNoaW5nU3RyYXRlZ3kodikseS5Db21wb25lbnQuaW5qZWN0RW52aXJvbm1lbnQoYykpfXZhciBv
PWUoMSksaT1lKDMpLGE9ZSg3KSxzPWUoMTQpLHU9ZSgxNSksbD1lKDIxKSxjPWUoMjcpLHA9ZSgz
MSksZD1lKDMzKSxmPWUoMzUpLGg9ZSg0NCksbT1lKDQyKSx2PWUoNDYpLGc9ZSg1MikseT1lKDU1
KSxfPWUoNjUpLEM9ZSg3MyksYj1lKDc0KSxFPWUoNzUpLHg9ITE7dC5leHBvcnRzPXtpbmplY3Q6
cn19LHsxOjEsMTQ6MTQsMTU6MTUsMjE6MjEsMjc6MjcsMzozLDMxOjMxLDMzOjMzLDM1OjM1LDQy
OjQyLDQ0OjQ0LDQ2OjQ2LDUyOjUyLDU1OjU1LDY1OjY1LDc6Nyw3Mzo3Myw3NDo3NCw3NTo3NX1d
LDQ4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVv
ZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7
dC5leHBvcnRzPXJ9LHt9XSw0OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixv
PXtpbmplY3RFbXB0eUNvbXBvbmVudEZhY3Rvcnk6ZnVuY3Rpb24oZSl7cj1lfX0saT17Y3JlYXRl
OmZ1bmN0aW9uKGUpe3JldHVybiByKGUpfX07aS5pbmplY3Rpb249byx0LmV4cG9ydHM9aX0se31d
LDUwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe3RyeXt0
KG4pfWNhdGNoKGUpe251bGw9PT1vJiYobz1lKX19dmFyIG89bnVsbCxpPXtpbnZva2VHdWFyZGVk
Q2FsbGJhY2s6cixpbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2g6cixyZXRocm93Q2F1Z2h0
RXJyb3I6ZnVuY3Rpb24oKXtpZihvKXt2YXIgZT1vO3Rocm93IG89bnVsbCxlfX19O3QuZXhwb3J0
cz1pfSx7fV0sNTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtv
LmVucXVldWVFdmVudHMoZSksby5wcm9jZXNzRXZlbnRRdWV1ZSghMSl9dmFyIG89ZSgxNiksaT17
aGFuZGxlVG9wTGV2ZWw6ZnVuY3Rpb24oZSx0LG4saSl7cihvLmV4dHJhY3RFdmVudHMoZSx0LG4s
aSkpfX07dC5leHBvcnRzPWl9LHsxNjoxNn1dLDUyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKDtlLl9ob3N0UGFyZW50OyllPWUuX2hvc3RQYXJlbnQ7dmFy
IHQ9cC5nZXROb2RlRnJvbUluc3RhbmNlKGUpLG49dC5wYXJlbnROb2RlO3JldHVybiBwLmdldENs
b3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG4pfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLnRvcExldmVsVHlw
ZT1lLHRoaXMubmF0aXZlRXZlbnQ9dCx0aGlzLmFuY2VzdG9ycz1bXX1mdW5jdGlvbiBpKGUpe3Zh
ciB0PWYoZS5uYXRpdmVFdmVudCksbj1wLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHQpLG89
bjtkb3tlLmFuY2VzdG9ycy5wdXNoKG8pLG89byYmcihvKX13aGlsZShvKTtmb3IodmFyIGk9MDtp
PGUuYW5jZXN0b3JzLmxlbmd0aDtpKyspbj1lLmFuY2VzdG9yc1tpXSxtLl9oYW5kbGVUb3BMZXZl
bChlLnRvcExldmVsVHlwZSxuLGUubmF0aXZlRXZlbnQsZihlLm5hdGl2ZUV2ZW50KSl9ZnVuY3Rp
b24gYShlKXtlKGgod2luZG93KSl9dmFyIHM9ZSgxNDMpLHU9ZSgxMjIpLGw9ZSgxMjMpLGM9ZSgy
NCkscD1lKDMzKSxkPWUoNzEpLGY9ZSgxMDIpLGg9ZSgxMzQpO3Moby5wcm90b3R5cGUse2Rlc3Ry
dWN0b3I6ZnVuY3Rpb24oKXt0aGlzLnRvcExldmVsVHlwZT1udWxsLHRoaXMubmF0aXZlRXZlbnQ9
bnVsbCx0aGlzLmFuY2VzdG9ycy5sZW5ndGg9MH19KSxjLmFkZFBvb2xpbmdUbyhvLGMudHdvQXJn
dW1lbnRQb29sZXIpO3ZhciBtPXtfZW5hYmxlZDohMCxfaGFuZGxlVG9wTGV2ZWw6bnVsbCxXSU5E
T1dfSEFORExFOmwuY2FuVXNlRE9NP3dpbmRvdzpudWxsLHNldEhhbmRsZVRvcExldmVsOmZ1bmN0
aW9uKGUpe20uX2hhbmRsZVRvcExldmVsPWV9LHNldEVuYWJsZWQ6ZnVuY3Rpb24oZSl7bS5fZW5h
YmxlZD0hIWV9LGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBtLl9lbmFibGVkfSx0cmFwQnVi
YmxlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91Lmxpc3RlbihuLHQsbS5kaXNwYXRj
aEV2ZW50LmJpbmQobnVsbCxlKSk6bnVsbH0sdHJhcENhcHR1cmVkRXZlbnQ6ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBuP3UuY2FwdHVyZShuLHQsbS5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCxlKSk6
bnVsbH0sbW9uaXRvclNjcm9sbFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWEuYmluZChudWxsLGUp
O3UubGlzdGVuKHdpbmRvdywic2Nyb2xsIix0KX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihlLHQp
e2lmKG0uX2VuYWJsZWQpe3ZhciBuPW8uZ2V0UG9vbGVkKGUsdCk7dHJ5e2QuYmF0Y2hlZFVwZGF0
ZXMoaSxuKX1maW5hbGx5e28ucmVsZWFzZShuKX19fX07dC5leHBvcnRzPW19LHsxMDI6MTAyLDEy
MjoxMjIsMTIzOjEyMywxMzQ6MTM0LDE0MzoxNDMsMjQ6MjQsMzM6MzMsNzE6NzF9XSw1MzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17bG9nVG9wTGV2ZWxSZW5kZXJzOiExfTt0
LmV4cG9ydHM9cn0se31dLDU0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuIHN8fGEoIjExMSIsZS50eXBlKSxuZXcgcyhlKX1mdW5jdGlvbiBvKGUpe3Jl
dHVybiBuZXcgdShlKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdX12YXIgYT1l
KDExMikscz0oZSgxMzcpLG51bGwpLHU9bnVsbCxsPXtpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xh
c3M6ZnVuY3Rpb24oZSl7cz1lfSxpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6ZnVuY3Rpb24oZSl7
dT1lfX0sYz17Y3JlYXRlSW50ZXJuYWxDb21wb25lbnQ6cixjcmVhdGVJbnN0YW5jZUZvclRleHQ6
byxpc1RleHRDb21wb25lbnQ6aSxpbmplY3Rpb246bH07dC5leHBvcnRzPWN9LHsxMTI6MTEyLDEz
NzoxMzd9XSw1NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExKSxvPWUo
MTYpLGk9ZSgxOCksYT1lKDI4KSxzPWUoNDkpLHU9ZSgyNSksbD1lKDU0KSxjPWUoNzEpLHA9e0Nv
bXBvbmVudDphLmluamVjdGlvbixET01Qcm9wZXJ0eTpyLmluamVjdGlvbixFbXB0eUNvbXBvbmVu
dDpzLmluamVjdGlvbixFdmVudFBsdWdpbkh1YjpvLmluamVjdGlvbixFdmVudFBsdWdpblV0aWxz
OmkuaW5qZWN0aW9uLEV2ZW50RW1pdHRlcjp1LmluamVjdGlvbixIb3N0Q29tcG9uZW50OmwuaW5q
ZWN0aW9uLFVwZGF0ZXM6Yy5pbmplY3Rpb259O3QuZXhwb3J0cz1wfSx7MTE6MTEsMTY6MTYsMTg6
MTgsMjU6MjUsMjg6MjgsNDk6NDksNTQ6NTQsNzE6NzF9XSw1NjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCxlKX12YXIgbz1lKDQxKSxpPWUoMTI2KSxhPWUoMTMxKSxzPWUoMTMyKSx1PXtoYXNTZWxlY3Rp
b25DYXBhYmlsaXRpZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0JiYoImlucHV0Ij09PXQmJiJ0ZXh0Ij09PWUudHlwZXx8
InRleHRhcmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX0sZ2V0U2VsZWN0aW9u
SW5mb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgZT1zKCk7cmV0dXJue2ZvY3VzZWRFbGVtOmUsc2Vs
ZWN0aW9uUmFuZ2U6dS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSk/dS5nZXRTZWxlY3Rpb24o
ZSk6bnVsbH19LHJlc3RvcmVTZWxlY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQ9cygpLG49ZS5mb2N1
c2VkRWxlbSxvPWUuc2VsZWN0aW9uUmFuZ2U7dCE9PW4mJnIobikmJih1Lmhhc1NlbGVjdGlvbkNh
cGFiaWxpdGllcyhuKSYmdS5zZXRTZWxlY3Rpb24obixvKSxhKG4pKX0sZ2V0U2VsZWN0aW9uOmZ1
bmN0aW9uKGUpe3ZhciB0O2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlKXQ9e3N0YXJ0OmUuc2VsZWN0
aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbiYm
ZS5ub2RlTmFtZSYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7dmFyIG49ZG9j
dW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7bi5wYXJlbnRFbGVtZW50KCk9PT1lJiYodD17
c3RhcnQ6LW4ubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLC1lLnZhbHVlLmxlbmd0aCksZW5kOi1uLm1v
dmVFbmQoImNoYXJhY3RlciIsLWUudmFsdWUubGVuZ3RoKX0pfWVsc2UgdD1vLmdldE9mZnNldHMo
ZSk7cmV0dXJuIHR8fHtzdGFydDowLGVuZDowfX0sc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7
dmFyIG49dC5zdGFydCxyPXQuZW5kO2lmKHZvaWQgMD09PXImJihyPW4pLCJzZWxlY3Rpb25TdGFy
dCJpbiBlKWUuc2VsZWN0aW9uU3RhcnQ9bixlLnNlbGVjdGlvbkVuZD1NYXRoLm1pbihyLGUudmFs
dWUubGVuZ3RoKTtlbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbiYmZS5ub2RlTmFtZSYmImlucHV0
Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7dmFyIGk9ZS5jcmVhdGVUZXh0UmFuZ2UoKTtp
LmNvbGxhcHNlKCEwKSxpLm1vdmVTdGFydCgiY2hhcmFjdGVyIixuKSxpLm1vdmVFbmQoImNoYXJh
Y3RlciIsci1uKSxpLnNlbGVjdCgpfWVsc2Ugby5zZXRPZmZzZXRzKGUsdCl9fTt0LmV4cG9ydHM9
dX0sezEyNjoxMjYsMTMxOjEzMSwxMzI6MTMyLDQxOjQxfV0sNTc6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9e3JlbW92ZTpmdW5jdGlvbihlKXtlLl9yZWFjdEludGVybmFsSW5z
dGFuY2U9dm9pZCAwfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX3JlYWN0SW50ZXJuYWxJbnN0
YW5jZX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lLl9yZWFjdEludGVybmFsSW5z
dGFuY2V9LHNldDpmdW5jdGlvbihlLHQpe2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZT10fX07dC5l
eHBvcnRzPXJ9LHt9XSw1ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9
e2RlYnVnVG9vbDpudWxsfX0se31dLDU5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPWUoOTIpLG89L148XCFcLVwtLyxpPXtDSEVDS1NVTV9BVFRSX05BTUU6ImRhdGEtcmVhY3Qt
Y2hlY2tzdW0iLGFkZENoZWNrc3VtVG9NYXJrdXA6ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtyZXR1
cm4gby50ZXN0KGUpP2U6ZS5yZXBsYWNlKC9cLz8+LywiICIraS5DSEVDS1NVTV9BVFRSX05BTUUr
Jz0iJyt0KyciJCYnKX0sY2FuUmV1c2VNYXJrdXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEF0
dHJpYnV0ZShpLkNIRUNLU1VNX0FUVFJfTkFNRSk7cmV0dXJuIG49biYmcGFyc2VJbnQobiwxMCks
cihlKT09PW59fTt0LmV4cG9ydHM9aX0sezkyOjkyfV0sNjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxl
bmd0aCkscj0wO3I8bjtyKyspaWYoZS5jaGFyQXQocikhPT10LmNoYXJBdChyKSlyZXR1cm4gcjty
ZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aD8tMTpufWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGU/ZS5u
b2RlVHlwZT09PUE/ZS5kb2N1bWVudEVsZW1lbnQ6ZS5maXJzdENoaWxkOm51bGx9ZnVuY3Rpb24g
aShlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKEkpfHwiIn1mdW5jdGlv
biBhKGUsdCxuLHIsbyl7dmFyIGk7aWYoYi5sb2dUb3BMZXZlbFJlbmRlcnMpe3ZhciBhPWUuX2N1
cnJlbnRFbGVtZW50LnByb3BzLmNoaWxkLHM9YS50eXBlO2k9IlJlYWN0IG1vdW50OiAiKygic3Ry
aW5nIj09dHlwZW9mIHM/czpzLmRpc3BsYXlOYW1lfHxzLm5hbWUpLGNvbnNvbGUudGltZShpKX12
YXIgdT13Lm1vdW50Q29tcG9uZW50KGUsbixudWxsLF8oZSx0KSxvLDApO2kmJmNvbnNvbGUudGlt
ZUVuZChpKSxlLl9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyPWUsai5fbW91bnRJ
bWFnZUludG9Ob2RlKHUsdCxlLHIsbil9ZnVuY3Rpb24gcyhlLHQsbixyKXt2YXIgbz1rLlJlYWN0
UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCFuJiZDLnVzZUNyZWF0ZUVsZW1lbnQpO28u
cGVyZm9ybShhLG51bGwsZSx0LG8sbixyKSxrLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVs
ZWFzZShvKX1mdW5jdGlvbiB1KGUsdCxuKXtmb3Iody51bm1vdW50Q29tcG9uZW50KGUsbiksdC5u
b2RlVHlwZT09PUEmJih0PXQuZG9jdW1lbnRFbGVtZW50KTt0Lmxhc3RDaGlsZDspdC5yZW1vdmVD
aGlsZCh0Lmxhc3RDaGlsZCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1vKGUpO2lmKHQpe3ZhciBuPXku
Z2V0SW5zdGFuY2VGcm9tTm9kZSh0KTtyZXR1cm4hKCFufHwhbi5faG9zdFBhcmVudCl9fWZ1bmN0
aW9uIGMoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PVImJmUubm9kZVR5cGUhPT1BJiZlLm5v
ZGVUeXBlIT09RCl9ZnVuY3Rpb24gcChlKXt2YXIgdD1vKGUpLG49dCYmeS5nZXRJbnN0YW5jZUZy
b21Ob2RlKHQpO3JldHVybiBuJiYhbi5faG9zdFBhcmVudD9uOm51bGx9ZnVuY3Rpb24gZChlKXt2
YXIgdD1wKGUpO3JldHVybiB0P3QuX2hvc3RDb250YWluZXJJbmZvLl90b3BMZXZlbFdyYXBwZXI6
bnVsbH12YXIgZj1lKDExMiksaD1lKDkpLG09ZSgxMSksdj1lKDEyMCksZz1lKDI1KSx5PShlKDEx
OSksZSgzMykpLF89ZSgzNCksQz1lKDM2KSxiPWUoNTMpLEU9ZSg1NykseD0oZSg1OCksZSg1OSkp
LHc9ZSg2NiksVD1lKDcwKSxrPWUoNzEpLFA9ZSgxMzApLFM9ZSgxMDgpLE49KGUoMTM3KSxlKDEx
NCkpLE09ZSgxMTYpLEk9KGUoMTQyKSxtLklEX0FUVFJJQlVURV9OQU1FKSxPPW0uUk9PVF9BVFRS
SUJVVEVfTkFNRSxSPTEsQT05LEQ9MTEsTD17fSxVPTEsRj1mdW5jdGlvbigpe3RoaXMucm9vdElE
PVUrK307Ri5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxGLnByb3RvdHlwZS5yZW5kZXI9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZH0sRi5pc1JlYWN0VG9wTGV2ZWxXcmFw
cGVyPSEwO3ZhciBqPXtUb3BMZXZlbFdyYXBwZXI6RixfaW5zdGFuY2VzQnlSZWFjdFJvb3RJRDpM
LHNjcm9sbE1vbml0b3I6ZnVuY3Rpb24oZSx0KXt0KCl9LF91cGRhdGVSb290Q29tcG9uZW50OmZ1
bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGouc2Nyb2xsTW9uaXRvcihyLGZ1bmN0aW9uKCl7VC5l
bnF1ZXVlRWxlbWVudEludGVybmFsKGUsdCxuKSxvJiZULmVucXVldWVDYWxsYmFja0ludGVybmFs
KGUsbyl9KSxlfSxfcmVuZGVyTmV3Um9vdENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXtjKHQp
fHxmKCIzNyIpLGcuZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nKCk7dmFyIG89UyhlLCExKTtr
LmJhdGNoZWRVcGRhdGVzKHMsbyx0LG4scik7dmFyIGk9by5faW5zdGFuY2Uucm9vdElEO3JldHVy
biBMW2ldPW8sb30scmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0LG4scil7
cmV0dXJuIG51bGwhPWUmJkUuaGFzKGUpfHxmKCIzOCIpLGouX3JlbmRlclN1YnRyZWVJbnRvQ29u
dGFpbmVyKGUsdCxuLHIpfSxfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6ZnVuY3Rpb24oZSx0
LG4scil7VC52YWxpZGF0ZUNhbGxiYWNrKHIsIlJlYWN0RE9NLnJlbmRlciIpLHYuaXNWYWxpZEVs
ZW1lbnQodCl8fGYoIjM5Iiwic3RyaW5nIj09dHlwZW9mIHQ/IiBJbnN0ZWFkIG9mIHBhc3Npbmcg
YSBzdHJpbmcgbGlrZSAnZGl2JywgcGFzcyBSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8
ZGl2IC8+LiI6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/IiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjbGFz
cyBsaWtlIEZvbywgcGFzcyBSZWFjdC5jcmVhdGVFbGVtZW50KEZvbykgb3IgPEZvbyAvPi4iOm51
bGwhPXQmJnZvaWQgMCE9PXQucHJvcHM/IiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgdW5pbnRlbnRp
b25hbGx5IGxvYWRpbmcgdHdvIGluZGVwZW5kZW50IGNvcGllcyBvZiBSZWFjdC4iOiIiKTt2YXIg
YSxzPXYuY3JlYXRlRWxlbWVudChGLHtjaGlsZDp0fSk7aWYoZSl7dmFyIHU9RS5nZXQoZSk7YT11
Ll9wcm9jZXNzQ2hpbGRDb250ZXh0KHUuX2NvbnRleHQpfWVsc2UgYT1QO3ZhciBjPWQobik7aWYo
Yyl7dmFyIHA9Yy5fY3VycmVudEVsZW1lbnQsaD1wLnByb3BzLmNoaWxkO2lmKE0oaCx0KSl7dmFy
IG09Yy5fcmVuZGVyZWRDb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKSxnPXImJmZ1bmN0aW9u
KCl7ci5jYWxsKG0pfTtyZXR1cm4gai5fdXBkYXRlUm9vdENvbXBvbmVudChjLHMsYSxuLGcpLG19
ai51bm1vdW50Q29tcG9uZW50QXROb2RlKG4pfXZhciB5PW8obiksXz15JiYhIWkoeSksQz1sKG4p
LGI9XyYmIWMmJiFDLHg9ai5fcmVuZGVyTmV3Um9vdENvbXBvbmVudChzLG4sYixhKS5fcmVuZGVy
ZWRDb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtyZXR1cm4gciYmci5jYWxsKHgpLHh9LHJl
bmRlcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGouX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVy
KG51bGwsZSx0LG4pfSx1bm1vdW50Q29tcG9uZW50QXROb2RlOmZ1bmN0aW9uKGUpe2MoZSl8fGYo
IjQwIik7dmFyIHQ9ZChlKTtyZXR1cm4gdD8oZGVsZXRlIExbdC5faW5zdGFuY2Uucm9vdElEXSxr
LmJhdGNoZWRVcGRhdGVzKHUsdCxlLCExKSwhMCk6KGwoZSksMT09PWUubm9kZVR5cGUmJmUuaGFz
QXR0cmlidXRlKE8pLCExKX0sX21vdW50SW1hZ2VJbnRvTm9kZTpmdW5jdGlvbihlLHQsbixpLGEp
e2lmKGModCl8fGYoIjQxIiksaSl7dmFyIHM9byh0KTtpZih4LmNhblJldXNlTWFya3VwKGUscykp
cmV0dXJuIHZvaWQgeS5wcmVjYWNoZU5vZGUobixzKTt2YXIgdT1zLmdldEF0dHJpYnV0ZSh4LkNI
RUNLU1VNX0FUVFJfTkFNRSk7cy5yZW1vdmVBdHRyaWJ1dGUoeC5DSEVDS1NVTV9BVFRSX05BTUUp
O3ZhciBsPXMub3V0ZXJIVE1MO3Muc2V0QXR0cmlidXRlKHguQ0hFQ0tTVU1fQVRUUl9OQU1FLHUp
O3ZhciBwPWUsZD1yKHAsbCksbT0iIChjbGllbnQpICIrcC5zdWJzdHJpbmcoZC0yMCxkKzIwKSsi
XG4gKHNlcnZlcikgIitsLnN1YnN0cmluZyhkLTIwLGQrMjApO3Qubm9kZVR5cGU9PT1BJiZmKCI0
MiIsbSl9aWYodC5ub2RlVHlwZT09PUEmJmYoIjQzIiksYS51c2VDcmVhdGVFbGVtZW50KXtmb3Io
O3QubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKTtoLmluc2VydFRyZWVCZWZv
cmUodCxlLG51bGwpfWVsc2UgTih0LGUpLHkucHJlY2FjaGVOb2RlKG4sdC5maXJzdENoaWxkKX19
O3QuZXhwb3J0cz1qfSx7MTA4OjEwOCwxMToxMSwxMTI6MTEyLDExNDoxMTQsMTE2OjExNiwxMTk6
MTE5LDEyMDoxMjAsMTMwOjEzMCwxMzc6MTM3LDE0MjoxNDIsMjU6MjUsMzM6MzMsMzQ6MzQsMzY6
MzYsNTM6NTMsNTc6NTcsNTg6NTgsNTk6NTksNjY6NjYsNzA6NzAsNzE6NzEsOTo5fV0sNjE6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJue3R5cGU6
IklOU0VSVF9NQVJLVVAiLGNvbnRlbnQ6ZSxmcm9tSW5kZXg6bnVsbCxmcm9tTm9kZTpudWxsLHRv
SW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJue3R5cGU6Ik1PVkVf
RVhJU1RJTkciLGNvbnRlbnQ6bnVsbCxmcm9tSW5kZXg6ZS5fbW91bnRJbmRleCxmcm9tTm9kZTpk
LmdldEhvc3ROb2RlKGUpLHRvSW5kZXg6bixhZnRlck5vZGU6dH19ZnVuY3Rpb24gaShlLHQpe3Jl
dHVybnt0eXBlOiJSRU1PVkVfTk9ERSIsY29udGVudDpudWxsLGZyb21JbmRleDplLl9tb3VudElu
ZGV4LGZyb21Ob2RlOnQsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiBhKGUp
e3JldHVybnt0eXBlOiJTRVRfTUFSS1VQIixjb250ZW50OmUsZnJvbUluZGV4Om51bGwsZnJvbU5v
ZGU6bnVsbCx0b0luZGV4Om51bGwsYWZ0ZXJOb2RlOm51bGx9fWZ1bmN0aW9uIHMoZSl7cmV0dXJu
e3R5cGU6IlRFWFRfQ09OVEVOVCIsY29udGVudDplLGZyb21JbmRleDpudWxsLGZyb21Ob2RlOm51
bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpudWxsfX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHQm
JihlPWV8fFtdLGUucHVzaCh0KSksZX1mdW5jdGlvbiBsKGUsdCl7cC5wcm9jZXNzQ2hpbGRyZW5V
cGRhdGVzKGUsdCl9dmFyIGM9ZSgxMTIpLHA9ZSgyOCksZD0oZSg1NyksZSg1OCksZSgxMTkpLGUo
NjYpKSxmPWUoMjYpLGg9KGUoMTI5KSxlKDk3KSksbT0oZSgxMzcpLHtNaXhpbjp7X3JlY29uY2ls
ZXJJbnN0YW50aWF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZi5pbnN0YW50aWF0
ZUNoaWxkcmVuKGUsdCxuKX0sX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQs
bixyLG8saSl7dmFyIGE7cmV0dXJuIGE9aCh0LDApLGYudXBkYXRlQ2hpbGRyZW4oZSxhLG4scixv
LHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8saSwwKSxhfSxtb3VudENoaWxkcmVuOmZ1bmN0
aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbihlLHQs
bik7dGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1yO3ZhciBvPVtdLGk9MDtmb3IodmFyIGEgaW4gcilp
ZihyLmhhc093blByb3BlcnR5KGEpKXt2YXIgcz1yW2FdLHU9ZC5tb3VudENvbXBvbmVudChzLHQs
dGhpcyx0aGlzLl9ob3N0Q29udGFpbmVySW5mbyxuLDApO3MuX21vdW50SW5kZXg9aSsrLG8ucHVz
aCh1KX1yZXR1cm4gb30sdXBkYXRlVGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5f
cmVuZGVyZWRDaGlsZHJlbjtmLnVubW91bnRDaGlsZHJlbih0LCExKTtmb3IodmFyIG4gaW4gdCl0
Lmhhc093blByb3BlcnR5KG4pJiZjKCIxMTgiKTtsKHRoaXMsW3MoZSldKX0sdXBkYXRlTWFya3Vw
OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRy
ZW4odCwhMSk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7bCh0
aGlzLFthKGUpXSl9LHVwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLl91cGRhdGVD
aGlsZHJlbihlLHQsbil9LF91cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhp
cy5fcmVuZGVyZWRDaGlsZHJlbixvPXt9LGk9W10sYT10aGlzLl9yZWNvbmNpbGVyVXBkYXRlQ2hp
bGRyZW4ocixlLGksbyx0LG4pO2lmKGF8fHIpe3ZhciBzLGM9bnVsbCxwPTAsZj0wLGg9MCxtPW51
bGw7Zm9yKHMgaW4gYSlpZihhLmhhc093blByb3BlcnR5KHMpKXt2YXIgdj1yJiZyW3NdLGc9YVtz
XTt2PT09Zz8oYz11KGMsdGhpcy5tb3ZlQ2hpbGQodixtLHAsZikpLGY9TWF0aC5tYXgodi5fbW91
bnRJbmRleCxmKSx2Ll9tb3VudEluZGV4PXApOih2JiYoZj1NYXRoLm1heCh2Ll9tb3VudEluZGV4
LGYpKSxjPXUoYyx0aGlzLl9tb3VudENoaWxkQXRJbmRleChnLGlbaF0sbSxwLHQsbikpLGgrKyks
cCsrLG09ZC5nZXRIb3N0Tm9kZShnKX1mb3IocyBpbiBvKW8uaGFzT3duUHJvcGVydHkocykmJihj
PXUoYyx0aGlzLl91bm1vdW50Q2hpbGQocltzXSxvW3NdKSkpO2MmJmwodGhpcyxjKSx0aGlzLl9y
ZW5kZXJlZENoaWxkcmVuPWF9fSx1bm1vdW50Q2hpbGRyZW46ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5fcmVuZGVyZWRDaGlsZHJlbjtmLnVubW91bnRDaGlsZHJlbih0LGUpLHRoaXMuX3JlbmRlcmVk
Q2hpbGRyZW49bnVsbH0sbW92ZUNoaWxkOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUuX21vdW50SW5k
ZXg8cilyZXR1cm4gbyhlLHQsbil9LGNyZWF0ZUNoaWxkOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
cihuLHQsZS5fbW91bnRJbmRleCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGko
ZSx0KX0sX21vdW50Q2hpbGRBdEluZGV4OmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXtyZXR1cm4gZS5f
bW91bnRJbmRleD1yLHRoaXMuY3JlYXRlQ2hpbGQoZSxuLHQpfSxfdW5tb3VudENoaWxkOmZ1bmN0
aW9uKGUsdCl7dmFyIG49dGhpcy5yZW1vdmVDaGlsZChlLHQpO3JldHVybiBlLl9tb3VudEluZGV4
PW51bGwsbn19fSk7dC5leHBvcnRzPW19LHsxMTI6MTEyLDExOToxMTksMTI5OjEyOSwxMzc6MTM3
LDI2OjI2LDI4OjI4LDU3OjU3LDU4OjU4LDY2OjY2LDk3Ojk3fV0sNjI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89ZSgxMjApLGk9KGUoMTM3KSx7SE9TVDowLENP
TVBPU0lURToxLEVNUFRZOjIsZ2V0VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fCEx
PT09ZT9pLkVNUFRZOm8uaXNWYWxpZEVsZW1lbnQoZSk/ImZ1bmN0aW9uIj09dHlwZW9mIGUudHlw
ZT9pLkNPTVBPU0lURTppLkhPU1Q6dm9pZCByKCIyNiIsZSl9fSk7dC5leHBvcnRzPWl9LHsxMTI6
MTEyLDEyMDoxMjAsMTM3OjEzN31dLDYzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7cmV0dXJuISghZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuYXR0YWNoUmVmfHwi
ZnVuY3Rpb24iIT10eXBlb2YgZS5kZXRhY2hSZWYpfXZhciBvPWUoMTEyKSxpPShlKDEzNykse2Fk
ZENvbXBvbmVudEFzUmVmVG86ZnVuY3Rpb24oZSx0LG4pe3Iobil8fG8oIjExOSIpLG4uYXR0YWNo
UmVmKHQsZSl9LHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTpmdW5jdGlvbihlLHQsbil7cihuKXx8
bygiMTIwIik7dmFyIGk9bi5nZXRQdWJsaWNJbnN0YW5jZSgpO2kmJmkucmVmc1t0XT09PWUuZ2V0
UHVibGljSW5zdGFuY2UoKSYmbi5kZXRhY2hSZWYodCl9fSk7dC5leHBvcnRzPWl9LHsxMTI6MTEy
LDEzNzoxMzd9XSw2NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IlNF
Q1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0se31dLDY1OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5yZWluaXRpYWxpemVU
cmFuc2FjdGlvbigpLHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXA9ITEsdGhpcy5yZWFjdE1vdW50
UmVhZHk9aS5nZXRQb29sZWQobnVsbCksdGhpcy51c2VDcmVhdGVFbGVtZW50PWV9dmFyIG89ZSgx
NDMpLGk9ZSg2KSxhPWUoMjQpLHM9ZSgyNSksdT1lKDU2KSxsPShlKDU4KSxlKDg5KSksYz1lKDcw
KSxwPXtpbml0aWFsaXplOnUuZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24sY2xvc2U6dS5yZXN0b3Jl
U2VsZWN0aW9ufSxkPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9cy5pc0VuYWJsZWQoKTty
ZXR1cm4gcy5zZXRFbmFibGVkKCExKSxlfSxjbG9zZTpmdW5jdGlvbihlKXtzLnNldEVuYWJsZWQo
ZSl9fSxmPXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQo
KX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKX19LGg9
W3AsZCxmXSxtPXtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LGdl
dFJlYWN0TW91bnRSZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeX0s
Z2V0VXBkYXRlUXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sY2hlY2twb2ludDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCl9LHJvbGxiYWNrOmZ1bmN0
aW9uKGUpe3RoaXMucmVhY3RNb3VudFJlYWR5LnJvbGxiYWNrKGUpfSxkZXN0cnVjdG9yOmZ1bmN0
aW9uKCl7aS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KSx0aGlzLnJlYWN0TW91bnRSZWFk
eT1udWxsfX07byhyLnByb3RvdHlwZSxsLG0pLGEuYWRkUG9vbGluZ1RvKHIpLHQuZXhwb3J0cz1y
fSx7MTQzOjE0MywyNDoyNCwyNToyNSw1Njo1Niw1ODo1OCw2OjYsNzA6NzAsODk6ODl9XSw2Njpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7by5hdHRhY2hSZWZzKHRo
aXMsdGhpcy5fY3VycmVudEVsZW1lbnQpfXZhciBvPWUoNjcpLGk9KGUoNTgpLGUoMTQyKSx7bW91
bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4sbyxpLGEpe3ZhciBzPWUubW91bnRDb21wb25lbnQo
dCxuLG8saSxhKTtyZXR1cm4gZS5fY3VycmVudEVsZW1lbnQmJm51bGwhPWUuX2N1cnJlbnRFbGVt
ZW50LnJlZiYmdC5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHIsZSksc30sZ2V0SG9zdE5v
ZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG9zdE5vZGUoKX0sdW5tb3VudENvbXBvbmVudDpm
dW5jdGlvbihlLHQpe28uZGV0YWNoUmVmcyhlLGUuX2N1cnJlbnRFbGVtZW50KSxlLnVubW91bnRD
b21wb25lbnQodCl9LHJlY2VpdmVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIGE9ZS5f
Y3VycmVudEVsZW1lbnQ7aWYodCE9PWF8fGkhPT1lLl9jb250ZXh0KXt2YXIgcz1vLnNob3VsZFVw
ZGF0ZVJlZnMoYSx0KTtzJiZvLmRldGFjaFJlZnMoZSxhKSxlLnJlY2VpdmVDb21wb25lbnQodCxu
LGkpLHMmJmUuX2N1cnJlbnRFbGVtZW50JiZudWxsIT1lLl9jdXJyZW50RWxlbWVudC5yZWYmJm4u
Z2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShyLGUpfX0scGVyZm9ybVVwZGF0ZUlmTmVjZXNz
YXJ5OmZ1bmN0aW9uKGUsdCxuKXtlLl91cGRhdGVCYXRjaE51bWJlcj09PW4mJmUucGVyZm9ybVVw
ZGF0ZUlmTmVjZXNzYXJ5KHQpfX0pO3QuZXhwb3J0cz1pfSx7MTQyOjE0Miw1ODo1OCw2Nzo2N31d
LDY3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4peyJmdW5j
dGlvbiI9PXR5cGVvZiBlP2UodC5nZXRQdWJsaWNJbnN0YW5jZSgpKTppLmFkZENvbXBvbmVudEFz
UmVmVG8odCxlLG4pfWZ1bmN0aW9uIG8oZSx0LG4peyJmdW5jdGlvbiI9PXR5cGVvZiBlP2UobnVs
bCk6aS5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20odCxlLG4pfXZhciBpPWUoNjMpLGE9e307YS5h
dHRhY2hSZWZzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7
dmFyIG49dC5yZWY7bnVsbCE9biYmcihuLGUsdC5fb3duZXIpfX0sYS5zaG91bGRVcGRhdGVSZWZz
PWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbCxyPW51bGw7bnVsbCE9PWUmJiJvYmplY3QiPT10eXBl
b2YgZSYmKG49ZS5yZWYscj1lLl9vd25lcik7dmFyIG89bnVsbCxpPW51bGw7cmV0dXJuIG51bGwh
PT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJihvPXQucmVmLGk9dC5fb3duZXIpLG4hPT1vfHwic3Ry
aW5nIj09dHlwZW9mIG8mJmkhPT1yfSxhLmRldGFjaFJlZnM9ZnVuY3Rpb24oZSx0KXtpZihudWxs
IT09dCYmIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgbj10LnJlZjtudWxsIT1uJiZvKG4sZSx0Ll9v
d25lcil9fSx0LmV4cG9ydHM9YX0sezYzOjYzfV0sNjg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlKXt0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5y
ZW5kZXJUb1N0YXRpY01hcmt1cD1lLHRoaXMudXNlQ3JlYXRlRWxlbWVudD0hMSx0aGlzLnVwZGF0
ZVF1ZXVlPW5ldyBzKHRoaXMpfXZhciBvPWUoMTQzKSxpPWUoMjQpLGE9ZSg4OSkscz0oZSg1OCks
ZSg2OSkpLHU9W10sbD17ZW5xdWV1ZTpmdW5jdGlvbigpe319LGM9e2dldFRyYW5zYWN0aW9uV3Jh
cHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sZ2V0UmVhY3RNb3VudFJlYWR5OmZ1bmN0aW9uKCl7
cmV0dXJuIGx9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlUXVl
dWV9LGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt9LGNoZWNrcG9pbnQ6ZnVuY3Rpb24oKXt9LHJvbGxi
YWNrOmZ1bmN0aW9uKCl7fX07byhyLnByb3RvdHlwZSxhLGMpLGkuYWRkUG9vbGluZ1RvKHIpLHQu
ZXhwb3J0cz1yfSx7MTQzOjE0MywyNDoyNCw1ODo1OCw2OTo2OSw4OTo4OX1dLDY5OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0
KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24i
KX12YXIgbz1lKDcwKSxpPShlKDE0MiksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxl
KSx0aGlzLnRyYW5zYWN0aW9uPXR9cmV0dXJuIGUucHJvdG90eXBlLmlzTW91bnRlZD1mdW5jdGlv
bihlKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxu
KXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVDYWxsYmFjayhl
LHQsbil9LGUucHJvdG90eXBlLmVucXVldWVGb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnRy
YW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVGb3JjZVVwZGF0ZShlKX0sZS5w
cm90b3R5cGUuZW5xdWV1ZVJlcGxhY2VTdGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rp
b24uaXNJblRyYW5zYWN0aW9uKCkmJm8uZW5xdWV1ZVJlcGxhY2VTdGF0ZShlLHQpfSxlLnByb3Rv
dHlwZS5lbnF1ZXVlU2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5U
cmFuc2FjdGlvbigpJiZvLmVucXVldWVTZXRTdGF0ZShlLHQpfSxlfSgpKTt0LmV4cG9ydHM9aX0s
ezE0MjoxNDIsNzA6NzB9XSw3MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe3UuZW5xdWV1ZVVwZGF0ZShlKX1mdW5jdGlvbiBvKGUpe3ZhciB0PXR5cGVvZiBlO2lm
KCJvYmplY3QiIT09dClyZXR1cm4gdDt2YXIgbj1lLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9y
Lm5hbWV8fHQscj1PYmplY3Qua2V5cyhlKTtyZXR1cm4gci5sZW5ndGg+MCYmci5sZW5ndGg8MjA/
bisiIChrZXlzOiAiK3Iuam9pbigiLCAiKSsiKSI6bn1mdW5jdGlvbiBpKGUsdCl7dmFyIG49cy5n
ZXQoZSk7cmV0dXJuIG58fG51bGx9dmFyIGE9ZSgxMTIpLHM9KGUoMTE5KSxlKDU3KSksdT0oZSg1
OCksZSg3MSkpLGw9KGUoMTM3KSxlKDE0Mikse2lzTW91bnRlZDpmdW5jdGlvbihlKXt2YXIgdD1z
LmdldChlKTtyZXR1cm4hIXQmJiEhdC5fcmVuZGVyZWRDb21wb25lbnR9LGVucXVldWVDYWxsYmFj
azpmdW5jdGlvbihlLHQsbil7bC52YWxpZGF0ZUNhbGxiYWNrKHQsbik7dmFyIG89aShlKTtpZigh
bylyZXR1cm4gbnVsbDtvLl9wZW5kaW5nQ2FsbGJhY2tzP28uX3BlbmRpbmdDYWxsYmFja3MucHVz
aCh0KTpvLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxyKG8pfSxlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5h
bDpmdW5jdGlvbihlLHQpe2UuX3BlbmRpbmdDYWxsYmFja3M/ZS5fcGVuZGluZ0NhbGxiYWNrcy5w
dXNoKHQpOmUuX3BlbmRpbmdDYWxsYmFja3M9W3RdLHIoZSl9LGVucXVldWVGb3JjZVVwZGF0ZTpm
dW5jdGlvbihlKXt2YXIgdD1pKGUsImZvcmNlVXBkYXRlIik7dCYmKHQuX3BlbmRpbmdGb3JjZVVw
ZGF0ZT0hMCxyKHQpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIG89
aShlLCJyZXBsYWNlU3RhdGUiKTtvJiYoby5fcGVuZGluZ1N0YXRlUXVldWU9W3RdLG8uX3BlbmRp
bmdSZXBsYWNlU3RhdGU9ITAsdm9pZCAwIT09biYmbnVsbCE9PW4mJihsLnZhbGlkYXRlQ2FsbGJh
Y2sobiwicmVwbGFjZVN0YXRlIiksby5fcGVuZGluZ0NhbGxiYWNrcz9vLl9wZW5kaW5nQ2FsbGJh
Y2tzLnB1c2gobik6by5fcGVuZGluZ0NhbGxiYWNrcz1bbl0pLHIobykpfSxlbnF1ZXVlU2V0U3Rh
dGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pKGUsInNldFN0YXRlIik7biYmKChuLl9wZW5kaW5nU3Rh
dGVRdWV1ZXx8KG4uX3BlbmRpbmdTdGF0ZVF1ZXVlPVtdKSkucHVzaCh0KSxyKG4pKX0sZW5xdWV1
ZUVsZW1lbnRJbnRlcm5hbDpmdW5jdGlvbihlLHQsbil7ZS5fcGVuZGluZ0VsZW1lbnQ9dCxlLl9j
b250ZXh0PW4scihlKX0sdmFsaWRhdGVDYWxsYmFjazpmdW5jdGlvbihlLHQpe2UmJiJmdW5jdGlv
biIhPXR5cGVvZiBlJiZhKCIxMjIiLHQsbyhlKSl9fSk7dC5leHBvcnRzPWx9LHsxMTI6MTEyLDEx
OToxMTksMTM3OjEzNywxNDI6MTQyLDU3OjU3LDU4OjU4LDcxOjcxfV0sNzE6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe1AuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
biYmYnx8YygiMTIzIil9ZnVuY3Rpb24gbygpe3RoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24o
KSx0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1udWxsLHRoaXMuY2FsbGJhY2tRdWV1ZT1kLmdl
dFBvb2xlZCgpLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb249UC5SZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9uLmdldFBvb2xlZCghMCl9ZnVuY3Rpb24gaShlLHQsbixvLGksYSl7cmV0dXJuIHIoKSxi
LmJhdGNoZWRVcGRhdGVzKGUsdCxuLG8saSxhKX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGUuX21v
dW50T3JkZXItdC5fbW91bnRPcmRlcn1mdW5jdGlvbiBzKGUpe3ZhciB0PWUuZGlydHlDb21wb25l
bnRzTGVuZ3RoO3QhPT1nLmxlbmd0aCYmYygiMTI0Iix0LGcubGVuZ3RoKSxnLnNvcnQoYSkseSsr
O2Zvcih2YXIgbj0wO248dDtuKyspe3ZhciByPWdbbl0sbz1yLl9wZW5kaW5nQ2FsbGJhY2tzO3Iu
X3BlbmRpbmdDYWxsYmFja3M9bnVsbDt2YXIgaTtpZihoLmxvZ1RvcExldmVsUmVuZGVycyl7dmFy
IHM9cjtyLl9jdXJyZW50RWxlbWVudC50eXBlLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXImJihzPXIu
X3JlbmRlcmVkQ29tcG9uZW50KSxpPSJSZWFjdCB1cGRhdGU6ICIrcy5nZXROYW1lKCksY29uc29s
ZS50aW1lKGkpfWlmKG0ucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHIsZS5yZWNvbmNpbGVUcmFu
c2FjdGlvbix5KSxpJiZjb25zb2xlLnRpbWVFbmQoaSksbylmb3IodmFyIHU9MDt1PG8ubGVuZ3Ro
O3UrKyllLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShvW3VdLHIuZ2V0UHVibGljSW5zdGFuY2UoKSl9
fWZ1bmN0aW9uIHUoZSl7aWYocigpLCFiLmlzQmF0Y2hpbmdVcGRhdGVzKXJldHVybiB2b2lkIGIu
YmF0Y2hlZFVwZGF0ZXModSxlKTtnLnB1c2goZSksbnVsbD09ZS5fdXBkYXRlQmF0Y2hOdW1iZXIm
JihlLl91cGRhdGVCYXRjaE51bWJlcj15KzEpfWZ1bmN0aW9uIGwoZSx0KXtiLmlzQmF0Y2hpbmdV
cGRhdGVzfHxjKCIxMjUiKSxfLmVucXVldWUoZSx0KSxDPSEwfXZhciBjPWUoMTEyKSxwPWUoMTQz
KSxkPWUoNiksZj1lKDI0KSxoPWUoNTMpLG09ZSg2Niksdj1lKDg5KSxnPShlKDEzNyksW10pLHk9
MCxfPWQuZ2V0UG9vbGVkKCksQz0hMSxiPW51bGwsRT17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3Ro
aXMuZGlydHlDb21wb25lbnRzTGVuZ3RoPWcubGVuZ3RofSxjbG9zZTpmdW5jdGlvbigpe3RoaXMu
ZGlydHlDb21wb25lbnRzTGVuZ3RoIT09Zy5sZW5ndGg/KGcuc3BsaWNlKDAsdGhpcy5kaXJ0eUNv
bXBvbmVudHNMZW5ndGgpLFQoKSk6Zy5sZW5ndGg9MH19LHg9e2luaXRpYWxpemU6ZnVuY3Rpb24o
KXt0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmNhbGxi
YWNrUXVldWUubm90aWZ5QWxsKCl9fSx3PVtFLHhdO3Aoby5wcm90b3R5cGUsdix7Z2V0VHJhbnNh
Y3Rpb25XcmFwcGVyczpmdW5jdGlvbigpe3JldHVybiB3fSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7
dGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVsbCxkLnJlbGVhc2UodGhpcy5jYWxsYmFja1F1
ZXVlKSx0aGlzLmNhbGxiYWNrUXVldWU9bnVsbCxQLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24u
cmVsZWFzZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0
aW9uPW51bGx9LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LnBlcmZvcm0uY2FsbCh0
aGlzLHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybSx0aGlzLnJlY29uY2lsZVRyYW5z
YWN0aW9uLGUsdCxuKX19KSxmLmFkZFBvb2xpbmdUbyhvKTt2YXIgVD1mdW5jdGlvbigpe2Zvcig7
Zy5sZW5ndGh8fEM7KXtpZihnLmxlbmd0aCl7dmFyIGU9by5nZXRQb29sZWQoKTtlLnBlcmZvcm0o
cyxudWxsLGUpLG8ucmVsZWFzZShlKX1pZihDKXtDPSExO3ZhciB0PV87Xz1kLmdldFBvb2xlZCgp
LHQubm90aWZ5QWxsKCksZC5yZWxlYXNlKHQpfX19LGs9e2luamVjdFJlY29uY2lsZVRyYW5zYWN0
aW9uOmZ1bmN0aW9uKGUpe2V8fGMoIjEyNiIpLFAuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbj1l
fSxpbmplY3RCYXRjaGluZ1N0cmF0ZWd5OmZ1bmN0aW9uKGUpe2V8fGMoIjEyNyIpLCJmdW5jdGlv
biIhPXR5cGVvZiBlLmJhdGNoZWRVcGRhdGVzJiZjKCIxMjgiKSwiYm9vbGVhbiIhPXR5cGVvZiBl
LmlzQmF0Y2hpbmdVcGRhdGVzJiZjKCIxMjkiKSxiPWV9fSxQPXtSZWFjdFJlY29uY2lsZVRyYW5z
YWN0aW9uOm51bGwsYmF0Y2hlZFVwZGF0ZXM6aSxlbnF1ZXVlVXBkYXRlOnUsZmx1c2hCYXRjaGVk
VXBkYXRlczpULGluamVjdGlvbjprLGFzYXA6bH07dC5leHBvcnRzPVB9LHsxMTI6MTEyLDEzNzox
MzcsMTQzOjE0MywyNDoyNCw1Mzo1Myw2OjYsNjY6NjYsODk6ODl9XSw3MjpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSw3MzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17eGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIn0sbz17YWNjZW50
SGVpZ2h0OiJhY2NlbnQtaGVpZ2h0IixhY2N1bXVsYXRlOjAsYWRkaXRpdmU6MCxhbGlnbm1lbnRC
YXNlbGluZToiYWxpZ25tZW50LWJhc2VsaW5lIixhbGxvd1Jlb3JkZXI6ImFsbG93UmVvcmRlciIs
YWxwaGFiZXRpYzowLGFtcGxpdHVkZTowLGFyYWJpY0Zvcm06ImFyYWJpYy1mb3JtIixhc2NlbnQ6
MCxhdHRyaWJ1dGVOYW1lOiJhdHRyaWJ1dGVOYW1lIixhdHRyaWJ1dGVUeXBlOiJhdHRyaWJ1dGVU
eXBlIixhdXRvUmV2ZXJzZToiYXV0b1JldmVyc2UiLGF6aW11dGg6MCxiYXNlRnJlcXVlbmN5OiJi
YXNlRnJlcXVlbmN5IixiYXNlUHJvZmlsZToiYmFzZVByb2ZpbGUiLGJhc2VsaW5lU2hpZnQ6ImJh
c2VsaW5lLXNoaWZ0IixiYm94OjAsYmVnaW46MCxiaWFzOjAsYnk6MCxjYWxjTW9kZToiY2FsY01v
ZGUiLGNhcEhlaWdodDoiY2FwLWhlaWdodCIsY2xpcDowLGNsaXBQYXRoOiJjbGlwLXBhdGgiLGNs
aXBSdWxlOiJjbGlwLXJ1bGUiLGNsaXBQYXRoVW5pdHM6ImNsaXBQYXRoVW5pdHMiLGNvbG9ySW50
ZXJwb2xhdGlvbjoiY29sb3ItaW50ZXJwb2xhdGlvbiIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
czoiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIixjb2xvclByb2ZpbGU6ImNvbG9yLXByb2Zp
bGUiLGNvbG9yUmVuZGVyaW5nOiJjb2xvci1yZW5kZXJpbmciLGNvbnRlbnRTY3JpcHRUeXBlOiJj
b250ZW50U2NyaXB0VHlwZSIsY29udGVudFN0eWxlVHlwZToiY29udGVudFN0eWxlVHlwZSIsY3Vy
c29yOjAsY3g6MCxjeTowLGQ6MCxkZWNlbGVyYXRlOjAsZGVzY2VudDowLGRpZmZ1c2VDb25zdGFu
dDoiZGlmZnVzZUNvbnN0YW50IixkaXJlY3Rpb246MCxkaXNwbGF5OjAsZGl2aXNvcjowLGRvbWlu
YW50QmFzZWxpbmU6ImRvbWluYW50LWJhc2VsaW5lIixkdXI6MCxkeDowLGR5OjAsZWRnZU1vZGU6
ImVkZ2VNb2RlIixlbGV2YXRpb246MCxlbmFibGVCYWNrZ3JvdW5kOiJlbmFibGUtYmFja2dyb3Vu
ZCIsZW5kOjAsZXhwb25lbnQ6MCxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiJleHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkIixmaWxsOjAsZmlsbE9wYWNpdHk6ImZpbGwtb3BhY2l0eSIsZmlsbFJ1
bGU6ImZpbGwtcnVsZSIsZmlsdGVyOjAsZmlsdGVyUmVzOiJmaWx0ZXJSZXMiLGZpbHRlclVuaXRz
OiJmaWx0ZXJVbml0cyIsZmxvb2RDb2xvcjoiZmxvb2QtY29sb3IiLGZsb29kT3BhY2l0eToiZmxv
b2Qtb3BhY2l0eSIsZm9jdXNhYmxlOjAsZm9udEZhbWlseToiZm9udC1mYW1pbHkiLGZvbnRTaXpl
OiJmb250LXNpemUiLGZvbnRTaXplQWRqdXN0OiJmb250LXNpemUtYWRqdXN0Iixmb250U3RyZXRj
aDoiZm9udC1zdHJldGNoIixmb250U3R5bGU6ImZvbnQtc3R5bGUiLGZvbnRWYXJpYW50OiJmb250
LXZhcmlhbnQiLGZvbnRXZWlnaHQ6ImZvbnQtd2VpZ2h0Iixmb3JtYXQ6MCxmcm9tOjAsZng6MCxm
eTowLGcxOjAsZzI6MCxnbHlwaE5hbWU6ImdseXBoLW5hbWUiLGdseXBoT3JpZW50YXRpb25Ib3Jp
em9udGFsOiJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIixnbHlwaE9yaWVudGF0aW9uVmVy
dGljYWw6ImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIixnbHlwaFJlZjoiZ2x5cGhSZWYiLGdy
YWRpZW50VHJhbnNmb3JtOiJncmFkaWVudFRyYW5zZm9ybSIsZ3JhZGllbnRVbml0czoiZ3JhZGll
bnRVbml0cyIsaGFuZ2luZzowLGhvcml6QWR2WDoiaG9yaXotYWR2LXgiLGhvcml6T3JpZ2luWDoi
aG9yaXotb3JpZ2luLXgiLGlkZW9ncmFwaGljOjAsaW1hZ2VSZW5kZXJpbmc6ImltYWdlLXJlbmRl
cmluZyIsaW46MCxpbjI6MCxpbnRlcmNlcHQ6MCxrOjAsazE6MCxrMjowLGszOjAsazQ6MCxrZXJu
ZWxNYXRyaXg6Imtlcm5lbE1hdHJpeCIsa2VybmVsVW5pdExlbmd0aDoia2VybmVsVW5pdExlbmd0
aCIsa2VybmluZzowLGtleVBvaW50czoia2V5UG9pbnRzIixrZXlTcGxpbmVzOiJrZXlTcGxpbmVz
IixrZXlUaW1lczoia2V5VGltZXMiLGxlbmd0aEFkanVzdDoibGVuZ3RoQWRqdXN0IixsZXR0ZXJT
cGFjaW5nOiJsZXR0ZXItc3BhY2luZyIsbGlnaHRpbmdDb2xvcjoibGlnaHRpbmctY29sb3IiLGxp
bWl0aW5nQ29uZUFuZ2xlOiJsaW1pdGluZ0NvbmVBbmdsZSIsbG9jYWw6MCxtYXJrZXJFbmQ6Im1h
cmtlci1lbmQiLG1hcmtlck1pZDoibWFya2VyLW1pZCIsbWFya2VyU3RhcnQ6Im1hcmtlci1zdGFy
dCIsbWFya2VySGVpZ2h0OiJtYXJrZXJIZWlnaHQiLG1hcmtlclVuaXRzOiJtYXJrZXJVbml0cyIs
bWFya2VyV2lkdGg6Im1hcmtlcldpZHRoIixtYXNrOjAsbWFza0NvbnRlbnRVbml0czoibWFza0Nv
bnRlbnRVbml0cyIsbWFza1VuaXRzOiJtYXNrVW5pdHMiLG1hdGhlbWF0aWNhbDowLG1vZGU6MCxu
dW1PY3RhdmVzOiJudW1PY3RhdmVzIixvZmZzZXQ6MCxvcGFjaXR5OjAsb3BlcmF0b3I6MCxvcmRl
cjowLG9yaWVudDowLG9yaWVudGF0aW9uOjAsb3JpZ2luOjAsb3ZlcmZsb3c6MCxvdmVybGluZVBv
c2l0aW9uOiJvdmVybGluZS1wb3NpdGlvbiIsb3ZlcmxpbmVUaGlja25lc3M6Im92ZXJsaW5lLXRo
aWNrbmVzcyIscGFpbnRPcmRlcjoicGFpbnQtb3JkZXIiLHBhbm9zZTE6InBhbm9zZS0xIixwYXRo
TGVuZ3RoOiJwYXRoTGVuZ3RoIixwYXR0ZXJuQ29udGVudFVuaXRzOiJwYXR0ZXJuQ29udGVudFVu
aXRzIixwYXR0ZXJuVHJhbnNmb3JtOiJwYXR0ZXJuVHJhbnNmb3JtIixwYXR0ZXJuVW5pdHM6InBh
dHRlcm5Vbml0cyIscG9pbnRlckV2ZW50czoicG9pbnRlci1ldmVudHMiLHBvaW50czowLHBvaW50
c0F0WDoicG9pbnRzQXRYIixwb2ludHNBdFk6InBvaW50c0F0WSIscG9pbnRzQXRaOiJwb2ludHNB
dFoiLHByZXNlcnZlQWxwaGE6InByZXNlcnZlQWxwaGEiLHByZXNlcnZlQXNwZWN0UmF0aW86InBy
ZXNlcnZlQXNwZWN0UmF0aW8iLHByaW1pdGl2ZVVuaXRzOiJwcmltaXRpdmVVbml0cyIscjowLHJh
ZGl1czowLHJlZlg6InJlZlgiLHJlZlk6InJlZlkiLHJlbmRlcmluZ0ludGVudDoicmVuZGVyaW5n
LWludGVudCIscmVwZWF0Q291bnQ6InJlcGVhdENvdW50IixyZXBlYXREdXI6InJlcGVhdER1ciIs
cmVxdWlyZWRFeHRlbnNpb25zOiJyZXF1aXJlZEV4dGVuc2lvbnMiLHJlcXVpcmVkRmVhdHVyZXM6
InJlcXVpcmVkRmVhdHVyZXMiLHJlc3RhcnQ6MCxyZXN1bHQ6MCxyb3RhdGU6MCxyeDowLHJ5OjAs
c2NhbGU6MCxzZWVkOjAsc2hhcGVSZW5kZXJpbmc6InNoYXBlLXJlbmRlcmluZyIsc2xvcGU6MCxz
cGFjaW5nOjAsc3BlY3VsYXJDb25zdGFudDoic3BlY3VsYXJDb25zdGFudCIsc3BlY3VsYXJFeHBv
bmVudDoic3BlY3VsYXJFeHBvbmVudCIsc3BlZWQ6MCxzcHJlYWRNZXRob2Q6InNwcmVhZE1ldGhv
ZCIsc3RhcnRPZmZzZXQ6InN0YXJ0T2Zmc2V0IixzdGREZXZpYXRpb246InN0ZERldmlhdGlvbiIs
c3RlbWg6MCxzdGVtdjowLHN0aXRjaFRpbGVzOiJzdGl0Y2hUaWxlcyIsc3RvcENvbG9yOiJzdG9w
LWNvbG9yIixzdG9wT3BhY2l0eToic3RvcC1vcGFjaXR5IixzdHJpa2V0aHJvdWdoUG9zaXRpb246
InN0cmlrZXRocm91Z2gtcG9zaXRpb24iLHN0cmlrZXRocm91Z2hUaGlja25lc3M6InN0cmlrZXRo
cm91Z2gtdGhpY2tuZXNzIixzdHJpbmc6MCxzdHJva2U6MCxzdHJva2VEYXNoYXJyYXk6InN0cm9r
ZS1kYXNoYXJyYXkiLHN0cm9rZURhc2hvZmZzZXQ6InN0cm9rZS1kYXNob2Zmc2V0IixzdHJva2VM
aW5lY2FwOiJzdHJva2UtbGluZWNhcCIsc3Ryb2tlTGluZWpvaW46InN0cm9rZS1saW5lam9pbiIs
c3Ryb2tlTWl0ZXJsaW1pdDoic3Ryb2tlLW1pdGVybGltaXQiLHN0cm9rZU9wYWNpdHk6InN0cm9r
ZS1vcGFjaXR5IixzdHJva2VXaWR0aDoic3Ryb2tlLXdpZHRoIixzdXJmYWNlU2NhbGU6InN1cmZh
Y2VTY2FsZSIsc3lzdGVtTGFuZ3VhZ2U6InN5c3RlbUxhbmd1YWdlIix0YWJsZVZhbHVlczoidGFi
bGVWYWx1ZXMiLHRhcmdldFg6InRhcmdldFgiLHRhcmdldFk6InRhcmdldFkiLHRleHRBbmNob3I6
InRleHQtYW5jaG9yIix0ZXh0RGVjb3JhdGlvbjoidGV4dC1kZWNvcmF0aW9uIix0ZXh0UmVuZGVy
aW5nOiJ0ZXh0LXJlbmRlcmluZyIsdGV4dExlbmd0aDoidGV4dExlbmd0aCIsdG86MCx0cmFuc2Zv
cm06MCx1MTowLHUyOjAsdW5kZXJsaW5lUG9zaXRpb246InVuZGVybGluZS1wb3NpdGlvbiIsdW5k
ZXJsaW5lVGhpY2tuZXNzOiJ1bmRlcmxpbmUtdGhpY2tuZXNzIix1bmljb2RlOjAsdW5pY29kZUJp
ZGk6InVuaWNvZGUtYmlkaSIsdW5pY29kZVJhbmdlOiJ1bmljb2RlLXJhbmdlIix1bml0c1BlckVt
OiJ1bml0cy1wZXItZW0iLHZBbHBoYWJldGljOiJ2LWFscGhhYmV0aWMiLHZIYW5naW5nOiJ2LWhh
bmdpbmciLHZJZGVvZ3JhcGhpYzoidi1pZGVvZ3JhcGhpYyIsdk1hdGhlbWF0aWNhbDoidi1tYXRo
ZW1hdGljYWwiLHZhbHVlczowLHZlY3RvckVmZmVjdDoidmVjdG9yLWVmZmVjdCIsdmVyc2lvbjow
LHZlcnRBZHZZOiJ2ZXJ0LWFkdi15Iix2ZXJ0T3JpZ2luWDoidmVydC1vcmlnaW4teCIsdmVydE9y
aWdpblk6InZlcnQtb3JpZ2luLXkiLHZpZXdCb3g6InZpZXdCb3giLHZpZXdUYXJnZXQ6InZpZXdU
YXJnZXQiLHZpc2liaWxpdHk6MCx3aWR0aHM6MCx3b3JkU3BhY2luZzoid29yZC1zcGFjaW5nIix3
cml0aW5nTW9kZToid3JpdGluZy1tb2RlIix4OjAseEhlaWdodDoieC1oZWlnaHQiLHgxOjAseDI6
MCx4Q2hhbm5lbFNlbGVjdG9yOiJ4Q2hhbm5lbFNlbGVjdG9yIix4bGlua0FjdHVhdGU6InhsaW5r
OmFjdHVhdGUiLHhsaW5rQXJjcm9sZToieGxpbms6YXJjcm9sZSIseGxpbmtIcmVmOiJ4bGluazpo
cmVmIix4bGlua1JvbGU6InhsaW5rOnJvbGUiLHhsaW5rU2hvdzoieGxpbms6c2hvdyIseGxpbmtU
aXRsZToieGxpbms6dGl0bGUiLHhsaW5rVHlwZToieGxpbms6dHlwZSIseG1sQmFzZToieG1sOmJh
c2UiLHhtbG5zOjAseG1sbnNYbGluazoieG1sbnM6eGxpbmsiLHhtbExhbmc6InhtbDpsYW5nIix4
bWxTcGFjZToieG1sOnNwYWNlIix5OjAseTE6MCx5MjowLHlDaGFubmVsU2VsZWN0b3I6InlDaGFu
bmVsU2VsZWN0b3IiLHo6MCx6b29tQW5kUGFuOiJ6b29tQW5kUGFuIn0saT17UHJvcGVydGllczp7
fSxET01BdHRyaWJ1dGVOYW1lc3BhY2VzOnt4bGlua0FjdHVhdGU6ci54bGluayx4bGlua0FyY3Jv
bGU6ci54bGluayx4bGlua0hyZWY6ci54bGluayx4bGlua1JvbGU6ci54bGluayx4bGlua1Nob3c6
ci54bGluayx4bGlua1RpdGxlOnIueGxpbmsseGxpbmtUeXBlOnIueGxpbmsseG1sQmFzZTpyLnht
bCx4bWxMYW5nOnIueG1sLHhtbFNwYWNlOnIueG1sfSxET01BdHRyaWJ1dGVOYW1lczp7fX07T2Jq
ZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihlKXtpLlByb3BlcnRpZXNbZV09MCxvW2VdJiYo
aS5ET01BdHRyaWJ1dGVOYW1lc1tlXT1vW2VdKX0pLHQuZXhwb3J0cz1pfSx7fV0sNzQ6W2Z1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZigic2VsZWN0aW9uU3RhcnQi
aW4gZSYmdS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZSkpcmV0dXJue3N0YXJ0OmUuc2VsZWN0
aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKXt2YXIg
dD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJue2FuY2hvck5vZGU6dC5hbmNob3JOb2RlLGFu
Y2hvck9mZnNldDp0LmFuY2hvck9mZnNldCxmb2N1c05vZGU6dC5mb2N1c05vZGUsZm9jdXNPZmZz
ZXQ6dC5mb2N1c09mZnNldH19aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt2YXIgbj1kb2N1bWVudC5z
ZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtyZXR1cm57cGFyZW50RWxlbWVudDpuLnBhcmVudEVsZW1l
bnQoKSx0ZXh0Om4udGV4dCx0b3A6bi5ib3VuZGluZ1RvcCxsZWZ0Om4uYm91bmRpbmdMZWZ0fX19
ZnVuY3Rpb24gbyhlLHQpe2lmKHl8fG51bGw9PW18fG0hPT1jKCkpcmV0dXJuIG51bGw7dmFyIG49
cihtKTtpZighZ3x8IWQoZyxuKSl7Zz1uO3ZhciBvPWwuZ2V0UG9vbGVkKGguc2VsZWN0LHYsZSx0
KTtyZXR1cm4gby50eXBlPSJzZWxlY3QiLG8udGFyZ2V0PW0saS5hY2N1bXVsYXRlVHdvUGhhc2VE
aXNwYXRjaGVzKG8pLG99cmV0dXJuIG51bGx9dmFyIGk9ZSgxOSksYT1lKDEyMykscz1lKDMzKSx1
PWUoNTYpLGw9ZSg4MCksYz1lKDEzMikscD1lKDExMCksZD1lKDE0MSksZj1hLmNhblVzZURPTSYm
ImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmZG9jdW1lbnQuZG9jdW1lbnRNb2RlPD0xMSxoPXtz
ZWxlY3Q6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvblNlbGVjdCIsY2FwdHVy
ZWQ6Im9uU2VsZWN0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRvcEJsdXIiLCJ0b3BDb250ZXh0
TWVudSIsInRvcEZvY3VzIiwidG9wS2V5RG93biIsInRvcEtleVVwIiwidG9wTW91c2VEb3duIiwi
dG9wTW91c2VVcCIsInRvcFNlbGVjdGlvbkNoYW5nZSJdfX0sbT1udWxsLHY9bnVsbCxnPW51bGws
eT0hMSxfPSExLEM9e2V2ZW50VHlwZXM6aCxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIp
e2lmKCFfKXJldHVybiBudWxsO3ZhciBpPXQ/cy5nZXROb2RlRnJvbUluc3RhbmNlKHQpOndpbmRv
dztzd2l0Y2goZSl7Y2FzZSJ0b3BGb2N1cyI6KHAoaSl8fCJ0cnVlIj09PWkuY29udGVudEVkaXRh
YmxlKSYmKG09aSx2PXQsZz1udWxsKTticmVhaworO2Nhc2UidG9wQmx1ciI6bT1udWxsLHY9bnVs
bCxnPW51bGw7YnJlYWs7Y2FzZSJ0b3BNb3VzZURvd24iOnk9ITA7YnJlYWs7Y2FzZSJ0b3BDb250
ZXh0TWVudSI6Y2FzZSJ0b3BNb3VzZVVwIjpyZXR1cm4geT0hMSxvKG4scik7Y2FzZSJ0b3BTZWxl
Y3Rpb25DaGFuZ2UiOmlmKGYpYnJlYWs7Y2FzZSJ0b3BLZXlEb3duIjpjYXNlInRvcEtleVVwIjpy
ZXR1cm4gbyhuLHIpfXJldHVybiBudWxsfSxkaWRQdXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsbil7
Im9uU2VsZWN0Ij09PXQmJihfPSEwKX19O3QuZXhwb3J0cz1DfSx7MTEwOjExMCwxMjM6MTIzLDEz
MjoxMzIsMTQxOjE0MSwxOToxOSwzMzozMyw1Njo1Niw4MDo4MH1dLDc1OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIi4iK2UuX3Jvb3ROb2RlSUR9ZnVu
Y3Rpb24gbyhlKXtyZXR1cm4iYnV0dG9uIj09PWV8fCJpbnB1dCI9PT1lfHwic2VsZWN0Ij09PWV8
fCJ0ZXh0YXJlYSI9PT1lfXZhciBpPWUoMTEyKSxhPWUoMTIyKSxzPWUoMTkpLHU9ZSgzMyksbD1l
KDc2KSxjPWUoNzcpLHA9ZSg4MCksZD1lKDgxKSxmPWUoODMpLGg9ZSg4NCksbT1lKDc5KSx2PWUo
ODUpLGc9ZSg4NikseT1lKDg3KSxfPWUoODgpLEM9ZSgxMjkpLGI9ZSg5OSksRT0oZSgxMzcpLHt9
KSx4PXt9O1siYWJvcnQiLCJhbmltYXRpb25FbmQiLCJhbmltYXRpb25JdGVyYXRpb24iLCJhbmlt
YXRpb25TdGFydCIsImJsdXIiLCJjYW5QbGF5IiwiY2FuUGxheVRocm91Z2giLCJjbGljayIsImNv
bnRleHRNZW51IiwiY29weSIsImN1dCIsImRvdWJsZUNsaWNrIiwiZHJhZyIsImRyYWdFbmQiLCJk
cmFnRW50ZXIiLCJkcmFnRXhpdCIsImRyYWdMZWF2ZSIsImRyYWdPdmVyIiwiZHJhZ1N0YXJ0Iiwi
ZHJvcCIsImR1cmF0aW9uQ2hhbmdlIiwiZW1wdGllZCIsImVuY3J5cHRlZCIsImVuZGVkIiwiZXJy
b3IiLCJmb2N1cyIsImlucHV0IiwiaW52YWxpZCIsImtleURvd24iLCJrZXlQcmVzcyIsImtleVVw
IiwibG9hZCIsImxvYWRlZERhdGEiLCJsb2FkZWRNZXRhZGF0YSIsImxvYWRTdGFydCIsIm1vdXNl
RG93biIsIm1vdXNlTW92ZSIsIm1vdXNlT3V0IiwibW91c2VPdmVyIiwibW91c2VVcCIsInBhc3Rl
IiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInByb2dyZXNzIiwicmF0ZUNoYW5nZSIsInJlc2V0
Iiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5k
IiwidGltZVVwZGF0ZSIsInRvdWNoQ2FuY2VsIiwidG91Y2hFbmQiLCJ0b3VjaE1vdmUiLCJ0b3Vj
aFN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInZvbHVtZUNoYW5nZSIsIndhaXRpbmciLCJ3aGVlbCJd
LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSks
bj0ib24iK3Qscj0idG9wIit0LG89e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOm4s
Y2FwdHVyZWQ6bisiQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbcl19O0VbZV09byx4W3JdPW99KTt2
YXIgdz17fSxUPXtldmVudFR5cGVzOkUsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2
YXIgbz14W2VdO2lmKCFvKXJldHVybiBudWxsO3ZhciBhO3N3aXRjaChlKXtjYXNlInRvcEFib3J0
IjpjYXNlInRvcENhblBsYXkiOmNhc2UidG9wQ2FuUGxheVRocm91Z2giOmNhc2UidG9wRHVyYXRp
b25DaGFuZ2UiOmNhc2UidG9wRW1wdGllZCI6Y2FzZSJ0b3BFbmNyeXB0ZWQiOmNhc2UidG9wRW5k
ZWQiOmNhc2UidG9wRXJyb3IiOmNhc2UidG9wSW5wdXQiOmNhc2UidG9wSW52YWxpZCI6Y2FzZSJ0
b3BMb2FkIjpjYXNlInRvcExvYWRlZERhdGEiOmNhc2UidG9wTG9hZGVkTWV0YWRhdGEiOmNhc2Ui
dG9wTG9hZFN0YXJ0IjpjYXNlInRvcFBhdXNlIjpjYXNlInRvcFBsYXkiOmNhc2UidG9wUGxheWlu
ZyI6Y2FzZSJ0b3BQcm9ncmVzcyI6Y2FzZSJ0b3BSYXRlQ2hhbmdlIjpjYXNlInRvcFJlc2V0Ijpj
YXNlInRvcFNlZWtlZCI6Y2FzZSJ0b3BTZWVraW5nIjpjYXNlInRvcFN0YWxsZWQiOmNhc2UidG9w
U3VibWl0IjpjYXNlInRvcFN1c3BlbmQiOmNhc2UidG9wVGltZVVwZGF0ZSI6Y2FzZSJ0b3BWb2x1
bWVDaGFuZ2UiOmNhc2UidG9wV2FpdGluZyI6YT1wO2JyZWFrO2Nhc2UidG9wS2V5UHJlc3MiOmlm
KDA9PT1iKG4pKXJldHVybiBudWxsO2Nhc2UidG9wS2V5RG93biI6Y2FzZSJ0b3BLZXlVcCI6YT1m
O2JyZWFrO2Nhc2UidG9wQmx1ciI6Y2FzZSJ0b3BGb2N1cyI6YT1kO2JyZWFrO2Nhc2UidG9wQ2xp
Y2siOmlmKDI9PT1uLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlInRvcERvdWJsZUNsaWNrIjpjYXNl
InRvcE1vdXNlRG93biI6Y2FzZSJ0b3BNb3VzZU1vdmUiOmNhc2UidG9wTW91c2VVcCI6Y2FzZSJ0
b3BNb3VzZU91dCI6Y2FzZSJ0b3BNb3VzZU92ZXIiOmNhc2UidG9wQ29udGV4dE1lbnUiOmE9aDti
cmVhaztjYXNlInRvcERyYWciOmNhc2UidG9wRHJhZ0VuZCI6Y2FzZSJ0b3BEcmFnRW50ZXIiOmNh
c2UidG9wRHJhZ0V4aXQiOmNhc2UidG9wRHJhZ0xlYXZlIjpjYXNlInRvcERyYWdPdmVyIjpjYXNl
InRvcERyYWdTdGFydCI6Y2FzZSJ0b3BEcm9wIjphPW07YnJlYWs7Y2FzZSJ0b3BUb3VjaENhbmNl
bCI6Y2FzZSJ0b3BUb3VjaEVuZCI6Y2FzZSJ0b3BUb3VjaE1vdmUiOmNhc2UidG9wVG91Y2hTdGFy
dCI6YT12O2JyZWFrO2Nhc2UidG9wQW5pbWF0aW9uRW5kIjpjYXNlInRvcEFuaW1hdGlvbkl0ZXJh
dGlvbiI6Y2FzZSJ0b3BBbmltYXRpb25TdGFydCI6YT1sO2JyZWFrO2Nhc2UidG9wVHJhbnNpdGlv
bkVuZCI6YT1nO2JyZWFrO2Nhc2UidG9wU2Nyb2xsIjphPXk7YnJlYWs7Y2FzZSJ0b3BXaGVlbCI6
YT1fO2JyZWFrO2Nhc2UidG9wQ29weSI6Y2FzZSJ0b3BDdXQiOmNhc2UidG9wUGFzdGUiOmE9Y31h
fHxpKCI4NiIsZSk7dmFyIHU9YS5nZXRQb29sZWQobyx0LG4scik7cmV0dXJuIHMuYWNjdW11bGF0
ZVR3b1BoYXNlRGlzcGF0Y2hlcyh1KSx1fSxkaWRQdXRMaXN0ZW5lcjpmdW5jdGlvbihlLHQsbil7
aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFyIGk9cihlKSxzPXUuZ2V0Tm9kZUZyb21J
bnN0YW5jZShlKTt3W2ldfHwod1tpXT1hLmxpc3RlbihzLCJjbGljayIsQykpfX0sd2lsbERlbGV0
ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7aWYoIm9uQ2xpY2siPT09dCYmIW8oZS5fdGFnKSl7dmFy
IG49cihlKTt3W25dLnJlbW92ZSgpLGRlbGV0ZSB3W25dfX19O3QuZXhwb3J0cz1UfSx7MTEyOjEx
MiwxMjI6MTIyLDEyOToxMjksMTM3OjEzNywxOToxOSwzMzozMyw3Njo3Niw3Nzo3Nyw3OTo3OSw4
MDo4MCw4MTo4MSw4Mzo4Myw4NDo4NCw4NTo4NSw4Njo4Niw4Nzo4Nyw4ODo4OCw5OTo5OX1dLDc2
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJu
IG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e2FuaW1hdGlvbk5hbWU6bnVsbCxl
bGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0
LmV4cG9ydHM9cn0sezgwOjgwfV0sNzc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCks
aT17Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2Uu
Y2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19O28uYXVnbWVudENsYXNzKHIsaSks
dC5leHBvcnRzPXJ9LHs4MDo4MH1dLDc4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODAp
LGk9e2RhdGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0s
Nzk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1
cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NCksaT17ZGF0YVRyYW5zZmVyOm51bGx9
O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4NDo4NH1dLDgwOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7dGhpcy5kaXNwYXRjaENvbmZp
Zz1lLHRoaXMuX3RhcmdldEluc3Q9dCx0aGlzLm5hdGl2ZUV2ZW50PW47dmFyIG89dGhpcy5jb25z
dHJ1Y3Rvci5JbnRlcmZhY2U7Zm9yKHZhciBpIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShpKSl7
dmFyIHM9b1tpXTtzP3RoaXNbaV09cyhuKToidGFyZ2V0Ij09PWk/dGhpcy50YXJnZXQ9cjp0aGlz
W2ldPW5baV19dmFyIHU9bnVsbCE9bi5kZWZhdWx0UHJldmVudGVkP24uZGVmYXVsdFByZXZlbnRl
ZDohMT09PW4ucmV0dXJuVmFsdWU7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXU/YS50
aGF0UmV0dXJuc1RydWU6YS50aGF0UmV0dXJuc0ZhbHNlLHRoaXMuaXNQcm9wYWdhdGlvblN0b3Bw
ZWQ9YS50aGF0UmV0dXJuc0ZhbHNlLHRoaXN9dmFyIG89ZSgxNDMpLGk9ZSgyNCksYT1lKDEyOSks
cz0oZSgxNDIpLFsiZGlzcGF0Y2hDb25maWciLCJfdGFyZ2V0SW5zdCIsIm5hdGl2ZUV2ZW50Iiwi
aXNEZWZhdWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJfZGlzcGF0Y2hMaXN0
ZW5lcnMiLCJfZGlzcGF0Y2hJbnN0YW5jZXMiXSksdT17dHlwZTpudWxsLHRhcmdldDpudWxsLGN1
cnJlbnRUYXJnZXQ6YS50aGF0UmV0dXJuc051bGwsZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVs
bCxjYW5jZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFt
cHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfTtvKHIu
cHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRl
ZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVu
dERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1
ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS50aGF0UmV0dXJuc1RydWUpfSxzdG9wUHJv
cGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9w
YWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnVi
YmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YS50aGF0
UmV0dXJuc1RydWUpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNpc3RlbnQ9YS50aGF0
UmV0dXJuc1RydWV9LGlzUGVyc2lzdGVudDphLnRoYXRSZXR1cm5zRmFsc2UsZGVzdHJ1Y3Rvcjpm
dW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgdCBpbiBl
KXRoaXNbdF09bnVsbDtmb3IodmFyIG49MDtuPHMubGVuZ3RoO24rKyl0aGlzW3Nbbl1dPW51bGx9
fSksci5JbnRlcmZhY2U9dSxyLmF1Z21lbnRDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMs
cj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9bi5wcm90b3R5cGU7dmFyIGE9bmV3IHI7byhhLGUu
cHJvdG90eXBlKSxlLnByb3RvdHlwZT1hLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5JbnRl
cmZhY2U9byh7fSxuLkludGVyZmFjZSx0KSxlLmF1Z21lbnRDbGFzcz1uLmF1Z21lbnRDbGFzcyxp
LmFkZFBvb2xpbmdUbyhlLGkuZm91ckFyZ3VtZW50UG9vbGVyKX0saS5hZGRQb29saW5nVG8ocixp
LmZvdXJBcmd1bWVudFBvb2xlciksdC5leHBvcnRzPXJ9LHsxMjk6MTI5LDE0MjoxNDIsMTQzOjE0
MywyNDoyNH1dLDgxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9e3JlbGF0ZWRU
YXJnZXQ6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezg3Ojg3fV0sODI6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4g
by5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17ZGF0YTpudWxsfTtvLmF1Z21lbnRD
bGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw4MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12
YXIgbz1lKDg3KSxpPWUoOTkpLGE9ZSgxMDApLHM9ZSgxMDEpLHU9e2tleTphLGxvY2F0aW9uOm51
bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLHJl
cGVhdDpudWxsLGxvY2FsZTpudWxsLGdldE1vZGlmaWVyU3RhdGU6cyxjaGFyQ29kZTpmdW5jdGlv
bihlKXtyZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlP2koZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihl
KXtyZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9
LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/aShlKToia2V5ZG93
biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fTtvLmF1Z21lbnRDbGFz
cyhyLHUpLHQuZXhwb3J0cz1yfSx7MTAwOjEwMCwxMDE6MTAxLDg3Ojg3LDk5Ojk5fV0sODQ6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gby5j
YWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDkwKSxhPWUoMTAxKSxzPXtzY3JlZW5Y
Om51bGwsc2NyZWVuWTpudWxsLGNsaWVudFg6bnVsbCxjbGllbnRZOm51bGwsY3RybEtleTpudWxs
LHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6
YSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b247cmV0dXJuIndoaWNoImluIGU/dDoy
PT09dD8yOjQ9PT10PzE6MH0sYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7
cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50
b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9LHBhZ2VYOmZ1bmN0aW9uKGUpe3JldHVybiJwYWdlWCJp
biBlP2UucGFnZVg6ZS5jbGllbnRYK2kuY3VycmVudFNjcm9sbExlZnR9LHBhZ2VZOmZ1bmN0aW9u
KGUpe3JldHVybiJwYWdlWSJpbiBlP2UucGFnZVk6ZS5jbGllbnRZK2kuY3VycmVudFNjcm9sbFRv
cH19O28uYXVnbWVudENsYXNzKHIscyksdC5leHBvcnRzPXJ9LHsxMDE6MTAxLDg3Ojg3LDkwOjkw
fV0sODU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXty
ZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDEwMSksYT17dG91Y2hl
czpudWxsLHRhcmdldFRvdWNoZXM6bnVsbCxjaGFuZ2VkVG91Y2hlczpudWxsLGFsdEtleTpudWxs
LG1ldGFLZXk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxnZXRNb2RpZmllclN0YXRl
Oml9O28uYXVnbWVudENsYXNzKHIsYSksdC5leHBvcnRzPXJ9LHsxMDE6MTAxLDg3Ojg3fV0sODY6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4g
by5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4MCksaT17cHJvcGVydHlOYW1lOm51bGwsZWxh
cHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5l
eHBvcnRzPXJ9LHs4MDo4MH1dLDg3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9
ZSgxMDIpLGE9e3ZpZXc6ZnVuY3Rpb24oZSl7aWYoZS52aWV3KXJldHVybiBlLnZpZXc7dmFyIHQ9
aShlKTtpZih0LndpbmRvdz09PXQpcmV0dXJuIHQ7dmFyIG49dC5vd25lckRvY3VtZW50O3JldHVy
biBuP24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93OndpbmRvd30sZGV0YWlsOmZ1bmN0aW9u
KGUpe3JldHVybiBlLmRldGFpbHx8MH19O28uYXVnbWVudENsYXNzKHIsYSksdC5leHBvcnRzPXJ9
LHsxMDI6MTAyLDgwOjgwfV0sODg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlLHQsbixyKXtyZXR1cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NCksaT17
ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0
YVgiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRh
WSJpbiBlP2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZOiJ3aGVlbERl
bHRhImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6bnVsbH07by5h
dWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezg0Ojg0fV0sODk6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3KSx7fSksaT17cmVpbml0aWFsaXpl
VHJhbnNhY3Rpb246ZnVuY3Rpb24oKXt0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM9dGhpcy5nZXRU
cmFuc2FjdGlvbldyYXBwZXJzKCksdGhpcy53cmFwcGVySW5pdERhdGE/dGhpcy53cmFwcGVySW5p
dERhdGEubGVuZ3RoPTA6dGhpcy53cmFwcGVySW5pdERhdGE9W10sdGhpcy5faXNJblRyYW5zYWN0
aW9uPSExfSxfaXNJblRyYW5zYWN0aW9uOiExLGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6bnVsbCxp
c0luVHJhbnNhY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2lzSW5UcmFuc2FjdGlvbn0s
cGVyZm9ybTpmdW5jdGlvbihlLHQsbixvLGksYSxzLHUpe3RoaXMuaXNJblRyYW5zYWN0aW9uKCkm
JnIoIjI3Iik7dmFyIGwsYzt0cnl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSEwLGw9ITAsdGhpcy5p
bml0aWFsaXplQWxsKDApLGM9ZS5jYWxsKHQsbixvLGksYSxzLHUpLGw9ITF9ZmluYWxseXt0cnl7
aWYobCl0cnl7dGhpcy5jbG9zZUFsbCgwKX1jYXRjaChlKXt9ZWxzZSB0aGlzLmNsb3NlQWxsKDAp
fWZpbmFsbHl7dGhpcy5faXNJblRyYW5zYWN0aW9uPSExfX1yZXR1cm4gY30saW5pdGlhbGl6ZUFs
bDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLG49ZTtuPHQu
bGVuZ3RoO24rKyl7dmFyIHI9dFtuXTt0cnl7dGhpcy53cmFwcGVySW5pdERhdGFbbl09byx0aGlz
LndyYXBwZXJJbml0RGF0YVtuXT1yLmluaXRpYWxpemU/ci5pbml0aWFsaXplLmNhbGwodGhpcyk6
bnVsbH1maW5hbGx5e2lmKHRoaXMud3JhcHBlckluaXREYXRhW25dPT09byl0cnl7dGhpcy5pbml0
aWFsaXplQWxsKG4rMSl9Y2F0Y2goZSl7fX19fSxjbG9zZUFsbDpmdW5jdGlvbihlKXt0aGlzLmlz
SW5UcmFuc2FjdGlvbigpfHxyKCIyOCIpO2Zvcih2YXIgdD10aGlzLnRyYW5zYWN0aW9uV3JhcHBl
cnMsbj1lO248dC5sZW5ndGg7bisrKXt2YXIgaSxhPXRbbl0scz10aGlzLndyYXBwZXJJbml0RGF0
YVtuXTt0cnl7aT0hMCxzIT09byYmYS5jbG9zZSYmYS5jbG9zZS5jYWxsKHRoaXMscyksaT0hMX1m
aW5hbGx5e2lmKGkpdHJ5e3RoaXMuY2xvc2VBbGwobisxKX1jYXRjaChlKXt9fX10aGlzLndyYXBw
ZXJJbml0RGF0YS5sZW5ndGg9MH19O3QuZXhwb3J0cz1pfSx7MTEyOjExMiwxMzc6MTM3fV0sOTA6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnRTY3JvbGxMZWZ0OjAs
Y3VycmVudFNjcm9sbFRvcDowLHJlZnJlc2hTY3JvbGxWYWx1ZXM6ZnVuY3Rpb24oZSl7ci5jdXJy
ZW50U2Nyb2xsTGVmdD1lLngsci5jdXJyZW50U2Nyb2xsVG9wPWUueX19O3QuZXhwb3J0cz1yfSx7
fV0sOTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVy
biBudWxsPT10JiZvKCIzMCIpLG51bGw9PWU/dDpBcnJheS5pc0FycmF5KGUpP0FycmF5LmlzQXJy
YXkodCk/KGUucHVzaC5hcHBseShlLHQpLGUpOihlLnB1c2godCksZSk6QXJyYXkuaXNBcnJheSh0
KT9bZV0uY29uY2F0KHQpOltlLHRdfXZhciBvPWUoMTEyKTtlKDEzNyk7dC5leHBvcnRzPXJ9LHsx
MTI6MTEyLDEzNzoxMzd9XSw5MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe2Zvcih2YXIgdD0xLG49MCxyPTAsaT1lLmxlbmd0aCxhPS00Jmk7cjxhOyl7Zm9yKHZh
ciBzPU1hdGgubWluKHIrNDA5NixhKTtyPHM7cis9NCluKz0odCs9ZS5jaGFyQ29kZUF0KHIpKSso
dCs9ZS5jaGFyQ29kZUF0KHIrMSkpKyh0Kz1lLmNoYXJDb2RlQXQocisyKSkrKHQrPWUuY2hhckNv
ZGVBdChyKzMpKTt0JT1vLG4lPW99Zm9yKDtyPGk7cisrKW4rPXQrPWUuY2hhckNvZGVBdChyKTty
ZXR1cm4gdCU9byxuJT1vLHR8bjw8MTZ9dmFyIG89NjU1MjE7dC5leHBvcnRzPXJ9LHt9XSw5Mzpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlKXtyZXR1cm4idW5k
ZWZpbmVkIiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5j
dGlvbih0LG4scixvKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3Jl
dHVybiBlKHQsbixyLG8pfSl9OmV9O3QuZXhwb3J0cz1yfSx7fV0sOTQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIG51bGw9PXR8fCJib29sZWFu
Ij09dHlwZW9mIHR8fCIiPT09dD8iIjppc05hTih0KXx8MD09PXR8fGkuaGFzT3duUHJvcGVydHko
ZSkmJmlbZV0/IiIrdDooInN0cmluZyI9PXR5cGVvZiB0JiYodD10LnRyaW0oKSksdCsicHgiKX12
YXIgbz1lKDQpLGk9KGUoMTQyKSxvLmlzVW5pdGxlc3NOdW1iZXIpO3QuZXhwb3J0cz1yfSx7MTQy
OjE0Miw0OjR9XSw5NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3ZhciB0PSIiK2Usbj1pLmV4ZWModCk7aWYoIW4pcmV0dXJuIHQ7dmFyIHIsbz0iIixhPTAscz0w
O2ZvcihhPW4uaW5kZXg7YTx0Lmxlbmd0aDthKyspe3N3aXRjaCh0LmNoYXJDb2RlQXQoYSkpe2Nh
c2UgMzQ6cj0iJnF1b3Q7IjticmVhaztjYXNlIDM4OnI9IiZhbXA7IjticmVhaztjYXNlIDM5OnI9
IiYjeDI3OyI7YnJlYWs7Y2FzZSA2MDpyPSImbHQ7IjticmVhaztjYXNlIDYyOnI9IiZndDsiO2Jy
ZWFrO2RlZmF1bHQ6Y29udGludWV9cyE9PWEmJihvKz10LnN1YnN0cmluZyhzLGEpKSxzPWErMSxv
Kz1yfXJldHVybiBzIT09YT9vK3Quc3Vic3RyaW5nKHMsYSk6b31mdW5jdGlvbiBvKGUpe3JldHVy
biJib29sZWFuIj09dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZT8iIitlOnIoZSl9dmFyIGk9
L1siJyY8Pl0vO3QuZXhwb3J0cz1vfSx7fV0sOTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKDE9PT1lLm5vZGVUeXBl
KXJldHVybiBlO3ZhciB0PWEuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ9cyh0KSx0P2kuZ2V0Tm9kZUZy
b21JbnN0YW5jZSh0KTpudWxsOyJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlbmRlcj9vKCI0NCIpOm8o
IjQ1IixPYmplY3Qua2V5cyhlKSl9dmFyIG89ZSgxMTIpLGk9KGUoMTE5KSxlKDMzKSksYT1lKDU3
KSxzPWUoMTAzKTtlKDEzNyksZSgxNDIpO3QuZXhwb3J0cz1yfSx7MTAzOjEwMywxMTI6MTEyLDEx
OToxMTksMTM3OjEzNywxNDI6MTQyLDMzOjMzLDU3OjU3fV0sOTc6W2Z1bmN0aW9uKGUsdCxuKXso
ZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7aWYoZSYmIm9iamVj
dCI9PXR5cGVvZiBlKXt2YXIgbz1lO3ZvaWQgMD09PW9bbl0mJm51bGwhPXQmJihvW25dPXQpfX1m
dW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gaShlLHIs
biksbn12YXIgaT0oZSgyMiksZSgxMTcpKTtlKDE0Mik7dm9pZCAwIT09biYmbi5lbnYsdC5leHBv
cnRzPW99KS5jYWxsKHRoaXMsdm9pZCAwKX0sezExNzoxMTcsMTQyOjE0MiwyMjoyMn1dLDk4Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe0FycmF5LmlzQXJy
YXkoZSk/ZS5mb3JFYWNoKHQsbik6ZSYmdC5jYWxsKG4sZSl9dC5leHBvcnRzPXJ9LHt9XSw5OTpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5rZXlD
b2RlO3JldHVybiJjaGFyQ29kZSJpbiBlPzA9PT0odD1lLmNoYXJDb2RlKSYmMTM9PT1uJiYodD0x
Myk6dD1uLHQ+PTMyfHwxMz09PXQ/dDowfXQuZXhwb3J0cz1yfSx7fV0sMTAwOltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYoZS5rZXkpe3ZhciB0PWlbZS5rZXld
fHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9aWYoImtleXByZXNzIj09PWUu
dHlwZSl7dmFyIG49byhlKTtyZXR1cm4gMTM9PT1uPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29k
ZShuKX1yZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/YVtlLmtleUNv
ZGVdfHwiVW5pZGVudGlmaWVkIjoiIn12YXIgbz1lKDk5KSxpPXtFc2M6IkVzY2FwZSIsU3BhY2Vi
YXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixE
b3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIs
QXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJV
bmlkZW50aWZpZWQifSxhPXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50
ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNM
b2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5k
IiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0
MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwx
MTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6
IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Ny
b2xsTG9jayIsMjI0OiJNZXRhIn07dC5leHBvcnRzPXJ9LHs5OTo5OX1dLDEwMTpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXRoaXMsbj10Lm5hdGl2ZUV2
ZW50O2lmKG4uZ2V0TW9kaWZpZXJTdGF0ZSlyZXR1cm4gbi5nZXRNb2RpZmllclN0YXRlKGUpO3Zh
ciByPWlbZV07cmV0dXJuISFyJiYhIW5bcl19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gcn12YXIgaT17
QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlm
dEtleSJ9O3QuZXhwb3J0cz1vfSx7fV0sMTAyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudHx8d2luZG93O3JldHVy
biB0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYodD10LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50
KSwzPT09dC5ub2RlVHlwZT90LnBhcmVudE5vZGU6dH10LmV4cG9ydHM9cn0se31dLDEwMzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdDsodD1lLl9y
ZW5kZXJlZE5vZGVUeXBlKT09PW8uQ09NUE9TSVRFOyllPWUuX3JlbmRlcmVkQ29tcG9uZW50O3Jl
dHVybiB0PT09by5IT1NUP2UuX3JlbmRlcmVkQ29tcG9uZW50OnQ9PT1vLkVNUFRZP251bGw6dm9p
ZCAwfXZhciBvPWUoNjIpO3QuZXhwb3J0cz1yfSx7NjI6NjJ9XSwxMDQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiYobyYmZVtvXXx8ZVtpXSk7aWYo
ImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5
bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGk9IkBAaXRlcmF0b3IiO3QuZXhwb3J0cz1yfSx7fV0sMTA1
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKDtlJiZlLmZp
cnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIG8oZSl7Zm9yKDtlOyl7
aWYoZS5uZXh0U2libGluZylyZXR1cm4gZS5uZXh0U2libGluZztlPWUucGFyZW50Tm9kZX19ZnVu
Y3Rpb24gaShlLHQpe2Zvcih2YXIgbj1yKGUpLGk9MCxhPTA7bjspe2lmKDM9PT1uLm5vZGVUeXBl
KXtpZihhPWkrbi50ZXh0Q29udGVudC5sZW5ndGgsaTw9dCYmYT49dClyZXR1cm57bm9kZTpuLG9m
ZnNldDp0LWl9O2k9YX1uPXIobyhuKSl9fXQuZXhwb3J0cz1pfSx7fV0sMTA2OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtyZXR1cm4haSYmby5jYW5Vc2VET00mJihp
PSJ0ZXh0Q29udGVudCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/InRleHRDb250ZW50Ijoi
aW5uZXJUZXh0IiksaX12YXIgbz1lKDEyMyksaT1udWxsO3QuZXhwb3J0cz1yfSx7MTIzOjEyM31d
LDEwNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49
e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0Iitl
XT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxuWyJtcyIrZV09Ik1TIit0LG5bIk8iK2Vd
PSJvIit0LnRvTG93ZXJDYXNlKCksbn1mdW5jdGlvbiBvKGUpe2lmKHNbZV0pcmV0dXJuIHNbZV07
aWYoIWFbZV0pcmV0dXJuIGU7dmFyIHQ9YVtlXTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blBy
b3BlcnR5KG4pJiZuIGluIHUpcmV0dXJuIHNbZV09dFtuXTtyZXR1cm4iIn12YXIgaT1lKDEyMyks
YT17YW5pbWF0aW9uZW5kOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0
ZXJhdGlvbjpyKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFy
dDpyKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6cigiVHJhbnNp
dGlvbiIsIlRyYW5zaXRpb25FbmQiKX0scz17fSx1PXt9O2kuY2FuVXNlRE9NJiYodT1kb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwo
ZGVsZXRlIGEuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25pdGVyYXRp
b24uYW5pbWF0aW9uLGRlbGV0ZSBhLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRp
b25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBhLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbiksdC5l
eHBvcnRzPW99LHsxMjM6MTIzfV0sMTA4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSl7aWYoZSl7dmFyIHQ9ZS5nZXROYW1lKCk7aWYodClyZXR1cm4iIENoZWNrIHRo
ZSByZW5kZXIgbWV0aG9kIG9mIGAiK3QrImAuIn1yZXR1cm4iIn1mdW5jdGlvbiBvKGUpe3JldHVy
biJmdW5jdGlvbiI9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lLnByb3RvdHlwZSYmImZ1bmN0aW9uIj09
dHlwZW9mIGUucHJvdG90eXBlLm1vdW50Q29tcG9uZW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZS5w
cm90b3R5cGUucmVjZWl2ZUNvbXBvbmVudH1mdW5jdGlvbiBpKGUsdCl7dmFyIG47aWYobnVsbD09
PWV8fCExPT09ZSluPWwuY3JlYXRlKGkpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIg
cz1lLHU9cy50eXBlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB1JiYic3RyaW5nIiE9dHlwZW9mIHUp
e3ZhciBkPSIiO2QrPXIocy5fb3duZXIpLGEoIjEzMCIsbnVsbD09dT91OnR5cGVvZiB1LGQpfSJz
dHJpbmciPT10eXBlb2Ygcy50eXBlP249Yy5jcmVhdGVJbnRlcm5hbENvbXBvbmVudChzKTpvKHMu
dHlwZSk/KG49bmV3IHMudHlwZShzKSxuLmdldEhvc3ROb2RlfHwobi5nZXRIb3N0Tm9kZT1uLmdl
dE5hdGl2ZU5vZGUpKTpuPW5ldyBwKHMpfWVsc2Uic3RyaW5nIj09dHlwZW9mIGV8fCJudW1iZXIi
PT10eXBlb2YgZT9uPWMuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KGUpOmEoIjEzMSIsdHlwZW9mIGUp
O3JldHVybiBuLl9tb3VudEluZGV4PTAsbi5fbW91bnRJbWFnZT1udWxsLG59dmFyIGE9ZSgxMTIp
LHM9ZSgxNDMpLHU9ZSgyOSksbD1lKDQ5KSxjPWUoNTQpLHA9KGUoMTIxKSxlKDEzNyksZSgxNDIp
LGZ1bmN0aW9uKGUpe3RoaXMuY29uc3RydWN0KGUpfSk7cyhwLnByb3RvdHlwZSx1LHtfaW5zdGFu
dGlhdGVSZWFjdENvbXBvbmVudDppfSksdC5leHBvcnRzPWl9LHsxMTI6MTEyLDEyMToxMjEsMTM3
OjEzNywxNDI6MTQyLDE0MzoxNDMsMjk6MjksNDk6NDksNTQ6NTR9XSwxMDk6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCFpLmNhblVzZURPTXx8dCYmISgi
YWRkRXZlbnRMaXN0ZW5lciJpbiBkb2N1bWVudCkpcmV0dXJuITE7dmFyIG49Im9uIitlLHI9biBp
biBkb2N1bWVudDtpZighcil7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5z
ZXRBdHRyaWJ1dGUobiwicmV0dXJuOyIpLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGFbbl19cmV0dXJu
IXImJm8mJiJ3aGVlbCI9PT1lJiYocj1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJl
KCJFdmVudHMud2hlZWwiLCIzLjAiKSkscn12YXIgbyxpPWUoMTIzKTtpLmNhblVzZURPTSYmKG89
ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24mJmRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1
cmUmJiEwIT09ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiIiwiIikpLHQuZXhw
b3J0cz1yfSx7MTIzOjEyM31dLDExMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTty
ZXR1cm4iaW5wdXQiPT09dD8hIW9bZS50eXBlXToidGV4dGFyZWEiPT09dH12YXIgbz17Y29sb3I6
ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRo
OiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6
ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07dC5leHBvcnRzPXJ9LHt9XSwxMTE6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4nIicrbyhlKSsnIid9dmFy
IG89ZSg5NSk7dC5leHBvcnRzPXJ9LHs5NTo5NX1dLDExMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iTWlu
aWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCBodHRwOi8vZmFjZWJvb2suZ2l0aHViLmlv
L3JlYWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0wO3I8dDtyKysp
bis9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IrMV0pO24rPSIgZm9y
IHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50
IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7dmFyIG89
bmV3IEVycm9yKG4pO3Rocm93IG8ubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsby5mcmFtZXNU
b1BvcD0xLG99dC5leHBvcnRzPXJ9LHt9XSwxMTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9ZSg2MCk7dC5leHBvcnRzPXIucmVuZGVyU3VidHJlZUludG9Db250YWluZXJ9LHs2
MDo2MH1dLDExNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPWUoMTIzKSxp
PWUoMTApLGE9L15bIFxyXG5cdFxmXS8scz0vPCghLS18bGlua3xub3NjcmlwdHxtZXRhfHNjcmlw
dHxzdHlsZSlbIFxyXG5cdFxmXC8+XS8sdT1lKDkzKSxsPXUoZnVuY3Rpb24oZSx0KXtpZihlLm5h
bWVzcGFjZVVSSSE9PWkuc3ZnfHwiaW5uZXJIVE1MImluIGUpZS5pbm5lckhUTUw9dDtlbHNle3I9
cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksci5pbm5lckhUTUw9Ijxzdmc+Iit0KyI8
L3N2Zz4iO2Zvcih2YXIgbj1yLmZpcnN0Q2hpbGQ7bi5maXJzdENoaWxkOyllLmFwcGVuZENoaWxk
KG4uZmlyc3RDaGlsZCl9fSk7aWYoby5jYW5Vc2VET00pe3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpO2MuaW5uZXJIVE1MPSIgIiwiIj09PWMuaW5uZXJIVE1MJiYobD1mdW5jdGlv
bihlLHQpe2lmKGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGUpLGEu
dGVzdCh0KXx8IjwiPT09dFswXSYmcy50ZXN0KHQpKXtlLmlubmVySFRNTD1TdHJpbmcuZnJvbUNo
YXJDb2RlKDY1Mjc5KSt0O3ZhciBuPWUuZmlyc3RDaGlsZDsxPT09bi5kYXRhLmxlbmd0aD9lLnJl
bW92ZUNoaWxkKG4pOm4uZGVsZXRlRGF0YSgwLDEpfWVsc2UgZS5pbm5lckhUTUw9dH0pLGM9bnVs
bH10LmV4cG9ydHM9bH0sezEwOjEwLDEyMzoxMjMsOTM6OTN9XSwxMTU6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjMpLG89ZSg5NSksaT1lKDExNCksYT1mdW5jdGlvbihl
LHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJjM9PT1u
Lm5vZGVUeXBlKXJldHVybiB2b2lkKG4ubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH07ci5j
YW5Vc2VET00mJigidGV4dENvbnRlbnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoYT1m
dW5jdGlvbihlLHQpe2lmKDM9PT1lLm5vZGVUeXBlKXJldHVybiB2b2lkKGUubm9kZVZhbHVlPXQp
O2koZSxvKHQpKX0pKSx0LmV4cG9ydHM9YX0sezExNDoxMTQsMTIzOjEyMyw5NTo5NX1dLDExNjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49bnVsbD09
PWV8fCExPT09ZSxyPW51bGw9PT10fHwhMT09PXQ7aWYobnx8cilyZXR1cm4gbj09PXI7dmFyIG89
dHlwZW9mIGUsaT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09PW98fCJudW1iZXIiPT09bz8ic3Ry
aW5nIj09PWl8fCJudW1iZXIiPT09aToib2JqZWN0Ij09PWkmJmUudHlwZT09PXQudHlwZSYmZS5r
ZXk9PT10LmtleX10LmV4cG9ydHM9cn0se31dLDExNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9
ZS5rZXk/bC5lc2NhcGUoZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIG8oZSx0LG4saSl7
dmFyIGQ9dHlwZW9mIGU7aWYoInVuZGVmaW5lZCIhPT1kJiYiYm9vbGVhbiIhPT1kfHwoZT1udWxs
KSxudWxsPT09ZXx8InN0cmluZyI9PT1kfHwibnVtYmVyIj09PWR8fCJvYmplY3QiPT09ZCYmZS4k
JHR5cGVvZj09PXMpcmV0dXJuIG4oaSxlLCIiPT09dD9jK3IoZSwwKTp0KSwxO3ZhciBmLGgsbT0w
LHY9IiI9PT10P2M6dCtwO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBnPTA7ZzxlLmxlbmd0
aDtnKyspZj1lW2ddLGg9dityKGYsZyksbSs9byhmLGgsbixpKTtlbHNle3ZhciB5PXUoZSk7aWYo
eSl7dmFyIF8sQz15LmNhbGwoZSk7aWYoeSE9PWUuZW50cmllcylmb3IodmFyIGI9MDshKF89Qy5u
ZXh0KCkpLmRvbmU7KWY9Xy52YWx1ZSxoPXYrcihmLGIrKyksbSs9byhmLGgsbixpKTtlbHNlIGZv
cig7IShfPUMubmV4dCgpKS5kb25lOyl7dmFyIEU9Xy52YWx1ZTtFJiYoZj1FWzFdLGg9ditsLmVz
Y2FwZShFWzBdKStwK3IoZiwwKSxtKz1vKGYsaCxuLGkpKX19ZWxzZSBpZigib2JqZWN0Ij09PWQp
e3ZhciB4PVN0cmluZyhlKTthKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PT14PyJvYmplY3Qgd2l0
aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOngsIiIpfX1yZXR1cm4gbX1m
dW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOm8oZSwiIix0LG4pfXZhciBhPWUoMTEy
KSxzPShlKDExOSksZSg0OCkpLHU9ZSgxMDQpLGw9KGUoMTM3KSxlKDIyKSksYz0oZSgxNDIpLCIu
IikscD0iOiI7dC5leHBvcnRzPWl9LHsxMDQ6MTA0LDExMjoxMTIsMTE5OjExOSwxMzc6MTM3LDE0
MjoxNDIsMjI6MjIsNDg6NDh9XSwxMTg6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9KGUoMTQzKSxlKDEyOSkpLG89KGUoMTQyKSxyKTt0LmV4cG9ydHM9b30sezEyOToxMjksMTQy
OjE0MiwxNDM6MTQzfV0sMTE5OltmdW5jdGlvbih0LG4scil7InVzZSBzdHJpY3QiO3ZhciBvPWUu
X19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7bi5leHBv
cnRzPW8uUmVhY3RDdXJyZW50T3duZXJ9LHt9XSwxMjA6W2Z1bmN0aW9uKHQsbixyKXsidXNlIHN0
cmljdCI7bi5leHBvcnRzPWV9LHt9XSwxMjE6W2Z1bmN0aW9uKHQsbixyKXsidXNlIHN0cmljdCI7
dmFyIG89ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJF
RDtuLmV4cG9ydHM9by5nZXROZXh0RGVidWdJRH0se31dLDEyMjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt2YXIgcj1lKDEyOSksbz17bGlzdGVuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
ZS5hZGRFdmVudExpc3RlbmVyPyhlLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKSx7cmVtb3ZlOmZ1
bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9fSk6ZS5hdHRhY2hFdmVudD8o
ZS5hdHRhY2hFdmVudCgib24iK3Qsbikse3JlbW92ZTpmdW5jdGlvbigpe2UuZGV0YWNoRXZlbnQo
Im9uIit0LG4pfX0pOnZvaWQgMH0sY2FwdHVyZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRk
RXZlbnRMaXN0ZW5lcj8oZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMCkse3JlbW92ZTpmdW5jdGlv
bigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITApfX0pOntyZW1vdmU6cn19LHJlZ2lzdGVy
RGVmYXVsdDpmdW5jdGlvbigpe319O3QuZXhwb3J0cz1vfSx7MTI5OjEyOX1dLDEyMzpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93
fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLG89e2Nh
blVzZURPTTpyLGNhblVzZVdvcmtlcnM6InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIsY2FuVXNl
RXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJiF3aW5kb3cuYXR0
YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEhd2luZG93LnNjcmVlbixpc0luV29ya2VyOiFy
fTt0LmV4cG9ydHM9b30se31dLDEyNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUpe3JldHVybiBlLnJlcGxhY2UobyxmdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBw
ZXJDYXNlKCl9KX12YXIgbz0vLSguKS9nO3QuZXhwb3J0cz1yfSx7fV0sMTI1OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZS5yZXBsYWNlKGksIm1z
LSIpKX12YXIgbz1lKDEyNCksaT0vXi1tcy0vO3QuZXhwb3J0cz1yfSx7MTI0OjEyNH1dLDEyNjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuISghZXx8
IXQpJiYoZT09PXR8fCFvKGUpJiYobyh0KT9yKGUsdC5wYXJlbnROb2RlKToiY29udGFpbnMiaW4g
ZT9lLmNvbnRhaW5zKHQpOiEhZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmISEoMTYmZS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbih0KSkpKX12YXIgbz1lKDEzOSk7dC5leHBvcnRzPXJ9LHsxMzk6
MTM5fV0sMTI3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFy
IHQ9ZS5sZW5ndGg7aWYoKEFycmF5LmlzQXJyYXkoZSl8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1
bmN0aW9uIiE9dHlwZW9mIGUpJiZhKCExKSwibnVtYmVyIiE9dHlwZW9mIHQmJmEoITEpLDA9PT10
fHx0LTEgaW4gZXx8YSghMSksImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsbGVlJiZhKCExKSxlLmhh
c093blByb3BlcnR5KXRyeXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9Y2F0
Y2goZSl7fWZvcih2YXIgbj1BcnJheSh0KSxyPTA7cjx0O3IrKyluW3JdPWVbcl07cmV0dXJuIG59
ZnVuY3Rpb24gbyhlKXtyZXR1cm4hIWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9
PXR5cGVvZiBlKSYmImxlbmd0aCJpbiBlJiYhKCJzZXRJbnRlcnZhbCJpbiBlKSYmIm51bWJlciIh
PXR5cGVvZiBlLm5vZGVUeXBlJiYoQXJyYXkuaXNBcnJheShlKXx8ImNhbGxlZSJpbiBlfHwiaXRl
bSJpbiBlKX1mdW5jdGlvbiBpKGUpe3JldHVybiBvKGUpP0FycmF5LmlzQXJyYXkoZSk/ZS5zbGlj
ZSgpOnIoZSk6W2VdfXZhciBhPWUoMTM3KTt0LmV4cG9ydHM9aX0sezEzNzoxMzd9XSwxMjg6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLm1hdGNoKGMp
O3JldHVybiB0JiZ0WzFdLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWw7bHx8
dSghMSk7dmFyIG89cihlKSxpPW8mJnMobyk7aWYoaSl7bi5pbm5lckhUTUw9aVsxXStlK2lbMl07
Zm9yKHZhciBjPWlbMF07Yy0tOyluPW4ubGFzdENoaWxkfWVsc2Ugbi5pbm5lckhUTUw9ZTt2YXIg
cD1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTtwLmxlbmd0aCYmKHR8fHUoITEpLGEo
cCkuZm9yRWFjaCh0KSk7Zm9yKHZhciBkPUFycmF5LmZyb20obi5jaGlsZE5vZGVzKTtuLmxhc3RD
aGlsZDspbi5yZW1vdmVDaGlsZChuLmxhc3RDaGlsZCk7cmV0dXJuIGR9dmFyIGk9ZSgxMjMpLGE9
ZSgxMjcpLHM9ZSgxMzMpLHU9ZSgxMzcpLGw9aS5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik6bnVsbCxjPS9eXHMqPChcdyspLzt0LmV4cG9ydHM9b30sezEyMzoxMjMsMTI3
OjEyNywxMzM6MTMzLDEzNzoxMzd9XSwxMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG89ZnVuY3Rpb24o
KXt9O28udGhhdFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJu
c1RydWU9cighMCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1m
dW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7
cmV0dXJuIGV9LHQuZXhwb3J0cz1vfSx7fV0sMTMwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sMTMxOltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7dHJ5e2UuZm9jdXMoKX1jYXRjaChlKXt9fXQuZXhwb3J0cz1y
fSx7fV0sMTMyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYo
dm9pZCAwPT09KGU9ZXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9p
ZCAwKSkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRj
aCh0KXtyZXR1cm4gZS5ib2R5fX10LmV4cG9ydHM9cn0se31dLDEzMzpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBhfHxpKCExKSxkLmhhc093blByb3Bl
cnR5KGUpfHwoZT0iKiIpLHMuaGFzT3duUHJvcGVydHkoZSl8fChhLmlubmVySFRNTD0iKiI9PT1l
PyI8bGluayAvPiI6IjwiK2UrIj48LyIrZSsiPiIsc1tlXT0hYS5maXJzdENoaWxkKSxzW2VdP2Rb
ZV06bnVsbH12YXIgbz1lKDEyMyksaT1lKDEzNyksYT1vLmNhblVzZURPTT9kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTpudWxsLHM9e30sdT1bMSwnPHNlbGVjdCBtdWx0aXBsZT0idHJ1ZSI+
JywiPC9zZWxlY3Q+Il0sbD1bMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sYz1bMywiPHRhYmxlPjx0
Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0scD1bMSwnPHN2ZyB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciPicsIjwvc3ZnPiJdLGQ9eyIqIjpbMSwiPzxkaXY+Iiwi
PC9kaXY+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+
PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGxlZ2VuZDpbMSwiPGZp
ZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0s
dHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLG9wdGdyb3VwOnUsb3B0
aW9uOnUsY2FwdGlvbjpsLGNvbGdyb3VwOmwsdGJvZHk6bCx0Zm9vdDpsLHRoZWFkOmwsdGQ6Yyx0
aDpjfTtbImNpcmNsZSIsImNsaXBQYXRoIiwiZGVmcyIsImVsbGlwc2UiLCJnIiwiaW1hZ2UiLCJs
aW5lIiwibGluZWFyR3JhZGllbnQiLCJtYXNrIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwi
cG9seWxpbmUiLCJyYWRpYWxHcmFkaWVudCIsInJlY3QiLCJzdG9wIiwidGV4dCIsInRzcGFuIl0u
Zm9yRWFjaChmdW5jdGlvbihlKXtkW2VdPXAsc1tlXT0hMH0pLHQuZXhwb3J0cz1yfSx7MTIzOjEy
MywxMzc6MTM3fV0sMTM0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7cmV0dXJuIGUuV2luZG93JiZlIGluc3RhbmNlb2YgZS5XaW5kb3c/e3g6ZS5wYWdlWE9mZnNl
dHx8ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCx5OmUucGFnZVlPZmZzZXR8
fGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcH06e3g6ZS5zY3JvbGxMZWZ0LHk6
ZS5zY3JvbGxUb3B9fXQuZXhwb3J0cz1yfSx7fV0sMTM1OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucmVwbGFjZShvLCItJDEiKS50b0xvd2VyQ2Fz
ZSgpfXZhciBvPS8oW0EtWl0pL2c7dC5leHBvcnRzPXJ9LHt9XSwxMzY6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gbyhlKS5yZXBsYWNlKGksIi1tcy0i
KX12YXIgbz1lKDEzNSksaT0vXm1zLS87dC5leHBvcnRzPXJ9LHsxMzU6MTM1fV0sMTM3OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scixpLGEscyx1KXtpZihv
KHQpLCFlKXt2YXIgbDtpZih2b2lkIDA9PT10KWw9bmV3IEVycm9yKCJNaW5pZmllZCBleGNlcHRp
b24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhl
IGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vs
c2V7dmFyIGM9W24scixpLGEscyx1XSxwPTA7bD1uZXcgRXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1
bmN0aW9uKCl7cmV0dXJuIGNbcCsrXX0pKSxsLm5hbWU9IkludmFyaWFudCBWaW9sYXRpb24ifXRo
cm93IGwuZnJhbWVzVG9Qb3A9MSxsfX12YXIgbz1mdW5jdGlvbihlKXt9O3QuZXhwb3J0cz1yfSx7
fV0sMTM4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9
ZT9lLm93bmVyRG9jdW1lbnR8fGU6ZG9jdW1lbnQsbj10LmRlZmF1bHRWaWV3fHx3aW5kb3c7cmV0
dXJuISghZXx8ISgiZnVuY3Rpb24iPT10eXBlb2Ygbi5Ob2RlP2UgaW5zdGFuY2VvZiBuLk5vZGU6
Im9iamVjdCI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlwZW9mIGUubm9kZVR5cGUmJiJzdHJpbmci
PT10eXBlb2YgZS5ub2RlTmFtZSkpfXQuZXhwb3J0cz1yfSx7fV0sMTM5OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIG8oZSkmJjM9PWUubm9kZVR5cGV9
dmFyIG89ZSgxMzgpO3QuZXhwb3J0cz1yfSx7MTM4OjEzOH1dLDE0MDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihuKXty
ZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09ZS5jYWxsKHRoaXMsbikpLHRbbl19fXQu
ZXhwb3J0cz1yfSx7fV0sMTQxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwxL2U9PTEvdDplIT09ZSYmdCE9PXR9
ZnVuY3Rpb24gbyhlLHQpe2lmKHIoZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9dHlwZW9mIGV8
fG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiExO3ZhciBuPU9i
amVjdC5rZXlzKGUpLG89T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGghPT1vLmxlbmd0aClyZXR1
cm4hMTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKylpZighaS5jYWxsKHQsblthXSl8fCFyKGVb
blthXV0sdFtuW2FdXSkpcmV0dXJuITE7cmV0dXJuITB9dmFyIGk9T2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9b30se31dLDE0MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj1lKDEyOSksbz1yO3QuZXhwb3J0cz1vfSx7MTI5OjEyOX1dLDE0MzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKG51bGw9PT1lfHx2b2lk
IDA9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxl
ZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIE9iamVjdChlKX12YXIgbz1PYmplY3Qu
Z2V0T3duUHJvcGVydHlTeW1ib2xzLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxh
PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7dC5leHBvcnRzPWZ1bmN0aW9u
KCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIp
O2lmKGVbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1
cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUo
bildPW47aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFw
KGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIHI9e307cmV0
dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXty
W2VdPWV9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2ln
bih7fSxyKSkuam9pbigiIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVu
Y3Rpb24oZSx0KXtmb3IodmFyIG4scyx1PXIoZSksbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKysp
e249T2JqZWN0KGFyZ3VtZW50c1tsXSk7Zm9yKHZhciBjIGluIG4paS5jYWxsKG4sYykmJih1W2Nd
PW5bY10pO2lmKG8pe3M9byhuKTtmb3IodmFyIHA9MDtwPHMubGVuZ3RoO3ArKylhLmNhbGwobixz
W3BdKSYmKHVbc1twXV09bltzW3BdXSl9fXJldHVybiB1fX0se31dLDE0NDpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7fXQuZXhwb3J0cz1yfSx7MTM3
OjEzNywxNDI6MTQyLDE0NzoxNDd9XSwxNDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9ZSgxNDYpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlLCExKX19LHsxNDY6
MTQ2fV0sMTQ2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTI5KSxvPWUo
MTM3KSxpPShlKDE0MiksZSgxNDcpKSxhPWUoMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtm
dW5jdGlvbiBuKGUpe3ZhciB0PWUmJihFJiZlW0VdfHxlW3hdKTtpZigiZnVuY3Rpb24iPT10eXBl
b2YgdClyZXR1cm4gdH1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwxL2U9PTEv
dDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gdShlKXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLnN0YWNrPSIi
fWZ1bmN0aW9uIGwoZSl7ZnVuY3Rpb24gbihuLHIsYSxzLGwsYyxwKXtpZihzPXN8fHcsYz1jfHxh
LHAhPT1pKWlmKHQpbyghMSwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBp
cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9wVHlw
ZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2Zi
Lm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7ZWxzZTtyZXR1cm4gbnVsbD09clthXT9uP25ldyB1
KG51bGw9PT1yW2FdPyJUaGUgIitsKyIgYCIrYysiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4g
YCIrcysiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrbCsiIGAiK2MrImAgaXMg
bWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5l
ZGAuIik6bnVsbDplKHIsYSxzLGwsYyl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiByLmlz
UmVxdWlyZWQ9bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiB0KHQsbixy
LG8saSxhKXt2YXIgcz10W25dO2lmKF8ocykhPT1lKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28r
IiBgIitpKyJgIG9mIHR5cGUgYCIrQyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3Rl
ZCBgIitlKyJgLiIpO3JldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIHAoZSl7ZnVuY3Rp
b24gdCh0LG4scixvLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBuZXcgdSgiUHJv
cGVydHkgYCIrYSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBu
b3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgcz10W25dO2lmKCFBcnJheS5pc0FycmF5KHMp
KXtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK18ocykrImAg
c3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBsPTA7bDxz
Lmxlbmd0aDtsKyspe3ZhciBjPWUocyxsLHIsbyxhKyJbIitsKyJdIixpKTtpZihjIGluc3RhbmNl
b2YgRXJyb3IpcmV0dXJuIGN9cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVuY3Rpb24gZChlKXtm
dW5jdGlvbiB0KHQsbixyLG8saSl7aWYoISh0W25daW5zdGFuY2VvZiBlKSl7dmFyIGE9ZS5uYW1l
fHx3O3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrYih0W25d
KSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIithKyJgLiIp
fXJldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIGYoZSl7ZnVuY3Rpb24gdCh0LG4scixv
LGkpe2Zvcih2YXIgYT10W25dLGw9MDtsPGUubGVuZ3RoO2wrKylpZihzKGEsZVtsXSkpcmV0dXJu
IG51bGw7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUgYCIrYSsi
YCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmluZ2lmeShl
KSsiLiIpfXJldHVybiBBcnJheS5pc0FycmF5KGUpP2wodCk6ci50aGF0UmV0dXJuc051bGx9ZnVu
Y3Rpb24gaChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUp
cmV0dXJuIG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhhcyBp
bnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgcz10W25dLGw9
XyhzKTtpZigib2JqZWN0IiE9PWwpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAg
b2YgdHlwZSBgIitsKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVjdC4i
KTtmb3IodmFyIGMgaW4gcylpZihzLmhhc093blByb3BlcnR5KGMpKXt2YXIgcD1lKHMsYyxyLG8s
YSsiLiIrYyxpKTtpZihwIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIHB9cmV0dXJuIG51bGx9cmV0
dXJuIGwodCl9ZnVuY3Rpb24gbShlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7Zm9yKHZhciBzPTA7
czxlLmxlbmd0aDtzKyspe2lmKG51bGw9PSgwLGVbc10pKHQsbixyLG8sYSxpKSlyZXR1cm4gbnVs
bH1yZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBzdXBwbGllZCB0byBgIityKyJg
LiIpfXJldHVybiBBcnJheS5pc0FycmF5KGUpP2wodCk6ci50aGF0UmV0dXJuc051bGx9ZnVuY3Rp
b24gdihlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7dmFyIHM9dFtuXSxsPV8ocyk7aWYoIm9iamVj
dCIhPT1sKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJgIG9mIHR5cGUgYCIrbCsi
YCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGMgaW4g
ZSl7dmFyIHA9ZVtjXTtpZihwKXt2YXIgZD1wKHMsYyxyLG8sYSsiLiIrYyxpKTtpZihkKXJldHVy
biBkfX1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlvbiBnKHQpe3N3aXRjaCh0eXBlb2Yg
dCl7Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7Y2Fz
ZSJib29sZWFuIjpyZXR1cm4hdDtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1
cm4gdC5ldmVyeShnKTtpZihudWxsPT09dHx8ZSh0KSlyZXR1cm4hMDt2YXIgcj1uKHQpO2lmKCFy
KXJldHVybiExO3ZhciBvLGk9ci5jYWxsKHQpO2lmKHIhPT10LmVudHJpZXMpe2Zvcig7IShvPWku
bmV4dCgpKS5kb25lOylpZighZyhvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWkubmV4
dCgpKS5kb25lOyl7dmFyIGE9by52YWx1ZTtpZihhJiYhZyhhWzFdKSlyZXR1cm4hMX1yZXR1cm4h
MDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuInN5bWJvbCI9PT1lfHwo
IlN5bWJvbCI9PT10WyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm
JnQgaW5zdGFuY2VvZiBTeW1ib2wpfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJu
IEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplIGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3QiOnko
dCxlKT8ic3ltYm9sIjp0fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9XyhlKTtpZigib2JqZWN0Ij09PXQp
e2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiJkYXRlIjtpZihlIGluc3RhbmNlb2YgUmVnRXhw
KXJldHVybiJyZWdleHAifXJldHVybiB0fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUuY29uc3RydWN0
b3ImJmUuY29uc3RydWN0b3IubmFtZT9lLmNvbnN0cnVjdG9yLm5hbWU6d312YXIgRT0iZnVuY3Rp
b24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IseD0iQEBpdGVyYXRvciIsdz0iPDxh
bm9ueW1vdXM+PiIsVD17YXJyYXk6YygiYXJyYXkiKSxib29sOmMoImJvb2xlYW4iKSxmdW5jOmMo
ImZ1bmN0aW9uIiksbnVtYmVyOmMoIm51bWJlciIpLG9iamVjdDpjKCJvYmplY3QiKSxzdHJpbmc6
Yygic3RyaW5nIiksc3ltYm9sOmMoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBsKHIu
dGhhdFJldHVybnNOdWxsKX0oKSxhcnJheU9mOnAsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0aW9u
IHQodCxuLHIsbyxpKXt2YXIgYT10W25dO2lmKCFlKGEpKXtyZXR1cm4gbmV3IHUoIkludmFsaWQg
IitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK18oYSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhw
ZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBsKHQpfSgp
LGluc3RhbmNlT2Y6ZCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLG8pe3JldHVy
biBnKGVbdF0pP251bGw6bmV3IHUoIkludmFsaWQgIityKyIgYCIrbysiYCBzdXBwbGllZCB0byBg
IituKyJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gbChlKX0oKSxvYmplY3RPZjpo
LG9uZU9mOmYsb25lT2ZUeXBlOm0sc2hhcGU6dn0KKztyZXR1cm4gdS5wcm90b3R5cGU9RXJyb3Iu
cHJvdG90eXBlLFQuY2hlY2tQcm9wVHlwZXM9YSxULlByb3BUeXBlcz1ULFR9fSx7MTI5OjEyOSwx
Mzc6MTM3LDE0MjoxNDIsMTQ0OjE0NCwxNDc6MTQ3fV0sMTQ3OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO3QuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExf
QkVfRklSRUQifSx7fV19LHt9LFs0NV0pKDQ1KX0oKX0oKX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFj
dC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmEyOTAzNmNk
NGU4NzE2ZTI4Zjk5ZDIxOTg2MWY2OTYwZWFkZDY3NgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLmpz
CkBAIC0wLDAgKzEsNTY0NiBAQAorIC8qKgorICAqIFJlYWN0ICh3aXRoIGFkZG9ucykgdjE1LjUu
NAorICAqLworKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09Im9iamVjdCImJnR5cGVv
ZiBtb2R1bGUhPT0idW5kZWZpbmVkIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9m
IGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBn
O2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIil7Zz13aW5kb3d9ZWxzZSBpZih0eXBlb2Yg
Z2xvYmFsIT09InVuZGVmaW5lZCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5k
ZWZpbmVkIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcuUmVhY3QgPSBmKCl9fSkoZnVuY3Rpb24oKXt2
YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rp
b24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PSJmdW5j
dGlvbiImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEw
KTt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5j
b2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0u
Y2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246
ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9m
IHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKysp
cyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBF
eGVjdXRpb25FbnZpcm9ubWVudCA9IF9kZXJlcV8oNDQpOworCisvKioKKyAqIEdlbmVyYXRlIGEg
bWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5
bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHN0eWxl
UHJvcAorICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZQorICogQHJldHVybnMge29iamVjdH0K
KyAqLworZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkgeworICB2
YXIgcHJlZml4ZXMgPSB7fTsKKworICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0g
PSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTsKKyAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVBy
b3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7CisgIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9w
XSA9ICdtb3onICsgZXZlbnROYW1lOworICBwcmVmaXhlc1snbXMnICsgc3R5bGVQcm9wXSA9ICdN
UycgKyBldmVudE5hbWU7CisgIHByZWZpeGVzWydPJyArIHN0eWxlUHJvcF0gPSAnbycgKyBldmVu
dE5hbWUudG9Mb3dlckNhc2UoKTsKKworICByZXR1cm4gcHJlZml4ZXM7Cit9CisKKy8qKgorICog
QSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHBy
ZWZpeGVzLgorICovCit2YXIgdmVuZG9yUHJlZml4ZXMgPSB7CisgIGFuaW1hdGlvbmVuZDogbWFr
ZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLAorICBhbmltYXRpb25pdGVy
YXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSwK
KyAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25T
dGFydCcpLAorICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1Ry
YW5zaXRpb25FbmQnKQorfTsKKworLyoqCisgKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFk
eSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuCisgKi8KK3ZhciBw
cmVmaXhlZEV2ZW50TmFtZXMgPSB7fTsKKworLyoqCisgKiBFbGVtZW50IHRvIGNoZWNrIGZvciBw
cmVmaXhlcyBvbi4KKyAqLwordmFyIHN0eWxlID0ge307CisKKy8qKgorICogQm9vdHN0cmFwIGlm
IGEgRE9NIGV4aXN0cy4KKyAqLworaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkg
eworICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOworCisgIC8v
IE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9p
ZCA0LngsCisgIC8vIHRoZSB1bi1wcmVmaXhlZCAiYW5pbWF0aW9uIiBhbmQgInRyYW5zaXRpb24i
IHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlCisgIC8vIHN0eWxlIG9iamVjdCBidXQgdGhl
IGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZAorICAv
LyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBu
b3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLgorICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGlu
IHdpbmRvdykpIHsKKyAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1h
dGlvbjsKKyAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1h
dGlvbjsKKyAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9u
OworICB9CisKKyAgLy8gU2FtZSBhcyBhYm92ZQorICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBp
biB3aW5kb3cpKSB7CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJh
bnNpdGlvbjsKKyAgfQorfQorCisvKioKKyAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29y
cmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30g
ZXZlbnROYW1lCisgKiBAcmV0dXJucyB7c3RyaW5nfQorICovCitmdW5jdGlvbiBnZXRWZW5kb3JQ
cmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHsKKyAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tl
dmVudE5hbWVdKSB7CisgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdOwor
ICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7CisgICAgcmV0dXJuIGV2
ZW50TmFtZTsKKyAgfQorCisgIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5h
bWVdOworCisgIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHsKKyAgICBpZiAocHJl
Zml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7
CisgICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBb
c3R5bGVQcm9wXTsKKyAgICB9CisgIH0KKworICByZXR1cm4gJyc7Cit9CisKK21vZHVsZS5leHBv
cnRzID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWU7Cit9LHsiNDQiOjQ0fV0sMjpbZnVuY3Rp
b24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
KiAKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8qKgorICogRXNjYXBlIGFuZCB3cmFwIGtleSBz
byBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWQKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30g
a2V5IHRvIGJlIGVzY2FwZWQuCisgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS4K
KyAqLworCitmdW5jdGlvbiBlc2NhcGUoa2V5KSB7CisgIHZhciBlc2NhcGVSZWdleCA9IC9bPTpd
L2c7CisgIHZhciBlc2NhcGVyTG9va3VwID0geworICAgICc9JzogJz0wJywKKyAgICAnOic6ICc9
MicKKyAgfTsKKyAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBrZXkpLnJlcGxhY2UoZXNjYXBl
UmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkgeworICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNo
XTsKKyAgfSk7CisKKyAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7Cit9CisKKy8qKgorICog
VW5lc2NhcGUgYW5kIHVud3JhcCBrZXkgZm9yIGh1bWFuLXJlYWRhYmxlIGRpc3BsYXkKKyAqCisg
KiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIHVuZXNjYXBlLgorICogQHJldHVybiB7c3RyaW5nfSB0
aGUgdW5lc2NhcGVkIGtleS4KKyAqLworZnVuY3Rpb24gdW5lc2NhcGUoa2V5KSB7CisgIHZhciB1
bmVzY2FwZVJlZ2V4ID0gLyg9MHw9MikvZzsKKyAgdmFyIHVuZXNjYXBlckxvb2t1cCA9IHsKKyAg
ICAnPTAnOiAnPScsCisgICAgJz0yJzogJzonCisgIH07CisgIHZhciBrZXlTdWJzdHJpbmcgPSBr
ZXlbMF0gPT09ICcuJyAmJiBrZXlbMV0gPT09ICckJyA/IGtleS5zdWJzdHJpbmcoMikgOiBrZXku
c3Vic3RyaW5nKDEpOworCisgIHJldHVybiAoJycgKyBrZXlTdWJzdHJpbmcpLnJlcGxhY2UodW5l
c2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7CisgICAgcmV0dXJuIHVuZXNjYXBlckxvb2t1
cFttYXRjaF07CisgIH0pOworfQorCit2YXIgS2V5RXNjYXBlVXRpbHMgPSB7CisgIGVzY2FwZTog
ZXNjYXBlLAorICB1bmVzY2FwZTogdW5lc2NhcGUKK307CisKK21vZHVsZS5leHBvcnRzID0gS2V5
RXNjYXBlVXRpbHM7Cit9LHt9XSwzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBS
ZWFjdExpbmsgPSBfZGVyZXFfKDIwKTsKK3ZhciBSZWFjdFN0YXRlU2V0dGVycyA9IF9kZXJlcV8o
MjYpOworCisvKioKKyAqIEEgc2ltcGxlIG1peGluIGFyb3VuZCBSZWFjdExpbmsuZm9yU3RhdGUo
KS4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3R3by13YXkt
YmluZGluZy1oZWxwZXJzLmh0bWwKKyAqLwordmFyIExpbmtlZFN0YXRlTWl4aW4gPSB7CisgIC8q
KgorICAgKiBDcmVhdGUgYSBSZWFjdExpbmsgdGhhdCdzIGxpbmtlZCB0byBwYXJ0IG9mIHRoaXMg
Y29tcG9uZW50J3Mgc3RhdGUuIFRoZQorICAgKiBSZWFjdExpbmsgd2lsbCBoYXZlIHRoZSBjdXJy
ZW50IHZhbHVlIG9mIHRoaXMuc3RhdGVba2V5XSBhbmQgd2lsbCBjYWxsCisgICAqIHNldFN0YXRl
KCkgd2hlbiBhIGNoYW5nZSBpcyByZXF1ZXN0ZWQuCisgICAqCisgICAqIEBwYXJhbSB7c3RyaW5n
fSBrZXkgc3RhdGUga2V5IHRvIHVwZGF0ZS4KKyAgICogQHJldHVybiB7UmVhY3RMaW5rfSBSZWFj
dExpbmsgaW5zdGFuY2UgbGlua2luZyB0byB0aGUgc3RhdGUuCisgICAqLworICBsaW5rU3RhdGU6
IGZ1bmN0aW9uIChrZXkpIHsKKyAgICByZXR1cm4gbmV3IFJlYWN0TGluayh0aGlzLnN0YXRlW2tl
eV0sIFJlYWN0U3RhdGVTZXR0ZXJzLmNyZWF0ZVN0YXRlS2V5U2V0dGVyKHRoaXMsIGtleSkpOwor
ICB9Cit9OworCittb2R1bGUuZXhwb3J0cyA9IExpbmtlZFN0YXRlTWl4aW47Cit9LHsiMjAiOjIw
LCIyNiI6MjZ9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9k
SW52YXJpYW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsK
KworLyoqCisgKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVh
Y2ggcG90ZW50aWFsIG51bWJlciBvZgorICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJp
YyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZAorICogcmVxdWlyZSBhY2Nl
c3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJl
ZmVycyB0bworICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3Ro
ZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbQorICogaGVyZSwgb3IgaW4gdGhlaXIgb3du
IGZpbGVzLgorICovCit2YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoY29weUZpZWxk
c0Zyb20pIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5s
ZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7Cisg
ICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgY29weUZpZWxkc0Zyb20pOworICAgIHJldHVybiBpbnN0
YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKTsK
KyAgfQorfTsKKwordmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMikgewor
ICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgewor
ICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5j
YWxsKGluc3RhbmNlLCBhMSwgYTIpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsK
KyAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7CisgIH0KK307CisKK3ZhciB0aHJlZUFyZ3Vt
ZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsK
KyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBL
bGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEy
LCBhMyk7CisgICAgcmV0dXJuIGluc3RhbmNlOworICB9IGVsc2UgeworICAgIHJldHVybiBuZXcg
S2xhc3MoYTEsIGEyLCBhMyk7CisgIH0KK307CisKK3ZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBm
dW5jdGlvbiAoYTEsIGEyLCBhMywgYTQpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEts
YXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0
YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQp
OworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNz
KGExLCBhMiwgYTMsIGE0KTsKKyAgfQorfTsKKwordmFyIHN0YW5kYXJkUmVsZWFzZXIgPSBmdW5j
dGlvbiAoaW5zdGFuY2UpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgIShpbnN0YW5jZSBpbnN0
YW5jZW9mIEtsYXNzKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ1RyeWluZyB0byByZWxlYXNlIGFuIGluc3RhbmNlIGludG8gYSBwb29sIG9mIGEg
ZGlmZmVyZW50IHR5cGUuJykgOiBfcHJvZEludmFyaWFudCgnMjUnKSA6IHZvaWQgMDsKKyAgaW5z
dGFuY2UuZGVzdHJ1Y3RvcigpOworICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCA8IEts
YXNzLnBvb2xTaXplKSB7CisgICAgS2xhc3MuaW5zdGFuY2VQb29sLnB1c2goaW5zdGFuY2UpOwor
ICB9Cit9OworCit2YXIgREVGQVVMVF9QT09MX1NJWkUgPSAxMDsKK3ZhciBERUZBVUxUX1BPT0xF
UiA9IG9uZUFyZ3VtZW50UG9vbGVyOworCisvKioKKyAqIEF1Z21lbnRzIGBDb3B5Q29uc3RydWN0
b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUgY2xhc3MKKyAq
IGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxkcy4g
QW55IENvcHlDb25zdHJ1Y3RvcgorICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29sU2l6
ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGEKKyAqIHByb3RvdHlwaWNhbCBgZGVzdHJ1
Y3RvcmAgb24gaW5zdGFuY2VzLgorICoKKyAqIEBwYXJhbSB7RnVuY3Rpb259IENvcHlDb25zdHJ1
Y3RvciBDb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlc2V0LgorICogQHBhcmFtIHtG
dW5jdGlvbn0gcG9vbGVyIEN1c3RvbWl6YWJsZSBwb29sZXIuCisgKi8KK3ZhciBhZGRQb29saW5n
VG8gPSBmdW5jdGlvbiAoQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHsKKyAgLy8gQ2FzdGluZyBh
cyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQg
dHJ1c3RzCisgIC8vIGl0IHRvIG1hdGNoIHRoZSB0eXBlIHdlIGRlY2xhcmVkCisgIHZhciBOZXdL
bGFzcyA9IENvcHlDb25zdHJ1Y3RvcjsKKyAgTmV3S2xhc3MuaW5zdGFuY2VQb29sID0gW107Cisg
IE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8fCBERUZBVUxUX1BPT0xFUjsKKyAgaWYgKCFO
ZXdLbGFzcy5wb29sU2l6ZSkgeworICAgIE5ld0tsYXNzLnBvb2xTaXplID0gREVGQVVMVF9QT09M
X1NJWkU7CisgIH0KKyAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFzZXI7CisgIHJl
dHVybiBOZXdLbGFzczsKK307CisKK3ZhciBQb29sZWRDbGFzcyA9IHsKKyAgYWRkUG9vbGluZ1Rv
OiBhZGRQb29saW5nVG8sCisgIG9uZUFyZ3VtZW50UG9vbGVyOiBvbmVBcmd1bWVudFBvb2xlciwK
KyAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3VtZW50UG9vbGVyLAorICB0aHJlZUFyZ3VtZW50
UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLAorICBmb3VyQXJndW1lbnRQb29sZXI6IGZvdXJB
cmd1bWVudFBvb2xlcgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBQb29sZWRDbGFzczsKK30seyIz
OSI6MzksIjQ3Ijo0N31dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3Np
Z24gPSBfZGVyZXFfKDUwKTsKKwordmFyIFJlYWN0Q2hpbGRyZW4gPSBfZGVyZXFfKDkpOwordmFy
IFJlYWN0Q29tcG9uZW50ID0gX2RlcmVxXygxMSk7Cit2YXIgUmVhY3RQdXJlQ29tcG9uZW50ID0g
X2RlcmVxXygyNSk7Cit2YXIgUmVhY3RDbGFzcyA9IF9kZXJlcV8oMTApOwordmFyIFJlYWN0RE9N
RmFjdG9yaWVzID0gX2RlcmVxXygxNSk7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7
Cit2YXIgUmVhY3RQcm9wVHlwZXMgPSBfZGVyZXFfKDIzKTsKK3ZhciBSZWFjdFZlcnNpb24gPSBf
ZGVyZXFfKDMwKTsKKwordmFyIG9ubHlDaGlsZCA9IF9kZXJlcV8oMzgpOwordmFyIHdhcm5pbmcg
PSBfZGVyZXFfKDQ5KTsKKwordmFyIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRl
RWxlbWVudDsKK3ZhciBjcmVhdGVGYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7
Cit2YXIgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudDsKKworaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2YXIgY2FuRGVmaW5lUHJvcGVydHkg
PSBfZGVyZXFfKDMzKTsKKyAgdmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IF9kZXJlcV8oMTgp
OworICB2YXIgZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQgPSBmYWxzZTsKKyAgY3JlYXRlRWxl
bWVudCA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50OworICBjcmVhdGVGYWN0
b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUZhY3Rvcnk7CisgIGNsb25lRWxlbWVu
dCA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jbG9uZUVsZW1lbnQ7Cit9CisKK3ZhciBfX3NwcmVh
ZCA9IF9hc3NpZ247CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAg
dmFyIHdhcm5lZCA9IGZhbHNlOworICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHdhcm5lZCwgJ1JlYWN0Ll9fc3By
ZWFkIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gVXNlICcgKyAnT2JqZWN0
LmFzc2lnbiBkaXJlY3RseSBvciBhbm90aGVyIGhlbHBlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIg
JyArICdzZW1hbnRpY3MuIFlvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8geW91
ciBjb21waWxlci4gJyArICdTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcHJlYWQtZGVwcmVjYXRp
b24gZm9yIG1vcmUgZGV0YWlscy4nKSA6IHZvaWQgMDsKKyAgICB3YXJuZWQgPSB0cnVlOworICAg
IHJldHVybiBfYXNzaWduLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgIH07Cit9CisKK3ZhciBS
ZWFjdCA9IHsKKworICAvLyBNb2Rlcm4KKworICBDaGlsZHJlbjogeworICAgIG1hcDogUmVhY3RD
aGlsZHJlbi5tYXAsCisgICAgZm9yRWFjaDogUmVhY3RDaGlsZHJlbi5mb3JFYWNoLAorICAgIGNv
dW50OiBSZWFjdENoaWxkcmVuLmNvdW50LAorICAgIHRvQXJyYXk6IFJlYWN0Q2hpbGRyZW4udG9B
cnJheSwKKyAgICBvbmx5OiBvbmx5Q2hpbGQKKyAgfSwKKworICBDb21wb25lbnQ6IFJlYWN0Q29t
cG9uZW50LAorICBQdXJlQ29tcG9uZW50OiBSZWFjdFB1cmVDb21wb25lbnQsCisKKyAgY3JlYXRl
RWxlbWVudDogY3JlYXRlRWxlbWVudCwKKyAgY2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnQsCisg
IGlzVmFsaWRFbGVtZW50OiBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQsCisKKyAgLy8gQ2xh
c3NpYworCisgIFByb3BUeXBlczogUmVhY3RQcm9wVHlwZXMsCisgIGNyZWF0ZUNsYXNzOiBSZWFj
dENsYXNzLmNyZWF0ZUNsYXNzLAorICBjcmVhdGVGYWN0b3J5OiBjcmVhdGVGYWN0b3J5LAorICBj
cmVhdGVNaXhpbjogZnVuY3Rpb24gKG1peGluKSB7CisgICAgLy8gQ3VycmVudGx5IGEgbm9vcC4g
V2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIGFuZCB0cmFjZSBtaXhpbnMuCisgICAgcmV0dXJuIG1p
eGluOworICB9LAorCisgIC8vIFRoaXMgbG9va3MgRE9NIHNwZWNpZmljIGJ1dCB0aGVzZSBhcmUg
YWN0dWFsbHkgaXNvbW9ycGhpYyBoZWxwZXJzCisgIC8vIHNpbmNlIHRoZXkgYXJlIGp1c3QgZ2Vu
ZXJhdGluZyBET00gc3RyaW5ncy4KKyAgRE9NOiBSZWFjdERPTUZhY3RvcmllcywKKworICB2ZXJz
aW9uOiBSZWFjdFZlcnNpb24sCisKKyAgLy8gRGVwcmVjYXRlZCBob29rIGZvciBKU1ggc3ByZWFk
LCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuCisgIF9fc3ByZWFkOiBfX3NwcmVhZAorfTsK
KworLy8gVE9ETzogRml4IHRlc3RzIHNvIHRoYXQgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nIGRv
ZXNuJ3QgY2F1c2UgZmFpbHVyZXMuCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
KSB7CisgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShSZWFjdCwgJ1Byb3BUeXBlcycsIHsKKyAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5Qcm9wVHlw
ZXNEZXByZWNhdGVkLCAnQWNjZXNzaW5nIFByb3BUeXBlcyB2aWEgdGhlIG1haW4gUmVhY3QgcGFj
a2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgJyArICd0aGUgcHJvcC10eXBlcyBwYWNrYWdlIGZyb20g
bnBtIGluc3RlYWQuJykgOiB2b2lkIDA7CisgICAgICAgIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNh
dGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzOworICAgICAgfQorICAg
IH0pOworICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3Q7Cit9LHsiMTAiOjEwLCIxMSI6
MTEsIjE1IjoxNSwiMTYiOjE2LCIxOCI6MTgsIjIzIjoyMywiMjUiOjI1LCIzMCI6MzAsIjMzIjoz
MywiMzgiOjM4LCI0OSI6NDksIjUwIjo1MCwiOSI6OX1dLDY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKwordmFyIFJlYWN0RE9NOworCitmdW5jdGlvbiBnZXRSZWFjdERPTSgpIHsKKyAgaWYg
KCFSZWFjdERPTSkgeworICAgIC8vIFRoaXMgaXMgc2FmZSB0byB1c2UgYmVjYXVzZSBjdXJyZW50
IG1vZHVsZSBvbmx5IGV4aXN0cyBpbiB0aGUgYWRkb25zIGJ1aWxkOgorICAgIHZhciBSZWFjdFdp
dGhBZGRvbnNVTURFbnRyeSA9IF9kZXJlcV8oMzIpOworICAgIC8vIFRoaXMgaXMgaW5qZWN0ZWQg
YnkgdGhlIFJlYWN0RE9NIFVNRCBidWlsZDoKKyAgICBSZWFjdERPTSA9IFJlYWN0V2l0aEFkZG9u
c1VNREVudHJ5Ll9fU0VDUkVUX0lOSkVDVEVEX1JFQUNUX0RPTV9ET19OT1RfVVNFX09SX1lPVV9X
SUxMX0JFX0ZJUkVEOworICB9CisgIHJldHVybiBSZWFjdERPTTsKK30KKworZXhwb3J0cy5nZXRS
ZWFjdERPTSA9IGdldFJlYWN0RE9NOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgIGV4cG9ydHMuZ2V0UmVhY3RQZXJmID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVy
biBnZXRSZWFjdERPTSgpLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxM
X0JFX0ZJUkVELlJlYWN0UGVyZjsKKyAgfTsKKworICBleHBvcnRzLmdldFJlYWN0VGVzdFV0aWxz
ID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBnZXRSZWFjdERPTSgpLl9fU0VDUkVUX0lOVEVS
TkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0VGVzdFV0aWxzOworICB9
OworfQorfSx7IjMyIjozMn1dLDc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9h
c3NpZ24gPSBfZGVyZXFfKDUwKTsKKworZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNl
LCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkg
eyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24i
KTsgfSB9CisKK2Z1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwp
IHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVl
biBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNh
bGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0
aW9uIikgPyBjYWxsIDogc2VsZjsgfQorCitmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1
cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVy
Q2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBt
dXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiICsgdHlwZW9mIHN1cGVyQ2xh
c3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBz
dXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVu
dW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7
IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90
eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJD
bGFzczsgfQorCit2YXIgUmVhY3QgPSBfZGVyZXFfKDUpOwordmFyIHByb3BUeXBlc0ZhY3Rvcnkg
PSBfZGVyZXFfKDUyKTsKK3ZhciBQcm9wVHlwZXMgPSBwcm9wVHlwZXNGYWN0b3J5KFJlYWN0Lmlz
VmFsaWRFbGVtZW50KTsKKwordmFyIFJlYWN0VHJhbnNpdGlvbkdyb3VwID0gX2RlcmVxXygyOSk7
Cit2YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCA9IF9kZXJlcV8oOCk7CisKK2Z1bmN0
aW9uIGNyZWF0ZVRyYW5zaXRpb25UaW1lb3V0UHJvcFZhbGlkYXRvcih0cmFuc2l0aW9uVHlwZSkg
eworICB2YXIgdGltZW91dFByb3BOYW1lID0gJ3RyYW5zaXRpb24nICsgdHJhbnNpdGlvblR5cGUg
KyAnVGltZW91dCc7CisgIHZhciBlbmFibGVkUHJvcE5hbWUgPSAndHJhbnNpdGlvbicgKyB0cmFu
c2l0aW9uVHlwZTsKKworICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7CisgICAgLy8gSWYgdGhl
IHRyYW5zaXRpb24gaXMgZW5hYmxlZAorICAgIGlmIChwcm9wc1tlbmFibGVkUHJvcE5hbWVdKSB7
CisgICAgICAvLyBJZiBubyB0aW1lb3V0IGR1cmF0aW9uIGlzIHByb3ZpZGVkCisgICAgICBpZiAo
cHJvcHNbdGltZW91dFByb3BOYW1lXSA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBuZXcgRXJy
b3IodGltZW91dFByb3BOYW1lICsgJyB3YXNuXCd0IHN1cHBsaWVkIHRvIFJlYWN0Q1NTVHJhbnNp
dGlvbkdyb3VwOiAnICsgJ3RoaXMgY2FuIGNhdXNlIHVucmVsaWFibGUgYW5pbWF0aW9ucyBhbmQg
d29uXCd0IGJlIHN1cHBvcnRlZCBpbiAnICsgJ2EgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuIFNl
ZSAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtYW5pbWF0aW9uLXRyYW5zaXRpb24tZ3JvdXAtdGlt
ZW91dCBmb3IgbW9yZSAnICsgJ2luZm9ybWF0aW9uLicpOworCisgICAgICAgIC8vIElmIHRoZSBk
dXJhdGlvbiBpc24ndCBhIG51bWJlcgorICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHNbdGlt
ZW91dFByb3BOYW1lXSAhPT0gJ251bWJlcicpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBFcnJvcih0
aW1lb3V0UHJvcE5hbWUgKyAnIG11c3QgYmUgYSBudW1iZXIgKGluIG1pbGxpc2Vjb25kcyknKTsK
KyAgICAgIH0KKyAgICB9CisgIH07Cit9CisKKy8qKgorICogQW4gZWFzeSB3YXkgdG8gcGVyZm9y
bSBDU1MgdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMgd2hlbiBhIFJlYWN0IGNvbXBvbmVudAor
ICogZW50ZXJzIG9yIGxlYXZlcyB0aGUgRE9NLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0
aHViLmlvL3JlYWN0L2RvY3MvYW5pbWF0aW9uLmh0bWwjaGlnaC1sZXZlbC1hcGktcmVhY3Rjc3N0
cmFuc2l0aW9uZ3JvdXAKKyAqLworCit2YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAgPSBmdW5j
dGlvbiAoX1JlYWN0JENvbXBvbmVudCkgeworICBfaW5oZXJpdHMoUmVhY3RDU1NUcmFuc2l0aW9u
R3JvdXAsIF9SZWFjdCRDb21wb25lbnQpOworCisgIGZ1bmN0aW9uIFJlYWN0Q1NTVHJhbnNpdGlv
bkdyb3VwKCkgeworICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7CisKKyAgICBfY2xhc3NDYWxs
Q2hlY2sodGhpcywgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXApOworCisgICAgZm9yICh2YXIgX2xl
biA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkg
PCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07Cisg
ICAgfQorCisgICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25z
dHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENv
bXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLl93cmFwQ2hpbGQg
PSBmdW5jdGlvbiAoY2hpbGQpIHsKKyAgICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGlzIGNo
aWxkRmFjdG9yeSBzbyB0aGF0CisgICAgICAvLyBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxk
IGNhbiByZWNlaXZlIHVwZGF0ZXMgdG8gbmFtZSwgZW50ZXIsIGFuZAorICAgICAgLy8gbGVhdmUg
d2hpbGUgaXQgaXMgbGVhdmluZy4KKyAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJl
YWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQsIHsKKyAgICAgICAgbmFtZTogX3RoaXMucHJvcHMu
dHJhbnNpdGlvbk5hbWUsCisgICAgICAgIGFwcGVhcjogX3RoaXMucHJvcHMudHJhbnNpdGlvbkFw
cGVhciwKKyAgICAgICAgZW50ZXI6IF90aGlzLnByb3BzLnRyYW5zaXRpb25FbnRlciwKKyAgICAg
ICAgbGVhdmU6IF90aGlzLnByb3BzLnRyYW5zaXRpb25MZWF2ZSwKKyAgICAgICAgYXBwZWFyVGlt
ZW91dDogX3RoaXMucHJvcHMudHJhbnNpdGlvbkFwcGVhclRpbWVvdXQsCisgICAgICAgIGVudGVy
VGltZW91dDogX3RoaXMucHJvcHMudHJhbnNpdGlvbkVudGVyVGltZW91dCwKKyAgICAgICAgbGVh
dmVUaW1lb3V0OiBfdGhpcy5wcm9wcy50cmFuc2l0aW9uTGVhdmVUaW1lb3V0CisgICAgICB9LCBj
aGlsZCk7CisgICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywg
X3JldCk7CisgIH0KKworICBSZWFjdENTU1RyYW5zaXRpb25Hcm91cC5wcm90b3R5cGUucmVuZGVy
ID0gZnVuY3Rpb24gcmVuZGVyKCkgeworICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJl
YWN0VHJhbnNpdGlvbkdyb3VwLCBfYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7IGNoaWxkRmFjdG9y
eTogdGhpcy5fd3JhcENoaWxkIH0pKTsKKyAgfTsKKworICByZXR1cm4gUmVhY3RDU1NUcmFuc2l0
aW9uR3JvdXA7Cit9KFJlYWN0LkNvbXBvbmVudCk7CisKK1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3Vw
LmRpc3BsYXlOYW1lID0gJ1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwJzsKK1JlYWN0Q1NTVHJhbnNp
dGlvbkdyb3VwLnByb3BUeXBlcyA9IHsKKyAgdHJhbnNpdGlvbk5hbWU6IFJlYWN0Q1NTVHJhbnNp
dGlvbkdyb3VwQ2hpbGQucHJvcFR5cGVzLm5hbWUsCisKKyAgdHJhbnNpdGlvbkFwcGVhcjogUHJv
cFR5cGVzLmJvb2wsCisgIHRyYW5zaXRpb25FbnRlcjogUHJvcFR5cGVzLmJvb2wsCisgIHRyYW5z
aXRpb25MZWF2ZTogUHJvcFR5cGVzLmJvb2wsCisgIHRyYW5zaXRpb25BcHBlYXJUaW1lb3V0OiBj
cmVhdGVUcmFuc2l0aW9uVGltZW91dFByb3BWYWxpZGF0b3IoJ0FwcGVhcicpLAorICB0cmFuc2l0
aW9uRW50ZXJUaW1lb3V0OiBjcmVhdGVUcmFuc2l0aW9uVGltZW91dFByb3BWYWxpZGF0b3IoJ0Vu
dGVyJyksCisgIHRyYW5zaXRpb25MZWF2ZVRpbWVvdXQ6IGNyZWF0ZVRyYW5zaXRpb25UaW1lb3V0
UHJvcFZhbGlkYXRvcignTGVhdmUnKQorfTsKK1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLmRlZmF1
bHRQcm9wcyA9IHsKKyAgdHJhbnNpdGlvbkFwcGVhcjogZmFsc2UsCisgIHRyYW5zaXRpb25FbnRl
cjogdHJ1ZSwKKyAgdHJhbnNpdGlvbkxlYXZlOiB0cnVlCit9OworCisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXA7Cit9LHsiMjkiOjI5LCI1Ijo1LCI1MCI6NTAsIjUy
Ijo1MiwiOCI6OH1dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gX2Ns
YXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0
YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBh
IGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKK2Z1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VF
cnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4g
Y2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0
eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsgfQorCitmdW5jdGlvbiBf
aW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9
PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJv
cigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5v
dCAiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3Rvcjog
eyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29u
ZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBl
T2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xh
c3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfQorCit2YXIgUmVhY3QgPSBfZGVyZXFfKDUpOwor
dmFyIFJlYWN0QWRkb25zRE9NRGVwZW5kZW5jaWVzID0gX2RlcmVxXyg2KTsKKwordmFyIHByb3BU
eXBlc0ZhY3RvcnkgPSBfZGVyZXFfKDUyKTsKK3ZhciBQcm9wVHlwZXMgPSBwcm9wVHlwZXNGYWN0
b3J5KFJlYWN0LmlzVmFsaWRFbGVtZW50KTsKKwordmFyIENTU0NvcmUgPSBfZGVyZXFfKDQzKTsK
K3ZhciBSZWFjdFRyYW5zaXRpb25FdmVudHMgPSBfZGVyZXFfKDI4KTsKKwordmFyIG9ubHlDaGls
ZCA9IF9kZXJlcV8oMzgpOworCit2YXIgVElDSyA9IDE3OworCit2YXIgUmVhY3RDU1NUcmFuc2l0
aW9uR3JvdXBDaGlsZCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7CisgIF9pbmhlcml0
cyhSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLCBfUmVhY3QkQ29tcG9uZW50KTsKKworICBm
dW5jdGlvbiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkKCkgeworICAgIHZhciBfdGVtcCwg
X3RoaXMsIF9yZXQ7CisKKyAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhY3RDU1NUcmFuc2l0
aW9uR3JvdXBDaGlsZCk7CisKKyAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwg
YXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAg
ICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICB9CisKKyAgICByZXR1cm4gX3Jl
dCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9S
ZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0
KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2lzTW91bnRlZCA9IGZhbHNlLCBfdGhpcy50cmFuc2l0
aW9uID0gZnVuY3Rpb24gKGFuaW1hdGlvblR5cGUsIGZpbmlzaENhbGxiYWNrLCB1c2VyU3BlY2lm
aWVkRGVsYXkpIHsKKyAgICAgIHZhciBub2RlID0gUmVhY3RBZGRvbnNET01EZXBlbmRlbmNpZXMu
Z2V0UmVhY3RET00oKS5maW5kRE9NTm9kZShfdGhpcyk7CisKKyAgICAgIGlmICghbm9kZSkgewor
ICAgICAgICBpZiAoZmluaXNoQ2FsbGJhY2spIHsKKyAgICAgICAgICBmaW5pc2hDYWxsYmFjaygp
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIGNsYXNz
TmFtZSA9IF90aGlzLnByb3BzLm5hbWVbYW5pbWF0aW9uVHlwZV0gfHwgX3RoaXMucHJvcHMubmFt
ZSArICctJyArIGFuaW1hdGlvblR5cGU7CisgICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gX3Ro
aXMucHJvcHMubmFtZVthbmltYXRpb25UeXBlICsgJ0FjdGl2ZSddIHx8IGNsYXNzTmFtZSArICct
YWN0aXZlJzsKKyAgICAgIHZhciB0aW1lb3V0ID0gbnVsbDsKKworICAgICAgdmFyIGVuZExpc3Rl
bmVyID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUp
IHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjbGVhclRpbWVvdXQo
dGltZW91dCk7CisKKyAgICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhub2RlLCBjbGFzc05hbWUp
OworICAgICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7CisK
KyAgICAgICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9k
ZSwgZW5kTGlzdGVuZXIpOworCisgICAgICAgIC8vIFVzdWFsbHkgdGhpcyBvcHRpb25hbCBjYWxs
YmFjayBpcyB1c2VkIGZvciBpbmZvcm1pbmcgYW4gb3duZXIgb2YKKyAgICAgICAgLy8gYSBsZWF2
ZSBhbmltYXRpb24gYW5kIHRlbGxpbmcgaXQgdG8gcmVtb3ZlIHRoZSBjaGlsZC4KKyAgICAgICAg
aWYgKGZpbmlzaENhbGxiYWNrKSB7CisgICAgICAgICAgZmluaXNoQ2FsbGJhY2soKTsKKyAgICAg
ICAgfQorICAgICAgfTsKKworICAgICAgQ1NTQ29yZS5hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUp
OworCisgICAgICAvLyBOZWVkIHRvIGRvIHRoaXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBhIHRyYW5z
aXRpb24uCisgICAgICBfdGhpcy5xdWV1ZUNsYXNzQW5kTm9kZShhY3RpdmVDbGFzc05hbWUsIG5v
ZGUpOworCisgICAgICAvLyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSB0aW1lb3V0IGRlbGF5Lgor
ICAgICAgaWYgKHVzZXJTcGVjaWZpZWREZWxheSkgeworICAgICAgICAvLyBDbGVhbi11cCB0aGUg
YW5pbWF0aW9uIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkKKyAgICAgICAgdGltZW91dCA9IHNl
dFRpbWVvdXQoZW5kTGlzdGVuZXIsIHVzZXJTcGVjaWZpZWREZWxheSk7CisgICAgICAgIF90aGlz
LnRyYW5zaXRpb25UaW1lb3V0cy5wdXNoKHRpbWVvdXQpOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gREVQUkVDQVRFRDogdGhpcyBsaXN0ZW5lciB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1
cmUgdmVyc2lvbiBvZiByZWFjdAorICAgICAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMuYWRkRW5k
RXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7CisgICAgICB9CisgICAgfSwgX3RoaXMu
cXVldWVDbGFzc0FuZE5vZGUgPSBmdW5jdGlvbiAoY2xhc3NOYW1lLCBub2RlKSB7CisgICAgICBf
dGhpcy5jbGFzc05hbWVBbmROb2RlUXVldWUucHVzaCh7CisgICAgICAgIGNsYXNzTmFtZTogY2xh
c3NOYW1lLAorICAgICAgICBub2RlOiBub2RlCisgICAgICB9KTsKKworICAgICAgaWYgKCFfdGhp
cy50aW1lb3V0KSB7CisgICAgICAgIF90aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KF90aGlzLmZs
dXNoQ2xhc3NOYW1lQW5kTm9kZVF1ZXVlLCBUSUNLKTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5m
bHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmIChfdGhp
cy5faXNNb3VudGVkKSB7CisgICAgICAgIF90aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5mb3JF
YWNoKGZ1bmN0aW9uIChvYmopIHsKKyAgICAgICAgICBDU1NDb3JlLmFkZENsYXNzKG9iai5ub2Rl
LCBvYmouY2xhc3NOYW1lKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBfdGhpcy5jbGFz
c05hbWVBbmROb2RlUXVldWUubGVuZ3RoID0gMDsKKyAgICAgIF90aGlzLnRpbWVvdXQgPSBudWxs
OworICAgIH0sIF90aGlzLmNvbXBvbmVudFdpbGxBcHBlYXIgPSBmdW5jdGlvbiAoZG9uZSkgewor
ICAgICAgaWYgKF90aGlzLnByb3BzLmFwcGVhcikgeworICAgICAgICBfdGhpcy50cmFuc2l0aW9u
KCdhcHBlYXInLCBkb25lLCBfdGhpcy5wcm9wcy5hcHBlYXJUaW1lb3V0KTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGRvbmUoKTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5jb21wb25lbnRXaWxs
RW50ZXIgPSBmdW5jdGlvbiAoZG9uZSkgeworICAgICAgaWYgKF90aGlzLnByb3BzLmVudGVyKSB7
CisgICAgICAgIF90aGlzLnRyYW5zaXRpb24oJ2VudGVyJywgZG9uZSwgX3RoaXMucHJvcHMuZW50
ZXJUaW1lb3V0KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRvbmUoKTsKKyAgICAgIH0KKyAg
ICB9LCBfdGhpcy5jb21wb25lbnRXaWxsTGVhdmUgPSBmdW5jdGlvbiAoZG9uZSkgeworICAgICAg
aWYgKF90aGlzLnByb3BzLmxlYXZlKSB7CisgICAgICAgIF90aGlzLnRyYW5zaXRpb24oJ2xlYXZl
JywgZG9uZSwgX3RoaXMucHJvcHMubGVhdmVUaW1lb3V0KTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGRvbmUoKTsKKyAgICAgIH0KKyAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKF90aGlzLCBfcmV0KTsKKyAgfQorCisgIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hp
bGQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxN
b3VudCgpIHsKKyAgICB0aGlzLmNsYXNzTmFtZUFuZE5vZGVRdWV1ZSA9IFtdOworICAgIHRoaXMu
dHJhbnNpdGlvblRpbWVvdXRzID0gW107CisgIH07CisKKyAgUmVhY3RDU1NUcmFuc2l0aW9uR3Jv
dXBDaGlsZC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRE
aWRNb3VudCgpIHsKKyAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlOworICB9OworCisgIFJlYWN0
Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0g
ZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7CisgICAgdGhpcy5faXNNb3VudGVkID0g
ZmFsc2U7CisKKyAgICBpZiAodGhpcy50aW1lb3V0KSB7CisgICAgICBjbGVhclRpbWVvdXQodGhp
cy50aW1lb3V0KTsKKyAgICB9CisgICAgdGhpcy50cmFuc2l0aW9uVGltZW91dHMuZm9yRWFjaChm
dW5jdGlvbiAodGltZW91dCkgeworICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOworICAgIH0p
OworCisgICAgdGhpcy5jbGFzc05hbWVBbmROb2RlUXVldWUubGVuZ3RoID0gMDsKKyAgfTsKKwor
ICBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlv
biByZW5kZXIoKSB7CisgICAgcmV0dXJuIG9ubHlDaGlsZCh0aGlzLnByb3BzLmNoaWxkcmVuKTsK
KyAgfTsKKworICByZXR1cm4gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZDsKK30oUmVhY3Qu
Q29tcG9uZW50KTsKKworUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm9wVHlwZXMgPSB7
CisgIG5hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBl
cy5zaGFwZSh7CisgICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsCisgICAgbGVhdmU6IFByb3BU
eXBlcy5zdHJpbmcsCisgICAgYWN0aXZlOiBQcm9wVHlwZXMuc3RyaW5nCisgIH0pLCBQcm9wVHlw
ZXMuc2hhcGUoeworICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGVudGVyQWN0aXZl
OiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGxlYXZlOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGxl
YXZlQWN0aXZlOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGFwcGVhcjogUHJvcFR5cGVzLnN0cmlu
ZywKKyAgICBhcHBlYXJBY3RpdmU6IFByb3BUeXBlcy5zdHJpbmcKKyAgfSldKS5pc1JlcXVpcmVk
LAorCisgIC8vIE9uY2Ugd2UgcmVxdWlyZSB0aW1lb3V0cyB0byBiZSBzcGVjaWZpZWQsIHdlIGNh
biByZW1vdmUgdGhlCisgIC8vIGJvb2xlYW4gZmxhZ3MgKGFwcGVhciBldGMuKSBhbmQganVzdCBh
Y2NlcHQgYSBudW1iZXIKKyAgLy8gb3IgYSBib29sIGZvciB0aGUgdGltZW91dCBmbGFncyAoYXBw
ZWFyVGltZW91dCBldGMuKQorICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLAorICBlbnRlcjogUHJv
cFR5cGVzLmJvb2wsCisgIGxlYXZlOiBQcm9wVHlwZXMuYm9vbCwKKyAgYXBwZWFyVGltZW91dDog
UHJvcFR5cGVzLm51bWJlciwKKyAgZW50ZXJUaW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLAorICBs
ZWF2ZVRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIKK307CisKKworbW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkOworfSx7IjI4IjoyOCwiMzgiOjM4LCI0MyI6NDMs
IjUiOjUsIjUyIjo1MiwiNiI6Nn1dLDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFy
IFBvb2xlZENsYXNzID0gX2RlcmVxXyg0KTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDE2
KTsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVyZXFfKDQ1KTsKK3ZhciB0cmF2ZXJzZUFsbENo
aWxkcmVuID0gX2RlcmVxXyg0MSk7CisKK3ZhciB0d29Bcmd1bWVudFBvb2xlciA9IFBvb2xlZENs
YXNzLnR3b0FyZ3VtZW50UG9vbGVyOwordmFyIGZvdXJBcmd1bWVudFBvb2xlciA9IFBvb2xlZENs
YXNzLmZvdXJBcmd1bWVudFBvb2xlcjsKKwordmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4
ID0gL1wvKy9nOworZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHsKKyAgcmV0
dXJuICgnJyArIHRleHQpLnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8n
KTsKK30KKworLyoqCisgKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5n
IGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGQKKyAqIHRyYXZlcnNhbC4gQWxsb3dz
IGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLgorICoKKyAqIEBjb25zdHJ1Y3RvciBGb3JFYWNo
Qm9va0tlZXBpbmcKKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rp
b24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0aC4KKyAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250
ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250ZXh0IHdpdGguCisgKi8KK2Z1bmN0aW9uIEZvckVh
Y2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rpb24sIGZvckVhY2hDb250ZXh0KSB7CisgIHRoaXMu
ZnVuYyA9IGZvckVhY2hGdW5jdGlvbjsKKyAgdGhpcy5jb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7
CisgIHRoaXMuY291bnQgPSAwOworfQorRm9yRWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0
cnVjdG9yID0gZnVuY3Rpb24gKCkgeworICB0aGlzLmZ1bmMgPSBudWxsOworICB0aGlzLmNvbnRl
eHQgPSBudWxsOworICB0aGlzLmNvdW50ID0gMDsKK307CitQb29sZWRDbGFzcy5hZGRQb29saW5n
VG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29Bcmd1bWVudFBvb2xlcik7CisKK2Z1bmN0aW9uIGZv
ckVhY2hTaW5nbGVDaGlsZChib29rS2VlcGluZywgY2hpbGQsIG5hbWUpIHsKKyAgdmFyIGZ1bmMg
PSBib29rS2VlcGluZy5mdW5jLAorICAgICAgY29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7
CisKKyAgZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTsKK30K
KworLyoqCisgKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBz
cGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4u
Zm9yZWFjaAorICoKKyAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdp
bGwgYmUgY2FsbGVkIGZvciBlYWNoCisgKiBsZWFmIGNoaWxkLgorICoKKyAqIEBwYXJhbSB7Pyp9
IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHBhcmFtIHtmdW5jdGlvbigq
LCBpbnQpfSBmb3JFYWNoRnVuYworICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0
IGZvciBmb3JFYWNoQ29udGV4dC4KKyAqLworZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxk
cmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51
bGwpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47CisgIH0KKyAgdmFyIHRyYXZlcnNlQ29udGV4dCA9
IEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29sZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0
KTsKKyAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0
cmF2ZXJzZUNvbnRleHQpOworICBGb3JFYWNoQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNv
bnRleHQpOworfQorCisvKioKKyAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tl
ZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZAorICogbWFwcGluZy4gQWxs
b3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLgorICoKKyAqIEBjb25zdHJ1Y3RvciBNYXBC
b29rS2VlcGluZworICogQHBhcmFtIHshKn0gbWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRo
ZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLgorICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0
aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLgorICogQHBhcmFtIHs/Kn0gbWFw
Q29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLgorICovCitmdW5jdGlvbiBN
YXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIGtleVByZWZpeCwgbWFwRnVuY3Rpb24sIG1hcENvbnRl
eHQpIHsKKyAgdGhpcy5yZXN1bHQgPSBtYXBSZXN1bHQ7CisgIHRoaXMua2V5UHJlZml4ID0ga2V5
UHJlZml4OworICB0aGlzLmZ1bmMgPSBtYXBGdW5jdGlvbjsKKyAgdGhpcy5jb250ZXh0ID0gbWFw
Q29udGV4dDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9CitNYXBCb29rS2VlcGluZy5wcm90b3R5cGUu
ZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5yZXN1bHQgPSBudWxsOworICB0aGlz
LmtleVByZWZpeCA9IG51bGw7CisgIHRoaXMuZnVuYyA9IG51bGw7CisgIHRoaXMuY29udGV4dCA9
IG51bGw7CisgIHRoaXMuY291bnQgPSAwOworfTsKK1Bvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhN
YXBCb29rS2VlcGluZywgZm91ckFyZ3VtZW50UG9vbGVyKTsKKworZnVuY3Rpb24gbWFwU2luZ2xl
Q2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7CisgIHZhciBy
ZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsCisgICAgICBrZXlQcmVmaXggPSBib29rS2VlcGlu
Zy5rZXlQcmVmaXgsCisgICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYywKKyAgICAgIGNvbnRl
eHQgPSBib29rS2VlcGluZy5jb250ZXh0OworCisKKyAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5j
YWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTsKKyAgaWYgKEFycmF5Lmlz
QXJyYXkobWFwcGVkQ2hpbGQpKSB7CisgICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbCht
YXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0Fy
Z3VtZW50KTsKKyAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7CisgICAgaWYgKFJl
YWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHsKKyAgICAgIG1hcHBlZENo
aWxkID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwKKyAgICAg
IC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBq
dXN0IGFzCisgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVj
dHMgYXMgY2hpbGRyZW4KKyAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFj
aGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlk
ZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTsKKyAgICB9Cisg
ICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpOworICB9Cit9CisKK2Z1bmN0aW9uIG1hcEludG9X
aXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRl
eHQpIHsKKyAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJzsKKyAgaWYgKHByZWZpeCAhPSBudWxsKSB7
CisgICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8n
OworICB9CisgIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQo
YXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpOworICB0cmF2ZXJzZUFsbENoaWxk
cmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQp
OworICBNYXBCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7Cit9CisKKy8qKgor
ICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5j
aGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2Rv
Y3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm1hcAorICoKKyAqIFRoZSBwcm92
aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVh
Y2gKKyAqIGxlYWYgY2hpbGQuCisgKgorICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4g
dHJlZSBjb250YWluZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1h
cCBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlv
bi4KKyAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFw
IG9mIHJlc3VsdHMuCisgKi8KK2Z1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBj
b250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJuIGNoaWxkcmVu
OworICB9CisgIHZhciByZXN1bHQgPSBbXTsKKyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5h
bChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jLCBjb250ZXh0KTsKKyAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0
LCBjaGlsZCwgbmFtZSkgeworICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBDb3VudCB0aGUg
bnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMKKyAqIGBw
cm9wcy5jaGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmNvdW50CisgKgorICog
QHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuCisgKiBAcmV0dXJu
IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uCisgKi8KK2Z1bmN0aW9uIGNvdW50Q2hp
bGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHsKKyAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4o
Y2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZER1bW15LCBudWxsKTsKK30KKworLyoqCisgKiBG
bGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5j
aGlsZHJlbmApIGFuZAorICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1r
ZXllZCBjaGlsZHJlbi4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVh
Y3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4udG9hcnJheQorICovCitm
dW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7CisgIHZhciByZXN1bHQgPSBbXTsKKyAgbWFwSW50
b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0
aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpOworICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgUmVh
Y3RDaGlsZHJlbiA9IHsKKyAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLAorICBtYXA6IG1hcENo
aWxkcmVuLAorICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOiBtYXBJbnRvV2l0aEtleVBy
ZWZpeEludGVybmFsLAorICBjb3VudDogY291bnRDaGlsZHJlbiwKKyAgdG9BcnJheTogdG9BcnJh
eQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkcmVuOworfSx7IjE2IjoxNiwiNCI6
NCwiNDEiOjQxLCI0NSI6NDV9XSwxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIg
X3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KSwKKyAgICBfYXNzaWduID0gX2RlcmVxXyg1MCk7
CisKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8oMTEpOwordmFyIFJlYWN0RWxlbWVudCA9
IF9kZXJlcV8oMTYpOwordmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gX2RlcmVxXygy
Mik7Cit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDIxKTsKKwordmFyIGVtcHR5
T2JqZWN0ID0gX2RlcmVxXyg0Nik7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIg
d2FybmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgTUlYSU5TX0tFWSA9ICdtaXhpbnMnOworCisv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFub255bW91cyBmdW5j
dGlvbnMgd2hpY2ggZG8gbm90CisvLyBoYXZlIC5uYW1lIHNldCB0byB0aGUgbmFtZSBvZiB0aGUg
dmFyaWFibGUgYmVpbmcgYXNzaWduZWQgdG8uCitmdW5jdGlvbiBpZGVudGl0eShmbikgeworICBy
ZXR1cm4gZm47Cit9CisKKy8qKgorICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGlu
IGBSZWFjdENsYXNzSW50ZXJmYWNlYC4KKyAqLworCisKK3ZhciBpbmplY3RlZE1peGlucyA9IFtd
OworCisvKioKKyAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9u
ZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlCisgKiBvciBob3N0IGNvbXBvbmVudHMu
CisgKgorICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3Bl
Y2lmaWNhdGlvbiBvZgorICogeW91ciBuZXcgY2xhc3MgdG8gYFJlYWN0LmNyZWF0ZUNsYXNzYC4g
VGhlIG9ubHkgcmVxdWlyZW1lbnQgb2YgeW91ciBjbGFzcworICogc3BlY2lmaWNhdGlvbiBpcyB0
aGF0IHlvdSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuCisgKgorICogICB2YXIgTXlDb21w
b25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsK
KyAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+OworICogICAgIH0KKyAqICAg
fSk7CisgKgorICogVGhlIGNsYXNzIHNwZWNpZmljYXRpb24gc3VwcG9ydHMgYSBzcGVjaWZpYyBw
cm90b2NvbCBvZiBtZXRob2RzIHRoYXQgaGF2ZQorICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGBy
ZW5kZXJgKS4gU2VlIGBSZWFjdENsYXNzSW50ZXJmYWNlYCBmb3IKKyAqIG1vcmUgdGhlIGNvbXBy
ZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRo
ZQorICogY2xhc3Mgc3BlY2lmaWNhdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiB0aGUgcHJvdG90
eXBlLgorICoKKyAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZQorICogQGludGVybmFs
CisgKi8KK3ZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0geworCisgIC8qKgorICAgKiBBbiBhcnJh
eSBvZiBNaXhpbiBvYmplY3RzIHRvIGluY2x1ZGUgd2hlbiBkZWZpbmluZyB5b3VyIGNvbXBvbmVu
dC4KKyAgICoKKyAgICogQHR5cGUge2FycmF5fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIG1p
eGluczogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcg
cHJvcGVydGllcyBhbmQgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIG9uCisgICAqIHRo
ZSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRp
YyBtZXRob2RzKS4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisg
ICAqLworICBzdGF0aWNzOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBEZWZpbml0aW9u
IG9mIHByb3AgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LgorICAgKgorICAgKiBAdHlwZSB7b2Jq
ZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHByb3BUeXBlczogJ0RFRklORV9NQU5ZJywK
KworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIGZvciB0aGlzIGNvbXBv
bmVudC4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBjb250ZXh0VHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24g
b2YgY29udGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uCisg
ICAqCisgICAqIEB0eXBlIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY2hpbGRD
b250ZXh0VHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhv
ZHMgPT09PQorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3Vu
dGVkLiBWYWx1ZXMgaW4gdGhlIG1hcHBpbmcgd2lsbCBiZSBzZXQgb24KKyAgICogYHRoaXMucHJv
cHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hl
Y2spLgorICAgKgorICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBgZ2V0SW5pdGlh
bFN0YXRlYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWx5CisgICAqIG9uIGB0aGlzLnN0YXRlYCBv
ciB1c2UgYHRoaXMuc2V0U3RhdGVgLgorICAgKgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAq
IEBvcHRpb25hbAorICAgKi8KKyAgZ2V0RGVmYXVsdFByb3BzOiAnREVGSU5FX01BTllfTUVSR0VE
JywKKworICAvKioKKyAgICogSW52b2tlZCBvbmNlIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1v
dW50ZWQuIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkCisgICAqIGFzIHRoZSBpbml0aWFs
IHZhbHVlIG9mIGB0aGlzLnN0YXRlYC4KKyAgICoKKyAgICogICBnZXRJbml0aWFsU3RhdGU6IGZ1
bmN0aW9uKCkgeworICAgKiAgICAgcmV0dXJuIHsKKyAgICogICAgICAgaXNPbjogZmFsc2UsCisg
ICAqICAgICAgIGZvb0JhejogbmV3IEJhekZvbygpCisgICAqICAgICB9CisgICAqICAgfQorICAg
KgorICAgKiBAcmV0dXJuIHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgZ2V0SW5p
dGlhbFN0YXRlOiAnREVGSU5FX01BTllfTUVSR0VEJywKKworICAvKioKKyAgICogQHJldHVybiB7
b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGdldENoaWxkQ29udGV4dDogJ0RFRklO
RV9NQU5ZX01FUkdFRCcsCisKKyAgLyoqCisgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9w
c2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGUKKyAgICogc3RydWN0
dXJlIG9mIHRoZSBjb21wb25lbnQuCisgICAqCisgICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUg
YWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc28KKyAgICog
aXQgbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuCisgICAqCisgICAqICAgcmVuZGVyOiBmdW5j
dGlvbigpIHsKKyAgICogICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lOworICAgKiAgICAg
cmV0dXJuIDxkaXY+SGVsbG8sIHtuYW1lfSE8L2Rpdj47CisgICAqICAgfQorICAgKgorICAgKiBA
cmV0dXJuIHtSZWFjdENvbXBvbmVudH0KKyAgICogQHJlcXVpcmVkCisgICAqLworICByZW5kZXI6
ICdERUZJTkVfT05DRScsCisKKyAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT0KKworICAv
KioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQg
YW5kIGFib3V0IHRvIGJlIG1vdW50ZWQuCisgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3Rz
LCBidXQgYW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkCisgICAqIGJ5
IHRoaXMgbWV0aG9kIG11c3QgYmUgY2xlYW5lZCB1cCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRg
LgorICAgKgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxNb3VudDogJ0RF
RklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFz
IGJlZW4gbW91bnRlZCBhbmQgaGFzIGEgRE9NIHJlcHJlc2VudGF0aW9uLgorICAgKiBIb3dldmVy
LCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgRE9NIG5vZGUgaXMgaW4gdGhlIGRvY3Vt
ZW50LgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9u
IHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhcworICAgKiBiZWVuIG1vdW50ZWQgKGluaXRp
YWxpemVkIGFuZCByZW5kZXJlZCkgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgKgorICAgKiBAcGFy
YW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29t
cG9uZW50LgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudERpZE1vdW50OiAnREVG
SU5FX01BTlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJl
Y2VpdmVzIG5ldyBwcm9wcy4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkg
dG8gcmVhY3QgdG8gYSBwcm9wIHRyYW5zaXRpb24gYnkgdXBkYXRpbmcgdGhlCisgICAqIHN0YXRl
IHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0
aGlzLnByb3BzYC4KKyAgICoKKyAgICogICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5j
dGlvbihuZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7CisgICAqICAgICB0aGlzLnNldFN0YXRlKHsK
KyAgICogICAgICAgbGlrZXNJbmNyZWFzaW5nOiBuZXh0UHJvcHMubGlrZUNvdW50ID4gdGhpcy5w
cm9wcy5saWtlQ291bnQKKyAgICogICAgIH0pOworICAgKiAgIH0KKyAgICoKKyAgICogTk9URTog
VGhlcmUgaXMgbm8gZXF1aXZhbGVudCBgY29tcG9uZW50V2lsbFJlY2VpdmVTdGF0ZWAuIEFuIGlu
Y29taW5nIHByb3AKKyAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1
dCB0aGUgb3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdQorICAgKiBuZWVkIGl0LCB5b3UgYXJl
IHByb2JhYmx5IGxvb2tpbmcgZm9yIGBjb21wb25lbnRXaWxsVXBkYXRlYC4KKyAgICoKKyAgICog
QHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBv
bmVudFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9r
ZWQgd2hpbGUgZGVjaWRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdXBkYXRlZCBhcyBh
IHJlc3VsdCBvZgorICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4
dC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYHJldHVybiBmYWxz
ZWAgd2hlbiB5b3UncmUgY2VydGFpbiB0aGF0IHRoZQorICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBu
ZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50CisgICAq
IHVwZGF0ZS4KKyAgICoKKyAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5l
eHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkgeworICAgKiAgICAgcmV0dXJuICFlcXVh
bChuZXh0UHJvcHMsIHRoaXMucHJvcHMpIHx8CisgICAqICAgICAgICFlcXVhbChuZXh0U3RhdGUs
IHRoaXMuc3RhdGUpIHx8CisgICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250
ZXh0KTsKKyAgICogICB9CisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAg
ICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0
Q29udGV4dAorICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hv
dWxkIHVwZGF0ZS4KKyAgICogQG9wdGlvbmFsCisgICAqLworICBzaG91bGRDb21wb25lbnRVcGRh
dGU6ICdERUZJTkVfT05DRScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9u
ZW50IGlzIGFib3V0IHRvIHVwZGF0ZSBkdWUgdG8gYSB0cmFuc2l0aW9uIGZyb20KKyAgICogYHRo
aXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNg
LCBgbmV4dFN0YXRlYAorICAgKiBhbmQgYG5leHRDb250ZXh0YC4KKyAgICoKKyAgICogVXNlIHRo
aXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBk
YXRlIG9jY3Vycy4KKyAgICoKKyAgICogTk9URTogWW91ICoqY2Fubm90KiogdXNlIGB0aGlzLnNl
dFN0YXRlKClgIGluIHRoaXMgbWV0aG9kLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gbmV4
dFByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlCisgICAqIEBwYXJhbSB7P29i
amVjdH0gbmV4dENvbnRleHQKKyAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9u
fSB0cmFuc2FjdGlvbgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxVcGRh
dGU6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9u
ZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuCisgICAqCisgICAqIFVz
ZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBj
b21wb25lbnQgaGFzCisgICAqIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogQHBhcmFtIHtvYmpl
Y3R9IHByZXZQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZQorICAgKiBAcGFy
YW0gez9vYmplY3R9IHByZXZDb250ZXh0CisgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5v
ZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuCisgICAqIEBvcHRpb25h
bAorICAgKi8KKyAgY29tcG9uZW50RGlkVXBkYXRlOiAnREVGSU5FX01BTlknLAorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byBiZSByZW1vdmVkIGZy
b20gaXRzIHBhcmVudCBhbmQgaGF2ZQorICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0aW9uIGRlc3Ry
b3llZC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZGVhbGxvY2F0
ZSBhbnkgZXh0ZXJuYWwgcmVzb3VyY2VzLgorICAgKgorICAgKiBOT1RFOiBUaGVyZSBpcyBubyBg
Y29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW4K
KyAgICogZGVzdHJveWVkIGJ5IHRoYXQgcG9pbnQuCisgICAqCisgICAqIEBvcHRpb25hbAorICAg
Ki8KKyAgY29tcG9uZW50V2lsbFVubW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLy8gPT09PSBB
ZHZhbmNlZCBtZXRob2RzID09PT0KKworICAvKioKKyAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50
J3MgY3VycmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9uLgorICAgKgorICAgKiBCeSBk
ZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0
aW9uIGFsZ29yaXRobS4KKyAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92
ZXJyaWRlIHRoaXMuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlv
bn0gdHJhbnNhY3Rpb24KKyAgICogQGludGVybmFsCisgICAqIEBvdmVycmlkYWJsZQorICAgKi8K
KyAgdXBkYXRlQ29tcG9uZW50OiAnT1ZFUlJJREVfQkFTRScKKworfTsKKworLyoqCisgKiBNYXBw
aW5nIGZyb20gY2xhc3Mgc3BlY2lmaWNhdGlvbiBrZXlzIHRvIHNwZWNpYWwgcHJvY2Vzc2luZyBm
dW5jdGlvbnMuCisgKgorICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFu
Y2UgcHJvcGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvbgorICogd2hlbiBkZWZpbmluZyBjbGFz
c2VzIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpYwor
ICogYW5kIGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBw
cm90b3R5cGUuIERlc3BpdGUKKyAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQg
b3V0c2lkZSBvZiB0aGUgInN0YXRpY3MiIGtleSB1bmRlcgorICogd2hpY2ggYWxsIG90aGVyIHN0
YXRpYyBtZXRob2RzIGFyZSBkZWZpbmVkLgorICovCit2YXIgUkVTRVJWRURfU1BFQ19LRVlTID0g
eworICBkaXNwbGF5TmFtZTogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkgewor
ICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7CisgIH0sCisgIG1peGlu
czogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBtaXhpbnMpIHsKKyAgICBpZiAobWl4aW5zKSB7Cisg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykgeworICAgICAgICBt
aXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgbWl4aW5zW2ldKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0sCisgIGNoaWxkQ29udGV4dFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGNo
aWxkQ29udGV4dFR5cGVzKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBl
cywgJ2NoaWxkQ29udGV4dCcpOworICAgIH0KKyAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRU
eXBlcyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENv
bnRleHRUeXBlcyk7CisgIH0sCisgIGNvbnRleHRUeXBlczogZnVuY3Rpb24gKENvbnN0cnVjdG9y
LCBjb250ZXh0VHlwZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
KSB7CisgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcywgJ2Nv
bnRleHQnKTsKKyAgICB9CisgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzID0gX2Fzc2lnbih7
fSwgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzLCBjb250ZXh0VHlwZXMpOworICB9LAorICAvKioK
KyAgICogU3BlY2lhbCBjYXNlIGdldERlZmF1bHRQcm9wcyB3aGljaCBzaG91bGQgbW92ZSBpbnRv
IHN0YXRpY3MgYnV0IHJlcXVpcmVzCisgICAqIGF1dG9tYXRpYyBtZXJnaW5nLgorICAgKi8KKyAg
Z2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGdldERlZmF1bHRQcm9wcykg
eworICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgIENvbnN0cnVj
dG9yLmdldERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKENvbnN0cnVj
dG9yLmdldERlZmF1bHRQcm9wcywgZ2V0RGVmYXVsdFByb3BzKTsKKyAgICB9IGVsc2UgeworICAg
ICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzOworICAgIH0K
KyAgfSwKKyAgcHJvcFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3BUeXBlcykgewor
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRl
VHlwZURlZihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzLCAncHJvcCcpOworICAgIH0KKyAgICBDb25z
dHJ1Y3Rvci5wcm9wVHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsIHBy
b3BUeXBlcyk7CisgIH0sCisgIHN0YXRpY3M6IGZ1bmN0aW9uIChDb25zdHJ1Y3Rvciwgc3RhdGlj
cykgeworICAgIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNz
KTsKKyAgfSwKKyAgYXV0b2JpbmQ6IGZ1bmN0aW9uICgpIHt9IH07CisKK2Z1bmN0aW9uIHZhbGlk
YXRlVHlwZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHsKKyAgZm9yICh2YXIg
cHJvcE5hbWUgaW4gdHlwZURlZikgeworICAgIGlmICh0eXBlRGVmLmhhc093blByb3BlcnR5KHBy
b3BOYW1lKSkgeworICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIGludmFyaWFu
dCBzbyBjb21wb25lbnRzCisgICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0IG9ubHkg
aW4gX19ERVZfXworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
Zyh0eXBlb2YgdHlwZURlZltwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBg
JXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAn
UmVhY3QuUHJvcFR5cGVzLicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNz
JywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCBwcm9wTmFtZSkgOiB2b2lk
IDA7CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNB
bHJlYWR5RGVmaW5lZCwgbmFtZSkgeworICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRl
cmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSkgPyBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdIDog
bnVsbDsKKworICAvLyBEaXNhbGxvdyBvdmVycmlkaW5nIG9mIGJhc2UgY2xhc3MgbWV0aG9kcyB1
bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLgorICBpZiAoUmVhY3RDbGFzc01peGluLmhhc093blBy
b3BlcnR5KG5hbWUpKSB7CisgICAgIShzcGVjUG9saWN5ID09PSAnT1ZFUlJJREVfQkFTRScpID8g
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RD
bGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlIGAlc2AgZnJvbSB5
b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzIGRv
IG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50
KCc3MycsIG5hbWUpIDogdm9pZCAwOworICB9CisKKyAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0
aG9kcyBtb3JlIHRoYW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLgorICBpZiAoaXNB
bHJlYWR5RGVmaW5lZCkgeworICAgICEoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyB8fCBz
cGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3Ug
YXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFu
IG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluLicsIG5hbWUpIDogX3By
b2RJbnZhcmlhbnQoJzc0JywgbmFtZSkgOiB2b2lkIDA7CisgIH0KK30KKworLyoqCisgKiBNaXhp
biBoZWxwZXIgd2hpY2ggaGFuZGxlcyBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgcmVzZXJ2ZWQKKyAq
IHNwZWNpZmljYXRpb24ga2V5cyB3aGVuIGJ1aWxkaW5nIFJlYWN0IGNsYXNzZXMuCisgKi8KK2Z1
bmN0aW9uIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7CisgIGlmICgh
c3BlYykgeworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAg
IHZhciB0eXBlb2ZTcGVjID0gdHlwZW9mIHNwZWM7CisgICAgICB2YXIgaXNNaXhpblZhbGlkID0g
dHlwZW9mU3BlYyA9PT0gJ29iamVjdCcgJiYgc3BlYyAhPT0gbnVsbDsKKworICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhpc01peGluVmFsaWQsICclczogWW91
XCdyZSBhdHRlbXB0aW5nIHRvIGluY2x1ZGUgYSBtaXhpbiB0aGF0IGlzIGVpdGhlciBudWxsICcg
KyAnb3Igbm90IGFuIG9iamVjdC4gQ2hlY2sgdGhlIG1peGlucyBpbmNsdWRlZCBieSB0aGUgY29t
cG9uZW50LCAnICsgJ2FzIHdlbGwgYXMgYW55IG1peGlucyB0aGV5IGluY2x1ZGUgdGhlbXNlbHZl
cy4gJyArICdFeHBlY3RlZCBvYmplY3QgYnV0IGdvdCAlcy4nLCBDb25zdHJ1Y3Rvci5kaXNwbGF5
TmFtZSB8fCAnUmVhY3RDbGFzcycsIHNwZWMgPT09IG51bGwgPyBudWxsIDogdHlwZW9mU3BlYykg
OiB2b2lkIDA7CisgICAgfQorCisgICAgcmV0dXJuOworICB9CisKKyAgISh0eXBlb2Ygc3BlYyAh
PT0gJ2Z1bmN0aW9uJykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlh
bnQoZmFsc2UsICdSZWFjdENsYXNzOiBZb3VcJ3JlIGF0dGVtcHRpbmcgdG8gdXNlIGEgY29tcG9u
ZW50IGNsYXNzIG9yIGZ1bmN0aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVn
dWxhciBvYmplY3QuJykgOiBfcHJvZEludmFyaWFudCgnNzUnKSA6IHZvaWQgMDsKKyAgISFSZWFj
dEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3BlYykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBZb3VcJ3JlIGF0dGVtcHRpbmcg
dG8gdXNlIGEgY29tcG9uZW50IGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxh
ciBvYmplY3QuJykgOiBfcHJvZEludmFyaWFudCgnNzYnKSA6IHZvaWQgMDsKKworICB2YXIgcHJv
dG8gPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7CisgIHZhciBhdXRvQmluZFBhaXJzID0gcHJvdG8u
X19yZWFjdEF1dG9CaW5kUGFpcnM7CisKKyAgLy8gQnkgaGFuZGxpbmcgbWl4aW5zIGJlZm9yZSBh
bnkgb3RoZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1lCisgIC8vIGNoYWluaW5nIG9y
ZGVyIGlzIGFwcGxpZWQgdG8gbWV0aG9kcyB3aXRoIERFRklORV9NQU5ZIHBvbGljeSwgd2hldGhl
cgorICAvLyBtaXhpbnMgYXJlIGxpc3RlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlc2UgbWV0aG9kcyBp
biB0aGUgc3BlYy4KKyAgaWYgKHNwZWMuaGFzT3duUHJvcGVydHkoTUlYSU5TX0tFWSkpIHsKKyAg
ICBSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKENvbnN0cnVjdG9yLCBzcGVjLm1peGlucyk7Cisg
IH0KKworICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHsKKyAgICBpZiAoIXNwZWMuaGFzT3duUHJv
cGVydHkobmFtZSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChuYW1lID09
PSBNSVhJTlNfS0VZKSB7CisgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgaGFuZGxlZCBtaXhpbnMg
aW4gYSBzcGVjaWFsIGNhc2UgYWJvdmUuCisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB2
YXIgcHJvcGVydHkgPSBzcGVjW25hbWVdOworICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJv
dG8uaGFzT3duUHJvcGVydHkobmFtZSk7CisgICAgdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0Fs
cmVhZHlEZWZpbmVkLCBuYW1lKTsKKworICAgIGlmIChSRVNFUlZFRF9TUEVDX0tFWVMuaGFzT3du
UHJvcGVydHkobmFtZSkpIHsKKyAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1
Y3RvciwgcHJvcGVydHkpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTZXR1cCBtZXRob2RzIG9u
IHByb3RvdHlwZToKKyAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxk
IG5vdCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kOgorICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RD
bGFzcyBtZXRob2RzIChpbiB0aGUgImludGVyZmFjZSIpLgorICAgICAgLy8gMi4gT3ZlcnJpZGRl
biBtZXRob2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLgorICAgICAgdmFyIGlzUmVhY3RDbGFzc01l
dGhvZCA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSk7CisgICAgICB2
YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJzsKKyAgICAgIHZh
ciBzaG91bGRBdXRvQmluZCA9IGlzRnVuY3Rpb24gJiYgIWlzUmVhY3RDbGFzc01ldGhvZCAmJiAh
aXNBbHJlYWR5RGVmaW5lZCAmJiBzcGVjLmF1dG9iaW5kICE9PSBmYWxzZTsKKworICAgICAgaWYg
KHNob3VsZEF1dG9CaW5kKSB7CisgICAgICAgIGF1dG9CaW5kUGFpcnMucHVzaChuYW1lLCBwcm9w
ZXJ0eSk7CisgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkgeworICAgICAgICAgIHZhciBzcGVjUG9saWN5
ID0gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXTsKKworICAgICAgICAgIC8vIFRoZXNlIGNhc2Vz
IHNob3VsZCBhbHJlYWR5IGJlIGNhdWdodCBieSB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlLgorICAg
ICAgICAgICEoaXNSZWFjdENsYXNzTWV0aG9kICYmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01B
TllfTUVSR0VEJyB8fCBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknKSkgPyAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNzOiBVbmV4
cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50
IHNwZWNzLicsIHNwZWNQb2xpY3ksIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzc3Jywgc3BlY1Bv
bGljeSwgbmFtZSkgOiB2b2lkIDA7CisKKyAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGljaCBh
cmUgZGVmaW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAv
LyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHRoZSBuZXcgcHJvcGVydHksIG1lcmdpbmcgaWYgYXBw
cm9wcmlhdGUuCisgICAgICAgICAgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJH
RUQnKSB7CisgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0
aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7CisgICAgICAgICAgfSBlbHNlIGlmIChzcGVjUG9s
aWN5ID09PSAnREVGSU5FX01BTlknKSB7CisgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0
ZUNoYWluZWRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOworICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5OworICAgICAg
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgICAgIC8v
IEFkZCB2ZXJib3NlIGRpc3BsYXlOYW1lIHRvIHRoZSBmdW5jdGlvbiwgd2hpY2ggaGVscHMgd2hl
biBsb29raW5nCisgICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuCisgICAgICAgICAg
ICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmIHNwZWMuZGlzcGxheU5hbWUp
IHsKKyAgICAgICAgICAgICAgcHJvdG9bbmFtZV0uZGlzcGxheU5hbWUgPSBzcGVjLmRpc3BsYXlO
YW1lICsgJ18nICsgbmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gbWl4U3RhdGljU3BlY0ludG9Db21w
b25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpIHsKKyAgaWYgKCFzdGF0aWNzKSB7CisgICAgcmV0
dXJuOworICB9CisgIGZvciAodmFyIG5hbWUgaW4gc3RhdGljcykgeworICAgIHZhciBwcm9wZXJ0
eSA9IHN0YXRpY3NbbmFtZV07CisgICAgaWYgKCFzdGF0aWNzLmhhc093blByb3BlcnR5KG5hbWUp
KSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICB2YXIgaXNSZXNlcnZlZCA9IG5hbWUg
aW4gUkVTRVJWRURfU1BFQ19LRVlTOworICAgICEhaXNSZXNlcnZlZCA/ICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUg
YXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCBwcm9wZXJ0eSwgYCVzYCwgdGhhdCBzaG91
bGRuXCd0IGJlIG9uIHRoZSAic3RhdGljcyIga2V5LiBEZWZpbmUgaXQgYXMgYW4gaW5zdGFuY2Ug
cHJvcGVydHkgaW5zdGVhZDsgaXQgd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25z
dHJ1Y3Rvci4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3OCcsIG5hbWUpIDogdm9pZCAwOwor
CisgICAgdmFyIGlzSW5oZXJpdGVkID0gbmFtZSBpbiBDb25zdHJ1Y3RvcjsKKyAgICAhIWlzSW5o
ZXJpdGVkID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9uIHlvdXIg
Y29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBt
aXhpbi4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3OScsIG5hbWUpIDogdm9pZCAwOworICAg
IENvbnN0cnVjdG9yW25hbWVdID0gcHJvcGVydHk7CisgIH0KK30KKworLyoqCisgKiBNZXJnZSB0
d28gb2JqZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuCisgKgor
ICogQHBhcmFtIHtvYmplY3R9IG9uZSBUaGUgZmlyc3Qgb2JqZWN0LCB3aGljaCBpcyBtdXRhdGVk
LgorICogQHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdAorICogQHJldHVybiB7
b2JqZWN0fSBvbmUgYWZ0ZXIgaXQgaGFzIGJlZW4gbXV0YXRlZCB0byBjb250YWluIGV2ZXJ5dGhp
bmcgaW4gdHdvLgorICovCitmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9u
ZSwgdHdvKSB7CisgICEob25lICYmIHR3byAmJiB0eXBlb2Ygb25lID09PSAnb2JqZWN0JyAmJiB0
eXBlb2YgdHdvID09PSAnb2JqZWN0JykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyBpbnZhcmlhbnQoZmFsc2UsICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6IENhbm5v
dCBtZXJnZSBub24tb2JqZWN0cy4nKSA6IF9wcm9kSW52YXJpYW50KCc4MCcpIDogdm9pZCAwOwor
CisgIGZvciAodmFyIGtleSBpbiB0d28pIHsKKyAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtl
eSkpIHsKKyAgICAgICEob25lW2tleV0gPT09IHVuZGVmaW5lZCkgPyAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdtZXJnZUludG9XaXRoTm9EdXBsaWNh
dGVLZXlzKCk6IFRyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBg
JXNgLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwg
dGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byBnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0
UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzIHdpdGggY2xhc2hpbmcga2V5cy4nLCBr
ZXkpIDogX3Byb2RJbnZhcmlhbnQoJzgxJywga2V5KSA6IHZvaWQgMDsKKyAgICAgIG9uZVtrZXld
ID0gdHdvW2tleV07CisgICAgfQorICB9CisgIHJldHVybiBvbmU7Cit9CisKKy8qKgorICogQ3Jl
YXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBtZXJnZXMgdGhl
aXIgcmV0dXJuIHZhbHVlcy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24g
dG8gaW52b2tlIGZpcnN0LgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGlu
dm9rZSBzZWNvbmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2Vz
IHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24g
Y3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHsKKyAgcmV0dXJuIGZ1bmN0aW9u
IG1lcmdlZFJlc3VsdCgpIHsKKyAgICB2YXIgYSA9IG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgaWYgKGEgPT0g
bnVsbCkgeworICAgICAgcmV0dXJuIGI7CisgICAgfSBlbHNlIGlmIChiID09IG51bGwpIHsKKyAg
ICAgIHJldHVybiBhOworICAgIH0KKyAgICB2YXIgYyA9IHt9OworICAgIG1lcmdlSW50b1dpdGhO
b0R1cGxpY2F0ZUtleXMoYywgYSk7CisgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhj
LCBiKTsKKyAgICByZXR1cm4gYzsKKyAgfTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgZnVuY3Rp
b24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZh
bGVzLgorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmly
c3QuCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC4K
KyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1
bWVudCBmdW5jdGlvbnMuCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjcmVhdGVDaGFpbmVk
RnVuY3Rpb24ob25lLCB0d28pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigp
IHsKKyAgICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB0d28uYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgfTsKK30KKworLyoqCisgKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29t
cG9uZW50LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdob3Nl
IG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhv
ZCBNZXRob2QgdG8gYmUgYm91bmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGJvdW5kIG1l
dGhvZC4KKyAqLworZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9k
KSB7CisgIHZhciBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKGNvbXBvbmVudCk7CisgIGlmICgi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBib3VuZE1ldGhvZC5fX3JlYWN0
Qm91bmRDb250ZXh0ID0gY29tcG9uZW50OworICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1l
dGhvZCA9IG1ldGhvZDsKKyAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBu
dWxsOworICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3Bs
YXlOYW1lOworICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7CisgICAgYm91bmRNZXRo
b2QuYmluZCA9IGZ1bmN0aW9uIChuZXdUaGlzKSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJn
dW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tl
eSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBh
cmd1bWVudHNbX2tleV07CisgICAgICB9CisKKyAgICAgIC8vIFVzZXIgaXMgdHJ5aW5nIHRvIGJp
bmQoKSBhbiBhdXRvYm91bmQgbWV0aG9kOyB3ZSBlZmZlY3RpdmVseSB3aWxsCisgICAgICAvLyBp
Z25vcmUgdGhlIHZhbHVlIG9mICJ0aGlzIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2Us
IHNvCisgICAgICAvLyBsZXQncyB3YXJuLgorICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVu
dCAmJiBuZXdUaGlzICE9PSBudWxsKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdiaW5kKCk6IFJlYWN0IGNvbXBvbmVudCBtZXRob2Rz
IG1heSBvbmx5IGJlIGJvdW5kIHRvIHRoZSAnICsgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVz
JywgY29tcG9uZW50TmFtZSkgOiB2b2lkIDA7CisgICAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0
aCkgeworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZh
bHNlLCAnYmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBj
b21wb25lbnQuICcgKyAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseSBpbiBh
IGhpZ2gtcGVyZm9ybWFuY2UgJyArICd3YXksIHNvIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSB0aGlz
IGNhbGwuIFNlZSAlcycsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAwOworICAgICAgICByZXR1cm4g
Ym91bmRNZXRob2Q7CisgICAgICB9CisgICAgICB2YXIgcmVib3VuZE1ldGhvZCA9IF9iaW5kLmFw
cGx5KGJvdW5kTWV0aG9kLCBhcmd1bWVudHMpOworICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0
Qm91bmRDb250ZXh0ID0gY29tcG9uZW50OworICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91
bmRNZXRob2QgPSBtZXRob2Q7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3Vt
ZW50cyA9IGFyZ3M7CisgICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDsKKyAgICB9OworICB9Cisg
IHJldHVybiBib3VuZE1ldGhvZDsKK30KKworLyoqCisgKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBt
ZXRob2RzIGluIGEgY29tcG9uZW50LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQg
Q29tcG9uZW50IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC4KKyAqLworZnVuY3Rp
b24gYmluZEF1dG9CaW5kTWV0aG9kcyhjb21wb25lbnQpIHsKKyAgdmFyIHBhaXJzID0gY29tcG9u
ZW50Ll9fcmVhY3RBdXRvQmluZFBhaXJzOworICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxl
bmd0aDsgaSArPSAyKSB7CisgICAgdmFyIGF1dG9CaW5kS2V5ID0gcGFpcnNbaV07CisgICAgdmFy
IG1ldGhvZCA9IHBhaXJzW2kgKyAxXTsKKyAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmlu
ZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKTsKKyAgfQorfQorCisvKioKKyAqIEFk
ZCBtb3JlIHRvIHRoZSBSZWFjdENsYXNzIGJhc2UgY2xhc3MuIFRoZXNlIGFyZSBhbGwgbGVnYWN5
IGZlYXR1cmVzIGFuZAorICogdGhlcmVmb3JlIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIG1vZGVy
biBSZWFjdENvbXBvbmVudC4KKyAqLwordmFyIFJlYWN0Q2xhc3NNaXhpbiA9IHsKKworICAvKioK
KyAgICogVE9ETzogVGhpcyB3aWxsIGJlIGRlcHJlY2F0ZWQgYmVjYXVzZSBzdGF0ZSBzaG91bGQg
YWx3YXlzIGtlZXAgYSBjb25zaXN0ZW50CisgICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25s
eSB1c2UgY2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC4KKyAgICovCisgIHJlcGxhY2VT
dGF0ZTogZnVuY3Rpb24gKG5ld1N0YXRlLCBjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5l
bnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsIG5ld1N0YXRlKTsKKyAgICBpZiAoY2FsbGJhY2spIHsK
KyAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdyZXBs
YWNlU3RhdGUnKTsKKyAgICB9CisgIH0sCisKKyAgLyoqCisgICAqIENoZWNrcyB3aGV0aGVyIG9y
IG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC4KKyAgICogQHJldHVybiB7
Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAqIEBwcm90ZWN0
ZWQKKyAgICogQGZpbmFsCisgICAqLworICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKKyAgICBy
ZXR1cm4gdGhpcy51cGRhdGVyLmlzTW91bnRlZCh0aGlzKTsKKyAgfQorfTsKKwordmFyIFJlYWN0
Q2xhc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7fTsKK19hc3NpZ24oUmVhY3RDbGFzc0NvbXBv
bmVudC5wcm90b3R5cGUsIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RDbGFzc01peGlu
KTsKKwordmFyIGRpZFdhcm5EZXByZWNhdGVkID0gZmFsc2U7CisKKy8qKgorICogTW9kdWxlIGZv
ciBjcmVhdGluZyBjb21wb3NpdGUgY29tcG9uZW50cy4KKyAqCisgKiBAY2xhc3MgUmVhY3RDbGFz
cworICovCit2YXIgUmVhY3RDbGFzcyA9IHsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIGNvbXBv
c2l0ZSBjb21wb25lbnQgY2xhc3MgZ2l2ZW4gYSBjbGFzcyBzcGVjaWZpY2F0aW9uLgorICAgKiBT
ZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0
bWwjcmVhY3QuY3JlYXRlY2xhc3MKKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IHNwZWMgQ2xh
c3Mgc3BlY2lmaWNhdGlvbiAod2hpY2ggbXVzdCBkZWZpbmUgYHJlbmRlcmApLgorICAgKiBAcmV0
dXJuIHtmdW5jdGlvbn0gQ29tcG9uZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgorICAgKiBAcHVi
bGljCisgICAqLworICBjcmVhdGVDbGFzczogZnVuY3Rpb24gKHNwZWMpIHsKKyAgICBpZiAoImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5EZXByZWNhdGVkLCAnJXM6IFJlYWN0LmNyZWF0
ZUNsYXNzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDE2LiAn
ICsgJ1VzZSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzZXMgaW5zdGVhZC4gSWYgeW91XCdyZSBub3Qg
eWV0IHJlYWR5IHRvICcgKyAnbWlncmF0ZSwgY3JlYXRlLXJlYWN0LWNsYXNzIGlzIGF2YWlsYWJs
ZSBvbiBucG0gYXMgYSAnICsgJ2Ryb3AtaW4gcmVwbGFjZW1lbnQuJywgc3BlYyAmJiBzcGVjLmRp
c3BsYXlOYW1lIHx8ICdBIENvbXBvbmVudCcpIDogdm9pZCAwOworICAgICAgZGlkV2FybkRlcHJl
Y2F0ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFRvIGtlZXAgb3VyIHdhcm5pbmdzIG1vcmUg
dW5kZXJzdGFuZGFibGUsIHdlJ2xsIHVzZSBhIGxpdHRsZSBoYWNrIGhlcmUgdG8KKyAgICAvLyBl
bnN1cmUgdGhhdCBDb25zdHJ1Y3Rvci5uYW1lICE9PSAnQ29uc3RydWN0b3InLiBUaGlzIG1ha2Vz
IHN1cmUgd2UgZG9uJ3QKKyAgICAvLyB1bm5lY2Vzc2FyaWx5IGlkZW50aWZ5IGEgY2xhc3Mgd2l0
aG91dCBkaXNwbGF5TmFtZSBhcyAnQ29uc3RydWN0b3InLgorICAgIHZhciBDb25zdHJ1Y3RvciA9
IGlkZW50aXR5KGZ1bmN0aW9uIChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgeworICAgICAgLy8g
VGhpcyBjb25zdHJ1Y3RvciBnZXRzIG92ZXJyaWRkZW4gYnkgbW9ja3MuIFRoZSBhcmd1bWVudCBp
cyB1c2VkCisgICAgICAvLyBieSBtb2NrcyB0byBhc3NlcnQgb24gd2hhdCBnZXRzIG1vdW50ZWQu
CisKKyAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAg
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0aGlzIGluc3RhbmNlb2Yg
Q29uc3RydWN0b3IsICdTb21ldGhpbmcgaXMgY2FsbGluZyBhIFJlYWN0IGNvbXBvbmVudCBkaXJl
Y3RseS4gVXNlIGEgZmFjdG9yeSBvciAnICsgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIu
bWUvcmVhY3QtbGVnYWN5ZmFjdG9yeScpIDogdm9pZCAwOworICAgICAgfQorCisgICAgICAvLyBX
aXJlIHVwIGF1dG8tYmluZGluZworICAgICAgaWYgKHRoaXMuX19yZWFjdEF1dG9CaW5kUGFpcnMu
bGVuZ3RoKSB7CisgICAgICAgIGJpbmRBdXRvQmluZE1ldGhvZHModGhpcyk7CisgICAgICB9CisK
KyAgICAgIHRoaXMucHJvcHMgPSBwcm9wczsKKyAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7
CisgICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsKKyAgICAgIHRoaXMudXBkYXRlciA9IHVw
ZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7CisKKyAgICAgIHRoaXMuc3RhdGUgPSBudWxs
OworCisgICAgICAvLyBSZWFjdENsYXNzZXMgZG9lc24ndCBoYXZlIGNvbnN0cnVjdG9ycy4gSW5z
dGVhZCwgdGhleSB1c2UgdGhlCisgICAgICAvLyBnZXRJbml0aWFsU3RhdGUgYW5kIGNvbXBvbmVu
dFdpbGxNb3VudCBtZXRob2RzIGZvciBpbml0aWFsaXphdGlvbi4KKworICAgICAgdmFyIGluaXRp
YWxTdGF0ZSA9IHRoaXMuZ2V0SW5pdGlhbFN0YXRlID8gdGhpcy5nZXRJbml0aWFsU3RhdGUoKSA6
IG51bGw7CisgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAg
ICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVy
bmluZyBudWxsLgorICAgICAgICBpZiAoaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgJiYgdGhp
cy5nZXRJbml0aWFsU3RhdGUuX2lzTW9ja0Z1bmN0aW9uKSB7CisgICAgICAgICAgLy8gVGhpcyBp
cyBwcm9iYWJseSBiYWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmQKKyAgICAg
ICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLgorICAgICAgICAgIGluaXRpYWxT
dGF0ZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICEodHlwZW9mIGluaXRpYWxT
dGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkgPyAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcy5nZXRJbml0
aWFsU3RhdGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwnLCBDb25zdHJ1Y3Rvci5k
aXNwbGF5TmFtZSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50
KCc4MicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVu
dCcpIDogdm9pZCAwOworCisgICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlOworICAgIH0p
OworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENsYXNzQ29tcG9uZW50KCk7
CisgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7Cisg
ICAgQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzID0gW107CisKKyAg
ICBpbmplY3RlZE1peGlucy5mb3JFYWNoKG1peFNwZWNJbnRvQ29tcG9uZW50LmJpbmQobnVsbCwg
Q29uc3RydWN0b3IpKTsKKworICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBz
cGVjKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlZmF1bHRQcm9wcyBwcm9wZXJ0eSBhZnRl
ciBhbGwgbWl4aW5zIGhhdmUgYmVlbiBtZXJnZWQuCisgICAgaWYgKENvbnN0cnVjdG9yLmdldERl
ZmF1bHRQcm9wcykgeworICAgICAgQ29uc3RydWN0b3IuZGVmYXVsdFByb3BzID0gQ29uc3RydWN0
b3IuZ2V0RGVmYXVsdFByb3BzKCk7CisgICAgfQorCisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJykgeworICAgICAgLy8gVGhpcyBpcyBhIHRhZyB0byBpbmRpY2F0ZSB0aGF0
IHRoZSB1c2Ugb2YgdGhlc2UgbWV0aG9kIG5hbWVzIGlzIG9rLAorICAgICAgLy8gc2luY2UgaXQn
cyB1c2VkIHdpdGggY3JlYXRlQ2xhc3MuIElmIGl0J3Mgbm90LCB0aGVuIGl0J3MgbGlrZWx5IGEK
KyAgICAgIC8vIG1pc3Rha2Ugc28gd2UnbGwgd2FybiB5b3UgdG8gdXNlIHRoZSBzdGF0aWMgcHJv
cGVydHksIHByb3BlcnR5CisgICAgICAvLyBpbml0aWFsaXplciBvciBjb25zdHJ1Y3RvciByZXNw
ZWN0aXZlbHkuCisgICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7CisgICAg
ICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9
OworICAgICAgfQorICAgICAgaWYgKENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3Rh
dGUpIHsKKyAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZS5pc1Jl
YWN0Q2xhc3NBcHByb3ZlZCA9IHt9OworICAgICAgfQorICAgIH0KKworICAgICFDb25zdHJ1Y3Rv
ci5wcm90b3R5cGUucmVuZGVyID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52
YXJpYW50KGZhbHNlLCAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0
IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4nKSA6IF9wcm9kSW52YXJpYW50KCc4MycpIDog
dm9pZCAwOworCisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAg
ICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghQ29uc3RydWN0b3Iu
cHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSwgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQg
JyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVu
dFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNl
IHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIHNwZWMu
ZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7CisgICAgICAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29t
cG9uZW50V2lsbFJlY2lldmVQcm9wcywgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21w
b25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2
ZVByb3BzKCk/Jywgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDsK
KyAgICB9CisKKyAgICAvLyBSZWR1Y2UgdGltZSBzcGVudCBkb2luZyBsb29rdXBzIGJ5IHNldHRp
bmcgdGhlc2Ugb24gdGhlIHByb3RvdHlwZS4KKyAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIFJl
YWN0Q2xhc3NJbnRlcmZhY2UpIHsKKyAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90eXBlW21l
dGhvZE5hbWVdKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSA9
IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENvbnN0cnVjdG9yOworICB9LAor
CisgIGluamVjdGlvbjogeworICAgIGluamVjdE1peGluOiBmdW5jdGlvbiAobWl4aW4pIHsKKyAg
ICAgIGluamVjdGVkTWl4aW5zLnB1c2gobWl4aW4pOworICAgIH0KKyAgfQorCit9OworCittb2R1
bGUuZXhwb3J0cyA9IFJlYWN0Q2xhc3M7Cit9LHsiMTEiOjExLCIxNiI6MTYsIjIxIjoyMSwiMjIi
OjIyLCIzOSI6MzksIjQ2Ijo0NiwiNDciOjQ3LCI0OSI6NDksIjUwIjo1MH1dLDExOltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
LworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOwor
Cit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDIxKTsKKwordmFyIGNhbkRlZmlu
ZVByb3BlcnR5ID0gX2RlcmVxXygzMyk7Cit2YXIgZW1wdHlPYmplY3QgPSBfZGVyZXFfKDQ2KTsK
K3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7
CisKKy8qKgorICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2Yg
YSBjb21wb25lbnQuCisgKi8KK2Z1bmN0aW9uIFJlYWN0Q29tcG9uZW50KHByb3BzLCBjb250ZXh0
LCB1cGRhdGVyKSB7CisgIHRoaXMucHJvcHMgPSBwcm9wczsKKyAgdGhpcy5jb250ZXh0ID0gY29u
dGV4dDsKKyAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7CisgIC8vIFdlIGluaXRpYWxpemUgdGhl
IGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlCisg
IC8vIHJlbmRlcmVyLgorICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0
ZVF1ZXVlOworfQorCitSZWFjdENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9
IHt9OworCisvKioKKyAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRo
aXMgdG8gbXV0YXRlCisgKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMg
aW1tdXRhYmxlLgorICoKKyAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRl
YCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvCisgKiBhY2Nlc3NpbmcgYHRoaXMuc3Rh
dGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLgor
ICoKKyAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2ls
bCBydW4gc3luY2hyb25vdXNseSwKKyAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hl
ZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbAorICogY2FsbGJhY2sgdGhh
dCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHkK
KyAqIGNvbXBsZXRlZC4KKyAqCisgKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0
U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW4KKyAqIHRoZSBmdXR1cmUg
KG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0
ZQorICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2Ug
dmFsdWVzIGNhbiBiZSBkaWZmZXJlbnQKKyAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5j
dGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlCisgKiBzaG91
bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0
IHdpbGwgbm90IHlldCBiZQorICogYXNzaWduZWQgdG8gdGhpcy4KKyAqCisgKiBAcGFyYW0ge29i
amVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlv
biB0bworICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3
aXRoIGN1cnJlbnQgc3RhdGUuCisgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVk
IGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuCisgKiBAZmluYWwKKyAqIEBwcm90ZWN0ZWQKKyAqLwor
UmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0
ZSwgY2FsbGJhY2spIHsKKyAgISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0
eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxs
KSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3Nl
dFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRl
IG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVz
LicpIDogX3Byb2RJbnZhcmlhbnQoJzg1JykgOiB2b2lkIDA7CisgIHRoaXMudXBkYXRlci5lbnF1
ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlKTsKKyAgaWYgKGNhbGxiYWNrKSB7CisgICAg
dGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7
CisgIH0KK307CisKKy8qKgorICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBi
ZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aAorICogY2VydGFpbnR5IHRoYXQgd2UgYXJl
ICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uCisgKgorICogWW91IG1heSB3YW50IHRvIGNh
bGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZQorICog
Y29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxs
ZWQuCisgKgorICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAs
IGJ1dCBpdCB3aWxsIGludm9rZQorICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9u
ZW50RGlkVXBkYXRlYC4KKyAqCisgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVk
IGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAqIEBmaW5hbAorICogQHByb3RlY3RlZAorICov
CitSZWFjdENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJh
Y2spIHsKKyAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKTsKKyAgaWYgKGNh
bGxiYWNrKSB7CisgICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFj
aywgJ2ZvcmNlVXBkYXRlJyk7CisgIH0KK307CisKKy8qKgorICogRGVwcmVjYXRlZCBBUElzLiBU
aGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5j
ZQorICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRv
IG1vdmUgdGhlbSBvdmVyIHRvIHRoaXMKKyAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3
ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLgorICovCitpZiAo
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciBkZXByZWNhdGVkQVBJcyA9
IHsKKyAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBj
bGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9u
ZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sCisgICAgcmVwbGFjZVN0
YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRl
IGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1
ZXMvMzIzNikuJ10KKyAgfTsKKyAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0
aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7CisgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7Cisg
ICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBtZXRo
b2ROYW1lLCB7CisgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pIGlzIGRlcHJl
Y2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGlu
Zm9bMV0pIDogdm9pZCAwOworICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0KKyAgfTsKKyAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRB
UElzKSB7CisgICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHsK
KyAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2Zu
TmFtZV0pOworICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50
OworfSx7IjIxIjoyMSwiMzMiOjMzLCIzOSI6MzksIjQ2Ijo0NiwiNDciOjQ3LCI0OSI6NDl9XSwx
MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAy
MDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9
IF9kZXJlcV8oMzkpOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDE0KTsKKwor
dmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsK
KworZnVuY3Rpb24gaXNOYXRpdmUoZm4pIHsKKyAgLy8gQmFzZWQgb24gaXNOYXRpdmUoKSBmcm9t
IExvZGFzaAorICB2YXIgZnVuY1RvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5n
OworICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
OworICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKyBmdW5jVG9TdHJpbmcKKyAgLy8gVGFr
ZSBhbiBleGFtcGxlIG5hdGl2ZSBmdW5jdGlvbiBzb3VyY2UgZm9yIGNvbXBhcmlzb24KKyAgLmNh
bGwoaGFzT3duUHJvcGVydHkpCisgIC8vIFN0cmlwIHJlZ2V4IGNoYXJhY3RlcnMgc28gd2UgY2Fu
IHVzZSBpdCBmb3IgcmVnZXgKKyAgLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCAnXFwk
JicpCisgIC8vIFJlbW92ZSBoYXNPd25Qcm9wZXJ0eSBmcm9tIHRoZSB0ZW1wbGF0ZSB0byBtYWtl
IGl0IGdlbmVyaWMKKyAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1c
XFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICckMS4qPycpICsgJyQnKTsKKyAgdHJ5IHsKKyAgICB2
YXIgc291cmNlID0gZnVuY1RvU3RyaW5nLmNhbGwoZm4pOworICAgIHJldHVybiByZUlzTmF0aXZl
LnRlc3Qoc291cmNlKTsKKyAgfSBjYXRjaCAoZXJyKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9
Cit9CisKK3ZhciBjYW5Vc2VDb2xsZWN0aW9ucyA9CisvLyBBcnJheS5mcm9tCit0eXBlb2YgQXJy
YXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJyAmJgorLy8gTWFwCit0eXBlb2YgTWFwID09PSAnZnVuY3Rp
b24nICYmIGlzTmF0aXZlKE1hcCkgJiYKKy8vIE1hcC5wcm90b3R5cGUua2V5cworTWFwLnByb3Rv
dHlwZSAhPSBudWxsICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicg
JiYgaXNOYXRpdmUoTWFwLnByb3RvdHlwZS5rZXlzKSAmJgorLy8gU2V0Cit0eXBlb2YgU2V0ID09
PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKFNldCkgJiYKKy8vIFNldC5wcm90b3R5cGUua2V5cwor
U2V0LnByb3RvdHlwZSAhPSBudWxsICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmtleXMgPT09ICdm
dW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0LnByb3RvdHlwZS5rZXlzKTsKKwordmFyIHNldEl0ZW07
Cit2YXIgZ2V0SXRlbTsKK3ZhciByZW1vdmVJdGVtOwordmFyIGdldEl0ZW1JRHM7Cit2YXIgYWRk
Um9vdDsKK3ZhciByZW1vdmVSb290OwordmFyIGdldFJvb3RJRHM7CisKK2lmIChjYW5Vc2VDb2xs
ZWN0aW9ucykgeworICB2YXIgaXRlbU1hcCA9IG5ldyBNYXAoKTsKKyAgdmFyIHJvb3RJRFNldCA9
IG5ldyBTZXQoKTsKKworICBzZXRJdGVtID0gZnVuY3Rpb24gKGlkLCBpdGVtKSB7CisgICAgaXRl
bU1hcC5zZXQoaWQsIGl0ZW0pOworICB9OworICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7Cisg
ICAgcmV0dXJuIGl0ZW1NYXAuZ2V0KGlkKTsKKyAgfTsKKyAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9u
IChpZCkgeworICAgIGl0ZW1NYXBbJ2RlbGV0ZSddKGlkKTsKKyAgfTsKKyAgZ2V0SXRlbUlEcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbShpdGVtTWFwLmtleXMoKSk7Cisg
IH07CisKKyAgYWRkUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJvb3RJRFNldC5hZGQoaWQp
OworICB9OworICByZW1vdmVSb290ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcm9vdElEU2V0Wydk
ZWxldGUnXShpZCk7CisgIH07CisgIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0
dXJuIEFycmF5LmZyb20ocm9vdElEU2V0LmtleXMoKSk7CisgIH07Cit9IGVsc2UgeworICB2YXIg
aXRlbUJ5S2V5ID0ge307CisgIHZhciByb290QnlLZXkgPSB7fTsKKworICAvLyBVc2Ugbm9uLW51
bWVyaWMga2V5cyB0byBwcmV2ZW50IFY4IHBlcmZvcm1hbmNlIGlzc3VlczoKKyAgLy8gaHR0cHM6
Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzIzMgorICB2YXIgZ2V0S2V5RnJvbUlE
ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcmV0dXJuICcuJyArIGlkOworICB9OworICB2YXIgZ2V0
SURGcm9tS2V5ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiBwYXJzZUludChrZXkuc3Vi
c3RyKDEpLCAxMCk7CisgIH07CisKKyAgc2V0SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkgewor
ICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGl0ZW1CeUtleVtrZXldID0gaXRl
bTsKKyAgfTsKKyAgZ2V0SXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRL
ZXlGcm9tSUQoaWQpOworICAgIHJldHVybiBpdGVtQnlLZXlba2V5XTsKKyAgfTsKKyAgcmVtb3Zl
SXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOwor
ICAgIGRlbGV0ZSBpdGVtQnlLZXlba2V5XTsKKyAgfTsKKyAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbUJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5
KTsKKyAgfTsKKworICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtleSA9IGdl
dEtleUZyb21JRChpZCk7CisgICAgcm9vdEJ5S2V5W2tleV0gPSB0cnVlOworICB9OworICByZW1v
dmVSb290ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7
CisgICAgZGVsZXRlIHJvb3RCeUtleVtrZXldOworICB9OworICBnZXRSb290SURzID0gZnVuY3Rp
b24gKCkgeworICAgIHJldHVybiBPYmplY3Qua2V5cyhyb290QnlLZXkpLm1hcChnZXRJREZyb21L
ZXkpOworICB9OworfQorCit2YXIgdW5tb3VudGVkSURzID0gW107CisKK2Z1bmN0aW9uIHB1cmdl
RGVlcChpZCkgeworICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICBpZiAoaXRlbSkgeworICAg
IHZhciBjaGlsZElEcyA9IGl0ZW0uY2hpbGRJRHM7CisKKyAgICByZW1vdmVJdGVtKGlkKTsKKyAg
ICBjaGlsZElEcy5mb3JFYWNoKHB1cmdlRGVlcCk7CisgIH0KK30KKworZnVuY3Rpb24gZGVzY3Jp
YmVDb21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyTmFtZSkgeworICByZXR1cm4gJ1xu
ICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93bicpICsgKHNvdXJjZSA/ICcgKGF0ICcgKyBzb3Vy
Y2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXC9dLywgJycpICsgJzonICsgc291cmNlLmxpbmVO
dW1iZXIgKyAnKScgOiBvd25lck5hbWUgPyAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAn
KScgOiAnJyk7Cit9CisKK2Z1bmN0aW9uIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpIHsKKyAgaWYg
KGVsZW1lbnQgPT0gbnVsbCkgeworICAgIHJldHVybiAnI2VtcHR5JzsKKyAgfSBlbHNlIGlmICh0
eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXIn
KSB7CisgICAgcmV0dXJuICcjdGV4dCc7CisgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQudHlw
ZSA9PT0gJ3N0cmluZycpIHsKKyAgICByZXR1cm4gZWxlbWVudC50eXBlOworICB9IGVsc2Ugewor
ICAgIHJldHVybiBlbGVtZW50LnR5cGUuZGlzcGxheU5hbWUgfHwgZWxlbWVudC50eXBlLm5hbWUg
fHwgJ1Vua25vd24nOworICB9Cit9CisKK2Z1bmN0aW9uIGRlc2NyaWJlSUQoaWQpIHsKKyAgdmFy
IG5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGlkKTsKKyAgdmFy
IGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICB2YXIg
b3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7CisgIHZhciBv
d25lck5hbWU7CisgIGlmIChvd25lcklEKSB7CisgICAgb3duZXJOYW1lID0gUmVhY3RDb21wb25l
bnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKTsKKyAgfQorICAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGVsZW1lbnQsICdSZWFjdENvbXBvbmVudFRyZWVI
b29rOiBNaXNzaW5nIFJlYWN0IGVsZW1lbnQgZm9yIGRlYnVnSUQgJXMgd2hlbiAnICsgJ2J1aWxk
aW5nIHN0YWNrJywgaWQpIDogdm9pZCAwOworICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFt
ZShuYW1lLCBlbGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZSwgb3duZXJOYW1lKTsKK30KKwordmFy
IFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSB7CisgIG9uU2V0Q2hpbGRyZW46IGZ1bmN0aW9uIChp
ZCwgbmV4dENoaWxkSURzKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICAhaXRl
bSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0l0
ZW0gbXVzdCBoYXZlIGJlZW4gc2V0JykgOiBfcHJvZEludmFyaWFudCgnMTQ0JykgOiB2b2lkIDA7
CisgICAgaXRlbS5jaGlsZElEcyA9IG5leHRDaGlsZElEczsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbmV4dENoaWxkSURzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbmV4dENoaWxkSUQg
PSBuZXh0Q2hpbGRJRHNbaV07CisgICAgICB2YXIgbmV4dENoaWxkID0gZ2V0SXRlbShuZXh0Q2hp
bGRJRCk7CisgICAgICAhbmV4dENoaWxkID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgaG9vayBldmVudHMgdG8gZmlyZSBmb3IgdGhl
IGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4n
KSA6IF9wcm9kSW52YXJpYW50KCcxNDAnKSA6IHZvaWQgMDsKKyAgICAgICEobmV4dENoaWxkLmNo
aWxkSURzICE9IG51bGwgfHwgdHlwZW9mIG5leHRDaGlsZC5lbGVtZW50ICE9PSAnb2JqZWN0JyB8
fCBuZXh0Q2hpbGQuZWxlbWVudCA9PSBudWxsKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIG9uU2V0Q2hpbGRyZW4oKSB0byBmaXJl
IGZvciBhIGNvbnRhaW5lciBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBv
blNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnMTQxJykgOiB2b2lkIDA7CisgICAg
ICAhbmV4dENoaWxkLmlzTW91bnRlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIG9uTW91bnRDb21wb25lbnQoKSB0byBmaXJlIGZv
ciB0aGUgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJl
bigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzcxJykgOiB2b2lkIDA7CisgICAgICBpZiAobmV4dENo
aWxkLnBhcmVudElEID09IG51bGwpIHsKKyAgICAgICAgbmV4dENoaWxkLnBhcmVudElEID0gaWQ7
CisgICAgICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgbW91bnRp
bmcgYSBuZXcgcm9vdCBkdXJpbmcgaW4KKyAgICAgICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGN1
cnJlbnRseSBjYXVzZXMgbm90LXlldC1tb3VudGVkIGNvbXBvbmVudHMgdG8KKyAgICAgICAgLy8g
YmUgcHVyZ2VkIGZyb20gb3VyIHRyZWUgZGF0YSBzbyB0aGVpciBwYXJlbnQgaWQgaXMgbWlzc2lu
Zy4KKyAgICAgIH0KKyAgICAgICEobmV4dENoaWxkLnBhcmVudElEID09PSBpZCkgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbkJl
Zm9yZU1vdW50Q29tcG9uZW50KCkgcGFyZW50IGFuZCBvblNldENoaWxkcmVuKCkgdG8gYmUgY29u
c2lzdGVudCAoJXMgaGFzIHBhcmVudHMgJXMgYW5kICVzKS4nLCBuZXh0Q2hpbGRJRCwgbmV4dENo
aWxkLnBhcmVudElELCBpZCkgOiBfcHJvZEludmFyaWFudCgnMTQyJywgbmV4dENoaWxkSUQsIG5l
eHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogdm9pZCAwOworICAgIH0KKyAgfSwKKyAgb25CZWZvcmVN
b3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50LCBwYXJlbnRJRCkgeworICAgIHZh
ciBpdGVtID0geworICAgICAgZWxlbWVudDogZWxlbWVudCwKKyAgICAgIHBhcmVudElEOiBwYXJl
bnRJRCwKKyAgICAgIHRleHQ6IG51bGwsCisgICAgICBjaGlsZElEczogW10sCisgICAgICBpc01v
dW50ZWQ6IGZhbHNlLAorICAgICAgdXBkYXRlQ291bnQ6IDAKKyAgICB9OworICAgIHNldEl0ZW0o
aWQsIGl0ZW0pOworICB9LAorICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlk
LCBlbGVtZW50KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoIWl0ZW0g
fHwgIWl0ZW0uaXNNb3VudGVkKSB7CisgICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSBy
ZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLgorICAgICAgLy8g
SW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuCisgICAgICByZXR1cm47CisgICAgfQor
ICAgIGl0ZW0uZWxlbWVudCA9IGVsZW1lbnQ7CisgIH0sCisgIG9uTW91bnRDb21wb25lbnQ6IGZ1
bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgIWl0ZW0gPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11
c3QgaGF2ZSBiZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwOworICAg
IGl0ZW0uaXNNb3VudGVkID0gdHJ1ZTsKKyAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9
PT0gMDsKKyAgICBpZiAoaXNSb290KSB7CisgICAgICBhZGRSb290KGlkKTsKKyAgICB9CisgIH0s
CisgIG9uVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdl
dEl0ZW0oaWQpOworICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01vdW50ZWQpIHsKKyAgICAgIC8v
IFdlIG1heSBlbmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVu
dFdpbGxVbm1vdW50KCkuCisgICAgICAvLyBJbiB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVu
dC4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXRlbS51cGRhdGVDb3VudCsrOworICB9LAor
ICBvblVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0
SXRlbShpZCk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYg
aXQgZXhpc3RzLgorICAgICAgLy8gYGl0ZW1gIG1pZ2h0IG5vdCBleGlzdCBpZiBpdCBpcyBpbnNp
ZGUgYW4gZXJyb3IgYm91bmRhcnksIGFuZCBhIHNpYmxpbmcKKyAgICAgIC8vIGVycm9yIGJvdW5k
YXJ5IGNoaWxkIHRocmV3IHdoaWxlIG1vdW50aW5nLiBUaGVuIHRoaXMgaW5zdGFuY2UgbmV2ZXIK
KyAgICAgIC8vIGdvdCBhIGNoYW5jZSB0byBtb3VudCwgYnV0IGl0IHN0aWxsIGdldHMgYW4gdW5t
b3VudGluZyBldmVudCBkdXJpbmcKKyAgICAgIC8vIHRoZSBlcnJvciBib3VuZGFyeSBjbGVhbnVw
LgorICAgICAgaXRlbS5pc01vdW50ZWQgPSBmYWxzZTsKKyAgICAgIHZhciBpc1Jvb3QgPSBpdGVt
LnBhcmVudElEID09PSAwOworICAgICAgaWYgKGlzUm9vdCkgeworICAgICAgICByZW1vdmVSb290
KGlkKTsKKyAgICAgIH0KKyAgICB9CisgICAgdW5tb3VudGVkSURzLnB1c2goaWQpOworICB9LAor
ICBwdXJnZVVubW91bnRlZENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoUmVhY3RD
b21wb25lbnRUcmVlSG9vay5fcHJldmVudFB1cmdpbmcpIHsKKyAgICAgIC8vIFNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHRlc3RpbmcuCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB1bm1vdW50ZWRJRHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBpZCA9
IHVubW91bnRlZElEc1tpXTsKKyAgICAgIHB1cmdlRGVlcChpZCk7CisgICAgfQorICAgIHVubW91
bnRlZElEcy5sZW5ndGggPSAwOworICB9LAorICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChpZCkgewor
ICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmlzTW91
bnRlZCA6IGZhbHNlOworICB9LAorICBnZXRDdXJyZW50U3RhY2tBZGRlbmR1bTogZnVuY3Rpb24g
KHRvcEVsZW1lbnQpIHsKKyAgICB2YXIgaW5mbyA9ICcnOworICAgIGlmICh0b3BFbGVtZW50KSB7
CisgICAgICB2YXIgbmFtZSA9IGdldERpc3BsYXlOYW1lKHRvcEVsZW1lbnQpOworICAgICAgdmFy
IG93bmVyID0gdG9wRWxlbWVudC5fb3duZXI7CisgICAgICBpbmZvICs9IGRlc2NyaWJlQ29tcG9u
ZW50RnJhbWUobmFtZSwgdG9wRWxlbWVudC5fc291cmNlLCBvd25lciAmJiBvd25lci5nZXROYW1l
KCkpOworICAgIH0KKworICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5j
dXJyZW50OworICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVn
SUQ7CisKKyAgICBpbmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1
bUJ5SUQoaWQpOworICAgIHJldHVybiBpbmZvOworICB9LAorICBnZXRTdGFja0FkZGVuZHVtQnlJ
RDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGluZm8gPSAnJzsKKyAgICB3aGlsZSAoaWQpIHsK
KyAgICAgIGluZm8gKz0gZGVzY3JpYmVJRChpZCk7CisgICAgICBpZCA9IFJlYWN0Q29tcG9uZW50
VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpOworICAgIH0KKyAgICByZXR1cm4gaW5mbzsKKyAgfSwK
KyAgZ2V0Q2hpbGRJRHM6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShp
ZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmNoaWxkSURzIDogW107CisgIH0sCisgIGdldERp
c3BsYXlOYW1lOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9u
ZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpOwor
ICB9LAorICBnZXRFbGVtZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0
ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDsKKyAgfSwKKyAg
Z2V0T3duZXJJRDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBv
bmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC5fb3duZXIpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVu
dC5fb3duZXIuX2RlYnVnSUQ7CisgIH0sCisgIGdldFBhcmVudElEOiBmdW5jdGlvbiAoaWQpIHsK
KyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5wYXJl
bnRJRCA6IG51bGw7CisgIH0sCisgIGdldFNvdXJjZTogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFy
IGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICB2YXIgZWxlbWVudCA9IGl0ZW0gPyBpdGVtLmVsZW1l
bnQgOiBudWxsOworICAgIHZhciBzb3VyY2UgPSBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50Ll9z
b3VyY2UgOiBudWxsOworICAgIHJldHVybiBzb3VyY2U7CisgIH0sCisgIGdldFRleHQ6IGZ1bmN0
aW9uIChpZCkgeworICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRF
bGVtZW50KGlkKTsKKyAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7CisgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVt
YmVyJykgeworICAgICAgcmV0dXJuICcnICsgZWxlbWVudDsKKyAgICB9IGVsc2UgeworICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorICB9LAorICBnZXRVcGRhdGVDb3VudDogZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0u
dXBkYXRlQ291bnQgOiAwOworICB9LAorCisKKyAgZ2V0Um9vdElEczogZ2V0Um9vdElEcywKKyAg
Z2V0UmVnaXN0ZXJlZElEczogZ2V0SXRlbUlEcworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFj
dENvbXBvbmVudFRyZWVIb29rOworfSx7IjE0IjoxNCwiMzkiOjM5LCI0NyI6NDcsIjQ5Ijo0OX1d
LDEzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBzaGFsbG93Q29tcGFyZSA9IF9k
ZXJlcV8oNDApOworCisvKioKKyAqIElmIHlvdXIgUmVhY3QgY29tcG9uZW50J3MgcmVuZGVyIGZ1
bmN0aW9uIGlzICJwdXJlIiwgZS5nLiBpdCB3aWxsIHJlbmRlciB0aGUKKyAqIHNhbWUgcmVzdWx0
IGdpdmVuIHRoZSBzYW1lIHByb3BzIGFuZCBzdGF0ZSwgcHJvdmlkZSB0aGlzIG1peGluIGZvciBh
CisgKiBjb25zaWRlcmFibGUgcGVyZm9ybWFuY2UgYm9vc3QuCisgKgorICogTW9zdCBSZWFjdCBj
b21wb25lbnRzIGhhdmUgcHVyZSByZW5kZXIgZnVuY3Rpb25zLgorICoKKyAqIEV4YW1wbGU6Cisg
KgorICogICB2YXIgUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluID0KKyAqICAgICBy
ZXF1aXJlKCdSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4nKTsKKyAqICAgUmVhY3Qu
Y3JlYXRlQ2xhc3MoeworICogICAgIG1peGluczogW1JlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5k
ZXJNaXhpbl0sCisgKgorICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgKiAgICAgICByZXR1
cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfT5mb288L2Rpdj47CisgKiAg
ICAgfQorICogICB9KTsKKyAqCisgKiBOb3RlOiBUaGlzIG9ubHkgY2hlY2tzIHNoYWxsb3cgZXF1
YWxpdHkgZm9yIHByb3BzIGFuZCBzdGF0ZS4gSWYgdGhlc2UgY29udGFpbgorICogY29tcGxleCBk
YXRhIHN0cnVjdHVyZXMgdGhpcyBtaXhpbiBtYXkgaGF2ZSBmYWxzZS1uZWdhdGl2ZXMgZm9yIGRl
ZXBlcgorICogZGlmZmVyZW5jZXMuIE9ubHkgbWl4aW4gdG8gY29tcG9uZW50cyB3aGljaCBoYXZl
IHNpbXBsZSBwcm9wcyBhbmQgc3RhdGUsIG9yCisgKiB1c2UgYGZvcmNlVXBkYXRlKClgIHdoZW4g
eW91IGtub3cgZGVlcCBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIFNlZSBo
dHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3B1cmUtcmVuZGVyLW1peGluLmh0
bWwKKyAqLwordmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbiA9IHsKKyAgc2hv
dWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbiAobmV4dFByb3BzLCBuZXh0U3RhdGUpIHsKKyAg
ICByZXR1cm4gc2hhbGxvd0NvbXBhcmUodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpOworICB9
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhp
bjsKK30seyI0MCI6NDB9XSwxNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8q
KgorICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuCisgKgorICogVGhlIGN1cnJl
bnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0
aGF0IGFyZQorICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLgorICovCit2YXIgUmVhY3RD
dXJyZW50T3duZXIgPSB7CisKKyAgLyoqCisgICAqIEBpbnRlcm5hbAorICAgKiBAdHlwZSB7UmVh
Y3RDb21wb25lbnR9CisgICAqLworICBjdXJyZW50OiBudWxsCisKK307CisKK21vZHVsZS5leHBv
cnRzID0gUmVhY3RDdXJyZW50T3duZXI7Cit9LHt9XSwxNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJp
Y3QnOworCit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7CisKKy8qKgorICogQ3JlYXRl
IGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuCisgKgorICogQHByaXZh
dGUKKyAqLwordmFyIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9y
eTsKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIFJlYWN0RWxl
bWVudFZhbGlkYXRvciA9IF9kZXJlcV8oMTgpOworICBjcmVhdGVET01GYWN0b3J5ID0gUmVhY3RF
bGVtZW50VmFsaWRhdG9yLmNyZWF0ZUZhY3Rvcnk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG1h
cHBpbmcgZnJvbSBzdXBwb3J0ZWQgSFRNTCB0YWdzIHRvIGBSZWFjdERPTUNvbXBvbmVudGAgY2xh
c3Nlcy4KKyAqIFRoaXMgaXMgYWxzbyBhY2Nlc3NpYmxlIHZpYSBgUmVhY3QuRE9NYC4KKyAqCisg
KiBAcHVibGljCisgKi8KK3ZhciBSZWFjdERPTUZhY3RvcmllcyA9IHsKKyAgYTogY3JlYXRlRE9N
RmFjdG9yeSgnYScpLAorICBhYmJyOiBjcmVhdGVET01GYWN0b3J5KCdhYmJyJyksCisgIGFkZHJl
c3M6IGNyZWF0ZURPTUZhY3RvcnkoJ2FkZHJlc3MnKSwKKyAgYXJlYTogY3JlYXRlRE9NRmFjdG9y
eSgnYXJlYScpLAorICBhcnRpY2xlOiBjcmVhdGVET01GYWN0b3J5KCdhcnRpY2xlJyksCisgIGFz
aWRlOiBjcmVhdGVET01GYWN0b3J5KCdhc2lkZScpLAorICBhdWRpbzogY3JlYXRlRE9NRmFjdG9y
eSgnYXVkaW8nKSwKKyAgYjogY3JlYXRlRE9NRmFjdG9yeSgnYicpLAorICBiYXNlOiBjcmVhdGVE
T01GYWN0b3J5KCdiYXNlJyksCisgIGJkaTogY3JlYXRlRE9NRmFjdG9yeSgnYmRpJyksCisgIGJk
bzogY3JlYXRlRE9NRmFjdG9yeSgnYmRvJyksCisgIGJpZzogY3JlYXRlRE9NRmFjdG9yeSgnYmln
JyksCisgIGJsb2NrcXVvdGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jsb2NrcXVvdGUnKSwKKyAgYm9k
eTogY3JlYXRlRE9NRmFjdG9yeSgnYm9keScpLAorICBicjogY3JlYXRlRE9NRmFjdG9yeSgnYnIn
KSwKKyAgYnV0dG9uOiBjcmVhdGVET01GYWN0b3J5KCdidXR0b24nKSwKKyAgY2FudmFzOiBjcmVh
dGVET01GYWN0b3J5KCdjYW52YXMnKSwKKyAgY2FwdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnY2Fw
dGlvbicpLAorICBjaXRlOiBjcmVhdGVET01GYWN0b3J5KCdjaXRlJyksCisgIGNvZGU6IGNyZWF0
ZURPTUZhY3RvcnkoJ2NvZGUnKSwKKyAgY29sOiBjcmVhdGVET01GYWN0b3J5KCdjb2wnKSwKKyAg
Y29sZ3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ2NvbGdyb3VwJyksCisgIGRhdGE6IGNyZWF0ZURP
TUZhY3RvcnkoJ2RhdGEnKSwKKyAgZGF0YWxpc3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ2RhdGFsaXN0
JyksCisgIGRkOiBjcmVhdGVET01GYWN0b3J5KCdkZCcpLAorICBkZWw6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2RlbCcpLAorICBkZXRhaWxzOiBjcmVhdGVET01GYWN0b3J5KCdkZXRhaWxzJyksCisgIGRm
bjogY3JlYXRlRE9NRmFjdG9yeSgnZGZuJyksCisgIGRpYWxvZzogY3JlYXRlRE9NRmFjdG9yeSgn
ZGlhbG9nJyksCisgIGRpdjogY3JlYXRlRE9NRmFjdG9yeSgnZGl2JyksCisgIGRsOiBjcmVhdGVE
T01GYWN0b3J5KCdkbCcpLAorICBkdDogY3JlYXRlRE9NRmFjdG9yeSgnZHQnKSwKKyAgZW06IGNy
ZWF0ZURPTUZhY3RvcnkoJ2VtJyksCisgIGVtYmVkOiBjcmVhdGVET01GYWN0b3J5KCdlbWJlZCcp
LAorICBmaWVsZHNldDogY3JlYXRlRE9NRmFjdG9yeSgnZmllbGRzZXQnKSwKKyAgZmlnY2FwdGlv
bjogY3JlYXRlRE9NRmFjdG9yeSgnZmlnY2FwdGlvbicpLAorICBmaWd1cmU6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2ZpZ3VyZScpLAorICBmb290ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvb3RlcicpLAor
ICBmb3JtOiBjcmVhdGVET01GYWN0b3J5KCdmb3JtJyksCisgIGgxOiBjcmVhdGVET01GYWN0b3J5
KCdoMScpLAorICBoMjogY3JlYXRlRE9NRmFjdG9yeSgnaDInKSwKKyAgaDM6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2gzJyksCisgIGg0OiBjcmVhdGVET01GYWN0b3J5KCdoNCcpLAorICBoNTogY3JlYXRl
RE9NRmFjdG9yeSgnaDUnKSwKKyAgaDY6IGNyZWF0ZURPTUZhY3RvcnkoJ2g2JyksCisgIGhlYWQ6
IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWQnKSwKKyAgaGVhZGVyOiBjcmVhdGVET01GYWN0b3J5KCdo
ZWFkZXInKSwKKyAgaGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdoZ3JvdXAnKSwKKyAgaHI6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2hyJyksCisgIGh0bWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2h0bWwnKSwK
KyAgaTogY3JlYXRlRE9NRmFjdG9yeSgnaScpLAorICBpZnJhbWU6IGNyZWF0ZURPTUZhY3Rvcnko
J2lmcmFtZScpLAorICBpbWc6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltZycpLAorICBpbnB1dDogY3Jl
YXRlRE9NRmFjdG9yeSgnaW5wdXQnKSwKKyAgaW5zOiBjcmVhdGVET01GYWN0b3J5KCdpbnMnKSwK
KyAga2JkOiBjcmVhdGVET01GYWN0b3J5KCdrYmQnKSwKKyAga2V5Z2VuOiBjcmVhdGVET01GYWN0
b3J5KCdrZXlnZW4nKSwKKyAgbGFiZWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2xhYmVsJyksCisgIGxl
Z2VuZDogY3JlYXRlRE9NRmFjdG9yeSgnbGVnZW5kJyksCisgIGxpOiBjcmVhdGVET01GYWN0b3J5
KCdsaScpLAorICBsaW5rOiBjcmVhdGVET01GYWN0b3J5KCdsaW5rJyksCisgIG1haW46IGNyZWF0
ZURPTUZhY3RvcnkoJ21haW4nKSwKKyAgbWFwOiBjcmVhdGVET01GYWN0b3J5KCdtYXAnKSwKKyAg
bWFyazogY3JlYXRlRE9NRmFjdG9yeSgnbWFyaycpLAorICBtZW51OiBjcmVhdGVET01GYWN0b3J5
KCdtZW51JyksCisgIG1lbnVpdGVtOiBjcmVhdGVET01GYWN0b3J5KCdtZW51aXRlbScpLAorICBt
ZXRhOiBjcmVhdGVET01GYWN0b3J5KCdtZXRhJyksCisgIG1ldGVyOiBjcmVhdGVET01GYWN0b3J5
KCdtZXRlcicpLAorICBuYXY6IGNyZWF0ZURPTUZhY3RvcnkoJ25hdicpLAorICBub3NjcmlwdDog
Y3JlYXRlRE9NRmFjdG9yeSgnbm9zY3JpcHQnKSwKKyAgb2JqZWN0OiBjcmVhdGVET01GYWN0b3J5
KCdvYmplY3QnKSwKKyAgb2w6IGNyZWF0ZURPTUZhY3RvcnkoJ29sJyksCisgIG9wdGdyb3VwOiBj
cmVhdGVET01GYWN0b3J5KCdvcHRncm91cCcpLAorICBvcHRpb246IGNyZWF0ZURPTUZhY3Rvcnko
J29wdGlvbicpLAorICBvdXRwdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ291dHB1dCcpLAorICBwOiBj
cmVhdGVET01GYWN0b3J5KCdwJyksCisgIHBhcmFtOiBjcmVhdGVET01GYWN0b3J5KCdwYXJhbScp
LAorICBwaWN0dXJlOiBjcmVhdGVET01GYWN0b3J5KCdwaWN0dXJlJyksCisgIHByZTogY3JlYXRl
RE9NRmFjdG9yeSgncHJlJyksCisgIHByb2dyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdwcm9ncmVz
cycpLAorICBxOiBjcmVhdGVET01GYWN0b3J5KCdxJyksCisgIHJwOiBjcmVhdGVET01GYWN0b3J5
KCdycCcpLAorICBydDogY3JlYXRlRE9NRmFjdG9yeSgncnQnKSwKKyAgcnVieTogY3JlYXRlRE9N
RmFjdG9yeSgncnVieScpLAorICBzOiBjcmVhdGVET01GYWN0b3J5KCdzJyksCisgIHNhbXA6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3NhbXAnKSwKKyAgc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdzY3Jp
cHQnKSwKKyAgc2VjdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnc2VjdGlvbicpLAorICBzZWxlY3Q6
IGNyZWF0ZURPTUZhY3RvcnkoJ3NlbGVjdCcpLAorICBzbWFsbDogY3JlYXRlRE9NRmFjdG9yeSgn
c21hbGwnKSwKKyAgc291cmNlOiBjcmVhdGVET01GYWN0b3J5KCdzb3VyY2UnKSwKKyAgc3Bhbjog
Y3JlYXRlRE9NRmFjdG9yeSgnc3BhbicpLAorICBzdHJvbmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0
cm9uZycpLAorICBzdHlsZTogY3JlYXRlRE9NRmFjdG9yeSgnc3R5bGUnKSwKKyAgc3ViOiBjcmVh
dGVET01GYWN0b3J5KCdzdWInKSwKKyAgc3VtbWFyeTogY3JlYXRlRE9NRmFjdG9yeSgnc3VtbWFy
eScpLAorICBzdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1cCcpLAorICB0YWJsZTogY3JlYXRlRE9N
RmFjdG9yeSgndGFibGUnKSwKKyAgdGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rib2R5JyksCisg
IHRkOiBjcmVhdGVET01GYWN0b3J5KCd0ZCcpLAorICB0ZXh0YXJlYTogY3JlYXRlRE9NRmFjdG9y
eSgndGV4dGFyZWEnKSwKKyAgdGZvb3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rmb290JyksCisgIHRo
OiBjcmVhdGVET01GYWN0b3J5KCd0aCcpLAorICB0aGVhZDogY3JlYXRlRE9NRmFjdG9yeSgndGhl
YWQnKSwKKyAgdGltZTogY3JlYXRlRE9NRmFjdG9yeSgndGltZScpLAorICB0aXRsZTogY3JlYXRl
RE9NRmFjdG9yeSgndGl0bGUnKSwKKyAgdHI6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyJyksCisgIHRy
YWNrOiBjcmVhdGVET01GYWN0b3J5KCd0cmFjaycpLAorICB1OiBjcmVhdGVET01GYWN0b3J5KCd1
JyksCisgIHVsOiBjcmVhdGVET01GYWN0b3J5KCd1bCcpLAorICAndmFyJzogY3JlYXRlRE9NRmFj
dG9yeSgndmFyJyksCisgIHZpZGVvOiBjcmVhdGVET01GYWN0b3J5KCd2aWRlbycpLAorICB3YnI6
IGNyZWF0ZURPTUZhY3RvcnkoJ3dicicpLAorCisgIC8vIFNWRworICBjaXJjbGU6IGNyZWF0ZURP
TUZhY3RvcnkoJ2NpcmNsZScpLAorICBjbGlwUGF0aDogY3JlYXRlRE9NRmFjdG9yeSgnY2xpcFBh
dGgnKSwKKyAgZGVmczogY3JlYXRlRE9NRmFjdG9yeSgnZGVmcycpLAorICBlbGxpcHNlOiBjcmVh
dGVET01GYWN0b3J5KCdlbGxpcHNlJyksCisgIGc6IGNyZWF0ZURPTUZhY3RvcnkoJ2cnKSwKKyAg
aW1hZ2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltYWdlJyksCisgIGxpbmU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2xpbmUnKSwKKyAgbGluZWFyR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpbmVhckdy
YWRpZW50JyksCisgIG1hc2s6IGNyZWF0ZURPTUZhY3RvcnkoJ21hc2snKSwKKyAgcGF0aDogY3Jl
YXRlRE9NRmFjdG9yeSgncGF0aCcpLAorICBwYXR0ZXJuOiBjcmVhdGVET01GYWN0b3J5KCdwYXR0
ZXJuJyksCisgIHBvbHlnb246IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlnb24nKSwKKyAgcG9seWxp
bmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlsaW5lJyksCisgIHJhZGlhbEdyYWRpZW50OiBjcmVh
dGVET01GYWN0b3J5KCdyYWRpYWxHcmFkaWVudCcpLAorICByZWN0OiBjcmVhdGVET01GYWN0b3J5
KCdyZWN0JyksCisgIHN0b3A6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0b3AnKSwKKyAgc3ZnOiBjcmVh
dGVET01GYWN0b3J5KCdzdmcnKSwKKyAgdGV4dDogY3JlYXRlRE9NRmFjdG9yeSgndGV4dCcpLAor
ICB0c3BhbjogY3JlYXRlRE9NRmFjdG9yeSgndHNwYW4nKQorfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBSZWFjdERPTUZhY3RvcmllczsKK30seyIxNiI6MTYsIjE4IjoxOH1dLDE2OltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
CisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK3ZhciBSZWFj
dEN1cnJlbnRPd25lciA9IF9kZXJlcV8oMTQpOworCit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkp
OwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygzMyk7Cit2YXIgaGFzT3duUHJvcGVy
dHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworCit2YXIgUkVBQ1RfRUxFTUVO
VF9UWVBFID0gX2RlcmVxXygxNyk7CisKK3ZhciBSRVNFUlZFRF9QUk9QUyA9IHsKKyAga2V5OiB0
cnVlLAorICByZWY6IHRydWUsCisgIF9fc2VsZjogdHJ1ZSwKKyAgX19zb3VyY2U6IHRydWUKK307
CisKK3ZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5n
U2hvd247CisKK2Z1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykgeworICBpZiAoImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29u
ZmlnLCAncmVmJykpIHsKKyAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDsKKyAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVy
LmlzUmVhY3RXYXJuaW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9
CisgIH0KKyAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24g
aGFzVmFsaWRLZXkoY29uZmlnKSB7CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicpIHsKKyAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkgeworICAg
ICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAn
a2V5JykuZ2V0OworICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gY29u
ZmlnLmtleSAhPT0gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2Fybmlu
Z0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHsKKyAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tl
eSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7
CisgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7CisgICAgICAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXM6IGBrZXlgIGlzIG5v
dCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZp
bmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAn
dmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBh
IGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL2ZiLm1lL3JlYWN0LXNwZWNpYWwtcHJvcHMp
JywgZGlzcGxheU5hbWUpIDogdm9pZCAwOworICAgIH0KKyAgfTsKKyAgd2FybkFib3V0QWNjZXNz
aW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBy
b3BzLCAna2V5JywgeworICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LAorICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICB9KTsKK30KKworZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdH
ZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7CisgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYg
PSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikgewor
ICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlOworICAgICAgImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3Qg
YSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5l
ZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3Zh
bHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBk
aWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScs
IGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9CisgIH07CisgIHdhcm5BYm91dEFjY2Vzc2lu
Z1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9w
cywgJ3JlZicsIHsKKyAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZiwKKyAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgfSk7Cit9CisKKy8qKgorICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRl
IGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG8KKyAqIHRoZSBj
bGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0
YW5jZW9mIGNoZWNrCisgKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBh
Z2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVjaworICogaWYgc29tZXRo
aW5nIGlzIGEgUmVhY3QgRWxlbWVudC4KKyAqCisgKiBAcGFyYW0geyp9IHR5cGUKKyAqIEBwYXJh
bSB7Kn0ga2V5CisgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZgorICogQHBhcmFtIHsqfSBz
ZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlz
CisgKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQg
aXMgY2FsbGVkLCBzbyB0aGF0IHdlCisgKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9m
IG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvdworICogZnVuY3Rpb25z
LCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2ls
bCBiZSBubworICogY2hhbmdlIGluIGJlaGF2aW9yLgorICogQHBhcmFtIHsqfSBzb3VyY2UgQW4g
YW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpCisg
KiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0
aW9uLgorICogQHBhcmFtIHsqfSBvd25lcgorICogQHBhcmFtIHsqfSBwcm9wcworICogQGludGVy
bmFsCisgKi8KK3ZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNl
bGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7CisgIHZhciBlbGVtZW50ID0geworICAgIC8vIFRo
aXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVt
ZW50CisgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSwKKworICAgIC8vIEJ1aWx0LWlu
IHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnQKKyAgICB0eXBlOiB0eXBlLAor
ICAgIGtleToga2V5LAorICAgIHJlZjogcmVmLAorICAgIHByb3BzOiBwcm9wcywKKworICAgIC8v
IFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1l
bnQuCisgICAgX293bmVyOiBvd25lcgorICB9OworCisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicpIHsKKyAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBt
dXRhdGl2ZS4gV2UgcHV0IGl0IG9uCisgICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBz
byB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC4KKyAgICAvLyBUaGlzIGNhbiBi
ZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluCisg
ICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuCisgICAgZWxlbWVu
dC5fc3RvcmUgPSB7fTsKKworICAgIC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMg
ZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlCisgICAgLy8gdGhlIHZhbGlkYXRp
b24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZAorICAg
IC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRl
c3QgZnJhbWV3b3JrCisgICAgLy8gaWdub3JlcyBpdC4KKyAgICBpZiAoY2FuRGVmaW5lUHJvcGVy
dHkpIHsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlk
YXRlZCcsIHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJs
ZTogZmFsc2UsCisgICAgICAgIHdyaXRhYmxlOiB0cnVlLAorICAgICAgICB2YWx1ZTogZmFsc2UK
KyAgICAgIH0pOworICAgICAgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0
aWVzLgorICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHsKKyAg
ICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisg
ICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IHNlbGYKKyAgICAgIH0pOwor
ICAgICAgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hv
dWxkIGJlIGNvbnNpZGVyZWQKKyAgICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFu
ZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLgorICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywgeworICAgICAgICBjb25maWd1cmFibGU6
IGZhbHNlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgd3JpdGFibGU6IGZh
bHNlLAorICAgICAgICB2YWx1ZTogc291cmNlCisgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAg
ICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gZmFsc2U7CisgICAgICBlbGVtZW50Ll9zZWxm
ID0gc2VsZjsKKyAgICAgIGVsZW1lbnQuX3NvdXJjZSA9IHNvdXJjZTsKKyAgICB9CisgICAgaWYg
KE9iamVjdC5mcmVlemUpIHsKKyAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7Cisg
ICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpOworICAgIH0KKyAgfQorCisgIHJldHVybiBlbGVt
ZW50OworfTsKKworLyoqCisgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQg
b2YgdGhlIGdpdmVuIHR5cGUuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVh
Y3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlZWxlbWVudAorICovCitSZWFj
dEVsZW1lbnQuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIGNoaWxkcmVu
KSB7CisgIHZhciBwcm9wTmFtZTsKKworICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVk
CisgIHZhciBwcm9wcyA9IHt9OworCisgIHZhciBrZXkgPSBudWxsOworICB2YXIgcmVmID0gbnVs
bDsKKyAgdmFyIHNlbGYgPSBudWxsOworICB2YXIgc291cmNlID0gbnVsbDsKKworICBpZiAoY29u
ZmlnICE9IG51bGwpIHsKKyAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkgeworICAgICAgcmVm
ID0gY29uZmlnLnJlZjsKKyAgICB9CisgICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHsKKyAg
ICAgIGtleSA9ICcnICsgY29uZmlnLmtleTsKKyAgICB9CisKKyAgICBzZWxmID0gY29uZmlnLl9f
c2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NlbGY7CisgICAgc291cmNlID0g
Y29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc291cmNlOwor
ICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmpl
Y3QKKyAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykgeworICAgICAgaWYgKGhhc093blByb3Bl
cnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3Bl
cnR5KHByb3BOYW1lKSkgeworICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5h
bWVdOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRo
YW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG8KKyAgLy8gdGhl
IG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuCisgIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFy
Z3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHsKKyAgICBw
cm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4g
MSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykgeworICAgICAgY2hpbGRBcnJh
eVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAgfQorICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7CisgICAgICAgIE9i
amVjdC5mcmVlemUoY2hpbGRBcnJheSk7CisgICAgICB9CisgICAgfQorICAgIHByb3BzLmNoaWxk
cmVuID0gY2hpbGRBcnJheTsKKyAgfQorCisgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcworICBp
ZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykgeworICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0
eXBlLmRlZmF1bHRQcm9wczsKKyAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykgewor
ICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHByb3Bz
W3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07CisgICAgICB9CisgICAgfQorICB9
CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBpZiAoa2V5IHx8
IHJlZikgeworICAgICAgaWYgKHR5cGVvZiBwcm9wcy4kJHR5cGVvZiA9PT0gJ3VuZGVmaW5lZCcg
fHwgcHJvcHMuJCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkgeworICAgICAgICB2YXIg
ZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5h
bWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7CisgICAgICAgIGlmIChrZXkpIHsK
KyAgICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUp
OworICAgICAgICB9CisgICAgICAgIGlmIChyZWYpIHsKKyAgICAgICAgICBkZWZpbmVSZWZQcm9w
V2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICB9CisgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNv
dXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpOworfTsKKworLyoqCisgKiBS
ZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0
eXBlLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxl
dmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWZhY3RvcnkKKyAqLworUmVhY3RFbGVtZW50LmNyZWF0
ZUZhY3RvcnkgPSBmdW5jdGlvbiAodHlwZSkgeworICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVu
dC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7CisgIC8vIEV4cG9zZSB0aGUgdHlwZSBv
biB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZQorICAvLyBl
YXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gYDxGb28gLz4udHlwZSA9PT0gRm9vYC4K
KyAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBt
YXkgbm90IGJlIHRoZSBmdW5jdGlvbgorICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFu
ZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci4KKyAgLy8gTGVnYWN5IGhvb2sgVE9E
TzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkCisgIGZhY3RvcnkudHlwZSA9IHR5cGU7CisgIHJl
dHVybiBmYWN0b3J5OworfTsKKworUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleSA9IGZ1
bmN0aW9uIChvbGRFbGVtZW50LCBuZXdLZXkpIHsKKyAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVs
ZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50
Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50
LnByb3BzKTsKKworICByZXR1cm4gbmV3RWxlbWVudDsKK307CisKKy8qKgorICogQ2xvbmUgYW5k
IHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcg
cG9pbnQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3At
bGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2xvbmVlbGVtZW50CisgKi8KK1JlYWN0RWxlbWVudC5jbG9u
ZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikgeworICB2YXIg
cHJvcE5hbWU7CisKKyAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZAorICB2YXIgcHJvcHMg
PSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsKKworICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUg
ZXh0cmFjdGVkCisgIHZhciBrZXkgPSBlbGVtZW50LmtleTsKKyAgdmFyIHJlZiA9IGVsZW1lbnQu
cmVmOworICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVk
LgorICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7CisgIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQg
c2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGEKKyAgLy8g
dHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIg
aW5kaWNhdG9yIG9mIHRoZQorICAvLyB0cnVlIG93bmVyLgorICB2YXIgc291cmNlID0gZWxlbWVu
dC5fc291cmNlOworCisgIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlz
IG92ZXJyaWRkZW4KKyAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7CisKKyAgaWYgKGNvbmZp
ZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHsKKyAgICAgIC8vIFNp
bGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LgorICAgICAgcmVmID0gY29uZmln
LnJlZjsKKyAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDsKKyAgICB9Cisg
ICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHsKKyAgICAgIGtleSA9ICcnICsgY29uZmlnLmtl
eTsKKyAgICB9CisKKyAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGlu
ZyBwcm9wcworICAgIHZhciBkZWZhdWx0UHJvcHM7CisgICAgaWYgKGVsZW1lbnQudHlwZSAmJiBl
bGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7CisgICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50
LnR5cGUuZGVmYXVsdFByb3BzOworICAgIH0KKyAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykg
eworICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJF
U0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkgeworICAgICAgICBpZiAoY29u
ZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzCisgICAgICAgICAgcHJvcHNb
cHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdOworICAgICAgICB9Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUg
YXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250bworICAvLyB0aGUgbmV3bHkg
YWxsb2NhdGVkIHByb3BzIG9iamVjdC4KKyAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRz
Lmxlbmd0aCAtIDI7CisgIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkgeworICAgIHByb3BzLmNo
aWxkcmVuID0gY2hpbGRyZW47CisgIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7Cisg
ICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7CisgICAgICBjaGlsZEFycmF5W2ldID0g
YXJndW1lbnRzW2kgKyAyXTsKKyAgICB9CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5
OworICB9CisKKyAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBz
ZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7Cit9OworCisvKioKKyAqIFZlcmlmaWVzIHRoZSBv
YmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIu
aW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuaXN2YWxpZGVsZW1lbnQKKyAq
IEBwYXJhbSB7P29iamVjdH0gb2JqZWN0CisgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBv
YmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LgorICogQGZpbmFsCisgKi8KK1JlYWN0RWxlbWVu
dC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgcmV0dXJuIHR5cGVvZiBv
YmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2Yg
PT09IFJFQUNUX0VMRU1FTlRfVFlQRTsKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVt
ZW50OworfSx7IjE0IjoxNCwiMTciOjE3LCIzMyI6MzMsIjQ5Ijo0OSwiNTAiOjUwfV0sMTc6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNC1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFn
IHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbAorLy8g
bm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNl
LgorCit2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9u
JyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJvbFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAw
eGVhYzc7CisKK21vZHVsZS5leHBvcnRzID0gUkVBQ1RfRUxFTUVOVF9UWVBFOworfSx7fV0sMTg6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
NC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKy8qKgorICogUmVhY3RFbGVtZW50VmFsaWRhdG9yIHByb3ZpZGVzIGEgd3Jh
cHBlciBhcm91bmQgYSBlbGVtZW50IGZhY3RvcnkKKyAqIHdoaWNoIHZhbGlkYXRlcyB0aGUgcHJv
cHMgcGFzc2VkIHRvIHRoZSBlbGVtZW50LiBUaGlzIGlzIGludGVuZGVkIHRvIGJlCisgKiB1c2Vk
IG9ubHkgaW4gREVWIGFuZCBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHN0YXRpYyB0eXBlIGNoZWNr
ZXIgZm9yIGxhbmd1YWdlcworICogdGhhdCBzdXBwb3J0IGl0LgorICovCisKKyd1c2Ugc3RyaWN0
JzsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXygxNCk7Cit2YXIgUmVhY3RDb21w
b25lbnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8o
MTYpOworCit2YXIgY2hlY2tSZWFjdFR5cGVTcGVjID0gX2RlcmVxXygzNCk7CisKK3ZhciBjYW5E
ZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMzMpOwordmFyIGdldEl0ZXJhdG9yRm4gPSBfZGVyZXFf
KDM2KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK2Z1bmN0aW9uIGdldERlY2xhcmF0
aW9uRXJyb3JBZGRlbmR1bSgpIHsKKyAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHsK
KyAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpOworICAg
IGlmIChuYW1lKSB7CisgICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBg
JyArIG5hbWUgKyAnYC4nOworICAgIH0KKyAgfQorICByZXR1cm4gJyc7Cit9CisKK2Z1bmN0aW9u
IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcykgeworICBpZiAoZWxlbWVu
dFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnRQ
cm9wcy5fX3NvdXJjZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIHNvdXJjZSA9IGVsZW1lbnRQ
cm9wcy5fX3NvdXJjZTsKKyAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFj
ZSgvXi4qW1xcXC9dLywgJycpOworICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1i
ZXI7CisgICAgcmV0dXJuICcgQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyAr
IGxpbmVOdW1iZXIgKyAnLic7CisgIH0KKyAgcmV0dXJuICcnOworfQorCisvKioKKyAqIFdhcm4g
aWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hp
bGRyZW4gb3IKKyAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRv
IGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlbgorICogdXBkYXRlcy4KKyAqLwordmFyIG93
bmVySGFzS2V5VXNlV2FybmluZyA9IHt9OworCitmdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50
RXJyb3JJbmZvKHBhcmVudFR5cGUpIHsKKyAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9y
QWRkZW5kdW0oKTsKKworICBpZiAoIWluZm8pIHsKKyAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVv
ZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3Bs
YXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTsKKyAgICBpZiAocGFyZW50TmFtZSkgeworICAgICAg
aW5mbyA9ICcgQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8JyArIHBhcmVu
dE5hbWUgKyAnPi4nOworICAgIH0KKyAgfQorICByZXR1cm4gaW5mbzsKK30KKworLyoqCisgKiBX
YXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQg
dG8gaXQuCisgKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBn
cm93IGFuZCBzaHJpbmsgb3IgYmUKKyAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2
ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0bworICogaGF2ZSBhICJr
ZXkiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNv
IGEgd2FybmluZworICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuCisgKgorICogQGludGVybmFs
CisgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMg
YSBrZXkuCisgKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUu
CisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkg
eworICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBl
bGVtZW50LmtleSAhPSBudWxsKSB7CisgICAgcmV0dXJuOworICB9CisgIGVsZW1lbnQuX3N0b3Jl
LnZhbGlkYXRlZCA9IHRydWU7CisKKyAgdmFyIG1lbW9pemVyID0gb3duZXJIYXNLZXlVc2VXYXJu
aW5nLnVuaXF1ZUtleSB8fCAob3duZXJIYXNLZXlVc2VXYXJuaW5nLnVuaXF1ZUtleSA9IHt9KTsK
KworICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRF
cnJvckluZm8ocGFyZW50VHlwZSk7CisgIGlmIChtZW1vaXplcltjdXJyZW50Q29tcG9uZW50RXJy
b3JJbmZvXSkgeworICAgIHJldHVybjsKKyAgfQorICBtZW1vaXplcltjdXJyZW50Q29tcG9uZW50
RXJyb3JJbmZvXSA9IHRydWU7CisKKyAgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0
aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGEKKyAgLy8gcHJvcGVy
dHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxl
IGZvcgorICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuCisgIHZhciBjaGlsZE93bmVyID0gJyc7Cisg
IGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFj
dEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQg
b3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuCisgICAgY2hpbGRPd25lciA9ICcgSXQgd2Fz
IHBhc3NlZCBhIGNoaWxkIGZyb20gJyArIGVsZW1lbnQuX293bmVyLmdldE5hbWUoKSArICcuJzsK
KyAgfQorCisgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2Us
ICdFYWNoIGNoaWxkIGluIGFuIGFycmF5IG9yIGl0ZXJhdG9yIHNob3VsZCBoYXZlIGEgdW5pcXVl
ICJrZXkiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5
cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4lcycsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNo
aWxkT3duZXIsIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW0o
ZWxlbWVudCkpIDogdm9pZCAwOworfQorCisvKioKKyAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1l
bnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW4KKyAqIGFycmF5
IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3Qg
bGl0ZXJhbAorICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuCisgKgorICogQGludGVybmFsCisg
KiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkg
dHlwZS4KKyAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS4KKyAq
LworZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkgeworICBpZiAo
dHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7CisgICAgcmV0dXJuOworICB9CisgIGlmIChBcnJh
eS5pc0FycmF5KG5vZGUpKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsg
aSsrKSB7CisgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldOworICAgICAgaWYgKFJlYWN0RWxlbWVu
dC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHsKKyAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShj
aGlsZCwgcGFyZW50VHlwZSk7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgaWYgKFJlYWN0RWxl
bWVudC5pc1ZhbGlkRWxlbWVudChub2RlKSkgeworICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFz
c2VkIGluIGEgdmFsaWQgbG9jYXRpb24uCisgICAgaWYgKG5vZGUuX3N0b3JlKSB7CisgICAgICBu
b2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlOworICAgIH0KKyAgfSBlbHNlIGlmIChub2RlKSB7
CisgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpOworICAgIC8vIEVudHJ5
IGl0ZXJhdG9ycyBwcm92aWRlIGltcGxpY2l0IGtleXMuCisgICAgaWYgKGl0ZXJhdG9yRm4pIHsK
KyAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHsKKyAgICAgICAgdmFyIGl0
ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpOworICAgICAgICB2YXIgc3RlcDsKKyAgICAg
ICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAgICAgIGlm
IChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHsKKyAgICAgICAgICAg
IHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8qKgorICogR2l2ZW4gYW4g
ZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVm
aW5pdGlvbiwKKyAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLgorICoKKyAqIEBwYXJhbSB7UmVhY3RF
bGVtZW50fSBlbGVtZW50CisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQp
IHsKKyAgdmFyIGNvbXBvbmVudENsYXNzID0gZWxlbWVudC50eXBlOworICBpZiAodHlwZW9mIGNv
bXBvbmVudENsYXNzICE9PSAnZnVuY3Rpb24nKSB7CisgICAgcmV0dXJuOworICB9CisgIHZhciBu
YW1lID0gY29tcG9uZW50Q2xhc3MuZGlzcGxheU5hbWUgfHwgY29tcG9uZW50Q2xhc3MubmFtZTsK
KyAgaWYgKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcykgeworICAgIGNoZWNrUmVhY3RUeXBlU3Bl
Yyhjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwg
ZWxlbWVudCwgbnVsbCk7CisgIH0KKyAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcy5nZXREZWZh
dWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHsKKyAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicgPyB3YXJuaW5nKGNvbXBvbmVudENsYXNzLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xh
c3NBcHByb3ZlZCwgJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFj
dC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFt
ZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKSA6IHZvaWQgMDsKKyAgfQorfQorCit2YXIgUmVh
Y3RFbGVtZW50VmFsaWRhdG9yID0geworCisgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh0eXBl
LCBwcm9wcywgY2hpbGRyZW4pIHsKKyAgICB2YXIgdmFsaWRUeXBlID0gdHlwZW9mIHR5cGUgPT09
ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nOworICAgIC8vIFdlIHdhcm4g
aW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0
aW9uIHRvCisgICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGlu
IHJlbmRlci4KKyAgICBpZiAoIXZhbGlkVHlwZSkgeworICAgICAgaWYgKHR5cGVvZiB0eXBlICE9
PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykgeworICAgICAgICB2YXIg
aW5mbyA9ICcnOworICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBl
ID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0
aCA9PT0gMCkgeworICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBv
cnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgJ2l0XCdzIGRlZmluZWQgaW4uJzsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9y
QWRkZW5kdW0ocHJvcHMpOworICAgICAgICBpZiAoc291cmNlSW5mbykgeworICAgICAgICAgIGlu
Zm8gKz0gc291cmNlSW5mbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpbmZvICs9IGdl
dERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpOworICAgICAgICB9CisKKyAgICAgICAgaW5mbyAr
PSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKCk7CisKKyAg
ICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Jl
YWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAo
Zm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNv
bXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZSA9PSBudWxsID8g
dHlwZSA6IHR5cGVvZiB0eXBlLCBpbmZvKSA6IHZvaWQgMDsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7CisKKyAgICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBv
ciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLgorICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVu
IHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC4KKyAgICBp
ZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAg
ICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBr
ZXkgdmFsaWRhdGlvbiBsb2dpYworICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9m
dW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy4KKyAgICAvLyBXZSBk
b24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHBy
b2QuCisgICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2Ug
YW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXMKKyAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5n
cyB3aWxsIGFwcGVhci4pCisgICAgaWYgKHZhbGlkVHlwZSkgeworICAgICAgZm9yICh2YXIgaSA9
IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFsaWRhdGVDaGlsZEtl
eXMoYXJndW1lbnRzW2ldLCB0eXBlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YWxpZGF0ZVBy
b3BUeXBlcyhlbGVtZW50KTsKKworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGNyZWF0
ZUZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlKSB7CisgICAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBS
ZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUpOworICAg
IC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZAorICAgIHZhbGlk
YXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICAgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywgeworICAgICAgICAg
IGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0Zh
Y3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAn
YmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKSA6IHZvaWQgMDsKKyAgICAgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHsKKyAgICAgICAgICAgICAg
dmFsdWU6IHR5cGUKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHR5cGU7Cisg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFs
aWRhdGVkRmFjdG9yeTsKKyAgfSwKKworICBjbG9uZUVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50
LCBwcm9wcywgY2hpbGRyZW4pIHsKKyAgICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudC5j
bG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICBmb3IgKHZhciBpID0gMjsg
aSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJn
dW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpOworICAgIH0KKyAgICB2YWxpZGF0ZVByb3BUeXBl
cyhuZXdFbGVtZW50KTsKKyAgICByZXR1cm4gbmV3RWxlbWVudDsKKyAgfQorCit9OworCittb2R1
bGUuZXhwb3J0cyA9IFJlYWN0RWxlbWVudFZhbGlkYXRvcjsKK30seyIxMiI6MTIsIjE0IjoxNCwi
MTYiOjE2LCIzMyI6MzMsIjM0IjozNCwiMzYiOjM2LCI0OSI6NDl9XSwxOTpbZnVuY3Rpb24oX2Rl
cmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKwor
J3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFy
IFJlYWN0Q2hpbGRyZW4gPSBfZGVyZXFfKDkpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8o
MTYpOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJlcV8oNDUpOwordmFyIGludmFyaWFudCA9
IF9kZXJlcV8oNDcpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKworLyoqCisgKiBXZSB1
c2VkIHRvIGFsbG93IGtleWVkIG9iamVjdHMgdG8gc2VydmUgYXMgYSBjb2xsZWN0aW9uIG9mIFJl
YWN0RWxlbWVudHMsCisgKiBvciBuZXN0ZWQgc2V0cy4gVGhpcyBhbGxvd2VkIHVzIGEgd2F5IHRv
IGV4cGxpY2l0bHkga2V5IGEgc2V0IG9yIGZyYWdtZW50IG9mCisgKiBjb21wb25lbnRzLiBUaGlz
IGlzIG5vdyBiZWluZyByZXBsYWNlZCB3aXRoIGFuIG9wYXF1ZSBkYXRhIHN0cnVjdHVyZS4KKyAq
IFRoZSB1cGdyYWRlIHBhdGggaXMgdG8gY2FsbCBSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQo
eyBrZXk6IHZhbHVlIH0pIHRvCisgKiBjcmVhdGUgYSBrZXllZCBmcmFnbWVudC4gVGhlIHJlc3Vs
dGluZyBkYXRhIHN0cnVjdHVyZSBpcyBhbiBhcnJheS4KKyAqLworCit2YXIgbnVtZXJpY1Byb3Bl
cnR5UmVnZXggPSAvXlxkKyQvOworCit2YXIgd2FybmVkQWJvdXROdW1lcmljID0gZmFsc2U7CisK
K3ZhciBSZWFjdEZyYWdtZW50ID0geworICAvKioKKyAgICogV3JhcCBhIGtleWVkIG9iamVjdCBp
biBhbiBvcGFxdWUgcHJveHkgdGhhdCB3YXJucyB5b3UgaWYgeW91IGFjY2VzcyBhbnkKKyAgICog
b2YgaXRzIHByb3BlcnRpZXMuCisgICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9y
ZWFjdC9kb2NzL2NyZWF0ZS1mcmFnbWVudC5odG1sCisgICAqLworICBjcmVhdGU6IGZ1bmN0aW9u
IChvYmplY3QpIHsKKyAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgIW9iamVj
dCB8fCBBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQg
b25seSBhY2NlcHRzIGEgc2luZ2xlIG9iamVjdC4gR290OiAlcycsIG9iamVjdCkgOiB2b2lkIDA7
CisgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKyAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFs
aWRFbGVtZW50KG9iamVjdCkpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcoZmFsc2UsICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQgZG9lcyBub3Qg
YWNjZXB0IGEgUmVhY3RFbGVtZW50ICcgKyAnd2l0aG91dCBhIHdyYXBwZXIgb2JqZWN0LicpIDog
dm9pZCAwOworICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICAhKG9iamVjdC5ub2Rl
VHlwZSAhPT0gMSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQo
ZmFsc2UsICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQoLi4uKTogRW5jb3VudGVyZWQgYW4g
aW52YWxpZCBjaGlsZDsgRE9NIGVsZW1lbnRzIGFyZSBub3QgdmFsaWQgY2hpbGRyZW4gb2YgUmVh
Y3QgY29tcG9uZW50cy4nKSA6IF9wcm9kSW52YXJpYW50KCcwJykgOiB2b2lkIDA7CisKKyAgICB2
YXIgcmVzdWx0ID0gW107CisKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CisgICAgICBp
ZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgIGlmICghd2FybmVk
QWJvdXROdW1lcmljICYmIG51bWVyaWNQcm9wZXJ0eVJlZ2V4LnRlc3Qoa2V5KSkgeworICAgICAg
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFj
dC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQoLi4uKTogQ2hpbGQgb2JqZWN0cyBzaG91bGQgaGF2ZSAn
ICsgJ25vbi1udW1lcmljIGtleXMgc28gb3JkZXJpbmcgaXMgcHJlc2VydmVkLicpIDogdm9pZCAw
OworICAgICAgICAgIHdhcm5lZEFib3V0TnVtZXJpYyA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIFJlYWN0Q2hpbGRyZW4ubWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChvYmpl
Y3Rba2V5XSwgcmVzdWx0LCBrZXksIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCk7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMg
PSBSZWFjdEZyYWdtZW50OworfSx7IjE2IjoxNiwiMzkiOjM5LCI0NSI6NDUsIjQ3Ijo0NywiNDki
OjQ5LCI5Ijo5fV0sMjA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBSZWFj
dExpbmsgZW5jYXBzdWxhdGVzIGEgY29tbW9uIHBhdHRlcm4gaW4gd2hpY2ggYSBjb21wb25lbnQg
d2FudHMgdG8gbW9kaWZ5CisgKiBhIHByb3AgcmVjZWl2ZWQgZnJvbSBpdHMgcGFyZW50LiBSZWFj
dExpbmsgYWxsb3dzIHRoZSBwYXJlbnQgdG8gcGFzcyBkb3duIGEKKyAqIHZhbHVlIGNvdXBsZWQg
d2l0aCBhIGNhbGxiYWNrIHRoYXQsIHdoZW4gaW52b2tlZCwgZXhwcmVzc2VzIGFuIGludGVudCB0
bworICogbW9kaWZ5IHRoYXQgdmFsdWUuIEZvciBleGFtcGxlOgorICoKKyAqIFJlYWN0LmNyZWF0
ZUNsYXNzKHsKKyAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKKyAqICAgICByZXR1
cm4ge3ZhbHVlOiAnJ307CisgKiAgIH0sCisgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgKiAg
ICAgdmFyIHZhbHVlTGluayA9IG5ldyBSZWFjdExpbmsodGhpcy5zdGF0ZS52YWx1ZSwgdGhpcy5f
aGFuZGxlVmFsdWVDaGFuZ2UpOworICogICAgIHJldHVybiA8aW5wdXQgdmFsdWVMaW5rPXt2YWx1
ZUxpbmt9IC8+OworICogICB9LAorICogICBfaGFuZGxlVmFsdWVDaGFuZ2U6IGZ1bmN0aW9uKG5l
d1ZhbHVlKSB7CisgKiAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IG5ld1ZhbHVlfSk7CisgKiAg
IH0KKyAqIH0pOworICoKKyAqIFdlIGhhdmUgcHJvdmlkZWQgc29tZSBzdWdhcnkgbWl4aW5zIHRv
IG1ha2UgdGhlIGNyZWF0aW9uIGFuZAorICogY29uc3VtcHRpb24gb2YgUmVhY3RMaW5rIGVhc2ll
cjsgc2VlIExpbmtlZFZhbHVlVXRpbHMgYW5kIExpbmtlZFN0YXRlTWl4aW4uCisgKi8KKwordmFy
IFJlYWN0ID0gX2RlcmVxXyg1KTsKKworLyoqCisgKiBEZXByZWNhdGVkOiBBbiBhbiBlYXN5IHdh
eSB0byBleHByZXNzIHR3by13YXkgYmluZGluZyB3aXRoIFJlYWN0LiAKKyAqIFNlZSBodHRwczov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3R3by13YXktYmluZGluZy1oZWxwZXJzLmh0
bWwKKyAqCisgKiBAcGFyYW0geyp9IHZhbHVlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxpbmsKKyAq
IEBwYXJhbSB7ZnVuY3Rpb259IHJlcXVlc3RDaGFuZ2UgY2FsbGJhY2sgdG8gcmVxdWVzdCBhIGNo
YW5nZQorICovCitmdW5jdGlvbiBSZWFjdExpbmsodmFsdWUsIHJlcXVlc3RDaGFuZ2UpIHsKKyAg
dGhpcy52YWx1ZSA9IHZhbHVlOworICB0aGlzLnJlcXVlc3RDaGFuZ2UgPSByZXF1ZXN0Q2hhbmdl
OworfQorCisvKioKKyAqIENyZWF0ZXMgYSBQcm9wVHlwZSB0aGF0IGVuZm9yY2VzIHRoZSBSZWFj
dExpbmsgQVBJIGFuZCBvcHRpb25hbGx5IGNoZWNrcyB0aGUKKyAqIHR5cGUgb2YgdGhlIHZhbHVl
IGJlaW5nIHBhc3NlZCBpbnNpZGUgdGhlIGxpbmsuIEV4YW1wbGU6CisgKgorICogTXlDb21wb25l
bnQucHJvcFR5cGVzID0geworICogICB0YWJJbmRleExpbms6IFJlYWN0TGluay5Qcm9wVHlwZXMu
bGluayhSZWFjdC5Qcm9wVHlwZXMubnVtYmVyKQorICogfQorICovCitmdW5jdGlvbiBjcmVhdGVM
aW5rVHlwZUNoZWNrZXIobGlua1R5cGUpIHsKKyAgdmFyIHNoYXBlcyA9IHsKKyAgICB2YWx1ZTog
bGlua1R5cGUgPT09IHVuZGVmaW5lZCA/IFJlYWN0LlByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCA6
IGxpbmtUeXBlLmlzUmVxdWlyZWQsCisgICAgcmVxdWVzdENoYW5nZTogUmVhY3QuUHJvcFR5cGVz
LmZ1bmMuaXNSZXF1aXJlZAorICB9OworICByZXR1cm4gUmVhY3QuUHJvcFR5cGVzLnNoYXBlKHNo
YXBlcyk7Cit9CisKK1JlYWN0TGluay5Qcm9wVHlwZXMgPSB7CisgIGxpbms6IGNyZWF0ZUxpbmtU
eXBlQ2hlY2tlcgorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdExpbms7Cit9LHsiNSI6NX1d
LDIxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0
OSk7CisKK2Z1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7Cisg
IGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICB2YXIgY29uc3RydWN0
b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjsKKyAgICAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEg
bW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlv
dSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBu
by1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxl
ck5hbWUsIGNhbGxlck5hbWUsIGNvbnN0cnVjdG9yICYmIChjb25zdHJ1Y3Rvci5kaXNwbGF5TmFt
ZSB8fCBjb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwOworICB9Cit9
CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUu
CisgKi8KK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHsKKworICAvKioKKyAgICogQ2hlY2tz
IHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLgorICAg
KiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50
IHRvIHRlc3QuCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ug
b3RoZXJ3aXNlLgorICAgKiBAcHJvdGVjdGVkCisgICAqIEBmaW5hbAorICAgKi8KKyAgaXNNb3Vu
dGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0s
CisKKyAgLyoqCisgICAqIEVucXVldWUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQg
YWZ0ZXIgYWxsIHRoZSBwZW5kaW5nIHVwZGF0ZXMKKyAgICogaGF2ZSBwcm9jZXNzZWQuCisgICAq
CisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRv
IHVzZSBhcyBgdGhpc2AgY29udGV4dC4KKyAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNr
IENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisg
IGVucXVldWVDYWxsYmFjazogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge30s
CisKKyAgLyoqCisgICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52
b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgKKyAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoq
bm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uCisgICAqCisgICAqIFlvdSBtYXkgd2FudCB0byBj
YWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGUKKyAg
ICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBj
YWxsZWQuCisgICAqCisgICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRV
cGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFu
ZCBgY29tcG9uZW50RGlkVXBkYXRlYC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBw
dWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAqIEBp
bnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5z
dGFuY2UpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7Cisg
IH0sCisKKyAgLyoqCisgICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2Ug
dGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS4KKyAgICogWW91IHNob3VsZCB0cmVh
dCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLgorICAgKgorICAgKiBUaGVyZSBpcyBubyBndWFy
YW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzbwor
ICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5
IHJldHVybiB0aGUgb2xkIHZhbHVlLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1
YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci4KKyAgICogQHBh
cmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS4KKyAgICogQGludGVybmFsCisg
ICAqLworICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNv
bXBsZXRlU3RhdGUpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0
ZScpOworICB9LAorCisgIC8qKgorICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhp
cyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXMKKyAgICogaW50ZXJuYWwuIFRo
aXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBk
ZWVwCisgICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVu
ZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdAorICAgKiBkdXJpbmcgdGhlIG1lcmdlLgorICAgKgor
ICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0
IHNob3VsZCByZXJlbmRlci4KKyAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0
IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuCisgICAqIEBpbnRlcm5hbAor
ICAgKi8KKyAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRp
YWxTdGF0ZSkgeworICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTsKKyAg
fQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30seyI0OSI6
NDl9XSwyMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFByb3BU
eXBlTG9jYXRpb25OYW1lcyA9IHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0geworICAgIHByb3A6ICdwcm9w
JywKKyAgICBjb250ZXh0OiAnY29udGV4dCcsCisgICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29u
dGV4dCcKKyAgfTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25O
YW1lczsKK30se31dLDIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcmVxdWly
ZSA9IF9kZXJlcV8oMTYpLAorICAgIGlzVmFsaWRFbGVtZW50ID0gX3JlcXVpcmUuaXNWYWxpZEVs
ZW1lbnQ7CisKK3ZhciBmYWN0b3J5ID0gX2RlcmVxXyg1Mik7CisKK21vZHVsZS5leHBvcnRzID0g
ZmFjdG9yeShpc1ZhbGlkRWxlbWVudCk7Cit9LHsiMTYiOjE2LCI1MiI6NTJ9XSwyNDpbZnVuY3Rp
b24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
KiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdT
RUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7Cit9LHt9XSwyNTpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCit2YXIgUmVhY3RDb21w
b25lbnQgPSBfZGVyZXFfKDExKTsKK3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9kZXJlcV8o
MjEpOworCit2YXIgZW1wdHlPYmplY3QgPSBfZGVyZXFfKDQ2KTsKKworLyoqCisgKiBCYXNlIGNs
YXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC4KKyAqLwor
ZnVuY3Rpb24gUmVhY3RQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7Cisg
IC8vIER1cGxpY2F0ZWQgZnJvbSBSZWFjdENvbXBvbmVudC4KKyAgdGhpcy5wcm9wcyA9IHByb3Bz
OworICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OworICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsK
KyAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUg
Z2V0cyBpbmplY3RlZCBieSB0aGUKKyAgLy8gcmVuZGVyZXIuCisgIHRoaXMudXBkYXRlciA9IHVw
ZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7Cit9CisKK2Z1bmN0aW9uIENvbXBvbmVudER1
bW15KCkge30KK0NvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IFJlYWN0Q29tcG9uZW50LnByb3Rv
dHlwZTsKK1JlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXko
KTsKK1JlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWFjdFB1cmVD
b21wb25lbnQ7CisvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0
aG9kcy4KK19hc3NpZ24oUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RDb21wb25l
bnQucHJvdG90eXBlKTsKK1JlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RD
b21wb25lbnQgPSB0cnVlOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHVyZUNvbXBvbmVudDsK
K30seyIxMSI6MTEsIjIxIjoyMSwiNDYiOjQ2LCI1MCI6NTB9XSwyNjpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgUmVhY3RTdGF0ZVNldHRlcnMgPSB7CisgIC8qKgorICAgKiBSZXR1
cm5zIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24sIGFuZCB1c2Vz
IHRoZSByZXN1bHQKKyAgICogb2YgdGhhdCB0byBzZXQgdGhlIGNvbXBvbmVudCdzIHN0YXRlLgor
ICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50fSBjb21wb25lbnQKKyAg
ICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1JldHVybmluZ1N0YXRlIFJldHVybmVkIGNhbGxiYWNr
IHVzZXMgdGhpcyB0bworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGV0ZXJtaW5lIGhvdyB0byB1cGRhdGUgc3RhdGUuCisgICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBj
YWxsYmFjayB0aGF0IHdoZW4gaW52b2tlZCB1c2VzIGZ1bmNSZXR1cm5pbmdTdGF0ZSB0bworICAg
KiAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZCB0aGUgb2JqZWN0IGxpdGVyYWwgdG8gc2V0
U3RhdGUuCisgICAqLworICBjcmVhdGVTdGF0ZVNldHRlcjogZnVuY3Rpb24gKGNvbXBvbmVudCwg
ZnVuY1JldHVybmluZ1N0YXRlKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBl
LCBmKSB7CisgICAgICB2YXIgcGFydGlhbFN0YXRlID0gZnVuY1JldHVybmluZ1N0YXRlLmNhbGwo
Y29tcG9uZW50LCBhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICAgIGlmIChwYXJ0aWFsU3RhdGUpIHsK
KyAgICAgICAgY29tcG9uZW50LnNldFN0YXRlKHBhcnRpYWxTdGF0ZSk7CisgICAgICB9CisgICAg
fTsKKyAgfSwKKworICAvKioKKyAgICogUmV0dXJucyBhIHNpbmdsZS1hcmd1bWVudCBjYWxsYmFj
ayB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBhIHNpbmdsZQorICAgKiBrZXkgaW4gdGhlIGNv
bXBvbmVudCdzIHN0YXRlLgorICAgKgorICAgKiBOb3RlOiB0aGlzIGlzIG1lbW9pemVkIGZ1bmN0
aW9uLCB3aGljaCBtYWtlcyBpdCBpbmV4cGVuc2l2ZSB0byBjYWxsLgorICAgKgorICAgKiBAcGFy
YW0ge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50fSBjb21wb25lbnQKKyAgICogQHBhcmFtIHtzdHJp
bmd9IGtleSBUaGUga2V5IGluIHRoZSBzdGF0ZSB0aGF0IHlvdSBzaG91bGQgdXBkYXRlLgorICAg
KiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgb2YgMSBhcmd1bWVudCB3aGljaCBjYWxscyBz
ZXRTdGF0ZSgpIHdpdGgKKyAgICogICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBrZXlO
YW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudC4KKyAgICovCisgIGNyZWF0ZVN0YXRlS2V5U2V0dGVy
OiBmdW5jdGlvbiAoY29tcG9uZW50LCBrZXkpIHsKKyAgICAvLyBNZW1vaXplIHRoZSBzZXR0ZXJz
LgorICAgIHZhciBjYWNoZSA9IGNvbXBvbmVudC5fX2tleVNldHRlcnMgfHwgKGNvbXBvbmVudC5f
X2tleVNldHRlcnMgPSB7fSk7CisgICAgcmV0dXJuIGNhY2hlW2tleV0gfHwgKGNhY2hlW2tleV0g
PSBjcmVhdGVTdGF0ZUtleVNldHRlcihjb21wb25lbnQsIGtleSkpOworICB9Cit9OworCitmdW5j
dGlvbiBjcmVhdGVTdGF0ZUtleVNldHRlcihjb21wb25lbnQsIGtleSkgeworICAvLyBQYXJ0aWFs
IHN0YXRlIGlzIGFsbG9jYXRlZCBvdXRzaWRlIG9mIHRoZSBmdW5jdGlvbiBjbG9zdXJlIHNvIGl0
IGNhbiBiZQorICAvLyByZXVzZWQgd2l0aCBldmVyeSBjYWxsLCBhdm9pZGluZyBtZW1vcnkgYWxs
b2NhdGlvbiB3aGVuIHRoaXMgZnVuY3Rpb24KKyAgLy8gaXMgY2FsbGVkLgorICB2YXIgcGFydGlh
bFN0YXRlID0ge307CisgIHJldHVybiBmdW5jdGlvbiBzdGF0ZUtleVNldHRlcih2YWx1ZSkgewor
ICAgIHBhcnRpYWxTdGF0ZVtrZXldID0gdmFsdWU7CisgICAgY29tcG9uZW50LnNldFN0YXRlKHBh
cnRpYWxTdGF0ZSk7CisgIH07Cit9CisKK1JlYWN0U3RhdGVTZXR0ZXJzLk1peGluID0geworICAv
KioKKyAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0
aW9uLCBhbmQgdXNlcyB0aGUgcmVzdWx0CisgICAqIG9mIHRoYXQgdG8gc2V0IHRoZSBjb21wb25l
bnQncyBzdGF0ZS4KKyAgICoKKyAgICogRm9yIGV4YW1wbGUsIHRoZXNlIHN0YXRlbWVudHMgYXJl
IGVxdWl2YWxlbnQ6CisgICAqCisgICAqICAgdGhpcy5zZXRTdGF0ZSh7eDogMX0pOworICAgKiAg
IHRoaXMuY3JlYXRlU3RhdGVTZXR0ZXIoZnVuY3Rpb24oeFZhbHVlKSB7CisgICAqICAgICByZXR1
cm4ge3g6IHhWYWx1ZX07CisgICAqICAgfSkoMSk7CisgICAqCisgICAqIEBwYXJhbSB7ZnVuY3Rp
b259IGZ1bmNSZXR1cm5pbmdTdGF0ZSBSZXR1cm5lZCBjYWxsYmFjayB1c2VzIHRoaXMgdG8KKyAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBob3cgdG8g
dXBkYXRlIHN0YXRlLgorICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgdGhhdCB3aGVu
IGludm9rZWQgdXNlcyBmdW5jUmV0dXJuaW5nU3RhdGUgdG8KKyAgICogICAgICAgICAgICAgICAg
ICAgIGRldGVybWluZWQgdGhlIG9iamVjdCBsaXRlcmFsIHRvIHNldFN0YXRlLgorICAgKi8KKyAg
Y3JlYXRlU3RhdGVTZXR0ZXI6IGZ1bmN0aW9uIChmdW5jUmV0dXJuaW5nU3RhdGUpIHsKKyAgICBy
ZXR1cm4gUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVTZXR0ZXIodGhpcywgZnVuY1JldHVy
bmluZ1N0YXRlKTsKKyAgfSwKKworICAvKioKKyAgICogUmV0dXJucyBhIHNpbmdsZS1hcmd1bWVu
dCBjYWxsYmFjayB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBhIHNpbmdsZQorICAgKiBrZXkg
aW4gdGhlIGNvbXBvbmVudCdzIHN0YXRlLgorICAgKgorICAgKiBGb3IgZXhhbXBsZSwgdGhlc2Ug
c3RhdGVtZW50cyBhcmUgZXF1aXZhbGVudDoKKyAgICoKKyAgICogICB0aGlzLnNldFN0YXRlKHt4
OiAxfSk7CisgICAqICAgdGhpcy5jcmVhdGVTdGF0ZUtleVNldHRlcigneCcpKDEpOworICAgKgor
ICAgKiBOb3RlOiB0aGlzIGlzIG1lbW9pemVkIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBpbmV4
cGVuc2l2ZSB0byBjYWxsLgorICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkg
aW4gdGhlIHN0YXRlIHRoYXQgeW91IHNob3VsZCB1cGRhdGUuCisgICAqIEByZXR1cm4ge2Z1bmN0
aW9ufSBjYWxsYmFjayBvZiAxIGFyZ3VtZW50IHdoaWNoIGNhbGxzIHNldFN0YXRlKCkgd2l0aAor
ICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGtleU5hbWUgYW5kIGNhbGxiYWNr
IGFyZ3VtZW50LgorICAgKi8KKyAgY3JlYXRlU3RhdGVLZXlTZXR0ZXI6IGZ1bmN0aW9uIChrZXkp
IHsKKyAgICByZXR1cm4gUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVLZXlTZXR0ZXIodGhp
cywga2V5KTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFN0YXRlU2V0dGVyczsK
K30se31dLDI3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBmbGF0dGVuQ2hpbGRy
ZW4gPSBfZGVyZXFfKDM1KTsKKwordmFyIFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZyA9IHsK
KyAgLyoqCisgICAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVj
dCBtYXBwaW5nIGtleSB0byBjaGlsZC4gSnVzdAorICAgKiBzaW1wbGUgc3ludGFjdGljIHN1Z2Fy
IGFyb3VuZCBmbGF0dGVuQ2hpbGRyZW4oKS4KKyAgICoKKyAgICogQHBhcmFtIHsqfSBjaGlsZHJl
biBgdGhpcy5wcm9wcy5jaGlsZHJlbmAKKyAgICogQHBhcmFtIHtudW1iZXI9fSBzZWxmRGVidWdJ
RCBPcHRpb25hbCBkZWJ1Z0lEIG9mIHRoZSBjdXJyZW50IGludGVybmFsIGluc3RhbmNlLgorICAg
KiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkCisgICAqLworICBnZXRD
aGlsZE1hcHBpbmc6IGZ1bmN0aW9uIChjaGlsZHJlbiwgc2VsZkRlYnVnSUQpIHsKKyAgICBpZiAo
IWNoaWxkcmVuKSB7CisgICAgICByZXR1cm4gY2hpbGRyZW47CisgICAgfQorCisgICAgaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgcmV0dXJuIGZsYXR0ZW5DaGls
ZHJlbihjaGlsZHJlbiwgc2VsZkRlYnVnSUQpOworICAgIH0KKworICAgIHJldHVybiBmbGF0dGVu
Q2hpbGRyZW4oY2hpbGRyZW4pOworICB9LAorCisgIC8qKgorICAgKiBXaGVuIHlvdSdyZSBhZGRp
bmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0
aGUKKyAgICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3
ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5CisgICAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91
dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzCisgICAqIGFuZCBh
IG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0
aGUgY29ycmVjdAorICAgKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNv
bWUgb2YgdGhlIHV0aWxpdGllcyBpbgorICAgKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlz
IGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdAorICAgKiBkaXJlY3RseSBo
YXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hp
bGRyZW4KKyAgICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuCisgICAqCisgICAqIEBwYXJhbSB7
b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbQorICAgKiBgUmVhY3RU
cmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC4KKyAgICogQHBhcmFtIHtv
YmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tCisgICAqIGBSZWFjdFRy
YW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLgorICAgKiBAcmV0dXJuIHtv
YmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxs
IGtleXMKKyAgICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci4KKyAgICovCisgIG1l
cmdlQ2hpbGRNYXBwaW5nczogZnVuY3Rpb24gKHByZXYsIG5leHQpIHsKKyAgICBwcmV2ID0gcHJl
diB8fCB7fTsKKyAgICBuZXh0ID0gbmV4dCB8fCB7fTsKKworICAgIGZ1bmN0aW9uIGdldFZhbHVl
Rm9yS2V5KGtleSkgeworICAgICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAg
ICAgICByZXR1cm4gbmV4dFtrZXldOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBy
ZXZba2V5XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRg
LCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW4KKyAgICAvLyB0
aGUgY29tYmluZWQgbGlzdAorICAgIHZhciBuZXh0S2V5c1BlbmRpbmcgPSB7fTsKKworICAgIHZh
ciBwZW5kaW5nS2V5cyA9IFtdOworICAgIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikgeworICAg
ICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkocHJldktleSkpIHsKKyAgICAgICAgaWYgKHBlbmRp
bmdLZXlzLmxlbmd0aCkgeworICAgICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBl
bmRpbmdLZXlzOworICAgICAgICAgIHBlbmRpbmdLZXlzID0gW107CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgdmFyIGk7CisgICAgdmFyIGNoaWxkTWFwcGluZyA9IHt9OworICAgIGZvciAo
dmFyIG5leHRLZXkgaW4gbmV4dCkgeworICAgICAgaWYgKG5leHRLZXlzUGVuZGluZy5oYXNPd25Q
cm9wZXJ0eShuZXh0S2V5KSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5k
aW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5
ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldOworICAgICAgICAgIGNoaWxkTWFwcGluZ1tu
ZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRL
ZXkpOworICAgICAgICB9CisgICAgICB9CisgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBn
ZXRWYWx1ZUZvcktleShuZXh0S2V5KTsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBhZGQgdGhl
IGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGAKKyAgICBm
b3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNoaWxkTWFw
cGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGNoaWxkTWFwcGluZzsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9y
dHMgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmc7Cit9LHsiMzUiOjM1fV0sMjg6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgor
ICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gX2RlcmVx
Xyg0NCk7CisKK3ZhciBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSA9IF9kZXJlcV8oMSk7CisK
K3ZhciBlbmRFdmVudHMgPSBbXTsKKworZnVuY3Rpb24gZGV0ZWN0RXZlbnRzKCkgeworICB2YXIg
YW5pbUVuZCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTsKKyAg
dmFyIHRyYW5zRW5kID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQn
KTsKKworICBpZiAoYW5pbUVuZCkgeworICAgIGVuZEV2ZW50cy5wdXNoKGFuaW1FbmQpOworICB9
CisKKyAgaWYgKHRyYW5zRW5kKSB7CisgICAgZW5kRXZlbnRzLnB1c2godHJhbnNFbmQpOworICB9
Cit9CisKK2lmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHsKKyAgZGV0ZWN0RXZl
bnRzKCk7Cit9CisKKy8vIFdlIHVzZSB0aGUgcmF3IHthZGR8cmVtb3ZlfUV2ZW50TGlzdGVuZXIo
KSBjYWxsIGJlY2F1c2UgRXZlbnRMaXN0ZW5lcgorLy8gZG9lcyBub3Qga25vdyBob3cgdG8gcmVt
b3ZlIGV2ZW50IGxpc3RlbmVycyBhbmQgd2UgcmVhbGx5IHNob3VsZAorLy8gY2xlYW4gdXAuIEFs
c28sIHRoZXNlIGV2ZW50cyBhcmUgbm90IHRyaWdnZXJlZCBpbiBvbGRlciBicm93c2VycworLy8g
c28gd2Ugc2hvdWxkIGJlIEEtT0sgaGVyZS4KKworZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihu
b2RlLCBldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIpIHsKKyAgbm9kZS5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpOworfQorCitmdW5jdGlvbiByZW1vdmVF
dmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikgeworICBub2RlLnJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7Cit9CisK
K3ZhciBSZWFjdFRyYW5zaXRpb25FdmVudHMgPSB7CisgIGFkZEVuZEV2ZW50TGlzdGVuZXI6IGZ1
bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7CisgICAgaWYgKGVuZEV2ZW50cy5sZW5ndGgg
PT09IDApIHsKKyAgICAgIC8vIElmIENTUyB0cmFuc2l0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwg
dHJpZ2dlciBhbiAiZW5kIGFuaW1hdGlvbiIKKyAgICAgIC8vIGV2ZW50IGltbWVkaWF0ZWx5Lgor
ICAgICAgd2luZG93LnNldFRpbWVvdXQoZXZlbnRMaXN0ZW5lciwgMCk7CisgICAgICByZXR1cm47
CisgICAgfQorICAgIGVuZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbmRFdmVudCkgeworICAg
ICAgYWRkRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAg
fSk7CisgIH0sCisKKyAgcmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKG5vZGUsIGV2
ZW50TGlzdGVuZXIpIHsKKyAgICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkgeworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZW5kRXZlbnQp
IHsKKyAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIH0pOworICB9Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlv
bkV2ZW50czsKK30seyIxIjoxLCI0NCI6NDR9XSwyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5T
RSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRp
dGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFU
RU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3Qn
OworCit2YXIgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCitmdW5jdGlvbiBfY2xhc3NDYWxsQ2hl
Y2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29u
c3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMg
YSBmdW5jdGlvbiIpOyB9IH0KKworZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4o
c2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlz
IGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTsg
fSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBjYWxs
ID09PSAiZnVuY3Rpb24iKSA/IGNhbGwgOiBzZWxmOyB9CisKK2Z1bmN0aW9uIF9pbmhlcml0cyhz
dWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICJmdW5jdGlv
biIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBl
eHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIgKyB0eXBl
b2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBl
ckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBz
dWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6
IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVj
dC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3Rv
X18gPSBzdXBlckNsYXNzOyB9CisKK3ZhciBSZWFjdCA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RU
cmFuc2l0aW9uQ2hpbGRNYXBwaW5nID0gX2RlcmVxXygyNyk7CisKK3ZhciBwcm9wVHlwZXNGYWN0
b3J5ID0gX2RlcmVxXyg1Mik7Cit2YXIgUHJvcFR5cGVzID0gcHJvcFR5cGVzRmFjdG9yeShSZWFj
dC5pc1ZhbGlkRWxlbWVudCk7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVxXyg0NSk7CisK
Ky8qKgorICogQSBiYXNpcyBmb3IgYW5pbWF0aW9ucy4gV2hlbiBjaGlsZHJlbiBhcmUgZGVjbGFy
YXRpdmVseSBhZGRlZCBvciByZW1vdmVkLAorICogc3BlY2lhbCBsaWZlY3ljbGUgaG9va3MgYXJl
IGNhbGxlZC4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Fu
aW1hdGlvbi5odG1sI2xvdy1sZXZlbC1hcGktcmVhY3R0cmFuc2l0aW9uZ3JvdXAKKyAqLworCit2
YXIgUmVhY3RUcmFuc2l0aW9uR3JvdXAgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkgewor
ICBfaW5oZXJpdHMoUmVhY3RUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpOworCisg
IGZ1bmN0aW9uIFJlYWN0VHJhbnNpdGlvbkdyb3VwKCkgeworICAgIHZhciBfdGVtcCwgX3RoaXMs
IF9yZXQ7CisKKyAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhY3RUcmFuc2l0aW9uR3JvdXAp
OworCisgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShf
bGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3NbX2tleV0g
PSBhcmd1bWVudHNbX2tleV07CisgICAgfQorCisgICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAo
X3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50
LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhp
cyksIF90aGlzLnN0YXRlID0geworICAgICAgLy8gVE9ETzogY2FuIHdlIGdldCB1c2VmdWwgZGVi
dWcgaW5mb3JtYXRpb24gdG8gc2hvdyBhdCB0aGlzIHBvaW50PworICAgICAgY2hpbGRyZW46IFJl
YWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoX3RoaXMucHJvcHMuY2hp
bGRyZW4pCisgICAgfSwgX3RoaXMucGVyZm9ybUFwcGVhciA9IGZ1bmN0aW9uIChrZXkpIHsKKyAg
ICAgIF90aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV0gPSB0cnVlOworCisgICAg
ICB2YXIgY29tcG9uZW50ID0gX3RoaXMucmVmc1trZXldOworCisgICAgICBpZiAoY29tcG9uZW50
LmNvbXBvbmVudFdpbGxBcHBlYXIpIHsKKyAgICAgICAgY29tcG9uZW50LmNvbXBvbmVudFdpbGxB
cHBlYXIoX3RoaXMuX2hhbmRsZURvbmVBcHBlYXJpbmcuYmluZChfdGhpcywga2V5KSk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBfdGhpcy5faGFuZGxlRG9uZUFwcGVhcmluZyhrZXkpOworICAg
ICAgfQorICAgIH0sIF90aGlzLl9oYW5kbGVEb25lQXBwZWFyaW5nID0gZnVuY3Rpb24gKGtleSkg
eworICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsKKyAgICAgIGlmIChjb21w
b25lbnQuY29tcG9uZW50RGlkQXBwZWFyKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnRE
aWRBcHBlYXIoKTsKKyAgICAgIH0KKworICAgICAgZGVsZXRlIF90aGlzLmN1cnJlbnRseVRyYW5z
aXRpb25pbmdLZXlzW2tleV07CisKKyAgICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gUmVh
Y3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyhfdGhpcy5wcm9wcy5jaGls
ZHJlbik7CisKKyAgICAgIGlmICghY3VycmVudENoaWxkTWFwcGluZyB8fCAhY3VycmVudENoaWxk
TWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgIC8vIFRoaXMgd2FzIHJlbW92
ZWQgYmVmb3JlIGl0IGhhZCBmdWxseSBhcHBlYXJlZC4gUmVtb3ZlIGl0LgorICAgICAgICBfdGhp
cy5wZXJmb3JtTGVhdmUoa2V5KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5wZXJmb3JtRW50ZXIg
PSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5
c1trZXldID0gdHJ1ZTsKKworICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsK
KworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsRW50ZXIpIHsKKyAgICAgICAgY29t
cG9uZW50LmNvbXBvbmVudFdpbGxFbnRlcihfdGhpcy5faGFuZGxlRG9uZUVudGVyaW5nLmJpbmQo
X3RoaXMsIGtleSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3RoaXMuX2hhbmRsZURvbmVF
bnRlcmluZyhrZXkpOworICAgICAgfQorICAgIH0sIF90aGlzLl9oYW5kbGVEb25lRW50ZXJpbmcg
PSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICB2YXIgY29tcG9uZW50ID0gX3RoaXMucmVmc1trZXld
OworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRFbnRlcikgeworICAgICAgICBjb21w
b25lbnQuY29tcG9uZW50RGlkRW50ZXIoKTsKKyAgICAgIH0KKworICAgICAgZGVsZXRlIF90aGlz
LmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV07CisKKyAgICAgIHZhciBjdXJyZW50Q2hp
bGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyhf
dGhpcy5wcm9wcy5jaGlsZHJlbik7CisKKyAgICAgIGlmICghY3VycmVudENoaWxkTWFwcGluZyB8
fCAhY3VycmVudENoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgIC8v
IFRoaXMgd2FzIHJlbW92ZWQgYmVmb3JlIGl0IGhhZCBmdWxseSBlbnRlcmVkLiBSZW1vdmUgaXQu
CisgICAgICAgIF90aGlzLnBlcmZvcm1MZWF2ZShrZXkpOworICAgICAgfQorICAgIH0sIF90aGlz
LnBlcmZvcm1MZWF2ZSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIF90aGlzLmN1cnJlbnRseVRy
YW5zaXRpb25pbmdLZXlzW2tleV0gPSB0cnVlOworCisgICAgICB2YXIgY29tcG9uZW50ID0gX3Ro
aXMucmVmc1trZXldOworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsTGVhdmUpIHsK
KyAgICAgICAgY29tcG9uZW50LmNvbXBvbmVudFdpbGxMZWF2ZShfdGhpcy5faGFuZGxlRG9uZUxl
YXZpbmcuYmluZChfdGhpcywga2V5KSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBpcyBzb21ld2hhdCBkYW5nZXJvdXMgYi9jIGl0IGNhbGxzIHNldFN0YXRlKCkK
KyAgICAgICAgLy8gYWdhaW4sIGVmZmVjdGl2ZWx5IG11dGF0aW5nIHRoZSBjb21wb25lbnQgYmVm
b3JlIGFsbCB0aGUgd29yaworICAgICAgICAvLyBpcyBkb25lLgorICAgICAgICBfdGhpcy5faGFu
ZGxlRG9uZUxlYXZpbmcoa2V5KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5faGFuZGxlRG9uZUxl
YXZpbmcgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICB2YXIgY29tcG9uZW50ID0gX3RoaXMucmVm
c1trZXldOworCisgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZExlYXZlKSB7CisgICAg
ICAgIGNvbXBvbmVudC5jb21wb25lbnREaWRMZWF2ZSgpOworICAgICAgfQorCisgICAgICBkZWxl
dGUgX3RoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XTsKKworICAgICAgdmFyIGN1
cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRN
YXBwaW5nKF90aGlzLnByb3BzLmNoaWxkcmVuKTsKKworICAgICAgaWYgKGN1cnJlbnRDaGlsZE1h
cHBpbmcgJiYgY3VycmVudENoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAg
ICAgIC8vIFRoaXMgZW50ZXJlZCBhZ2FpbiBiZWZvcmUgaXQgZnVsbHkgbGVmdC4gQWRkIGl0IGFn
YWluLgorICAgICAgICBfdGhpcy5wZXJmb3JtRW50ZXIoa2V5KTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkgeworICAgICAgICAgIHZhciBu
ZXdDaGlsZHJlbiA9IF9hc3NpZ24oe30sIHN0YXRlLmNoaWxkcmVuKTsKKyAgICAgICAgICBkZWxl
dGUgbmV3Q2hpbGRyZW5ba2V5XTsKKyAgICAgICAgICByZXR1cm4geyBjaGlsZHJlbjogbmV3Q2hp
bGRyZW4gfTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfSwgX3RlbXApLCBfcG9zc2libGVD
b25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7CisgIH0KKworICBSZWFjdFRyYW5zaXRpb25H
cm91cC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2ls
bE1vdW50KCkgeworICAgIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXMgPSB7fTsKKyAg
ICB0aGlzLmtleXNUb0VudGVyID0gW107CisgICAgdGhpcy5rZXlzVG9MZWF2ZSA9IFtdOworICB9
OworCisgIFJlYWN0VHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9
IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkgeworICAgIHZhciBpbml0aWFsQ2hpbGRNYXBw
aW5nID0gdGhpcy5zdGF0ZS5jaGlsZHJlbjsKKyAgICBmb3IgKHZhciBrZXkgaW4gaW5pdGlhbENo
aWxkTWFwcGluZykgeworICAgICAgaWYgKGluaXRpYWxDaGlsZE1hcHBpbmdba2V5XSkgeworICAg
ICAgICB0aGlzLnBlcmZvcm1BcHBlYXIoa2V5KTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAg
UmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMg
PSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykgeworICAgIHZh
ciBuZXh0Q2hpbGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxk
TWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pOworICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0g
dGhpcy5zdGF0ZS5jaGlsZHJlbjsKKworICAgIHRoaXMuc2V0U3RhdGUoeworICAgICAgY2hpbGRy
ZW46IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5tZXJnZUNoaWxkTWFwcGluZ3MocHJldkNo
aWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZykKKyAgICB9KTsKKworICAgIHZhciBrZXk7CisK
KyAgICBmb3IgKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKSB7CisgICAgICB2YXIgaGFzUHJldiA9
IHByZXZDaGlsZE1hcHBpbmcgJiYgcHJldkNoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkp
OworICAgICAgaWYgKG5leHRDaGlsZE1hcHBpbmdba2V5XSAmJiAhaGFzUHJldiAmJiAhdGhpcy5j
dXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldKSB7CisgICAgICAgIHRoaXMua2V5c1RvRW50
ZXIucHVzaChrZXkpOworICAgICAgfQorICAgIH0KKworICAgIGZvciAoa2V5IGluIHByZXZDaGls
ZE1hcHBpbmcpIHsKKyAgICAgIHZhciBoYXNOZXh0ID0gbmV4dENoaWxkTWFwcGluZyAmJiBuZXh0
Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSk7CisgICAgICBpZiAocHJldkNoaWxkTWFw
cGluZ1trZXldICYmICFoYXNOZXh0ICYmICF0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlz
W2tleV0pIHsKKyAgICAgICAgdGhpcy5rZXlzVG9MZWF2ZS5wdXNoKGtleSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgLy8gSWYgd2Ugd2FudCB0byBzb21lZGF5IGNoZWNrIGZvciByZW9yZGVyaW5n
LCB3ZSBjb3VsZCBkbyBpdCBoZXJlLgorICB9OworCisgIFJlYWN0VHJhbnNpdGlvbkdyb3VwLnBy
b3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUo
KSB7CisgICAgdmFyIGtleXNUb0VudGVyID0gdGhpcy5rZXlzVG9FbnRlcjsKKyAgICB0aGlzLmtl
eXNUb0VudGVyID0gW107CisgICAga2V5c1RvRW50ZXIuZm9yRWFjaCh0aGlzLnBlcmZvcm1FbnRl
cik7CisKKyAgICB2YXIga2V5c1RvTGVhdmUgPSB0aGlzLmtleXNUb0xlYXZlOworICAgIHRoaXMu
a2V5c1RvTGVhdmUgPSBbXTsKKyAgICBrZXlzVG9MZWF2ZS5mb3JFYWNoKHRoaXMucGVyZm9ybUxl
YXZlKTsKKyAgfTsKKworICBSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGUucmVuZGVyID0g
ZnVuY3Rpb24gcmVuZGVyKCkgeworICAgIC8vIFRPRE86IHdlIGNvdWxkIGdldCByaWQgb2YgdGhl
IG5lZWQgZm9yIHRoZSB3cmFwcGVyIG5vZGUKKyAgICAvLyBieSBjbG9uaW5nIGEgc2luZ2xlIGNo
aWxkCisgICAgdmFyIGNoaWxkcmVuVG9SZW5kZXIgPSBbXTsKKyAgICBmb3IgKHZhciBrZXkgaW4g
dGhpcy5zdGF0ZS5jaGlsZHJlbikgeworICAgICAgdmFyIGNoaWxkID0gdGhpcy5zdGF0ZS5jaGls
ZHJlbltrZXldOworICAgICAgaWYgKGNoaWxkKSB7CisgICAgICAgIC8vIFlvdSBtYXkgbmVlZCB0
byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgbGVhdmluZy4KKyAg
ICAgICAgLy8gVGhlIG5vcm1hbCBSZWFjdCB3YXkgdG8gZG8gaXQgd29uJ3Qgd29yayBzaW5jZSB0
aGUgY2hpbGQgd2lsbCBoYXZlCisgICAgICAgIC8vIGFscmVhZHkgYmVlbiByZW1vdmVkLiBJbiBj
YXNlIHlvdSBuZWVkIHRoaXMgYmVoYXZpb3IgeW91IGNhbiBwcm92aWRlCisgICAgICAgIC8vIGEg
Y2hpbGRGYWN0b3J5IGZ1bmN0aW9uIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMg
dGhhdCBhcmUKKyAgICAgICAgLy8gbGVhdmluZy4KKyAgICAgICAgY2hpbGRyZW5Ub1JlbmRlci5w
dXNoKFJlYWN0LmNsb25lRWxlbWVudCh0aGlzLnByb3BzLmNoaWxkRmFjdG9yeShjaGlsZCksIHsg
cmVmOiBrZXksIGtleToga2V5IH0pKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEbyBub3Qg
Zm9yd2FyZCBSZWFjdFRyYW5zaXRpb25Hcm91cCBwcm9wcyB0byBwcmltaXRpdmUgRE9NIG5vZGVz
CisgICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgdGhpcy5wcm9wcyk7CisgICAgZGVsZXRlIHBy
b3BzLnRyYW5zaXRpb25MZWF2ZTsKKyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbk5hbWU7Cisg
ICAgZGVsZXRlIHByb3BzLnRyYW5zaXRpb25BcHBlYXI7CisgICAgZGVsZXRlIHByb3BzLnRyYW5z
aXRpb25FbnRlcjsKKyAgICBkZWxldGUgcHJvcHMuY2hpbGRGYWN0b3J5OworICAgIGRlbGV0ZSBw
cm9wcy50cmFuc2l0aW9uTGVhdmVUaW1lb3V0OworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9u
RW50ZXJUaW1lb3V0OworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9uQXBwZWFyVGltZW91dDsK
KyAgICBkZWxldGUgcHJvcHMuY29tcG9uZW50OworCisgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVs
ZW1lbnQodGhpcy5wcm9wcy5jb21wb25lbnQsIHByb3BzLCBjaGlsZHJlblRvUmVuZGVyKTsKKyAg
fTsKKworICByZXR1cm4gUmVhY3RUcmFuc2l0aW9uR3JvdXA7Cit9KFJlYWN0LkNvbXBvbmVudCk7
CisKK1JlYWN0VHJhbnNpdGlvbkdyb3VwLmRpc3BsYXlOYW1lID0gJ1JlYWN0VHJhbnNpdGlvbkdy
b3VwJzsKK1JlYWN0VHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHsKKyAgY29tcG9uZW50OiBQ
cm9wVHlwZXMuYW55LAorICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jCit9OworUmVhY3RU
cmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0geworICBjb21wb25lbnQ6ICdzcGFuJywKKyAg
Y2hpbGRGYWN0b3J5OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQKK307CisKKwor
bW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25Hcm91cDsKK30seyIyNyI6MjcsIjQ1Ijo0
NSwiNSI6NSwiNTAiOjUwLCI1MiI6NTJ9XSwzMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
Cittb2R1bGUuZXhwb3J0cyA9ICcxNS41LjQnOworfSx7fV0sMzE6W2Z1bmN0aW9uKF9kZXJlcV8s
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9v
aywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2Rl
IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAq
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4g
QW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4g
dGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ug
c3RyaWN0JzsKKwordmFyIExpbmtlZFN0YXRlTWl4aW4gPSBfZGVyZXFfKDMpOwordmFyIFJlYWN0
ID0gX2RlcmVxXyg1KTsKK3ZhciBSZWFjdEFkZG9uc0RPTURlcGVuZGVuY2llcyA9IF9kZXJlcV8o
Nik7Cit2YXIgUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluID0gX2RlcmVxXygxMyk7
Cit2YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAgPSBfZGVyZXFfKDcpOwordmFyIFJlYWN0RnJh
Z21lbnQgPSBfZGVyZXFfKDE5KTsKK3ZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IF9kZXJlcV8o
MjkpOworCit2YXIgc2hhbGxvd0NvbXBhcmUgPSBfZGVyZXFfKDQwKTsKK3ZhciB1cGRhdGUgPSBf
ZGVyZXFfKDQyKTsKKworUmVhY3QuYWRkb25zID0geworICBDU1NUcmFuc2l0aW9uR3JvdXA6IFJl
YWN0Q1NTVHJhbnNpdGlvbkdyb3VwLAorICBMaW5rZWRTdGF0ZU1peGluOiBMaW5rZWRTdGF0ZU1p
eGluLAorICBQdXJlUmVuZGVyTWl4aW46IFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhp
biwKKyAgVHJhbnNpdGlvbkdyb3VwOiBSZWFjdFRyYW5zaXRpb25Hcm91cCwKKworICBjcmVhdGVG
cmFnbWVudDogUmVhY3RGcmFnbWVudC5jcmVhdGUsCisgIHNoYWxsb3dDb21wYXJlOiBzaGFsbG93
Q29tcGFyZSwKKyAgdXBkYXRlOiB1cGRhdGUKK307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicpIHsKKyAgLy8gRm9yIHRoZSBVTUQgYnVpbGQgd2UgZ2V0IHRoZXNlIGxhemls
eSBmcm9tIHRoZSBnbG9iYWwgc2luY2UgdGhleSdyZSB0aWVkCisgIC8vIHRvIHRoZSBET00gcmVu
ZGVyZXIgYW5kIGl0IGhhc24ndCBsb2FkZWQgeWV0LgorICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UmVhY3QuYWRkb25zLCAnUGVyZicsIHsKKyAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgIGdldDog
ZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIFJlYWN0QWRkb25zRE9NRGVwZW5kZW5jaWVzLmdl
dFJlYWN0UGVyZigpOworICAgIH0KKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFj
dC5hZGRvbnMsICdUZXN0VXRpbHMnLCB7CisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBnZXQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBSZWFjdEFkZG9uc0RPTURlcGVuZGVuY2llcy5n
ZXRSZWFjdFRlc3RVdGlscygpOworICAgIH0KKyAgfSk7Cit9CisKK21vZHVsZS5leHBvcnRzID0g
UmVhY3Q7Cit9LHsiMTMiOjEzLCIxOSI6MTksIjI5IjoyOSwiMyI6MywiNDAiOjQwLCI0MiI6NDIs
IjUiOjUsIjYiOjYsIjciOjd9XSwzMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIg
X2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCit2YXIgUmVhY3RXaXRoQWRkb25zID0gX2RlcmVxXygz
MSk7CisKKy8vIGB2ZXJzaW9uYCB3aWxsIGJlIGFkZGVkIGhlcmUgYnkgdGhlIFJlYWN0IG1vZHVs
ZS4KK3ZhciBSZWFjdFdpdGhBZGRvbnNVTURFbnRyeSA9IF9hc3NpZ24oUmVhY3RXaXRoQWRkb25z
LCB7CisgIF9fU0VDUkVUX0lOSkVDVEVEX1JFQUNUX0RPTV9ET19OT1RfVVNFX09SX1lPVV9XSUxM
X0JFX0ZJUkVEOiBudWxsLCAvLyBXaWxsIGJlIGluamVjdGVkIGJ5IFJlYWN0RE9NIFVNRCBidWls
ZC4KKyAgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6
IHsKKyAgICBSZWFjdEN1cnJlbnRPd25lcjogX2RlcmVxXygxNCkKKyAgfQorfSk7CisKK2lmICgi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgX2Fzc2lnbihSZWFjdFdpdGhBZGRv
bnNVTURFbnRyeS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9G
SVJFRCwgeworICAgIC8vIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCBpbiBwcm9kdWN0aW9uLgorICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2s6IF9kZXJlcV8o
MTIpLAorICAgIGdldE5leHREZWJ1Z0lEOiBfZGVyZXFfKDM3KQorICB9KTsKK30KKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdFdpdGhBZGRvbnNVTURFbnRyeTsKK30seyIxMiI6MTIsIjE0IjoxNCwi
MzEiOjMxLCIzNyI6MzcsIjUwIjo1MH1dLDMzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0
JzsKKwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gZmFsc2U7CitpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHRyeSB7CisgICAgLy8gJEZsb3dGaXhNZSBodHRwczovL2dp
dGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1CisgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHt9LCAneCcsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7fSB9KTsKKyAgICBjYW5EZWZpbmVQcm9w
ZXJ0eSA9IHRydWU7CisgIH0gY2F0Y2ggKHgpIHsKKyAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVm
aW5lUHJvcGVydHkKKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGNhbkRlZmluZVByb3BlcnR5
OworfSx7fV0sMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9u
IChwcm9jZXNzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmlj
dCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIgUmVhY3RQcm9w
VHlwZUxvY2F0aW9uTmFtZXMgPSBfZGVyZXFfKDIyKTsKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3Jl
dCA9IF9kZXJlcV8oMjQpOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgd2Fy
bmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vazsKKworaWYg
KHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiAiZGV2ZWxv
cG1lbnQiID09PSAndGVzdCcpIHsKKyAgLy8gVGVtcG9yYXJ5IGhhY2suCisgIC8vIElubGluZSBy
ZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OgorICAvLyBodHRwczovL2dpdGh1Yi5j
b20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDAKKyAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVx
dWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZToKKyAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OAorICBSZWFjdENvbXBvbmVudFRyZWVIb29r
ID0gX2RlcmVxXygxMik7Cit9CisKK3ZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTsKKworLyoq
CisgKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuCisg
KiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25j
ZS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVh
Y3RQcm9wVHlwZQorICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0
IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkCisgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5n
LiAicHJvcCIsICJjb250ZXh0IiwgImNoaWxkIGNvbnRleHQiCisgKiBAcGFyYW0ge3N0cmluZ30g
Y29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLgor
ICogQHBhcmFtIHs/b2JqZWN0fSBlbGVtZW50IFRoZSBSZWFjdCBlbGVtZW50IHRoYXQgaXMgYmVp
bmcgdHlwZS1jaGVja2VkCisgKiBAcGFyYW0gez9udW1iZXJ9IGRlYnVnSUQgVGhlIFJlYWN0IGNv
bXBvbmVudCBpbnN0YW5jZSB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHByaXZhdGUK
KyAqLworZnVuY3Rpb24gY2hlY2tSZWFjdFR5cGVTcGVjKHR5cGVTcGVjcywgdmFsdWVzLCBsb2Nh
dGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCwgZGVidWdJRCkgeworICBmb3IgKHZhciB0eXBl
U3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7CisgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0
eSh0eXBlU3BlY05hbWUpKSB7CisgICAgICB2YXIgZXJyb3I7CisgICAgICAvLyBQcm9wIHR5cGUg
dmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0bwor
ICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9y
ZS4gU28gd2UgbG9nIGl0LgorICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQg
dXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LgorICAgICAgdHJ5IHsKKyAgICAgICAgLy8gVGhpcyBp
cyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBz
YW1lCisgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0
IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS4KKyAgICAgICAgISh0eXBlb2YgdHlwZVNwZWNzW3R5cGVT
cGVjTmFtZV0gPT09ICdmdW5jdGlvbicpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0
IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSBSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50
TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlv
bl0sIHR5cGVTcGVjTmFtZSkgOiBfcHJvZEludmFyaWFudCgnODQnLCBjb21wb25lbnROYW1lIHx8
ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlw
ZVNwZWNOYW1lKSA6IHZvaWQgMDsKKyAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNO
YW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGws
IFJlYWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGVy
cm9yID0gZXg7CisgICAgICB9CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAnJXM6IHR5cGUgc3Bl
Y2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdm
dW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAl
cy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhl
IHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9m
LCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVu
dCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRp
b25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKSA6IHZvaWQgMDsK
KyAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBs
b2dnZWRUeXBlRmFpbHVyZXMpKSB7CisgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1
cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZQorICAgICAgICAv
LyBzYW1lIGVycm9yLgorICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0g
PSB0cnVlOworCisgICAgICAgIHZhciBjb21wb25lbnRTdGFja0luZm8gPSAnJzsKKworICAgICAg
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICAgaWYgKCFS
ZWFjdENvbXBvbmVudFRyZWVIb29rKSB7CisgICAgICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVI
b29rID0gX2RlcmVxXygxMik7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChkZWJ1Z0lEICE9
PSBudWxsKSB7CisgICAgICAgICAgICBjb21wb25lbnRTdGFja0luZm8gPSBSZWFjdENvbXBvbmVu
dFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpOworICAgICAgICAgIH0gZWxz
ZSBpZiAoZWxlbWVudCAhPT0gbnVsbCkgeworICAgICAgICAgICAgY29tcG9uZW50U3RhY2tJbmZv
ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bShlbGVtZW50
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2Nh
dGlvbiwgZXJyb3IubWVzc2FnZSwgY29tcG9uZW50U3RhY2tJbmZvKSA6IHZvaWQgMDsKKyAgICAg
IH0KKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjaGVja1JlYWN0VHlwZVNwZWM7
Cit9KS5jYWxsKHRoaXMsdW5kZWZpbmVkKQorfSx7IjEyIjoxMiwiMjIiOjIyLCIyNCI6MjQsIjM5
IjozOSwiNDciOjQ3LCI0OSI6NDl9XSwzNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0
cyl7CisoZnVuY3Rpb24gKHByb2Nlc3MpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICog
CisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgS2V5RXNjYXBlVXRpbHMgPSBfZGVyZXFfKDIp
OwordmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSBfZGVyZXFfKDQxKTsKK3ZhciB3YXJuaW5nID0g
X2RlcmVxXyg0OSk7CisKK3ZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rOworCitpZiAodHlwZW9m
IHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmICJkZXZlbG9wbWVudCIg
PT09ICd0ZXN0JykgeworICAvLyBUZW1wb3JhcnkgaGFjay4KKyAgLy8gSW5saW5lIHJlcXVpcmVz
IGRvbid0IHdvcmsgd2VsbCB3aXRoIEplc3Q6CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNl
Ym9vay9yZWFjdC9pc3N1ZXMvNzI0MAorICAvLyBSZW1vdmUgdGhlIGlubGluZSByZXF1aXJlcyB3
aGVuIHdlIGRvbid0IG5lZWQgdGhlbSBhbnltb3JlOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20v
ZmFjZWJvb2svcmVhY3QvcHVsbC83MTc4CisgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVy
ZXFfKDEyKTsKK30KKworLyoqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0cmF2ZXJzZUNvbnRleHQg
Q29udGV4dCBwYXNzZWQgdGhyb3VnaCB0cmF2ZXJzYWwuCisgKiBAcGFyYW0gez9SZWFjdENvbXBv
bmVudH0gY2hpbGQgUmVhY3QgY2hpbGQgY29tcG9uZW50LgorICogQHBhcmFtIHshc3RyaW5nfSBu
YW1lIFN0cmluZyBuYW1lIG9mIGtleSBwYXRoIHRvIGNoaWxkLgorICogQHBhcmFtIHtudW1iZXI9
fSBzZWxmRGVidWdJRCBPcHRpb25hbCBkZWJ1Z0lEIG9mIHRoZSBjdXJyZW50IGludGVybmFsIGlu
c3RhbmNlLgorICovCitmdW5jdGlvbiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2
ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCkgeworICAvLyBXZSBmb3VuZCBh
IGNvbXBvbmVudCBpbnN0YW5jZS4KKyAgaWYgKHRyYXZlcnNlQ29udGV4dCAmJiB0eXBlb2YgdHJh
dmVyc2VDb250ZXh0ID09PSAnb2JqZWN0JykgeworICAgIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNv
bnRleHQ7CisgICAgdmFyIGtleVVuaXF1ZSA9IHJlc3VsdFtuYW1lXSA9PT0gdW5kZWZpbmVkOwor
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmICghUmVh
Y3RDb21wb25lbnRUcmVlSG9vaykgeworICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0g
X2RlcmVxXygxMik7CisgICAgICB9CisgICAgICBpZiAoIWtleVVuaXF1ZSkgeworICAgICAgICAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnZmxhdHRlbkNo
aWxkcmVuKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwg
JyArICdgJXNgLiBDaGlsZCBrZXlzIG11c3QgYmUgdW5pcXVlOyB3aGVuIHR3byBjaGlsZHJlbiBz
aGFyZSBhIGtleSwgb25seSAnICsgJ3RoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIHVzZWQuJXMnLCBL
ZXlFc2NhcGVVdGlscy51bmVzY2FwZShuYW1lKSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRT
dGFja0FkZGVuZHVtQnlJRChzZWxmRGVidWdJRCkpIDogdm9pZCAwOworICAgICAgfQorICAgIH0K
KyAgICBpZiAoa2V5VW5pcXVlICYmIGNoaWxkICE9IG51bGwpIHsKKyAgICAgIHJlc3VsdFtuYW1l
XSA9IGNoaWxkOworICAgIH0KKyAgfQorfQorCisvKioKKyAqIEZsYXR0ZW5zIGNoaWxkcmVuIHRo
YXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4gQW55IG51bGwK
KyAqIGNoaWxkcmVuIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgb2JqZWN0
LgorICogQHJldHVybiB7IW9iamVjdH0gZmxhdHRlbmVkIGNoaWxkcmVuIGtleWVkIGJ5IG5hbWUu
CisgKi8KK2Z1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbiwgc2VsZkRlYnVnSUQpIHsK
KyAgaWYgKGNoaWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47CisgIH0KKyAg
dmFyIHJlc3VsdCA9IHt9OworCisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicp
IHsKKyAgICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAodHJhdmVyc2VD
b250ZXh0LCBjaGlsZCwgbmFtZSkgeworICAgICAgcmV0dXJuIGZsYXR0ZW5TaW5nbGVDaGlsZElu
dG9Db250ZXh0KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIHNlbGZEZWJ1Z0lEKTsKKyAg
ICB9LCByZXN1bHQpOworICB9IGVsc2UgeworICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRy
ZW4sIGZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0LCByZXN1bHQpOworICB9CisgIHJldHVy
biByZXN1bHQ7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZmxhdHRlbkNoaWxkcmVuOworfSkuY2Fs
bCh0aGlzLHVuZGVmaW5lZCkKK30seyIxMiI6MTIsIjIiOjIsIjQxIjo0MSwiNDkiOjQ5fV0sMzY6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKiBnbG9iYWwgU3ltYm9sICovCisK
K3ZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5
bWJvbC5pdGVyYXRvcjsKK3ZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsg
Ly8gQmVmb3JlIFN5bWJvbCBzcGVjLgorCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1l
dGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC4KKyAqCisgKiBC
ZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4
dDoKKyAqCisgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUp
OworICogICAgIGlmIChpdGVyYXRvckZuKSB7CisgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVy
YXRvckZuLmNhbGwobXlJdGVyYWJsZSk7CisgKiAgICAgICAuLi4KKyAqICAgICB9CisgKgorICog
QHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlCisgKiBAcmV0dXJuIHs/ZnVuY3Rpb259Cisg
Ki8KK2Z1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkgeworICB2YXIgaXRlcmF0
b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxl
W0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0p
OworICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHsKKyAgICByZXR1cm4g
aXRlcmF0b3JGbjsKKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47Cit9
LHt9XSwzNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBuZXh0RGVidWdJ
RCA9IDE7CisKK2Z1bmN0aW9uIGdldE5leHREZWJ1Z0lEKCkgeworICByZXR1cm4gbmV4dERlYnVn
SUQrKzsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0RGVidWdJRDsKK30se31dLDM4Oltm
dW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMt
cHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2Ug
Zm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRo
aXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMg
Y2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Lgor
ICoKKyAqLworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5
KTsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTYpOworCit2YXIgaW52YXJpYW50ID0g
X2RlcmVxXyg0Nyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xs
ZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlCisgKiBpcyBvbmx5IG9u
ZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5n
aXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4ub25s
eQorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNz
dW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHMKKyAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBl
ciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvCisgKiBhYnN0
cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi4KKyAqCisgKiBA
cGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLgorICog
QHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAg
Y29udGFpbmVkIGluIHRoZQorICogc3RydWN0dXJlLgorICovCitmdW5jdGlvbiBvbmx5Q2hpbGQo
Y2hpbGRyZW4pIHsKKyAgIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5D
aGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBj
aGlsZC4nKSA6IF9wcm9kSW52YXJpYW50KCcxNDMnKSA6IHZvaWQgMDsKKyAgcmV0dXJuIGNoaWxk
cmVuOworfQorCittb2R1bGUuZXhwb3J0cyA9IG9ubHlDaGlsZDsKK30seyIxNiI6MTYsIjM5Ijoz
OSwiNDciOjQ3fV0sMzk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisndXNlIHN0cmljdCc7CisKKy8qKgor
ICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuCisgKiBUaGlz
IGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3Ig
Y29kZSBzeXN0ZW0KKyAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVz
cG9uZGluZyBiYWJlbCBwYXNzLgorICogSXQgYWx3YXlzIHRocm93cy4KKyAqLworCitmdW5jdGlv
biByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkgeworICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMu
bGVuZ3RoIC0gMTsKKworICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyAr
IGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9j
cy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlOworCisgIGZvciAodmFyIGFy
Z0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykgeworICAgIG1lc3NhZ2UgKz0g
JyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pOwor
ICB9CisKKyAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9u
LW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRp
b25hbCBoZWxwZnVsIHdhcm5pbmdzLic7CisKKyAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3Nh
Z2UpOworICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nOworICBlcnJvci5mcmFt
ZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mg
b3duIGZyYW1lCisKKyAgdGhyb3cgZXJyb3I7Cit9CisKK21vZHVsZS5leHBvcnRzID0gcmVhY3RQ
cm9kSW52YXJpYW50OworfSx7fV0sNDA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFy
IHNoYWxsb3dFcXVhbCA9IF9kZXJlcV8oNDgpOworCisvKioKKyAqIERvZXMgYSBzaGFsbG93IGNv
bXBhcmlzb24gZm9yIHByb3BzIGFuZCBzdGF0ZS4KKyAqIFNlZSBSZWFjdENvbXBvbmVudFdpdGhQ
dXJlUmVuZGVyTWl4aW4KKyAqIFNlZSBhbHNvIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3Mvc2hhbGxvdy1jb21wYXJlLmh0bWwKKyAqLworZnVuY3Rpb24gc2hhbGxvd0NvbXBh
cmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7CisgIHJldHVybiAhc2hhbGxvd0Vx
dWFsKGluc3RhbmNlLnByb3BzLCBuZXh0UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwoaW5zdGFuY2Uu
c3RhdGUsIG5leHRTdGF0ZSk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gc2hhbGxvd0NvbXBhcmU7
Cit9LHsiNDgiOjQ4fV0sNDE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9k
SW52YXJpYW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJl
cV8oMTQpOwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IF9kZXJlcV8oMTcpOworCit2YXIgZ2V0
SXRlcmF0b3JGbiA9IF9kZXJlcV8oMzYpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwor
dmFyIEtleUVzY2FwZVV0aWxzID0gX2RlcmVxXygyKTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0
OSk7CisKK3ZhciBTRVBBUkFUT1IgPSAnLic7Cit2YXIgU1VCU0VQQVJBVE9SID0gJzonOworCisv
KioKKyAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUg
aXMgc2hhcmVkIGJldHdlZW4KKyAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQg
ZXh0cmFjdCB0aGlzIHRvIGEKKyAqCisgKi8KKworLyoqCisgKiBUT0RPOiBUZXN0IHRoYXQgYSBz
aW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXkK
KyAqIHBhdHRlcm4uCisgKi8KKwordmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTsKKworLyoq
CisgKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdp
dGhpbiBhIHNldC4KKyAqCisgKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0
IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LgorICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IElu
ZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLgorICogQHJl
dHVybiB7c3RyaW5nfQorICovCitmdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBp
bmRleCkgeworICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhp
cyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZQorICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBv
dGVudGlhbCBmdXR1cmUgRVMgQVBJcy4KKyAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9u
ZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHsKKyAgICAvLyBFeHBs
aWNpdCBrZXkKKyAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkp
OworICB9CisgIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUg
c2V0CisgIHJldHVybiBpbmRleC50b1N0cmluZygzNik7Cit9CisKKy8qKgorICogQHBhcmFtIHs/
Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuCisgKiBAcGFyYW0geyFzdHJpbmd9
IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuCisgKiBAcGFyYW0geyFmdW5j
dGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC4K
KyAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24g
dGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsCisgKiBwcm9jZXNzLgorICogQHJldHVybiB7IW51bWJl
cn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuCisgKi8KK2Z1bmN0aW9u
IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0
cmF2ZXJzZUNvbnRleHQpIHsKKyAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47CisKKyAgaWYg
KHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykgeworICAgIC8vIEFs
bCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLgorICAgIGNoaWxkcmVuID0gbnVs
bDsKKyAgfQorCisgIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8
fCB0eXBlID09PSAnbnVtYmVyJyB8fAorICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJv
bSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplCisgIC8vIHNvbWUgY2hl
Y2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJw
b3Nlcy4KKyAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNU
X0VMRU1FTlRfVFlQRSkgeworICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4s
CisgICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQg
d2FzIHdyYXBwZWQgaW4gYW4gYXJyYXkKKyAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBp
ZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLgorICAgIG5hbWVTb0ZhciA9PT0gJycgPyBT
RVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTsKKyAg
ICByZXR1cm4gMTsKKyAgfQorCisgIHZhciBjaGlsZDsKKyAgdmFyIG5leHROYW1lOworICB2YXIg
c3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJl
bnQgc3VidHJlZS4KKyAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNF
UEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjsKKworICBpZiAoQXJyYXkuaXNBcnJh
eShjaGlsZHJlbikpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
aSsrKSB7CisgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgbmV4dE5hbWUgPSBuZXh0
TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7CisgICAgICBzdWJ0cmVlQ291
bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywg
dHJhdmVyc2VDb250ZXh0KTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgdmFyIGl0ZXJhdG9yRm4g
PSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTsKKyAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAg
dmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTsKKyAgICAgIHZhciBzdGVw
OworICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHsKKyAgICAgICAg
dmFyIGlpID0gMDsKKyAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9u
ZSkgeworICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTsKKyAgICAgICAgICBuZXh0TmFtZSA9
IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTsKKyAgICAgICAg
ICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1l
LCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAg
IHZhciBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyc7CisgICAgICAgICAgaWYgKFJlYWN0Q3Vy
cmVudE93bmVyLmN1cnJlbnQpIHsKKyAgICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbk93bmVy
TmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpOworICAgICAgICAgICAg
aWYgKG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lKSB7CisgICAgICAgICAgICAgIG1hcHNBc0NoaWxk
cmVuQWRkZW5kdW0gPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbWFwc0FzQ2hp
bGRyZW5Pd25lck5hbWUgKyAnYC4nOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGRpZFdhcm5BYm91
dE1hcHMsICdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVk
LiBJdCBpcyBhbiAnICsgJ2V4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3Zl
ZC4gQ29udmVydCBpdCB0byBhICcgKyAnc2VxdWVuY2UgLyBpdGVyYWJsZSBvZiBrZXllZCBSZWFj
dEVsZW1lbnRzIGluc3RlYWQuJXMnLCBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtKSA6IHZvaWQgMDsK
KyAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAv
LyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZh
bHVlcy4KKyAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgewor
ICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7CisgICAgICAgICAgaWYgKGVudHJ5KSB7
CisgICAgICAgICAgICBjaGlsZCA9IGVudHJ5WzFdOworICAgICAgICAgICAgbmV4dE5hbWUgPSBu
ZXh0TmFtZVByZWZpeCArIEtleUVzY2FwZVV0aWxzLmVzY2FwZShlbnRyeVswXSkgKyBTVUJTRVBB
UkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIDApOworICAgICAgICAgICAgc3VidHJlZUNv
dW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ss
IHRyYXZlcnNlQ29udGV4dCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAg
fSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0JykgeworICAgICAgdmFyIGFkZGVuZHVtID0gJyc7
CisgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgIGFk
ZGVuZHVtID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJl
biwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmplY3QgdXNpbmcgY3Jl
YXRlRnJhZ21lbnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1vbnMuJzsKKyAgICAg
ICAgaWYgKGNoaWxkcmVuLl9pc1JlYWN0RWxlbWVudCkgeworICAgICAgICAgIGFkZGVuZHVtID0g
JyBJdCBsb29rcyBsaWtlIHlvdVwncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVhdGVkIGJ5IGEgZGlm
ZmVyZW50ICcgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFrZSBzdXJlIHRvIHVzZSBvbmx5IG9uZSBj
b3B5IG9mIFJlYWN0Lic7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVy
LmN1cnJlbnQpIHsKKyAgICAgICAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJl
bnQuZ2V0TmFtZSgpOworICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICBhZGRlbmR1
bSArPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBT
dHJpbmcoY2hpbGRyZW4pOworICAgICAgIWZhbHNlID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVh
Y3QgY2hpbGQgKGZvdW5kOiAlcykuJXMnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2Jq
ZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2lu
KCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IF9wcm9kSW52YXJpYW50
KCczMScsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0
aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGls
ZHJlblN0cmluZywgYWRkZW5kdW0pIDogdm9pZCAwOworICAgIH0KKyAgfQorCisgIHJldHVybiBz
dWJ0cmVlQ291bnQ7Cit9CisKKy8qKgorICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5
cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0CisgKiBtaWdodCBhbHNv
IGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6CisgKgorICogLSBgdHJhdmVyc2VBbGxD
aGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYAorICogLSBgdHJhdmVyc2VBbGxDaGls
ZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYAorICoKKyAqIFRoZSBgdHJh
dmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJv
dWdoIHRoZQorICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNj
dW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXQKKyAqIHRoZSBjYWxsYmFjayBtaWdodCBm
aW5kIHJlbGV2YW50LgorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUg
b2JqZWN0LgorICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRy
YXZlcnNpbmcgZWFjaCBjaGlsZC4KKyAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250
ZXh0IGZvciB0cmF2ZXJzYWwuCisgKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNo
aWxkcmVuIGluIHRoaXMgc3VidHJlZS4KKyAqLworZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJl
bihjaGlsZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkgeworICBpZiAoY2hpbGRyZW4g
PT0gbnVsbCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hp
bGRyZW5JbXBsKGNoaWxkcmVuLCAnJywgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7Cit9CisK
K21vZHVsZS5leHBvcnRzID0gdHJhdmVyc2VBbGxDaGlsZHJlbjsKK30seyIxNCI6MTQsIjE3Ijox
NywiMiI6MiwiMzYiOjM2LCIzOSI6MzksIjQ3Ijo0NywiNDkiOjQ5fV0sNDI6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Ky8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFy
IF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSksCisgICAgX2Fzc2lnbiA9IF9kZXJlcV8oNTAp
OworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2YXIgaGFzT3duUHJvcGVydHkgPSB7
fS5oYXNPd25Qcm9wZXJ0eTsKKworZnVuY3Rpb24gc2hhbGxvd0NvcHkoeCkgeworICBpZiAoQXJy
YXkuaXNBcnJheSh4KSkgeworICAgIHJldHVybiB4LmNvbmNhdCgpOworICB9IGVsc2UgaWYgKHgg
JiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7CisgICAgcmV0dXJuIF9hc3NpZ24obmV3IHguY29u
c3RydWN0b3IoKSwgeCk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHg7CisgIH0KK30KKwordmFy
IENPTU1BTkRfUFVTSCA9ICckcHVzaCc7Cit2YXIgQ09NTUFORF9VTlNISUZUID0gJyR1bnNoaWZ0
JzsKK3ZhciBDT01NQU5EX1NQTElDRSA9ICckc3BsaWNlJzsKK3ZhciBDT01NQU5EX1NFVCA9ICck
c2V0JzsKK3ZhciBDT01NQU5EX01FUkdFID0gJyRtZXJnZSc7Cit2YXIgQ09NTUFORF9BUFBMWSA9
ICckYXBwbHknOworCit2YXIgQUxMX0NPTU1BTkRTX0xJU1QgPSBbQ09NTUFORF9QVVNILCBDT01N
QU5EX1VOU0hJRlQsIENPTU1BTkRfU1BMSUNFLCBDT01NQU5EX1NFVCwgQ09NTUFORF9NRVJHRSwg
Q09NTUFORF9BUFBMWV07CisKK3ZhciBBTExfQ09NTUFORFNfU0VUID0ge307CisKK0FMTF9DT01N
QU5EU19MSVNULmZvckVhY2goZnVuY3Rpb24gKGNvbW1hbmQpIHsKKyAgQUxMX0NPTU1BTkRTX1NF
VFtjb21tYW5kXSA9IHRydWU7Cit9KTsKKworZnVuY3Rpb24gaW52YXJpYW50QXJyYXlDYXNlKHZh
bHVlLCBzcGVjLCBjb21tYW5kKSB7CisgICFBcnJheS5pc0FycmF5KHZhbHVlKSA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBl
Y3RlZCB0YXJnZXQgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4nLCBjb21tYW5kLCB2YWx1
ZSkgOiBfcHJvZEludmFyaWFudCgnMScsIGNvbW1hbmQsIHZhbHVlKSA6IHZvaWQgMDsKKyAgdmFy
IHNwZWNWYWx1ZSA9IHNwZWNbY29tbWFuZF07CisgICFBcnJheS5pc0FycmF5KHNwZWNWYWx1ZSkg
PyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRh
dGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLiBEaWQgeW91
IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVyIGluIGFuIGFycmF5PycsIGNvbW1hbmQsIHNw
ZWNWYWx1ZSkgOiBfcHJvZEludmFyaWFudCgnMicsIGNvbW1hbmQsIHNwZWNWYWx1ZSkgOiB2b2lk
IDA7Cit9CisKKy8qKgorICogUmV0dXJucyBhIHVwZGF0ZWQgc2hhbGxvdyBjb3B5IG9mIGFuIG9i
amVjdCB3aXRob3V0IG11dGF0aW5nIHRoZSBvcmlnaW5hbC4KKyAqIFNlZSBodHRwczovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3VwZGF0ZS5odG1sIGZvciBkZXRhaWxzLgorICovCitm
dW5jdGlvbiB1cGRhdGUodmFsdWUsIHNwZWMpIHsKKyAgISh0eXBlb2Ygc3BlYyA9PT0gJ29iamVj
dCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
dXBkYXRlKCk6IFlvdSBwcm92aWRlZCBhIGtleSBwYXRoIHRvIHVwZGF0ZSgpIHRoYXQgZGlkIG5v
dCBjb250YWluIG9uZSBvZiAlcy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSB7JXM6IC4uLn0/
JywgQUxMX0NPTU1BTkRTX0xJU1Quam9pbignLCAnKSwgQ09NTUFORF9TRVQpIDogX3Byb2RJbnZh
cmlhbnQoJzMnLCBBTExfQ09NTUFORFNfTElTVC5qb2luKCcsICcpLCBDT01NQU5EX1NFVCkgOiB2
b2lkIDA7CisKKyAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9TRVQpKSB7
CisgICAgIShPYmplY3Qua2V5cyhzcGVjKS5sZW5ndGggPT09IDEpID8gImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGhhdmUgbW9yZSB0aGFu
IG9uZSBrZXkgaW4gYW4gb2JqZWN0IHdpdGggJXMnLCBDT01NQU5EX1NFVCkgOiBfcHJvZEludmFy
aWFudCgnNCcsIENPTU1BTkRfU0VUKSA6IHZvaWQgMDsKKworICAgIHJldHVybiBzcGVjW0NPTU1B
TkRfU0VUXTsKKyAgfQorCisgIHZhciBuZXh0VmFsdWUgPSBzaGFsbG93Q29weSh2YWx1ZSk7CisK
KyAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9NRVJHRSkpIHsKKyAgICB2
YXIgbWVyZ2VPYmogPSBzcGVjW0NPTU1BTkRfTUVSR0VdOworICAgICEobWVyZ2VPYmogJiYgdHlw
ZW9mIG1lcmdlT2JqID09PSAnb2JqZWN0JykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogJXMgZXhwZWN0cyBhIHNwZWMgb2YgdHlw
ZSBcJ29iamVjdFwnOyBnb3QgJXMnLCBDT01NQU5EX01FUkdFLCBtZXJnZU9iaikgOiBfcHJvZElu
dmFyaWFudCgnNScsIENPTU1BTkRfTUVSR0UsIG1lcmdlT2JqKSA6IHZvaWQgMDsKKyAgICAhKG5l
eHRWYWx1ZSAmJiB0eXBlb2YgbmV4dFZhbHVlID09PSAnb2JqZWN0JykgPyAiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogJXMgZXhwZWN0
cyBhIHRhcmdldCBvZiB0eXBlIFwnb2JqZWN0XCc7IGdvdCAlcycsIENPTU1BTkRfTUVSR0UsIG5l
eHRWYWx1ZSkgOiBfcHJvZEludmFyaWFudCgnNicsIENPTU1BTkRfTUVSR0UsIG5leHRWYWx1ZSkg
OiB2b2lkIDA7CisgICAgX2Fzc2lnbihuZXh0VmFsdWUsIHNwZWNbQ09NTUFORF9NRVJHRV0pOwor
ICB9CisKKyAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9QVVNIKSkgewor
ICAgIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9QVVNIKTsKKyAgICBz
cGVjW0NPTU1BTkRfUFVTSF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgbmV4dFZh
bHVlLnB1c2goaXRlbSk7CisgICAgfSk7CisgIH0KKworICBpZiAoaGFzT3duUHJvcGVydHkuY2Fs
bChzcGVjLCBDT01NQU5EX1VOU0hJRlQpKSB7CisgICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVl
LCBzcGVjLCBDT01NQU5EX1VOU0hJRlQpOworICAgIHNwZWNbQ09NTUFORF9VTlNISUZUXS5mb3JF
YWNoKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICBuZXh0VmFsdWUudW5zaGlmdChpdGVtKTsKKyAg
ICB9KTsKKyAgfQorCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU1BM
SUNFKSkgeworICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSA/ICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkICVzIHRhcmdldCB0byBiZSBh
biBhcnJheTsgZ290ICVzJywgQ09NTUFORF9TUExJQ0UsIHZhbHVlKSA6IF9wcm9kSW52YXJpYW50
KCc3JywgQ09NTUFORF9TUExJQ0UsIHZhbHVlKSA6IHZvaWQgMDsKKyAgICAhQXJyYXkuaXNBcnJh
eShzcGVjW0NPTU1BTkRfU1BMSUNFXSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBh
biBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBh
cmFtZXRlcnMgaW4gYW4gYXJyYXk/JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJ
Q0VdKSA6IF9wcm9kSW52YXJpYW50KCc4JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9T
UExJQ0VdKSA6IHZvaWQgMDsKKyAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXS5mb3JFYWNoKGZ1bmN0
aW9uIChhcmdzKSB7CisgICAgICAhQXJyYXkuaXNBcnJheShhcmdzKSA/ICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBz
cGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiBEaWQgeW91IGZvcmdl
dCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLCBDT01NQU5EX1NQTElDRSwg
c3BlY1tDT01NQU5EX1NQTElDRV0pIDogX3Byb2RJbnZhcmlhbnQoJzgnLCBDT01NQU5EX1NQTElD
RSwgc3BlY1tDT01NQU5EX1NQTElDRV0pIDogdm9pZCAwOworICAgICAgbmV4dFZhbHVlLnNwbGlj
ZS5hcHBseShuZXh0VmFsdWUsIGFyZ3MpOworICAgIH0pOworICB9CisKKyAgaWYgKGhhc093blBy
b3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9BUFBMWSkpIHsKKyAgICAhKHR5cGVvZiBzcGVjW0NP
TU1BTkRfQVBQTFldID09PSAnZnVuY3Rpb24nKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRv
IGJlIGEgZnVuY3Rpb247IGdvdCAlcy4nLCBDT01NQU5EX0FQUExZLCBzcGVjW0NPTU1BTkRfQVBQ
TFldKSA6IF9wcm9kSW52YXJpYW50KCc5JywgQ09NTUFORF9BUFBMWSwgc3BlY1tDT01NQU5EX0FQ
UExZXSkgOiB2b2lkIDA7CisgICAgbmV4dFZhbHVlID0gc3BlY1tDT01NQU5EX0FQUExZXShuZXh0
VmFsdWUpOworICB9CisKKyAgZm9yICh2YXIgayBpbiBzcGVjKSB7CisgICAgaWYgKCEoQUxMX0NP
TU1BTkRTX1NFVC5oYXNPd25Qcm9wZXJ0eShrKSAmJiBBTExfQ09NTUFORFNfU0VUW2tdKSkgewor
ICAgICAgbmV4dFZhbHVlW2tdID0gdXBkYXRlKHZhbHVlW2tdLCBzcGVjW2tdKTsKKyAgICB9Cisg
IH0KKworICByZXR1cm4gbmV4dFZhbHVlOworfQorCittb2R1bGUuZXhwb3J0cyA9IHVwZGF0ZTsK
K30seyIzOSI6MzksIjQ3Ijo0NywiNTAiOjUwfV0sNDM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICogQHR5cGVjaGVja3MKKyAqLworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7CisK
Ky8qKgorICogVGhlIENTU0NvcmUgbW9kdWxlIHNwZWNpZmllcyB0aGUgQVBJIChhbmQgaW1wbGVt
ZW50cyBtb3N0IG9mIHRoZSBtZXRob2RzKQorICogdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGRl
YWxpbmcgd2l0aCB0aGUgZGlzcGxheSBvZiBlbGVtZW50cyAodmlhIHRoZWlyCisgKiBDU1MgY2xh
c3NlcyBhbmQgdmlzaWJpbGl0eSBvbiBzY3JlZW4uIEl0IGlzIGFuIEFQSSBmb2N1c2VkIG9uIG11
dGF0aW5nIHRoZQorICogZGlzcGxheSBhbmQgbm90IHJlYWRpbmcgaXQgYXMgbm8gbG9naWNhbCBz
dGF0ZSBzaG91bGQgYmUgZW5jb2RlZCBpbiB0aGUKKyAqIGRpc3BsYXkgb2YgZWxlbWVudHMuCisg
Ki8KKworLyogU2xvdyBpbXBsZW1lbnRhdGlvbiBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBuYXRp
dmVseSBzdXBwb3J0IC5tYXRjaGVzKCkgKi8KK2Z1bmN0aW9uIG1hdGNoZXNTZWxlY3Rvcl9TTE9X
KGVsZW1lbnQsIHNlbGVjdG9yKSB7CisgIHZhciByb290ID0gZWxlbWVudDsKKyAgd2hpbGUgKHJv
b3QucGFyZW50Tm9kZSkgeworICAgIHJvb3QgPSByb290LnBhcmVudE5vZGU7CisgIH0KKworICB2
YXIgYWxsID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKKyAgcmV0dXJuIEFycmF5
LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYWxsLCBlbGVtZW50KSAhPT0gLTE7Cit9CisKK3ZhciBD
U1NDb3JlID0geworCisgIC8qKgorICAgKiBBZGRzIHRoZSBjbGFzcyBwYXNzZWQgaW4gdG8gdGhl
IGVsZW1lbnQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgaXQuCisgICAqCisgICAqIEBwYXJh
bSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICogQHJl
dHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluCisgICAqLworICBhZGRDbGFz
czogZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7CisgICAgISEvXHMvLnRl
c3QoY2xhc3NOYW1lKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0NTU0NvcmUuYWRkQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1l
LiAiJXMiIGNvbnRhaW5zICcgKyAnbXVsdGlwbGUgY2xhc3Nlcy4nLCBjbGFzc05hbWUpIDogaW52
YXJpYW50KGZhbHNlKSA6IHZvaWQgMDsKKworICAgIGlmIChjbGFzc05hbWUpIHsKKyAgICAgIGlm
IChlbGVtZW50LmNsYXNzTGlzdCkgeworICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xh
c3NOYW1lKTsKKyAgICAgIH0gZWxzZSBpZiAoIUNTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwgY2xh
c3NOYW1lKSkgeworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1l
ICsgJyAnICsgY2xhc3NOYW1lOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsK
KyAgfSwKKworICAvKioKKyAgICogUmVtb3ZlcyB0aGUgY2xhc3MgcGFzc2VkIGluIGZyb20gdGhl
IGVsZW1lbnQKKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVt
ZW50IHRvIHNldCB0aGUgY2xhc3Mgb24KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0
aGUgQ1NTIGNsYXNzTmFtZQorICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBw
YXNzZWQgaW4KKyAgICovCisgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVt
ZW50LCBjbGFzc05hbWUpIHsKKyAgICAhIS9ccy8udGVzdChjbGFzc05hbWUpID8gImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ1NTQ29yZS5yZW1vdmVD
bGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuICIlcyIgY29udGFpbnMgJyArICdt
dWx0aXBsZSBjbGFzc2VzLicsIGNsYXNzTmFtZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAw
OworCisgICAgaWYgKGNsYXNzTmFtZSkgeworICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7
CisgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOworICAgICAgfSBl
bHNlIGlmIChDU1NDb3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHsKKyAgICAgICAg
ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAo
JyhefFxccyknICsgY2xhc3NOYW1lICsgJyg/Olxcc3wkKScsICdnJyksICckMScpLnJlcGxhY2Uo
L1xzKy9nLCAnICcpIC8vIG11bHRpcGxlIHNwYWNlcyB0byBvbmUKKyAgICAgICAgLnJlcGxhY2Uo
L15ccyp8XHMqJC9nLCAnJyk7IC8vIHRyaW0gdGhlIGVuZHMKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgLyoqCisgICAqIEhlbHBlciB0byBhZGQgb3IgcmVt
b3ZlIGEgY2xhc3MgZnJvbSBhbiBlbGVtZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uLgorICAgKgor
ICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBj
bGFzcyBvbgorICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1l
CisgICAqIEBwYXJhbSB7Kn0gYm9vbCBjb25kaXRpb24gdG8gd2hldGhlciB0byBhZGQgb3IgcmVt
b3ZlIHRoZSBjbGFzcworICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNz
ZWQgaW4KKyAgICovCisgIGNvbmRpdGlvbkNsYXNzOiBmdW5jdGlvbiBjb25kaXRpb25DbGFzcyhl
bGVtZW50LCBjbGFzc05hbWUsIGJvb2wpIHsKKyAgICByZXR1cm4gKGJvb2wgPyBDU1NDb3JlLmFk
ZENsYXNzIDogQ1NTQ29yZS5yZW1vdmVDbGFzcykoZWxlbWVudCwgY2xhc3NOYW1lKTsKKyAgfSwK
KworICAvKioKKyAgICogVGVzdHMgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzIHNw
ZWNpZmllZC4KKyAgICoKKyAgICogQHBhcmFtIHtET01Ob2RlfERPTVdpbmRvd30gZWxlbWVudCB0
aGUgZWxlbWVudCB0byBjaGVjayB0aGUgY2xhc3Mgb24KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNs
YXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZQorICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlm
IHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGZhbHNlIGlmIG5vdAorICAgKi8KKyAgaGFzQ2xh
c3M6IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgICEhL1xzLy50
ZXN0KGNsYXNzTmFtZSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlh
bnQoZmFsc2UsICdDU1MuaGFzQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLicp
IDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDsKKyAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3Qp
IHsKKyAgICAgIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlu
cyhjbGFzc05hbWUpOworICAgIH0KKyAgICByZXR1cm4gKCcgJyArIGVsZW1lbnQuY2xhc3NOYW1l
ICsgJyAnKS5pbmRleE9mKCcgJyArIGNsYXNzTmFtZSArICcgJykgPiAtMTsKKyAgfSwKKworICAv
KioKKyAgICogVGVzdHMgd2hldGhlciB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3RvciBz
cGVjaWZpZWQKKyAgICoKKyAgICogQHBhcmFtIHtET01Ob2RlfERPTVdpbmRvd30gZWxlbWVudCB0
aGUgZWxlbWVudCB0aGF0IHdlIGFyZSBxdWVyeWluZworICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vs
ZWN0b3IgdGhlIENTUyBzZWxlY3RvcgorICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRo
ZSBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLCBmYWxzZSBpZiBub3QKKyAgICovCisgIG1h
dGNoZXNTZWxlY3RvcjogZnVuY3Rpb24gbWF0Y2hlc1NlbGVjdG9yKGVsZW1lbnQsIHNlbGVjdG9y
KSB7CisgICAgdmFyIG1hdGNoZXNJbXBsID0gZWxlbWVudC5tYXRjaGVzIHx8IGVsZW1lbnQud2Vi
a2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGVsZW1lbnQubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGVsZW1l
bnQubXNNYXRjaGVzU2VsZWN0b3IgfHwgZnVuY3Rpb24gKHMpIHsKKyAgICAgIHJldHVybiBtYXRj
aGVzU2VsZWN0b3JfU0xPVyhlbGVtZW50LCBzKTsKKyAgICB9OworICAgIHJldHVybiBtYXRjaGVz
SW1wbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTsKKyAgfQorCit9OworCittb2R1bGUuZXhwb3J0
cyA9IENTU0NvcmU7Cit9LHsiNDciOjQ3fV0sNDQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBs
aWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQ
QVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmlj
dCc7CisKK3ZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAm
JiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpOworCisv
KioKKyAqIFNpbXBsZSwgbGlnaHR3ZWlnaHQgbW9kdWxlIGFzc2lzdGluZyB3aXRoIHRoZSBkZXRl
Y3Rpb24gYW5kIGNvbnRleHQgb2YKKyAqIFdvcmtlci4gSGVscHMgYXZvaWQgY2lyY3VsYXIgZGVw
ZW5kZW5jaWVzIGFuZCBhbGxvd3MgY29kZSB0byByZWFzb24gYWJvdXQKKyAqIHdoZXRoZXIgb3Ig
bm90IHRoZXkgYXJlIGluIGEgV29ya2VyLCBldmVuIGlmIHRoZXkgbmV2ZXIgaW5jbHVkZSB0aGUg
bWFpbgorICogYFJlYWN0V29ya2VyYCBkZXBlbmRlbmN5LgorICovCit2YXIgRXhlY3V0aW9uRW52
aXJvbm1lbnQgPSB7CisKKyAgY2FuVXNlRE9NOiBjYW5Vc2VET00sCisKKyAgY2FuVXNlV29ya2Vy
czogdHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcsCisKKyAgY2FuVXNlRXZlbnRMaXN0ZW5l
cnM6IGNhblVzZURPTSAmJiAhISh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0
YWNoRXZlbnQpLAorCisgIGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2Ny
ZWVuLAorCisgIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00gLy8gRm9yIG5vdywgdGhpcyBpcyB0cnVl
IC0gbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKK307CisKK21vZHVsZS5leHBvcnRzID0g
RXhlY3V0aW9uRW52aXJvbm1lbnQ7Cit9LHt9XSw0NTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUs
ZXhwb3J0cyl7CisidXNlIHN0cmljdCI7CisKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAq
CisgKiAKKyAqLworCitmdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHsKKyAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gYXJnOworICB9OworfQorCisvKioKKyAqIFRoaXMg
ZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZl
Y3RzLiBUaGlzIGlzCisgKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJy
aWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaAorICogYWx3YXlzIG5lZWQgdG8gYmUgY2Fs
bGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS4KKyAqLwor
dmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307CisKK2VtcHR5
RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjsKK2VtcHR5RnVuY3Rpb24u
dGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTsKK2VtcHR5RnVuY3Rp
b24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7CitlbXB0eUZ1bmN0
aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpOworZW1wdHlGdW5j
dGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzOworfTsK
K2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHsKKyAg
cmV0dXJuIGFyZzsKK307CisKK21vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjsKK30se31d
LDQ2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlPYmplY3QgPSB7
fTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBPYmplY3QuZnJl
ZXplKGVtcHR5T2JqZWN0KTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDsKK30s
e31dLDQ3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFVzZSBpbnZh
cmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUg
dHJ1ZS4KKyAqCisgKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1
cHBvcnRlZCkgYW5kIGFyZ3VtZW50cworICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3
aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlCisgKiBleHBlY3RpbmcuCisgKgorICogVGhlIGlu
dmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBp
bnZhcmlhbnQKKyAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIg
aW4gcHJvZHVjdGlvbi4KKyAqLworCit2YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxp
ZGF0ZUZvcm1hdChmb3JtYXQpIHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0
KSB7CisgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7CisgICAg
fQorICB9OworfQorCitmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIs
IGMsIGQsIGUsIGYpIHsKKyAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTsKKworICBpZiAoIWNvbmRp
dGlvbikgeworICAgIHZhciBlcnJvcjsKKyAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsK
KyAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVz
ZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJv
ciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7CisgICAgfSBlbHNl
IHsKKyAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdOworICAgICAgdmFyIGFyZ0lu
ZGV4ID0gMDsKKyAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdOworICAgICAgfSkp
OworICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJzsKKyAgICB9CisKKyAg
ICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50
J3Mgb3duIGZyYW1lCisgICAgdGhyb3cgZXJyb3I7CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMg
PSBpbnZhcmlhbnQ7Cit9LHt9XSw0ODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogQHR5cGVjaGVja3MKKyAqIAorICov
CisKKy8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovCisKKyd1c2Ugc3RyaWN0JzsK
KwordmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsK
KworLyoqCisgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcg
Y29uc3VtZXJzIHNoaXAgdGhlaXIgb3duCisgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmpl
Y3QvaXMKKyAqLworZnVuY3Rpb24gaXMoeCwgeSkgeworICAvLyBTYW1lVmFsdWUgYWxnb3JpdGht
CisgIGlmICh4ID09PSB5KSB7CisgICAgLy8gU3RlcHMgMS01LCA3LTEwCisgICAgLy8gU3RlcHMg
Ni5iLTYuZTogKzAgIT0gLTAKKyAgICAvLyBBZGRlZCB0aGUgbm9uemVybyB5IGNoZWNrIHRvIG1h
a2UgRmxvdyBoYXBweSwgYnV0IGl0IGlzIHJlZHVuZGFudAorICAgIHJldHVybiB4ICE9PSAwIHx8
IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5OworICB9IGVsc2UgeworICAgIC8vIFN0ZXAgNi5h
OiBOYU4gPT0gTmFOCisgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTsKKyAgfQorfQorCisv
KioKKyAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4g
b2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2UKKyAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdo
aWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLgorICogUmV0
dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwu
CisgKi8KK2Z1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7CisgIGlmIChpcyhvYmpB
LCBvYmpCKSkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaWYgKHR5cGVvZiBvYmpBICE9
PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8
fCBvYmpCID09PSBudWxsKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdmFyIGtleXNB
ID0gT2JqZWN0LmtleXMob2JqQSk7CisgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpOwor
CisgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgeworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorCisgIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuCisgIGZv
ciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoIWhhc093blBy
b3BlcnR5LmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltr
ZXlzQVtpXV0pKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgcmV0dXJu
IHRydWU7Cit9CisKK21vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsOworfSx7fV0sNDk6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNC0y
MDE1LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgor
ICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVyZXFfKDQ1KTsK
KworLyoqCisgKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBp
ZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBp
c3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsCisgKiBwYXRocy4g
UmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2ls
bCBrZWVwIHRoZQorICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMu
CisgKi8KKwordmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uOworCitpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIChmdW5jdGlvbiAoKSB7CisgICAgdmFyIHByaW50V2Fy
bmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHsKKyAgICAgIGZvciAodmFyIF9s
ZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6
IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXkg
LSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgdmFyIGFyZ0luZGV4ID0g
MDsKKyAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMv
ZywgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKKyAgICAg
IH0pOworICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykgeworICAgICAg
ICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpOworICAgICAgfQorICAgICAgdHJ5IHsKKyAgICAgICAg
Ly8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLQorICAgICAgICAvLyBUaGlzIGVy
cm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMg
c3RhY2sKKyAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3
YXJuaW5nIHRvIGZpcmUuCisgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAgICAg
IH0gY2F0Y2ggKHgpIHt9CisgICAgfTsKKworICAgIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5n
KGNvbmRpdGlvbiwgZm9ybWF0KSB7CisgICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4u
YXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTsKKyAgICAg
IH0KKworICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBl
OiAnKSA9PT0gMCkgeworICAgICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25l
bnQgcHJvcHR5cGUgY2hlY2suCisgICAgICB9CisKKyAgICAgIGlmICghY29uZGl0aW9uKSB7Cisg
ICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9s
ZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXky
KyspIHsKKyAgICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdOworICAg
ICAgICB9CisKKyAgICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0u
Y29uY2F0KGFyZ3MpKTsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOworfQorCittb2R1bGUuZXhw
b3J0cyA9IHdhcm5pbmc7Cit9LHsiNDUiOjQ1fV0sNTA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworLyoKK29iamVjdC1hc3NpZ24KKyhjKSBTaW5kcmUgU29yaHVzCitAbGljZW5z
ZSBNSVQKKyovCisKKyd1c2Ugc3RyaWN0JzsKKy8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12
YXJzICovCit2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5
U3ltYm9sczsKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHk7Cit2YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJ
c0VudW1lcmFibGU7CisKK2Z1bmN0aW9uIHRvT2JqZWN0KHZhbCkgeworICAgIGlmICh2YWwgPT09
IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQn
KTsKKyAgICB9CisKKyAgICByZXR1cm4gT2JqZWN0KHZhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZFVzZU5hdGl2ZSgpIHsKKyAgICB0cnkgeworICAgICAgICBpZiAoIU9iamVjdC5hc3NpZ24pIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVj
dCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy4K
KworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFp
bD9pZD00MTE4CisgICAgICAgIHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNs
aW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnMKKyAgICAgICAgdGVzdDFbNV0gPSAnZGUn
OworICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAn
NScpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTYKKyAg
ICAgICAgdmFyIHRlc3QyID0ge307CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkr
KykgeworICAgICAgICAgICAgdGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBp
OworICAgICAgICB9CisgICAgICAgIHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdDJb
bl07CisgICAgICAgIH0pOworICAgICAgICBpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1
Njc4OScpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTYK
KyAgICAgICAgdmFyIHRlc3QzID0ge307CisgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdCcu
c3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikgeworICAgICAgICAgICAgdGVzdDNb
bGV0dGVyXSA9IGxldHRlcjsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChPYmplY3Qua2V5cyhP
YmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PQorICAgICAgICAgICAgICAgICdh
YmNkZWZnaGlqa2xtbm9wcXJzdCcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAg
ICAvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRl
ciB0byBiZSBzYWZlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCittb2R1bGUu
ZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0
YXJnZXQsIHNvdXJjZSkgeworICAgIHZhciBmcm9tOworICAgIHZhciB0byA9IHRvT2JqZWN0KHRh
cmdldCk7CisgICAgdmFyIHN5bWJvbHM7CisKKyAgICBmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3Vt
ZW50cy5sZW5ndGg7IHMrKykgeworICAgICAgICBmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7
CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGZyb20pIHsKKyAgICAgICAgICAgIGlmIChoYXNP
d25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0b1trZXldID0g
ZnJvbVtrZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGdldE93
blByb3BlcnR5U3ltYm9scykgeworICAgICAgICAgICAgc3ltYm9scyA9IGdldE93blByb3BlcnR5
U3ltYm9scyhmcm9tKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwo
ZnJvbSwgc3ltYm9sc1tpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9bc3ltYm9sc1tpXV0g
PSBmcm9tW3N5bWJvbHNbaV1dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0bzsKK307CisKK30se31dLDUxOltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICB2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7CisgIHZhciB3YXJuaW5nID0gX2RlcmVxXyg0
OSk7CisgIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9kZXJlcV8oNTQpOworICB2YXIgbG9n
Z2VkVHlwZUZhaWx1cmVzID0ge307Cit9CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVl
cyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9y
aXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9
IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2Jq
ZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAor
ICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGls
ZCBjb250ZXh0IgorICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUg
Y29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy4KKyAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRT
dGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suCisgKiBAcHJpdmF0ZQorICovCitmdW5j
dGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVu
dE5hbWUsIGdldFN0YWNrKSB7CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicp
IHsKKyAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7CisgICAgICBpZiAo
dHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHsKKyAgICAgICAgdmFyIGVy
cm9yOworICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2Ug
dGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0bworICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhh
c2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuCisgICAgICAgIC8v
IEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4K
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52
YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWUKKyAgICAgICAgICAvLyBiZWhh
dmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3Nh
Z2UuCisgICAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9
PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBh
IGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50
TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lKTsKKyAgICAgICAg
ICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBj
b21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAg
ICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgIGVycm9yID0gZXg7CisgICAgICAgIH0KKyAg
ICAgICAgd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0eXBl
IHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcg
KyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVk
IGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRv
IHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmpl
Y3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJn
dW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVT
cGVjTmFtZSwgdHlwZW9mIGVycm9yKTsKKyAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJy
b3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHsKKyAgICAgICAg
ICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0
byBiZSBhIGxvdCBvZiB0aGUKKyAgICAgICAgICAvLyBzYW1lIGVycm9yLgorICAgICAgICAgIGxv
Z2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7CisKKyAgICAgICAgICB2YXIg
c3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJzsKKworICAgICAgICAgIHdhcm5pbmco
ZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBz
dGFjayAhPSBudWxsID8gc3RhY2sgOiAnJyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9Cisg
IH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlczsKKworfSx7IjQ3Ijo0Nywi
NDkiOjQ5LCI1NCI6NTR9XSw1MjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKKy8vIFJlYWN0IDE1
LjUgcmVmZXJlbmNlcyB0aGlzIG1vZHVsZSwgYW5kIGFzc3VtZXMgUHJvcFR5cGVzIGFyZSBzdGls
bCBjYWxsYWJsZSBpbiBwcm9kdWN0aW9uLgorLy8gVGhlcmVmb3JlIHdlIHJlLWV4cG9ydCBkZXZl
bG9wbWVudC1vbmx5IHZlcnNpb24gd2l0aCBhbGwgdGhlIFByb3BUeXBlcyBjaGVja3MgaGVyZS4K
Ky8vIEhvd2V2ZXIgaWYgb25lIGlzIG1pZ3JhdGluZyB0byB0aGUgYHByb3AtdHlwZXNgIG5wbSBs
aWJyYXJ5LCB0aGV5IHdpbGwgZ28gdGhyb3VnaCB0aGUKKy8vIGBpbmRleC5qc2AgZW50cnkgcG9p
bnQsIGFuZCBpdCB3aWxsIGJyYW5jaCBkZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LgordmFy
IGZhY3RvcnkgPSBfZGVyZXFfKDUzKTsKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxp
ZEVsZW1lbnQpIHsKKyAgLy8gSXQgaXMgc3RpbGwgYWxsb3dlZCBpbiAxNS41LgorICB2YXIgdGhy
b3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlOworICByZXR1cm4gZmFjdG9yeShpc1ZhbGlkRWxlbWVu
dCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7Cit9OworCit9LHsiNTMiOjUzfV0sNTM6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKwor
J3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJlcV8oNDUpOwordmFyIGlu
dmFyaWFudCA9IF9kZXJlcV8oNDcpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFy
IFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX2RlcmVxXyg1NCk7Cit2YXIgY2hlY2tQcm9wVHlwZXMg
PSBfZGVyZXFfKDUxKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVu
dCwgdGhyb3dPbkRpcmVjdEFjY2VzcykgeworICAvKiBnbG9iYWwgU3ltYm9sICovCisgIHZhciBJ
VEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5p
dGVyYXRvcjsKKyAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBC
ZWZvcmUgU3ltYm9sIHNwZWMuCisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1l
dGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC4KKyAgICoKKyAg
ICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNv
bnRleHQ6CisgICAqCisgICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJ
dGVyYWJsZSk7CisgICAqICAgICBpZiAoaXRlcmF0b3JGbikgeworICAgKiAgICAgICB2YXIgaXRl
cmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7CisgICAqICAgICAgIC4uLgorICAg
KiAgICAgfQorICAgKgorICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGUKKyAgICog
QHJldHVybiB7P2Z1bmN0aW9ufQorICAgKi8KKyAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXli
ZUl0ZXJhYmxlKSB7CisgICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVS
QVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRl
cmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTsKKyAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4g
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHJldHVybiBpdGVyYXRvckZuOworICAgIH0KKyAgfQor
CisgIC8qKgorICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlv
biBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZQorICAgKiBzdXBwbGllZCB0byBSZWFj
dCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOgorICAgKgorICAgKiAgIHZhciBQcm9wcyA9IHJl
cXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7CisgICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNy
ZWF0ZUNsYXNzKHsKKyAgICogICAgIHByb3BUeXBlczogeworICAgKiAgICAgICAvLyBBbiBvcHRp
b25hbCBzdHJpbmcgcHJvcCBuYW1lZCAiZGVzY3JpcHRpb24iLgorICAgKiAgICAgICBkZXNjcmlw
dGlvbjogUHJvcHMuc3RyaW5nLAorICAgKgorICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0g
cHJvcCBuYW1lZCAiY2F0ZWdvcnkiLgorICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2Yo
WydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsCisgICAqCisgICAqICAgICAgIC8vIEEgcHJv
cCBuYW1lZCAiZGlhbG9nIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy4KKyAg
ICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZAorICAg
KiAgICAgfSwKKyAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9CisgICAqICAgfSk7
CisgICAqCisgICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0
aG9kcyBhcmUgdXNlZDoKKyAgICoKKyAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmpl
Y3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pCisgICAqICAgZGVj
bCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpPworICAgKgorICAgKiBFYWNo
IGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUg
c2lnbmF0dXJlLiBUaGlzCisgICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlk
YXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKyAgICoKKyAgICogIHZhciBNeUxpbmsgPSBS
ZWFjdC5jcmVhdGVDbGFzcyh7CisgICAqICAgIHByb3BUeXBlczogeworICAgKiAgICAgIC8vIEFu
IG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCAiaHJlZiIuCisgICAqICAgICAgaHJl
ZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7CisgICAqICAgICAg
ICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgKiAgICAgICAgaWYgKHByb3BW
YWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmCisgICAqICAg
ICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7CisgICAqICAgICAgICAgIHJl
dHVybiBuZXcgRXJyb3IoCisgICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFu
IFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICsKKyAgICogICAgICAgICAgICBjb21wb25l
bnROYW1lCisgICAqICAgICAgICAgICk7CisgICAqICAgICAgICB9CisgICAqICAgICAgfQorICAg
KiAgICB9LAorICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn0KKyAgICogIH0pOworICAg
KgorICAgKiBAaW50ZXJuYWwKKyAgICovCisKKyAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91
cz4+JzsKKworICAvLyBJbXBvcnRhbnQhCisgIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0
aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC4K
KyAgdmFyIFJlYWN0UHJvcFR5cGVzID0geworICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBl
Q2hlY2tlcignYXJyYXknKSwKKyAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcign
Ym9vbGVhbicpLAorICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlv
bicpLAorICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLAor
ICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLAorICAgIHN0
cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLAorICAgIHN5bWJvbDog
Y3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLAorCisgICAgYW55OiBjcmVhdGVB
bnlUeXBlQ2hlY2tlcigpLAorICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlciwK
KyAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSwKKyAgICBpbnN0YW5jZU9m
OiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLAorICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2Vy
KCksCisgICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsCisgICAgb25lT2Y6
IGNyZWF0ZUVudW1UeXBlQ2hlY2tlciwKKyAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNo
ZWNrZXIsCisgICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIKKyAgfTsKKworICAvKioK
KyAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1
bWVycyBzaGlwIHRoZWlyIG93bgorICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3Qv
aXMKKyAgICovCisgIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi8KKyAgZnVuY3Rp
b24gaXMoeCwgeSkgeworICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG0KKyAgICBpZiAoeCA9PT0g
eSkgeworICAgICAgLy8gU3RlcHMgMS01LCA3LTEwCisgICAgICAvLyBTdGVwcyA2LmItNi5lOiAr
MCAhPSAtMAorICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5OworICAgIH0g
ZWxzZSB7CisgICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTgorICAgICAgcmV0dXJuIHggIT09
IHggJiYgeSAhPT0geTsKKyAgICB9CisgIH0KKyAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29t
cGFyZSovCisKKyAgLyoqCisgICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFj
a3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGwKKyAgICogUHJvcFR5cGVzIGRp
cmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJl
YWwKKyAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55
d2F5LCBhbmQgY3JlYXRpbmcgdGhlbQorICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBp
ZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0CisgICAqIGhhcHBlbnMg
aW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC4K
KyAgICovCisgIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkgeworICAgIHRoaXMubWVz
c2FnZSA9IG1lc3NhZ2U7CisgICAgdGhpcy5zdGFjayA9ICcnOworICB9CisgIC8vIE1ha2UgYGlu
c3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy4KKyAgUHJvcFR5
cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7CisKKyAgZnVuY3Rpb24gY3JlYXRl
Q2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7
fTsKKyAgICB9CisgICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9w
TmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7Cisg
ICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7CisgICAgICBw
cm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7CisKKyAgICAgIGlmIChzZWNy
ZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7CisgICAgICAgIGlmICh0aHJvd09uRGlyZWN0
QWNjZXNzKSB7CisgICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBw
cm9wLXR5cGVzYCBwYWNrYWdlCisgICAgICAgICAgaW52YXJpYW50KAorICAgICAgICAgICAgZmFs
c2UsCisgICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBp
cyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArCisgICAgICAg
ICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICsK
KyAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5
cGVzJworICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSBpZiAoImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykgeworICAgICAg
ICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlcworICAg
ICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTsKKyAg
ICAgICAgICBpZiAoIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSkgeworICAgICAg
ICAgICAgd2FybmluZygKKyAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICdZb3Ug
YXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICsKKyAg
ICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMg
ZGVwcmVjYXRlZCAnICsKKyAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFu
ZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICsKKyAgICAgICAgICAgICAgJ1lvdSBtYXkg
YmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyAr
CisgICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5n
LWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLAorICAgICAgICAgICAgICBw
cm9wRnVsbE5hbWUsCisgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUKKyAgICAgICAgICAgICk7
CisgICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHByb3BzW3Byb3BOYW1l
XSA9PSBudWxsKSB7CisgICAgICAgIGlmIChpc1JlcXVpcmVkKSB7CisgICAgICAgICAgaWYgKHBy
b3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlw
ZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1h
cmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0
cyB2YWx1ZSBpcyBgbnVsbGAuJykpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gbmV3
IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsg
J2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdg
LCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9w
cywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpOworICAg
ICAgfQorICAgIH0KKworICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQo
bnVsbCwgZmFsc2UpOworICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlw
ZS5iaW5kKG51bGwsIHRydWUpOworCisgICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7CisgIH0K
KworICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHsK
KyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxv
Y2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHBy
b3BzW3Byb3BOYW1lXTsKKyAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1
ZSk7CisgICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkgeworICAgICAgICAvLyBg
cHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUg
J29iamVjdCcKKyAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNp
c2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuCisgICAgICAgIC8vICdvZiB0eXBlIGBv
YmplY3RgJy4KKyAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZh
bHVlKTsKKworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxv
Y2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVj
aXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3Rl
ZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7CisgICAgICB9CisgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZh
bGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkgeworICAg
IHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1
cm5zTnVsbCk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlw
ZUNoZWNrZXIpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBv
bmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICh0eXBlb2YgdHlw
ZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVy
cm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNv
bXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJy
YXlPZi4nKTsKKyAgICAgIH0KKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07
CisgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgeworICAgICAgICB2YXIgcHJv
cFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IFByb3BU
eXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdg
IG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9u
ZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7CisgICAgICB9CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZXJy
b3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBw
cm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAg
ICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgICAgcmV0dXJuIGVycm9y
OworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0
dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsK
KyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICBpZiAoIWlzVmFs
aWRFbGVtZW50KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5
cGUocHJvcFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2An
ICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhw
ZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRh
dGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3Rl
ZENsYXNzKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25l
bnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBpZiAoIShwcm9wc1twcm9w
TmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkgeworICAgICAgICB2YXIgZXhwZWN0ZWRD
bGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTOworICAgICAgICB2YXIg
YWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7CisgICAgICAg
IHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdg
IHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5z
dGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNr
ZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4
cGVjdGVkVmFsdWVzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkg
eworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwg
J0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGluc3RhbmNl
IG9mIGFycmF5LicpIDogdm9pZCAwOworICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJl
dHVybnNOdWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFt
ZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgdmFyIHBy
b3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhw
ZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhw
ZWN0ZWRWYWx1ZXNbaV0pKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgIH0KKworICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVk
VmFsdWVzKTsKKyAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9j
YXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUg
KyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQg
b25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0
ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0
ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0
ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUp
IHsKKyAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSAr
ICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9w
VHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7CisgICAgICB9CisgICAgICB2YXIgcHJv
cFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5
cGUocHJvcFZhbHVlKTsKKyAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcg
KyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBw
bGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTsK
KyAgICAgIH0KKyAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHsKKyAgICAgICAgaWYg
KHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgdmFyIGVycm9yID0g
dHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9w
RnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgICBp
ZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0K
KworICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMp
IHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHsKKyAgICAg
ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlk
IGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2Yg
YXJyYXkuJykgOiB2b2lkIDA7CisgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJu
c051bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBj
b21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFy
IGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldOworICAgICAgICBpZiAoY2hlY2tlcihw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJl
YWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZh
bGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAn
ICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7CisgICAgfQorICAgIHJldHVybiBjcmVh
dGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVh
dGVOb2RlQ2hlY2tlcigpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUs
IGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICghaXNO
b2RlKHByb3BzW3Byb3BOYW1lXSkpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9y
KCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGll
ZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUu
JykpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVh
dGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVh
dGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsK
KyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2YXIgcHJvcFR5
cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2Jq
ZWN0JykgeworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxv
Y2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSAr
ICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBg
b2JqZWN0YC4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykg
eworICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTsKKyAgICAgICAgaWYgKCFj
aGVja2VyKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVy
cm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHBy
b3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlw
ZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkg
eworICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkgeworICAgICAgY2FzZSAnbnVtYmVyJzoK
KyAgICAgIGNhc2UgJ3N0cmluZyc6CisgICAgICBjYXNlICd1bmRlZmluZWQnOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgJ2Jvb2xlYW4nOgorICAgICAgICByZXR1cm4gIXByb3BW
YWx1ZTsKKyAgICAgIGNhc2UgJ29iamVjdCc6CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBy
b3BWYWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVu
dChwcm9wVmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTsKKyAgICAgICAg
aWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNh
bGwocHJvcFZhbHVlKTsKKyAgICAgICAgICB2YXIgc3RlcDsKKyAgICAgICAgICBpZiAoaXRlcmF0
b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHsKKyAgICAgICAgICAgIHdoaWxlICghKHN0ZXAg
PSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3Rl
cC52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSXRl
cmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMu
CisgICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7Cisg
ICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7CisgICAgICAgICAgICAgIGlmIChl
bnRyeSkgeworICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkgeworICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBmdW5j
dGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7CisgICAgLy8gTmF0aXZlIFN5bWJv
bC4KKyAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWdd
ID09PSAnU3ltYm9sJworICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5
bWJvbCcpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIGZv
ciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC4KKyAgICBp
ZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBT
eW1ib2wpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCisgIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5k
bGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC4KKyAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZh
bHVlKSB7CisgICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTsKKyAgICBpZiAoQXJy
YXkuaXNBcnJheShwcm9wVmFsdWUpKSB7CisgICAgICByZXR1cm4gJ2FycmF5JzsKKyAgICB9Cisg
ICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgLy8gT2xkIHdlYmtp
dHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIg
dGhhbgorICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFs
aXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvCisgICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9i
amVjdC4KKyAgICAgIHJldHVybiAnb2JqZWN0JzsKKyAgICB9CisgICAgaWYgKGlzU3ltYm9sKHBy
b3BUeXBlLCBwcm9wVmFsdWUpKSB7CisgICAgICByZXR1cm4gJ3N5bWJvbCc7CisgICAgfQorICAg
IHJldHVybiBwcm9wVHlwZTsKKyAgfQorCisgIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRo
YW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy4KKyAgLy8gU2Vl
IGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuCisgIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBl
KHByb3BWYWx1ZSkgeworICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7
CisgICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0JykgeworICAgICAgaWYgKHByb3BWYWx1ZSBp
bnN0YW5jZW9mIERhdGUpIHsKKyAgICAgICAgcmV0dXJuICdkYXRlJzsKKyAgICAgIH0gZWxzZSBp
ZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAgIHJldHVybiAncmVnZXhw
JzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHByb3BUeXBlOworICB9CisKKyAgLy8gUmV0
dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS4KKyAgZnVuY3Rpb24gZ2V0Q2xh
c3NOYW1lKHByb3BWYWx1ZSkgeworICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFw
cm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkgeworICAgICAgcmV0dXJuIEFOT05ZTU9VUzsKKyAg
ICB9CisgICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lOworICB9CisKKyAgUmVh
Y3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlczsKKyAgUmVhY3RQcm9w
VHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7CisKKyAgcmV0dXJuIFJlYWN0UHJvcFR5
cGVzOworfTsKKworfSx7IjQ1Ijo0NSwiNDciOjQ3LCI0OSI6NDksIjUxIjo1MSwiNTQiOjU0fV0s
NTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAn
U0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnOworCittb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0OworCit9LHt9XX0se30sWzMyXSkoMzIpCit9
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9y
ZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5taW4uanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9u
cy5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzAwYTFlZDlkMGM3N2YxM2E3NzE5OThkZmYyZjMyZGQyNmFj
MDYwMQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9y
ZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLm1pbi5qcwpAQCAtMCwwICsxLDEzIEBACisvKioK
KyAqIFJlYWN0ICh3aXRoIGFkZG9ucykgdjE1LjUuNAorICoKKyAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAq
CisgKi8KKyFmdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmlu
ZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWUoKTtlbHNlIGlmKCJmdW5jdGlvbiI9
PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGUpO2Vsc2V7dmFyIHQ7dD0idW5k
ZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/
Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsdC5SZWFjdD1lKCl9fShm
dW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBvKGEscyl7aWYoIW5b
YV0pe2lmKCF0W2FdKXt2YXIgdT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtp
ZighcyYmdSlyZXR1cm4gdShhLCEwKTtpZihpKXJldHVybiBpKGEsITApO3ZhciBjPW5ldyBFcnJv
cigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2ErIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1Rf
Rk9VTkQiLGN9dmFyIHA9blthXT17ZXhwb3J0czp7fX07dFthXVswXS5jYWxsKHAuZXhwb3J0cyxm
dW5jdGlvbihlKXt2YXIgbj10W2FdWzFdW2VdO3JldHVybiBvKG58fGUpfSxwLHAuZXhwb3J0cyxl
LHQsbixyKX1yZXR1cm4gblthXS5leHBvcnRzfWZvcih2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2Yg
cmVxdWlyZSYmcmVxdWlyZSxhPTA7YTxyLmxlbmd0aDthKyspbyhyW2FdKTtyZXR1cm4gb30oezE6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3Jl
dHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLG5bIldlYmtpdCIrZV09Indl
YmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3QsblsibXMiK2VdPSJNUyIrdCxuWyJPIitlXT0ibyIr
dC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24gbyhlKXtpZihzW2VdKXJldHVybiBzW2VdO2lmKCFh
W2VdKXJldHVybiBlO3ZhciB0PWFbZV07Zm9yKHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0
eShuKSYmbiBpbiB1KXJldHVybiBzW2VdPXRbbl07cmV0dXJuIiJ9dmFyIGk9ZSgzOSksYT17YW5p
bWF0aW9uZW5kOnIoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkVuZCIpLGFuaW1hdGlvbml0ZXJhdGlv
bjpyKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDpyKCJB
bmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6cigiVHJhbnNpdGlvbiIs
IlRyYW5zaXRpb25FbmQiKX0scz17fSx1PXt9O2kuY2FuVXNlRE9NJiYodT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRl
IGEuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25pdGVyYXRpb24uYW5p
bWF0aW9uLGRlbGV0ZSBhLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVu
dCJpbiB3aW5kb3d8fGRlbGV0ZSBhLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbiksdC5leHBvcnRz
PW99LHszOTozOX1dLDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFjZSgvWz06
XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD17Ij0wIjoi
PSIsIj0yIjoiOiJ9O3JldHVybigiIisoIi4iPT09ZVswXSYmIiQiPT09ZVsxXT9lLnN1YnN0cmlu
ZygyKTplLnN1YnN0cmluZygxKSkpLnJlcGxhY2UoLyg9MHw9MikvZyxmdW5jdGlvbihlKXtyZXR1
cm4gdFtlXX0pfXZhciBpPXtlc2NhcGU6cix1bmVzY2FwZTpvfTt0LmV4cG9ydHM9aX0se31dLDM6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxOCksbz1lKDIzKSxpPXtsaW5r
U3RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKHRoaXMuc3RhdGVbZV0sby5jcmVhdGVTdGF0
ZUtleVNldHRlcih0aGlzLGUpKX19O3QuZXhwb3J0cz1pfSx7MTg6MTgsMjM6MjN9XSw0OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzQpLG89KGUoNDIpLGZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXM7aWYodC5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbj10Lmluc3RhbmNlUG9v
bC5wb3AoKTtyZXR1cm4gdC5jYWxsKG4sZSksbn1yZXR1cm4gbmV3IHQoZSl9KSxpPWZ1bmN0aW9u
KGUsdCl7dmFyIG49dGhpcztpZihuLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFu
Y2VQb29sLnBvcCgpO3JldHVybiBuLmNhbGwocixlLHQpLHJ9cmV0dXJuIG5ldyBuKGUsdCl9LGE9
ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIg
bz1yLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gci5jYWxsKG8sZSx0LG4pLG99cmV0dXJuIG5l
dyByKGUsdCxuKX0scz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzO2lmKG8uaW5zdGFuY2VQ
b29sLmxlbmd0aCl7dmFyIGk9by5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG8uY2FsbChpLGUs
dCxuLHIpLGl9cmV0dXJuIG5ldyBvKGUsdCxuLHIpfSx1PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7
ZSBpbnN0YW5jZW9mIHR8fHIoIjI1IiksZS5kZXN0cnVjdG9yKCksdC5pbnN0YW5jZVBvb2wubGVu
Z3RoPHQucG9vbFNpemUmJnQuaW5zdGFuY2VQb29sLnB1c2goZSl9LGM9byxwPWZ1bmN0aW9uKGUs
dCl7dmFyIG49ZTtyZXR1cm4gbi5pbnN0YW5jZVBvb2w9W10sbi5nZXRQb29sZWQ9dHx8YyxuLnBv
b2xTaXplfHwobi5wb29sU2l6ZT0xMCksbi5yZWxlYXNlPXUsbn0sbD17YWRkUG9vbGluZ1RvOnAs
b25lQXJndW1lbnRQb29sZXI6byx0d29Bcmd1bWVudFBvb2xlcjppLHRocmVlQXJndW1lbnRQb29s
ZXI6YSxmb3VyQXJndW1lbnRQb29sZXI6c307dC5leHBvcnRzPWx9LHszNDozNCw0Mjo0Mn1dLDU6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0NSksbz1lKDkpLGk9ZSgxMSks
YT1lKDIyKSxzPWUoMTApLHU9ZSgxNCksYz1lKDE1KSxwPWUoMjEpLGw9ZSgyNyksZj1lKDMzKSxk
PShlKDQ0KSxjLmNyZWF0ZUVsZW1lbnQpLGg9Yy5jcmVhdGVGYWN0b3J5LHk9Yy5jbG9uZUVsZW1l
bnQsdj1yLG09e0NoaWxkcmVuOnttYXA6by5tYXAsZm9yRWFjaDpvLmZvckVhY2gsY291bnQ6by5j
b3VudCx0b0FycmF5Om8udG9BcnJheSxvbmx5OmZ9LENvbXBvbmVudDppLFB1cmVDb21wb25lbnQ6
YSxjcmVhdGVFbGVtZW50OmQsY2xvbmVFbGVtZW50OnksaXNWYWxpZEVsZW1lbnQ6Yy5pc1ZhbGlk
RWxlbWVudCxQcm9wVHlwZXM6cCxjcmVhdGVDbGFzczpzLmNyZWF0ZUNsYXNzLGNyZWF0ZUZhY3Rv
cnk6aCxjcmVhdGVNaXhpbjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sRE9NOnUsdmVyc2lvbjpsLF9f
c3ByZWFkOnZ9O3QuZXhwb3J0cz1tfSx7MTA6MTAsMTE6MTEsMTQ6MTQsMTU6MTUsMjE6MjEsMjI6
MjIsMjc6MjcsMzM6MzMsNDQ6NDQsNDU6NDUsOTo5fV0sNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKCl7aWYoIW8pe3ZhciB0PWUoMjkpO289dC5fX1NFQ1JFVF9JTkpF
Q1RFRF9SRUFDVF9ET01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRH1yZXR1cm4gb312
YXIgbztuLmdldFJlYWN0RE9NPXJ9LHsyOToyOX1dLDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBl
RXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0
KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh
bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9
dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1
bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4
cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2Yg
dCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6
e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYm
KE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJv
dG9fXz10KX1mdW5jdGlvbiBhKGUpe3ZhciB0PSJ0cmFuc2l0aW9uIitlKyJUaW1lb3V0IixuPSJ0
cmFuc2l0aW9uIitlO3JldHVybiBmdW5jdGlvbihlKXtpZihlW25dKXtpZihudWxsPT1lW3RdKXJl
dHVybiBuZXcgRXJyb3IodCsiIHdhc24ndCBzdXBwbGllZCB0byBSZWFjdENTU1RyYW5zaXRpb25H
cm91cDogdGhpcyBjYW4gY2F1c2UgdW5yZWxpYWJsZSBhbmltYXRpb25zIGFuZCB3b24ndCBiZSBz
dXBwb3J0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdC4gU2VlIGh0dHBzOi8vZmIubWUv
cmVhY3QtYW5pbWF0aW9uLXRyYW5zaXRpb24tZ3JvdXAtdGltZW91dCBmb3IgbW9yZSBpbmZvcm1h
dGlvbi4iKTtpZigibnVtYmVyIiE9dHlwZW9mIGVbdF0pcmV0dXJuIG5ldyBFcnJvcih0KyIgbXVz
dCBiZSBhIG51bWJlciAoaW4gbWlsbGlzZWNvbmRzKSIpfX19dmFyIHM9ZSg0NSksdT1lKDUpLGM9
ZSg0NykscD1jKHUuaXNWYWxpZEVsZW1lbnQpLGw9ZSgyNiksZj1lKDgpLGQ9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gdCgpe3ZhciBuLGksYTtyKHRoaXMsdCk7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5n
dGgsYz1BcnJheShzKSxwPTA7cDxzO3ArKyljW3BdPWFyZ3VtZW50c1twXTtyZXR1cm4gbj1pPW8o
dGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGMpKSksaS5fd3JhcENoaWxkPWZ1bmN0
aW9uKGUpe3JldHVybiB1LmNyZWF0ZUVsZW1lbnQoZix7bmFtZTppLnByb3BzLnRyYW5zaXRpb25O
YW1lLGFwcGVhcjppLnByb3BzLnRyYW5zaXRpb25BcHBlYXIsZW50ZXI6aS5wcm9wcy50cmFuc2l0
aW9uRW50ZXIsbGVhdmU6aS5wcm9wcy50cmFuc2l0aW9uTGVhdmUsYXBwZWFyVGltZW91dDppLnBy
b3BzLnRyYW5zaXRpb25BcHBlYXJUaW1lb3V0LGVudGVyVGltZW91dDppLnByb3BzLnRyYW5zaXRp
b25FbnRlclRpbWVvdXQsbGVhdmVUaW1lb3V0OmkucHJvcHMudHJhbnNpdGlvbkxlYXZlVGltZW91
dH0sZSl9LGE9bixvKGksYSl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rp
b24oKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGwscyh7fSx0aGlzLnByb3BzLHtjaGlsZEZhY3Rv
cnk6dGhpcy5fd3JhcENoaWxkfSkpfSx0fSh1LkNvbXBvbmVudCk7ZC5kaXNwbGF5TmFtZT0iUmVh
Y3RDU1NUcmFuc2l0aW9uR3JvdXAiLGQucHJvcFR5cGVzPXt0cmFuc2l0aW9uTmFtZTpmLnByb3BU
eXBlcy5uYW1lLHRyYW5zaXRpb25BcHBlYXI6cC5ib29sLHRyYW5zaXRpb25FbnRlcjpwLmJvb2ws
dHJhbnNpdGlvbkxlYXZlOnAuYm9vbCx0cmFuc2l0aW9uQXBwZWFyVGltZW91dDphKCJBcHBlYXIi
KSx0cmFuc2l0aW9uRW50ZXJUaW1lb3V0OmEoIkVudGVyIiksdHJhbnNpdGlvbkxlYXZlVGltZW91
dDphKCJMZWF2ZSIpfSxkLmRlZmF1bHRQcm9wcz17dHJhbnNpdGlvbkFwcGVhcjohMSx0cmFuc2l0
aW9uRW50ZXI6ITAsdHJhbnNpdGlvbkxlYXZlOiEwfSx0LmV4cG9ydHM9ZH0sezI2OjI2LDQ1OjQ1
LDQ3OjQ3LDU6NSw4Ojh9XSw4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg
Y2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cg
bmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIo
KSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVu
Y3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVv
ZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3Qg
ZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBl
PU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1l
cmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJv
dG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9dmFyIGE9
ZSg1KSxzPWUoNiksdT1lKDQ3KSxjPXUoYS5pc1ZhbGlkRWxlbWVudCkscD1lKDM4KSxsPWUoMjUp
LGY9ZSgzMyksZD0xNyxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLGE7cih0aGlz
LHQpO2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoLGM9QXJyYXkodSksZj0wO2Y8dTtmKyspY1tm
XT1hcmd1bWVudHNbZl07cmV0dXJuIG49aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNv
bmNhdChjKSkpLGkuX2lzTW91bnRlZD0hMSxpLnRyYW5zaXRpb249ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByPXMuZ2V0UmVhY3RET00oKS5maW5kRE9NTm9kZShpKTtpZighcilyZXR1cm4gdm9pZCh0JiZ0
KCkpO3ZhciBvPWkucHJvcHMubmFtZVtlXXx8aS5wcm9wcy5uYW1lKyItIitlLGE9aS5wcm9wcy5u
YW1lW2UrIkFjdGl2ZSJdfHxvKyItYWN0aXZlIix1PW51bGwsYz1mdW5jdGlvbihlKXtlJiZlLnRh
cmdldCE9PXJ8fChjbGVhclRpbWVvdXQodSkscC5yZW1vdmVDbGFzcyhyLG8pLHAucmVtb3ZlQ2xh
c3MocixhKSxsLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIocixjKSx0JiZ0KCkpfTtwLmFkZENsYXNz
KHIsbyksaS5xdWV1ZUNsYXNzQW5kTm9kZShhLHIpLG4/KHU9c2V0VGltZW91dChjLG4pLGkudHJh
bnNpdGlvblRpbWVvdXRzLnB1c2godSkpOmwuYWRkRW5kRXZlbnRMaXN0ZW5lcihyLGMpfSxpLnF1
ZXVlQ2xhc3NBbmROb2RlPWZ1bmN0aW9uKGUsdCl7aS5jbGFzc05hbWVBbmROb2RlUXVldWUucHVz
aCh7Y2xhc3NOYW1lOmUsbm9kZTp0fSksaS50aW1lb3V0fHwoaS50aW1lb3V0PXNldFRpbWVvdXQo
aS5mbHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZSxkKSl9LGkuZmx1c2hDbGFzc05hbWVBbmROb2Rl
UXVldWU9ZnVuY3Rpb24oKXtpLl9pc01vdW50ZWQmJmkuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmZv
ckVhY2goZnVuY3Rpb24oZSl7cC5hZGRDbGFzcyhlLm5vZGUsZS5jbGFzc05hbWUpfSksaS5jbGFz
c05hbWVBbmROb2RlUXVldWUubGVuZ3RoPTAsaS50aW1lb3V0PW51bGx9LGkuY29tcG9uZW50V2ls
bEFwcGVhcj1mdW5jdGlvbihlKXtpLnByb3BzLmFwcGVhcj9pLnRyYW5zaXRpb24oImFwcGVhciIs
ZSxpLnByb3BzLmFwcGVhclRpbWVvdXQpOmUoKX0saS5jb21wb25lbnRXaWxsRW50ZXI9ZnVuY3Rp
b24oZSl7aS5wcm9wcy5lbnRlcj9pLnRyYW5zaXRpb24oImVudGVyIixlLGkucHJvcHMuZW50ZXJU
aW1lb3V0KTplKCl9LGkuY29tcG9uZW50V2lsbExlYXZlPWZ1bmN0aW9uKGUpe2kucHJvcHMubGVh
dmU/aS50cmFuc2l0aW9uKCJsZWF2ZSIsZSxpLnByb3BzLmxlYXZlVGltZW91dCk6ZSgpfSxhPW4s
byhpLGEpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1bmN0
aW9uKCl7dGhpcy5jbGFzc05hbWVBbmROb2RlUXVldWU9W10sdGhpcy50cmFuc2l0aW9uVGltZW91
dHM9W119LHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5faXNN
b3VudGVkPSEwfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3Ro
aXMuX2lzTW91bnRlZD0hMSx0aGlzLnRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQp
LHRoaXMudHJhbnNpdGlvblRpbWVvdXRzLmZvckVhY2goZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0
KGUpfSksdGhpcy5jbGFzc05hbWVBbmROb2RlUXVldWUubGVuZ3RoPTB9LHQucHJvdG90eXBlLnJl
bmRlcj1mdW5jdGlvbigpe3JldHVybiBmKHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0fShhLkNvbXBv
bmVudCk7aC5wcm9wVHlwZXM9e25hbWU6Yy5vbmVPZlR5cGUoW2Muc3RyaW5nLGMuc2hhcGUoe2Vu
dGVyOmMuc3RyaW5nLGxlYXZlOmMuc3RyaW5nLGFjdGl2ZTpjLnN0cmluZ30pLGMuc2hhcGUoe2Vu
dGVyOmMuc3RyaW5nLGVudGVyQWN0aXZlOmMuc3RyaW5nLGxlYXZlOmMuc3RyaW5nLGxlYXZlQWN0
aXZlOmMuc3RyaW5nLGFwcGVhcjpjLnN0cmluZyxhcHBlYXJBY3RpdmU6Yy5zdHJpbmd9KV0pLmlz
UmVxdWlyZWQsYXBwZWFyOmMuYm9vbCxlbnRlcjpjLmJvb2wsbGVhdmU6Yy5ib29sLGFwcGVhclRp
bWVvdXQ6Yy5udW1iZXIsZW50ZXJUaW1lb3V0OmMubnVtYmVyLGxlYXZlVGltZW91dDpjLm51bWJl
cn0sdC5leHBvcnRzPWh9LHsyNToyNSwzMzozMywzODozOCw0Nzo0Nyw1OjUsNjo2fV0sOTpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybigiIitlKS5yZXBs
YWNlKGIsIiQmLyIpfWZ1bmN0aW9uIG8oZSx0KXt0aGlzLmZ1bmM9ZSx0aGlzLmNvbnRleHQ9dCx0
aGlzLmNvdW50PTB9ZnVuY3Rpb24gaShlLHQsbil7dmFyIHI9ZS5mdW5jLG89ZS5jb250ZXh0O3Iu
Y2FsbChvLHQsZS5jb3VudCsrKX1mdW5jdGlvbiBhKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBl
O3ZhciByPW8uZ2V0UG9vbGVkKHQsbik7bShlLGksciksby5yZWxlYXNlKHIpfWZ1bmN0aW9uIHMo
ZSx0LG4scil7dGhpcy5yZXN1bHQ9ZSx0aGlzLmtleVByZWZpeD10LHRoaXMuZnVuYz1uLHRoaXMu
Y29udGV4dD1yLHRoaXMuY291bnQ9MH1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgbz1lLnJlc3VsdCxp
PWUua2V5UHJlZml4LGE9ZS5mdW5jLHM9ZS5jb250ZXh0LHU9YS5jYWxsKHMsdCxlLmNvdW50Kysp
O0FycmF5LmlzQXJyYXkodSk/Yyh1LG8sbix2LnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPXUm
Jih5LmlzVmFsaWRFbGVtZW50KHUpJiYodT15LmNsb25lQW5kUmVwbGFjZUtleSh1LGkrKCF1Lmtl
eXx8dCYmdC5rZXk9PT11LmtleT8iIjpyKHUua2V5KSsiLyIpK24pKSxvLnB1c2godSkpfWZ1bmN0
aW9uIGMoZSx0LG4sbyxpKXt2YXIgYT0iIjtudWxsIT1uJiYoYT1yKG4pKyIvIik7dmFyIGM9cy5n
ZXRQb29sZWQodCxhLG8saSk7bShlLHUsYykscy5yZWxlYXNlKGMpfWZ1bmN0aW9uIHAoZSx0LG4p
e2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIHI9W107cmV0dXJuIGMoZSxyLG51bGwsdCxuKSxyfWZ1
bmN0aW9uIGwoZSx0LG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbShlLGws
bnVsbCl9ZnVuY3Rpb24gZChlKXt2YXIgdD1bXTtyZXR1cm4gYyhlLHQsbnVsbCx2LnRoYXRSZXR1
cm5zQXJndW1lbnQpLHR9dmFyIGg9ZSg0KSx5PWUoMTUpLHY9ZSg0MCksbT1lKDM2KSxFPWgudHdv
QXJndW1lbnRQb29sZXIsZz1oLmZvdXJBcmd1bWVudFBvb2xlcixiPS9cLysvZztvLnByb3RvdHlw
ZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5mdW5jPW51bGwsdGhpcy5jb250ZXh0PW51bGws
dGhpcy5jb3VudD0wfSxoLmFkZFBvb2xpbmdUbyhvLEUpLHMucHJvdG90eXBlLmRlc3RydWN0b3I9
ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdD1udWxsLHRoaXMua2V5UHJlZml4PW51bGwsdGhpcy5mdW5j
PW51bGwsdGhpcy5jb250ZXh0PW51bGwsdGhpcy5jb3VudD0wfSxoLmFkZFBvb2xpbmdUbyhzLGcp
O3ZhciBfPXtmb3JFYWNoOmEsbWFwOnAsbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbDpjLGNv
dW50OmYsdG9BcnJheTpkfTt0LmV4cG9ydHM9X30sezE1OjE1LDM2OjM2LDQ6NCw0MDo0MH1dLDEw
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGV9ZnVu
Y3Rpb24gbyhlLHQpe3ZhciBuPWIuaGFzT3duUHJvcGVydHkodCk/Ylt0XTpudWxsO3cuaGFzT3du
UHJvcGVydHkodCkmJiJPVkVSUklERV9CQVNFIiE9PW4mJmYoIjczIix0KSxlJiYiREVGSU5FX01B
TlkiIT09biYmIkRFRklORV9NQU5ZX01FUkdFRCIhPT1uJiZmKCI3NCIsdCl9ZnVuY3Rpb24gaShl
LHQpe2lmKHQpeyJmdW5jdGlvbiI9PXR5cGVvZiB0JiZmKCI3NSIpLHkuaXNWYWxpZEVsZW1lbnQo
dCkmJmYoIjc2Iik7dmFyIG49ZS5wcm90b3R5cGUscj1uLl9fcmVhY3RBdXRvQmluZFBhaXJzO3Qu
aGFzT3duUHJvcGVydHkoRSkmJl8ubWl4aW5zKGUsdC5taXhpbnMpO2Zvcih2YXIgaSBpbiB0KWlm
KHQuaGFzT3duUHJvcGVydHkoaSkmJmkhPT1FKXt2YXIgYT10W2ldLHM9bi5oYXNPd25Qcm9wZXJ0
eShpKTtpZihvKHMsaSksXy5oYXNPd25Qcm9wZXJ0eShpKSlfW2ldKGUsYSk7ZWxzZXt2YXIgcD1i
Lmhhc093blByb3BlcnR5KGkpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIGEsZD1sJiYhcCYmIXMmJiEx
IT09dC5hdXRvYmluZDtpZihkKXIucHVzaChpLGEpLG5baV09YTtlbHNlIGlmKHMpe3ZhciBoPWJb
aV07KCFwfHwiREVGSU5FX01BTllfTUVSR0VEIiE9PWgmJiJERUZJTkVfTUFOWSIhPT1oKSYmZigi
NzciLGgsaSksIkRFRklORV9NQU5ZX01FUkdFRCI9PT1oP25baV09dShuW2ldLGEpOiJERUZJTkVf
TUFOWSI9PT1oJiYobltpXT1jKG5baV0sYSkpfWVsc2UgbltpXT1hfX19fWZ1bmN0aW9uIGEoZSx0
KXtpZih0KWZvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKHQuaGFzT3duUHJvcGVydHkobikp
e3ZhciBvPW4gaW4gXztvJiZmKCI3OCIsbik7dmFyIGk9biBpbiBlO2kmJmYoIjc5IixuKSxlW25d
PXJ9fX1mdW5jdGlvbiBzKGUsdCl7ZSYmdCYmIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09
dHlwZW9mIHR8fGYoIjgwIik7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHZv
aWQgMCE9PWVbbl0mJmYoIjgxIixuKSxlW25dPXRbbl0pO3JldHVybiBlfWZ1bmN0aW9uIHUoZSx0
KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPXQuYXBw
bHkodGhpcyxhcmd1bWVudHMpO2lmKG51bGw9PW4pcmV0dXJuIHI7aWYobnVsbD09cilyZXR1cm4g
bjt2YXIgbz17fTtyZXR1cm4gcyhvLG4pLHMobyxyKSxvfX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJu
IGZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5hcHBseSh0aGlzLGFyZ3VtZW50
cyl9fWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gdC5iaW5kKGUpfWZ1bmN0aW9uIGwoZSl7Zm9yKHZh
ciB0PWUuX19yZWFjdEF1dG9CaW5kUGFpcnMsbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIHI9dFtu
XSxvPXRbbisxXTtlW3JdPXAoZSxvKX19dmFyIGY9ZSgzNCksZD1lKDQ1KSxoPWUoMTEpLHk9ZSgx
NSksdj0oZSgyMCksZSgxOSkpLG09ZSg0MSksRT0oZSg0MiksZSg0NCksIm1peGlucyIpLGc9W10s
Yj17bWl4aW5zOiJERUZJTkVfTUFOWSIsc3RhdGljczoiREVGSU5FX01BTlkiLHByb3BUeXBlczoi
REVGSU5FX01BTlkiLGNvbnRleHRUeXBlczoiREVGSU5FX01BTlkiLGNoaWxkQ29udGV4dFR5cGVz
OiJERUZJTkVfTUFOWSIsZ2V0RGVmYXVsdFByb3BzOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdldElu
aXRpYWxTdGF0ZToiREVGSU5FX01BTllfTUVSR0VEIixnZXRDaGlsZENvbnRleHQ6IkRFRklORV9N
QU5ZX01FUkdFRCIscmVuZGVyOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbE1vdW50OiJERUZJ
TkVfTUFOWSIsY29tcG9uZW50RGlkTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsUmVj
ZWl2ZVByb3BzOiJERUZJTkVfTUFOWSIsc2hvdWxkQ29tcG9uZW50VXBkYXRlOiJERUZJTkVfT05D
RSIsY29tcG9uZW50V2lsbFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZFVwZGF0ZToi
REVGSU5FX01BTlkiLGNvbXBvbmVudFdpbGxVbm1vdW50OiJERUZJTkVfTUFOWSIsdXBkYXRlQ29t
cG9uZW50OiJPVkVSUklERV9CQVNFIn0sXz17ZGlzcGxheU5hbWU6ZnVuY3Rpb24oZSx0KXtlLmRp
c3BsYXlOYW1lPXR9LG1peGluczpmdW5jdGlvbihlLHQpe2lmKHQpZm9yKHZhciBuPTA7bjx0Lmxl
bmd0aDtuKyspaShlLHRbbl0pfSxjaGlsZENvbnRleHRUeXBlczpmdW5jdGlvbihlLHQpe2UuY2hp
bGRDb250ZXh0VHlwZXM9ZCh7fSxlLmNoaWxkQ29udGV4dFR5cGVzLHQpfSxjb250ZXh0VHlwZXM6
ZnVuY3Rpb24oZSx0KXtlLmNvbnRleHRUeXBlcz1kKHt9LGUuY29udGV4dFR5cGVzLHQpfSxnZXRE
ZWZhdWx0UHJvcHM6ZnVuY3Rpb24oZSx0KXtlLmdldERlZmF1bHRQcm9wcz9lLmdldERlZmF1bHRQ
cm9wcz11KGUuZ2V0RGVmYXVsdFByb3BzLHQpOmUuZ2V0RGVmYXVsdFByb3BzPXR9LHByb3BUeXBl
czpmdW5jdGlvbihlLHQpe2UucHJvcFR5cGVzPWQoe30sZS5wcm9wVHlwZXMsdCl9LHN0YXRpY3M6
ZnVuY3Rpb24oZSx0KXthKGUsdCl9LGF1dG9iaW5kOmZ1bmN0aW9uKCl7fX0sdz17cmVwbGFjZVN0
YXRlOmZ1bmN0aW9uKGUsdCl7dGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcyxl
KSx0JiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsdCwicmVwbGFjZVN0YXRlIil9
LGlzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMp
fX0sQT1mdW5jdGlvbigpe307ZChBLnByb3RvdHlwZSxoLnByb3RvdHlwZSx3KTt2YXIgVD17Y3Jl
YXRlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9cihmdW5jdGlvbihlLG4scil7dGhpcy5fX3JlYWN0
QXV0b0JpbmRQYWlycy5sZW5ndGgmJmwodGhpcyksdGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1u
LHRoaXMucmVmcz1tLHRoaXMudXBkYXRlcj1yfHx2LHRoaXMuc3RhdGU9bnVsbDt2YXIgbz10aGlz
LmdldEluaXRpYWxTdGF0ZT90aGlzLmdldEluaXRpYWxTdGF0ZSgpOm51bGw7KCJvYmplY3QiIT10
eXBlb2Ygb3x8QXJyYXkuaXNBcnJheShvKSkmJmYoIjgyIix0LmRpc3BsYXlOYW1lfHwiUmVhY3RD
b21wb3NpdGVDb21wb25lbnQiKSx0aGlzLnN0YXRlPW99KTt0LnByb3RvdHlwZT1uZXcgQSx0LnBy
b3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzPVtd
LGcuZm9yRWFjaChpLmJpbmQobnVsbCx0KSksaSh0LGUpLHQuZ2V0RGVmYXVsdFByb3BzJiYodC5k
ZWZhdWx0UHJvcHM9dC5nZXREZWZhdWx0UHJvcHMoKSksdC5wcm90b3R5cGUucmVuZGVyfHxmKCI4
MyIpO2Zvcih2YXIgbiBpbiBiKXQucHJvdG90eXBlW25dfHwodC5wcm90b3R5cGVbbl09bnVsbCk7
cmV0dXJuIHR9LGluamVjdGlvbjp7aW5qZWN0TWl4aW46ZnVuY3Rpb24oZSl7Zy5wdXNoKGUpfX19
O3QuZXhwb3J0cz1UfSx7MTE6MTEsMTU6MTUsMTk6MTksMjA6MjAsMzQ6MzQsNDE6NDEsNDI6NDIs
NDQ6NDQsNDU6NDV9XSwxMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUsdCxuKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWEsdGhpcy51cGRh
dGVyPW58fGl9dmFyIG89ZSgzNCksaT1lKDE5KSxhPShlKDMwKSxlKDQxKSk7ZSg0MiksZSg0NCk7
ci5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5j
dGlvbihlLHQpeyJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwh
PWUmJm8oIjg1IiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUpLHQmJnRoaXMu
dXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyx0LCJzZXRTdGF0ZSIpfSxyLnByb3RvdHlwZS5m
b3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRo
aXMpLGUmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyxlLCJmb3JjZVVwZGF0ZSIp
fTt0LmV4cG9ydHM9cn0sezE5OjE5LDMwOjMwLDM0OjM0LDQxOjQxLDQyOjQyLDQ0OjQ0fV0sMTI6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgzNSksbz17c2hvdWxkQ29tcG9u
ZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcyxlLHQpfX07dC5leHBvcnRzPW99
LHszNTozNX1dLDEzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtjdXJyZW50
Om51bGx9O3QuZXhwb3J0cz1yfSx7fV0sMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9ZSgxNSksbz1yLmNyZWF0ZUZhY3RvcnksaT17YTpvKCJhIiksYWJicjpvKCJhYmJyIiks
YWRkcmVzczpvKCJhZGRyZXNzIiksYXJlYTpvKCJhcmVhIiksYXJ0aWNsZTpvKCJhcnRpY2xlIiks
YXNpZGU6bygiYXNpZGUiKSxhdWRpbzpvKCJhdWRpbyIpLGI6bygiYiIpLGJhc2U6bygiYmFzZSIp
LGJkaTpvKCJiZGkiKSxiZG86bygiYmRvIiksYmlnOm8oImJpZyIpLGJsb2NrcXVvdGU6bygiYmxv
Y2txdW90ZSIpLGJvZHk6bygiYm9keSIpLGJyOm8oImJyIiksYnV0dG9uOm8oImJ1dHRvbiIpLGNh
bnZhczpvKCJjYW52YXMiKSxjYXB0aW9uOm8oImNhcHRpb24iKSxjaXRlOm8oImNpdGUiKSxjb2Rl
Om8oImNvZGUiKSxjb2w6bygiY29sIiksY29sZ3JvdXA6bygiY29sZ3JvdXAiKSxkYXRhOm8oImRh
dGEiKSxkYXRhbGlzdDpvKCJkYXRhbGlzdCIpLGRkOm8oImRkIiksZGVsOm8oImRlbCIpLGRldGFp
bHM6bygiZGV0YWlscyIpLGRmbjpvKCJkZm4iKSxkaWFsb2c6bygiZGlhbG9nIiksZGl2Om8oImRp
diIpLGRsOm8oImRsIiksZHQ6bygiZHQiKSxlbTpvKCJlbSIpLGVtYmVkOm8oImVtYmVkIiksZmll
bGRzZXQ6bygiZmllbGRzZXQiKSxmaWdjYXB0aW9uOm8oImZpZ2NhcHRpb24iKSxmaWd1cmU6bygi
ZmlndXJlIiksZm9vdGVyOm8oImZvb3RlciIpLGZvcm06bygiZm9ybSIpLGgxOm8oImgxIiksaDI6
bygiaDIiKSxoMzpvKCJoMyIpLGg0Om8oImg0IiksaDU6bygiaDUiKSxoNjpvKCJoNiIpLGhlYWQ6
bygiaGVhZCIpLGhlYWRlcjpvKCJoZWFkZXIiKSxoZ3JvdXA6bygiaGdyb3VwIiksaHI6bygiaHIi
KSxodG1sOm8oImh0bWwiKSxpOm8oImkiKSxpZnJhbWU6bygiaWZyYW1lIiksaW1nOm8oImltZyIp
LGlucHV0Om8oImlucHV0IiksaW5zOm8oImlucyIpLGtiZDpvKCJrYmQiKSxrZXlnZW46bygia2V5
Z2VuIiksbGFiZWw6bygibGFiZWwiKSxsZWdlbmQ6bygibGVnZW5kIiksbGk6bygibGkiKSxsaW5r
Om8oImxpbmsiKSxtYWluOm8oIm1haW4iKSxtYXA6bygibWFwIiksbWFyazpvKCJtYXJrIiksbWVu
dTpvKCJtZW51IiksbWVudWl0ZW06bygibWVudWl0ZW0iKSxtZXRhOm8oIm1ldGEiKSxtZXRlcjpv
KCJtZXRlciIpLG5hdjpvKCJuYXYiKSxub3NjcmlwdDpvKCJub3NjcmlwdCIpLG9iamVjdDpvKCJv
YmplY3QiKSxvbDpvKCJvbCIpLG9wdGdyb3VwOm8oIm9wdGdyb3VwIiksb3B0aW9uOm8oIm9wdGlv
biIpLG91dHB1dDpvKCJvdXRwdXQiKSxwOm8oInAiKSxwYXJhbTpvKCJwYXJhbSIpLHBpY3R1cmU6
bygicGljdHVyZSIpLHByZTpvKCJwcmUiKSxwcm9ncmVzczpvKCJwcm9ncmVzcyIpLHE6bygicSIp
LHJwOm8oInJwIikscnQ6bygicnQiKSxydWJ5Om8oInJ1YnkiKSxzOm8oInMiKSxzYW1wOm8oInNh
bXAiKSxzY3JpcHQ6bygic2NyaXB0Iiksc2VjdGlvbjpvKCJzZWN0aW9uIiksc2VsZWN0Om8oInNl
bGVjdCIpLHNtYWxsOm8oInNtYWxsIiksc291cmNlOm8oInNvdXJjZSIpLHNwYW46bygic3BhbiIp
LHN0cm9uZzpvKCJzdHJvbmciKSxzdHlsZTpvKCJzdHlsZSIpLHN1YjpvKCJzdWIiKSxzdW1tYXJ5
Om8oInN1bW1hcnkiKSxzdXA6bygic3VwIiksdGFibGU6bygidGFibGUiKSx0Ym9keTpvKCJ0Ym9k
eSIpLHRkOm8oInRkIiksdGV4dGFyZWE6bygidGV4dGFyZWEiKSx0Zm9vdDpvKCJ0Zm9vdCIpLHRo
Om8oInRoIiksdGhlYWQ6bygidGhlYWQiKSx0aW1lOm8oInRpbWUiKSx0aXRsZTpvKCJ0aXRsZSIp
LHRyOm8oInRyIiksdHJhY2s6bygidHJhY2siKSx1Om8oInUiKSx1bDpvKCJ1bCIpLHZhcjpvKCJ2
YXIiKSx2aWRlbzpvKCJ2aWRlbyIpLHdicjpvKCJ3YnIiKSxjaXJjbGU6bygiY2lyY2xlIiksY2xp
cFBhdGg6bygiY2xpcFBhdGgiKSxkZWZzOm8oImRlZnMiKSxlbGxpcHNlOm8oImVsbGlwc2UiKSxn
Om8oImciKSxpbWFnZTpvKCJpbWFnZSIpLGxpbmU6bygibGluZSIpLGxpbmVhckdyYWRpZW50Om8o
ImxpbmVhckdyYWRpZW50IiksbWFzazpvKCJtYXNrIikscGF0aDpvKCJwYXRoIikscGF0dGVybjpv
KCJwYXR0ZXJuIikscG9seWdvbjpvKCJwb2x5Z29uIikscG9seWxpbmU6bygicG9seWxpbmUiKSxy
YWRpYWxHcmFkaWVudDpvKCJyYWRpYWxHcmFkaWVudCIpLHJlY3Q6bygicmVjdCIpLHN0b3A6bygi
c3RvcCIpLHN2ZzpvKCJzdmciKSx0ZXh0Om8oInRleHQiKSx0c3BhbjpvKCJ0c3BhbiIpfTt0LmV4
cG9ydHM9aX0sezE1OjE1fV0sMTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtyZXR1cm4gdm9pZCAwIT09ZS5yZWZ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdm9pZCAw
IT09ZS5rZXl9dmFyIGk9ZSg0NSksYT1lKDEzKSxzPShlKDQ0KSxlKDMwKSxPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5KSx1PWUoMTYpLGM9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9f
c291cmNlOiEwfSxwPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEpe3JldHVybnskJHR5cGVvZjp1LHR5
cGU6ZSxrZXk6dCxyZWY6bixwcm9wczphLF9vd25lcjppfX07cC5jcmVhdGVFbGVtZW50PWZ1bmN0
aW9uKGUsdCxuKXt2YXIgaSx1PXt9LGw9bnVsbCxmPW51bGw7aWYobnVsbCE9dCl7cih0KSYmKGY9
dC5yZWYpLG8odCkmJihsPSIiK3Qua2V5KSx2b2lkIDA9PT10Ll9fc2VsZj9udWxsOnQuX19zZWxm
LHZvaWQgMD09PXQuX19zb3VyY2U/bnVsbDp0Ll9fc291cmNlO2ZvcihpIGluIHQpcy5jYWxsKHQs
aSkmJiFjLmhhc093blByb3BlcnR5KGkpJiYodVtpXT10W2ldKX12YXIgZD1hcmd1bWVudHMubGVu
Z3RoLTI7aWYoMT09PWQpdS5jaGlsZHJlbj1uO2Vsc2UgaWYoZD4xKXtmb3IodmFyIGg9QXJyYXko
ZCkseT0wO3k8ZDt5KyspaFt5XT1hcmd1bWVudHNbeSsyXTt1LmNoaWxkcmVuPWh9aWYoZSYmZS5k
ZWZhdWx0UHJvcHMpe3ZhciB2PWUuZGVmYXVsdFByb3BzO2ZvcihpIGluIHYpdm9pZCAwPT09dVtp
XSYmKHVbaV09dltpXSl9cmV0dXJuIHAoZSxsLGYsMCwwLGEuY3VycmVudCx1KX0scC5jcmVhdGVG
YWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsZSk7cmV0
dXJuIHQudHlwZT1lLHR9LHAuY2xvbmVBbmRSZXBsYWNlS2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJu
IHAoZS50eXBlLHQsZS5yZWYsZS5fc2VsZixlLl9zb3VyY2UsZS5fb3duZXIsZS5wcm9wcyl9LHAu
Y2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgdSxsPWkoe30sZS5wcm9wcyksZj1lLmtl
eSxkPWUucmVmLGg9KGUuX3NlbGYsZS5fc291cmNlLGUuX293bmVyKTtpZihudWxsIT10KXtyKHQp
JiYoZD10LnJlZixoPWEuY3VycmVudCksbyh0KSYmKGY9IiIrdC5rZXkpO3ZhciB5O2UudHlwZSYm
ZS50eXBlLmRlZmF1bHRQcm9wcyYmKHk9ZS50eXBlLmRlZmF1bHRQcm9wcyk7Zm9yKHUgaW4gdClz
LmNhbGwodCx1KSYmIWMuaGFzT3duUHJvcGVydHkodSkmJih2b2lkIDA9PT10W3VdJiZ2b2lkIDAh
PT15P2xbdV09eVt1XTpsW3VdPXRbdV0pfXZhciB2PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09
dilsLmNoaWxkcmVuPW47ZWxzZSBpZih2PjEpe2Zvcih2YXIgbT1BcnJheSh2KSxFPTA7RTx2O0Ur
KyltW0VdPWFyZ3VtZW50c1tFKzJdO2wuY2hpbGRyZW49bX1yZXR1cm4gcChlLnR5cGUsZixkLDAs
MCxoLGwpfSxwLmlzVmFsaWRFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBl
b2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT11fSx0LmV4cG9ydHM9cH0sezEzOjEzLDE2OjE2
LDMwOjMwLDQ0OjQ0LDQ1OjQ1fV0sMTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVh
Y3QuZWxlbWVudCIpfHw2MDEwMzt0LmV4cG9ydHM9cn0se31dLDE3OltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO3ZhciByPWUoMzQpLG89ZSg5KSxpPWUoMTUpLGE9ZSg0MCkscz0oZSg0Miks
ZSg0NCkse2NyZWF0ZTpmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fCFlfHxBcnJh
eS5pc0FycmF5KGUpKXJldHVybiBlO2lmKGkuaXNWYWxpZEVsZW1lbnQoZSkpcmV0dXJuIGU7MT09
PWUubm9kZVR5cGUmJnIoIjAiKTt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZSlvLm1hcEludG9XaXRo
S2V5UHJlZml4SW50ZXJuYWwoZVtuXSx0LG4sYS50aGF0UmV0dXJuc0FyZ3VtZW50KTtyZXR1cm4g
dH19KTt0LmV4cG9ydHM9c30sezE1OjE1LDM0OjM0LDQwOjQwLDQyOjQyLDQ0OjQ0LDk6OX1dLDE4
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aGlzLnZhbHVl
PWUsdGhpcy5yZXF1ZXN0Q2hhbmdlPXR9ZnVuY3Rpb24gbyhlKXt2YXIgdD17dmFsdWU6dm9pZCAw
PT09ZT9pLlByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZDplLmlzUmVxdWlyZWQscmVxdWVzdENoYW5n
ZTppLlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9O3JldHVybiBpLlByb3BUeXBlcy5zaGFwZSh0
KX12YXIgaT1lKDUpO3IuUHJvcFR5cGVzPXtsaW5rOm99LHQuZXhwb3J0cz1yfSx7NTo1fV0sMTk6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9KGUoNDQpLHtpc01vdW50ZWQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuITF9LGVucXVldWVDYWxsYmFjazpmdW5jdGlvbihlLHQpe30sZW5xdWV1
ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihl
LHQpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCl7fX0pO3QuZXhwb3J0cz1yfSx7NDQ6
NDR9XSwyMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTt0LmV4cG9ydHM9
cn0se31dLDIxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTUpLG89ci5p
c1ZhbGlkRWxlbWVudCxpPWUoNDcpO3QuZXhwb3J0cz1pKG8pfSx7MTU6MTUsNDc6NDd9XSwyMjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuKXt0aGlzLnByb3Bz
PWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPXUsdGhpcy51cGRhdGVyPW58fHN9ZnVuY3Rpb24g
bygpe312YXIgaT1lKDQ1KSxhPWUoMTEpLHM9ZSgxOSksdT1lKDQxKTtvLnByb3RvdHlwZT1hLnBy
b3RvdHlwZSxyLnByb3RvdHlwZT1uZXcgbyxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGkoci5w
cm90b3R5cGUsYS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEw
LHQuZXhwb3J0cz1yfSx7MTE6MTEsMTk6MTksNDE6NDEsNDU6NDV9XSwyMzpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7dmFyIG49e307cmV0dXJuIGZ1bmN0aW9u
KHIpe25bdF09cixlLnNldFN0YXRlKG4pfX12YXIgbz17Y3JlYXRlU3RhdGVTZXR0ZXI6ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyLG8saSxhLHMpe3ZhciB1PXQuY2FsbChlLG4scixv
LGksYSxzKTt1JiZlLnNldFN0YXRlKHUpfX0sY3JlYXRlU3RhdGVLZXlTZXR0ZXI6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj1lLl9fa2V5U2V0dGVyc3x8KGUuX19rZXlTZXR0ZXJzPXt9KTtyZXR1cm4gblt0
XXx8KG5bdF09cihlLHQpKX19O28uTWl4aW49e2NyZWF0ZVN0YXRlU2V0dGVyOmZ1bmN0aW9uKGUp
e3JldHVybiBvLmNyZWF0ZVN0YXRlU2V0dGVyKHRoaXMsZSl9LGNyZWF0ZVN0YXRlS2V5U2V0dGVy
OmZ1bmN0aW9uKGUpe3JldHVybiBvLmNyZWF0ZVN0YXRlS2V5U2V0dGVyKHRoaXMsZSl9fSx0LmV4
cG9ydHM9b30se31dLDI0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMzEp
LG89e2dldENoaWxkTWFwcGluZzpmdW5jdGlvbihlLHQpe3JldHVybiBlP3IoZSk6ZX0sbWVyZ2VD
aGlsZE1hcHBpbmdzOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gdC5oYXNPd25Q
cm9wZXJ0eShuKT90W25dOmVbbl19ZT1lfHx7fSx0PXR8fHt9O3ZhciByPXt9LG89W107Zm9yKHZh
ciBpIGluIGUpdC5oYXNPd25Qcm9wZXJ0eShpKT9vLmxlbmd0aCYmKHJbaV09byxvPVtdKTpvLnB1
c2goaSk7dmFyIGEscz17fTtmb3IodmFyIHUgaW4gdCl7aWYoci5oYXNPd25Qcm9wZXJ0eSh1KSlm
b3IoYT0wO2E8clt1XS5sZW5ndGg7YSsrKXt2YXIgYz1yW3VdW2FdO3Nbclt1XVthXV09bihjKX1z
W3VdPW4odSl9Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKylzW29bYV1dPW4ob1thXSk7cmV0dXJuIHN9
fTt0LmV4cG9ydHM9b30sezMxOjMxfV0sMjU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQsbil7ZS5hZGRFdmVudExpc3RlbmVyKHQsbiwhMSl9ZnVuY3Rpb24gbyhl
LHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9dmFyIGk9ZSgzOSksYT1lKDEpLHM9
W107aS5jYW5Vc2VET00mJmZ1bmN0aW9uKCl7dmFyIGU9YSgiYW5pbWF0aW9uZW5kIiksdD1hKCJ0
cmFuc2l0aW9uZW5kIik7ZSYmcy5wdXNoKGUpLHQmJnMucHVzaCh0KX0oKTt2YXIgdT17YWRkRW5k
RXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gdm9pZCB3
aW5kb3cuc2V0VGltZW91dCh0LDApO3MuZm9yRWFjaChmdW5jdGlvbihuKXtyKGUsbix0KX0pfSxy
ZW1vdmVFbmRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7MCE9PXMubGVuZ3RoJiZzLmZvckVh
Y2goZnVuY3Rpb24obil7byhlLG4sdCl9KX19O3QuZXhwb3J0cz11fSx7MToxLDM5OjM5fV0sMjY6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0
YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm
dW5jdGlvbiIpfWZ1bmN0aW9uIG8oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Io
InRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxl
ZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6
dH1mdW5jdGlvbiBpKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93
IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBh
IGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0
LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZToh
MCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0
UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX12YXIgYT1lKDQ1KSxzPWUoNSksdT1lKDI0
KSxjPWUoNDcpLHA9YyhzLmlzVmFsaWRFbGVtZW50KSxsPWUoNDApLGY9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gdCgpe3ZhciBuLGkscztyKHRoaXMsdCk7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgs
cD1BcnJheShjKSxsPTA7bDxjO2wrKylwW2xdPWFyZ3VtZW50c1tsXTtyZXR1cm4gbj1pPW8odGhp
cyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KHApKSksaS5zdGF0ZT17Y2hpbGRyZW46dS5n
ZXRDaGlsZE1hcHBpbmcoaS5wcm9wcy5jaGlsZHJlbil9LGkucGVyZm9ybUFwcGVhcj1mdW5jdGlv
bihlKXtpLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2VdPSEwO3ZhciB0PWkucmVmc1tlXTt0
LmNvbXBvbmVudFdpbGxBcHBlYXI/dC5jb21wb25lbnRXaWxsQXBwZWFyKGkuX2hhbmRsZURvbmVB
cHBlYXJpbmcuYmluZChpLGUpKTppLl9oYW5kbGVEb25lQXBwZWFyaW5nKGUpfSxpLl9oYW5kbGVE
b25lQXBwZWFyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tlXTt0LmNvbXBvbmVudERpZEFw
cGVhciYmdC5jb21wb25lbnREaWRBcHBlYXIoKSxkZWxldGUgaS5jdXJyZW50bHlUcmFuc2l0aW9u
aW5nS2V5c1tlXTt2YXIgbj11LmdldENoaWxkTWFwcGluZyhpLnByb3BzLmNoaWxkcmVuKTtuJiZu
Lmhhc093blByb3BlcnR5KGUpfHxpLnBlcmZvcm1MZWF2ZShlKX0saS5wZXJmb3JtRW50ZXI9ZnVu
Y3Rpb24oZSl7aS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tlXT0hMDt2YXIgdD1pLnJlZnNb
ZV07dC5jb21wb25lbnRXaWxsRW50ZXI/dC5jb21wb25lbnRXaWxsRW50ZXIoaS5faGFuZGxlRG9u
ZUVudGVyaW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUVudGVyaW5nKGUpfSxpLl9oYW5kbGVE
b25lRW50ZXJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5yZWZzW2VdO3QuY29tcG9uZW50RGlkRW50
ZXImJnQuY29tcG9uZW50RGlkRW50ZXIoKSxkZWxldGUgaS5jdXJyZW50bHlUcmFuc2l0aW9uaW5n
S2V5c1tlXTt2YXIgbj11LmdldENoaWxkTWFwcGluZyhpLnByb3BzLmNoaWxkcmVuKTtuJiZuLmhh
c093blByb3BlcnR5KGUpfHxpLnBlcmZvcm1MZWF2ZShlKX0saS5wZXJmb3JtTGVhdmU9ZnVuY3Rp
b24oZSl7aS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tlXT0hMDt2YXIgdD1pLnJlZnNbZV07
dC5jb21wb25lbnRXaWxsTGVhdmU/dC5jb21wb25lbnRXaWxsTGVhdmUoaS5faGFuZGxlRG9uZUxl
YXZpbmcuYmluZChpLGUpKTppLl9oYW5kbGVEb25lTGVhdmluZyhlKX0saS5faGFuZGxlRG9uZUxl
YXZpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5yZWZzW2VdO3QuY29tcG9uZW50RGlkTGVhdmUmJnQu
Y29tcG9uZW50RGlkTGVhdmUoKSxkZWxldGUgaS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1tl
XTt2YXIgbj11LmdldENoaWxkTWFwcGluZyhpLnByb3BzLmNoaWxkcmVuKTtuJiZuLmhhc093blBy
b3BlcnR5KGUpP2kucGVyZm9ybUVudGVyKGUpOmkuc2V0U3RhdGUoZnVuY3Rpb24odCl7dmFyIG49
YSh7fSx0LmNoaWxkcmVuKTtyZXR1cm4gZGVsZXRlIG5bZV0se2NoaWxkcmVuOm59fSl9LHM9bixv
KGkscyl9cmV0dXJuIGkodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQ9ZnVuY3Rp
b24oKXt0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzPXt9LHRoaXMua2V5c1RvRW50ZXI9
W10sdGhpcy5rZXlzVG9MZWF2ZT1bXX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLmNoaWxkcmVuO2Zvcih2YXIgdCBpbiBlKWVbdF0mJnRo
aXMucGVyZm9ybUFwcGVhcih0KX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9w
cz1mdW5jdGlvbihlKXt2YXIgdD11LmdldENoaWxkTWFwcGluZyhlLmNoaWxkcmVuKSxuPXRoaXMu
c3RhdGUuY2hpbGRyZW47dGhpcy5zZXRTdGF0ZSh7Y2hpbGRyZW46dS5tZXJnZUNoaWxkTWFwcGlu
Z3Mobix0KX0pO3ZhciByO2ZvcihyIGluIHQpe3ZhciBvPW4mJm4uaGFzT3duUHJvcGVydHkocik7
IXRbcl18fG98fHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbcl18fHRoaXMua2V5c1Rv
RW50ZXIucHVzaChyKX1mb3IociBpbiBuKXt2YXIgaT10JiZ0Lmhhc093blByb3BlcnR5KHIpOyFu
W3JdfHxpfHx0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW3JdfHx0aGlzLmtleXNUb0xl
YXZlLnB1c2gocil9fSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt2
YXIgZT10aGlzLmtleXNUb0VudGVyO3RoaXMua2V5c1RvRW50ZXI9W10sZS5mb3JFYWNoKHRoaXMu
cGVyZm9ybUVudGVyKTt2YXIgdD10aGlzLmtleXNUb0xlYXZlO3RoaXMua2V5c1RvTGVhdmU9W10s
dC5mb3JFYWNoKHRoaXMucGVyZm9ybUxlYXZlKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9u
KCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMuc3RhdGUuY2hpbGRyZW4pe3ZhciBuPXRoaXMu
c3RhdGUuY2hpbGRyZW5bdF07biYmZS5wdXNoKHMuY2xvbmVFbGVtZW50KHRoaXMucHJvcHMuY2hp
bGRGYWN0b3J5KG4pLHtyZWY6dCxrZXk6dH0pKX12YXIgcj1hKHt9LHRoaXMucHJvcHMpO3JldHVy
biBkZWxldGUgci50cmFuc2l0aW9uTGVhdmUsZGVsZXRlIHIudHJhbnNpdGlvbk5hbWUsZGVsZXRl
IHIudHJhbnNpdGlvbkFwcGVhcixkZWxldGUgci50cmFuc2l0aW9uRW50ZXIsZGVsZXRlIHIuY2hp
bGRGYWN0b3J5LGRlbGV0ZSByLnRyYW5zaXRpb25MZWF2ZVRpbWVvdXQsZGVsZXRlIHIudHJhbnNp
dGlvbkVudGVyVGltZW91dCxkZWxldGUgci50cmFuc2l0aW9uQXBwZWFyVGltZW91dCxkZWxldGUg
ci5jb21wb25lbnQscy5jcmVhdGVFbGVtZW50KHRoaXMucHJvcHMuY29tcG9uZW50LHIsZSl9LHR9
KHMuQ29tcG9uZW50KTtmLmRpc3BsYXlOYW1lPSJSZWFjdFRyYW5zaXRpb25Hcm91cCIsZi5wcm9w
VHlwZXM9e2NvbXBvbmVudDpwLmFueSxjaGlsZEZhY3Rvcnk6cC5mdW5jfSxmLmRlZmF1bHRQcm9w
cz17Y29tcG9uZW50OiJzcGFuIixjaGlsZEZhY3Rvcnk6bC50aGF0UmV0dXJuc0FyZ3VtZW50fSx0
LmV4cG9ydHM9Zn0sezI0OjI0LDQwOjQwLDQ1OjQ1LDQ3OjQ3LDU6NX1dLDI3OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz0iMTUuNS40In0se31dLDI4OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMyksbz1lKDUpLGk9KGUoNiksZSgxMikpLGE9ZSg3
KSxzPWUoMTcpLHU9ZSgyNiksYz1lKDM1KSxwPWUoMzcpO28uYWRkb25zPXtDU1NUcmFuc2l0aW9u
R3JvdXA6YSxMaW5rZWRTdGF0ZU1peGluOnIsUHVyZVJlbmRlck1peGluOmksVHJhbnNpdGlvbkdy
b3VwOnUsY3JlYXRlRnJhZ21lbnQ6cy5jcmVhdGUsc2hhbGxvd0NvbXBhcmU6Yyx1cGRhdGU6cH0s
dC5leHBvcnRzPW99LHsxMjoxMiwxNzoxNywyNjoyNiwzOjMsMzU6MzUsMzc6MzcsNTo1LDY6Niw3
Ojd9XSwyOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDQ1KSxvPWUoMjgp
LGk9cihvLHtfX1NFQ1JFVF9JTkpFQ1RFRF9SRUFDVF9ET01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lM
TF9CRV9GSVJFRDpudWxsLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxM
X0JFX0ZJUkVEOntSZWFjdEN1cnJlbnRPd25lcjplKDEzKX19KTt0LmV4cG9ydHM9aX0sezEzOjEz
LDI4OjI4LDQ1OjQ1fV0sMzA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRz
PSExfSx7fV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scil7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXt2YXIgbz1lO3ZvaWQg
MD09PW9bbl0mJm51bGwhPXQmJihvW25dPXQpfX1mdW5jdGlvbiBvKGUsdCl7aWYobnVsbD09ZSly
ZXR1cm4gZTt2YXIgbj17fTtyZXR1cm4gaShlLHIsbiksbn12YXIgaT0oZSgyKSxlKDM2KSk7ZSg0
NCk7dm9pZCAwIT09biYmbi5lbnYsdC5leHBvcnRzPW99KS5jYWxsKHRoaXMsdm9pZCAwKX0sezI6
MiwzNjozNiw0NDo0NH1dLDMyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7dmFyIHQ9ZSYmKG8mJmVbb118fGVbaV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJl
dHVybiB0fXZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixp
PSJAQGl0ZXJhdG9yIjt0LmV4cG9ydHM9cn0se31dLDMzOltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkuaXNWYWxpZEVsZW1lbnQoZSl8fG8oIjE0MyIp
LGV9dmFyIG89ZSgzNCksaT1lKDE1KTtlKDQyKTt0LmV4cG9ydHM9cn0sezE1OjE1LDM0OjM0LDQy
OjQyfV0sMzQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3Io
dmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xLG49Ik1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsg
dmlzaXQgaHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIu
aHRtbD9pbnZhcmlhbnQ9IitlLHI9MDtyPHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29t
cG9uZW50KGFyZ3VtZW50c1tyKzFdKTtuKz0iIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0
aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0
aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iO3ZhciBvPW5ldyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9
IkludmFyaWFudCBWaW9sYXRpb24iLG8uZnJhbWVzVG9Qb3A9MSxvfXQuZXhwb3J0cz1yfSx7fV0s
MzU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJu
IW8oZS5wcm9wcyx0KXx8IW8oZS5zdGF0ZSxuKX12YXIgbz1lKDQzKTt0LmV4cG9ydHM9cn0sezQz
OjQzfV0sMzY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3Jl
dHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUua2V5P2MuZXNjYXBlKGUua2V5KTp0
LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBvKGUsdCxuLGkpe3ZhciBmPXR5cGVvZiBlO2lmKCJ1bmRl
ZmluZWQiIT09ZiYmImJvb2xlYW4iIT09Znx8KGU9bnVsbCksbnVsbD09PWV8fCJzdHJpbmciPT09
Znx8Im51bWJlciI9PT1mfHwib2JqZWN0Ij09PWYmJmUuJCR0eXBlb2Y9PT1zKXJldHVybiBuKGks
ZSwiIj09PXQ/cCtyKGUsMCk6dCksMTt2YXIgZCxoLHk9MCx2PSIiPT09dD9wOnQrbDtpZihBcnJh
eS5pc0FycmF5KGUpKWZvcih2YXIgbT0wO208ZS5sZW5ndGg7bSsrKWQ9ZVttXSxoPXYrcihkLG0p
LHkrPW8oZCxoLG4saSk7ZWxzZXt2YXIgRT11KGUpO2lmKEUpe3ZhciBnLGI9RS5jYWxsKGUpO2lm
KEUhPT1lLmVudHJpZXMpZm9yKHZhciBfPTA7IShnPWIubmV4dCgpKS5kb25lOylkPWcudmFsdWUs
aD12K3IoZCxfKyspLHkrPW8oZCxoLG4saSk7ZWxzZSBmb3IoOyEoZz1iLm5leHQoKSkuZG9uZTsp
e3ZhciB3PWcudmFsdWU7dyYmKGQ9d1sxXSxoPXYrYy5lc2NhcGUod1swXSkrbCtyKGQsMCkseSs9
byhkLGgsbixpKSl9fWVsc2UgaWYoIm9iamVjdCI9PT1mKXt2YXIgQT1TdHJpbmcoZSk7YSgiMzEi
LCJbb2JqZWN0IE9iamVjdF0iPT09QT8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhl
KS5qb2luKCIsICIpKyJ9IjpBLCIiKX19cmV0dXJuIHl9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJu
IG51bGw9PWU/MDpvKGUsIiIsdCxuKX12YXIgYT1lKDM0KSxzPShlKDEzKSxlKDE2KSksdT1lKDMy
KSxjPShlKDQyKSxlKDIpKSxwPShlKDQ0KSwiLiIpLGw9IjoiO3QuZXhwb3J0cz1pfSx7MTM6MTMs
MTY6MTYsMjoyLDMyOjMyLDM0OjM0LDQyOjQyLDQ0OjQ0fV0sMzc6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmNvbmNh
dCgpOmUmJiJvYmplY3QiPT10eXBlb2YgZT9zKG5ldyBlLmNvbnN0cnVjdG9yLGUpOmV9ZnVuY3Rp
b24gbyhlLHQsbil7QXJyYXkuaXNBcnJheShlKXx8YSgiMSIsbixlKTt2YXIgcj10W25dO0FycmF5
LmlzQXJyYXkocil8fGEoIjIiLG4scil9ZnVuY3Rpb24gaShlLHQpe2lmKCJvYmplY3QiIT10eXBl
b2YgdCYmYSgiMyIseS5qb2luKCIsICIpLGYpLHUuY2FsbCh0LGYpKXJldHVybiAxIT09T2JqZWN0
LmtleXModCkubGVuZ3RoJiZhKCI0IixmKSx0W2ZdO3ZhciBuPXIoZSk7aWYodS5jYWxsKHQsZCkp
e3ZhciBtPXRbZF07bSYmIm9iamVjdCI9PXR5cGVvZiBtfHxhKCI1IixkLG0pLG4mJiJvYmplY3Qi
PT10eXBlb2Ygbnx8YSgiNiIsZCxuKSxzKG4sdFtkXSl9dS5jYWxsKHQsYykmJihvKGUsdCxjKSx0
W2NdLmZvckVhY2goZnVuY3Rpb24oZSl7bi5wdXNoKGUpfSkpLHUuY2FsbCh0LHApJiYobyhlLHQs
cCksdFtwXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24udW5zaGlmdChlKX0pKSx1LmNhbGwodCxsKSYm
KEFycmF5LmlzQXJyYXkoZSl8fGEoIjciLGwsZSksQXJyYXkuaXNBcnJheSh0W2xdKXx8YSgiOCIs
bCx0W2xdKSx0W2xdLmZvckVhY2goZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKXx8YSgiOCIs
bCx0W2xdKSxuLnNwbGljZS5hcHBseShuLGUpfSkpLHUuY2FsbCh0LGgpJiYoImZ1bmN0aW9uIiE9
dHlwZW9mIHRbaF0mJmEoIjkiLGgsdFtoXSksbj10W2hdKG4pKTtmb3IodmFyIEUgaW4gdCl2Lmhh
c093blByb3BlcnR5KEUpJiZ2W0VdfHwobltFXT1pKGVbRV0sdFtFXSkpO3JldHVybiBufXZhciBh
PWUoMzQpLHM9ZSg0NSksdT0oZSg0Mikse30uaGFzT3duUHJvcGVydHkpLGM9IiRwdXNoIixwPSIk
dW5zaGlmdCIsbD0iJHNwbGljZSIsZj0iJHNldCIsZD0iJG1lcmdlIixoPSIkYXBwbHkiLHk9W2Ms
cCxsLGYsZCxoXSx2PXt9O3kuZm9yRWFjaChmdW5jdGlvbihlKXt2W2VdPSEwfSksdC5leHBvcnRz
PWl9LHszNDozNCw0Mjo0Miw0NTo0NX1dLDM4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2Rl
O3ZhciByPW4ucXVlcnlTZWxlY3RvckFsbCh0KTtyZXR1cm4tMSE9PUFycmF5LnByb3RvdHlwZS5p
bmRleE9mLmNhbGwocixlKX12YXIgbz1lKDQyKSxpPXthZGRDbGFzczpmdW5jdGlvbihlLHQpe3Jl
dHVybi9ccy8udGVzdCh0KSYmbyghMSksdCYmKGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LmFkZCh0
KTppLmhhc0NsYXNzKGUsdCl8fChlLmNsYXNzTmFtZT1lLmNsYXNzTmFtZSsiICIrdCkpLGV9LHJl
bW92ZUNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuL1xzLy50ZXN0KHQpJiZvKCExKSx0JiYoZS5j
bGFzc0xpc3Q/ZS5jbGFzc0xpc3QucmVtb3ZlKHQpOmkuaGFzQ2xhc3MoZSx0KSYmKGUuY2xhc3NO
YW1lPWUuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxzKSIrdCsiKD86XFxzfCQp
IiwiZyIpLCIkMSIpLnJlcGxhY2UoL1xzKy9nLCIgIikucmVwbGFjZSgvXlxzKnxccyokL2csIiIp
KSksZX0sY29uZGl0aW9uQ2xhc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybihuP2kuYWRkQ2xhc3M6
aS5yZW1vdmVDbGFzcykoZSx0KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4vXHMvLnRl
c3QodCkmJm8oITEpLGUuY2xhc3NMaXN0PyEhdCYmZS5jbGFzc0xpc3QuY29udGFpbnModCk6KCIg
IitlLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiAiK3QrIiAiKT4tMX0sbWF0Y2hlc1NlbGVjdG9y
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUubWF0Y2hlc3x8ZS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8
fGUubW96TWF0Y2hlc1NlbGVjdG9yfHxlLm1zTWF0Y2hlc1NlbGVjdG9yfHxmdW5jdGlvbih0KXty
ZXR1cm4gcihlLHQpfSkuY2FsbChlLHQpfX07dC5leHBvcnRzPWl9LHs0Mjo0Mn1dLDM5OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5k
b3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksbz17
Y2FuVXNlRE9NOnIsY2FuVXNlV29ya2VyczoidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlcixjYW5V
c2VFdmVudExpc3RlbmVyczpyJiYhKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciYmIXdpbmRvdy5h
dHRhY2hFdmVudCksY2FuVXNlVmlld3BvcnQ6ciYmISF3aW5kb3cuc2NyZWVuLGlzSW5Xb3JrZXI6
IXJ9O3QuZXhwb3J0cz1vfSx7fV0sNDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG89ZnVuY3Rpb24oKXt9
O28udGhhdFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJuc1Ry
dWU9cighMCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1mdW5j
dGlvbigpe3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24oZSl7cmV0
dXJuIGV9LHQuZXhwb3J0cz1vfSx7fV0sNDE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9e307dC5leHBvcnRzPXJ9LHt9XSw0MjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuLHIsaSxhLHMsdSl7aWYobyh0KSwhZSl7dmFyIGM7aWYodm9pZCAw
PT09dCljPW5ldyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5v
bi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5k
IGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBwPVtuLHIsaSxhLHMsdV0s
bD0wO2M9bmV3IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBwW2wrK119
KSksYy5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyBjLmZyYW1lc1RvUG9wPTEsY319
dmFyIG89ZnVuY3Rpb24oZSl7fTt0LmV4cG9ydHM9cn0se31dLDQzOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwx
L2U9PTEvdDplIT09ZSYmdCE9PXR9ZnVuY3Rpb24gbyhlLHQpe2lmKHIoZSx0KSlyZXR1cm4hMDtp
Zigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9
PT10KXJldHVybiExO3ZhciBuPU9iamVjdC5rZXlzKGUpLG89T2JqZWN0LmtleXModCk7aWYobi5s
ZW5ndGghPT1vLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKylpZigh
aS5jYWxsKHQsblthXSl8fCFyKGVbblthXV0sdFtuW2FdXSkpcmV0dXJuITE7cmV0dXJuITB9dmFy
IGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9b30se31dLDQ0Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDApLG89cjt0LmV4cG9ydHM9b30s
ezQwOjQwfV0sNDU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtp
ZihudWxsPT09ZXx8dm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWdu
IGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3Qo
ZSl9dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3Qu
ZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgZT1u
ZXcgU3RyaW5nKCJhYmMiKTtpZihlWzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0WyJfIitTdHJp
bmcuZnJvbUNoYXJDb2RlKG4pXT1uO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLmpvaW4oIiIpKXJldHVy
biExO3ZhciByPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVh
Y2goZnVuY3Rpb24oZSl7cltlXT1lfSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5r
ZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9P
YmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHMsdT1yKGUpLGM9MTtjPGFyZ3Vt
ZW50cy5sZW5ndGg7YysrKXtuPU9iamVjdChhcmd1bWVudHNbY10pO2Zvcih2YXIgcCBpbiBuKWku
Y2FsbChuLHApJiYodVtwXT1uW3BdKTtpZihvKXtzPW8obik7Zm9yKHZhciBsPTA7bDxzLmxlbmd0
aDtsKyspYS5jYWxsKG4sc1tsXSkmJih1W3NbbF1dPW5bc1tsXV0pfX1yZXR1cm4gdX19LHt9XSw0
NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIsbyl7fXQu
ZXhwb3J0cz1yfSx7NDI6NDIsNDQ6NDQsNDk6NDl9XSw0NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj1lKDQ4KQorO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlLCEx
KX19LHs0ODo0OH1dLDQ4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNDAp
LG89ZSg0MiksaT0oZSg0NCksZSg0OSkpLGE9ZSg0Nik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbihlKXt2YXIgdD1lJiYodyYmZVt3XXx8ZVtBXSk7aWYoImZ1bmN0aW9uIj09dHlw
ZW9mIHQpcmV0dXJuIHR9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPT09dD8wIT09ZXx8MS9lPT0x
L3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIHUoZSl7dGhpcy5tZXNzYWdlPWUsdGhpcy5zdGFjaz0i
In1mdW5jdGlvbiBjKGUpe2Z1bmN0aW9uIG4obixyLGEscyxjLHAsbCl7aWYocz1zfHxULHA9cHx8
YSxsIT09aSlpZih0KW8oITEsIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkg
aXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBgUHJvcFR5
cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9m
Yi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO2Vsc2U7cmV0dXJuIG51bGw9PXJbYV0/bj9uZXcg
dShudWxsPT09clthXT8iVGhlICIrYysiIGAiK3ArImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGlu
IGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLiI6IlRoZSAiK2MrIiBgIitwKyJgIGlz
IG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmlu
ZWRgLiIpOm51bGw6ZShyLGEscyxjLHApfXZhciByPW4uYmluZChudWxsLCExKTtyZXR1cm4gci5p
c1JlcXVpcmVkPW4uYmluZChudWxsLCEwKSxyfWZ1bmN0aW9uIHAoZSl7ZnVuY3Rpb24gdCh0LG4s
cixvLGksYSl7dmFyIHM9dFtuXTtpZihnKHMpIT09ZSlyZXR1cm4gbmV3IHUoIkludmFsaWQgIitv
KyIgYCIraSsiYCBvZiB0eXBlIGAiK2IocykrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0
ZWQgYCIrZSsiYC4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlvbiBsKGUpe2Z1bmN0
aW9uIHQodCxuLHIsbyxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlBy
b3BlcnR5IGAiK2ErImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUg
bm90YXRpb24gaW5zaWRlIGFycmF5T2YuIik7dmFyIHM9dFtuXTtpZighQXJyYXkuaXNBcnJheShz
KSl7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgb2YgdHlwZSBgIitnKHMpKyJg
IHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIGFycmF5LiIpfWZvcih2YXIgYz0wO2M8
cy5sZW5ndGg7YysrKXt2YXIgcD1lKHMsYyxyLG8sYSsiWyIrYysiXSIsaSk7aWYocCBpbnN0YW5j
ZW9mIEVycm9yKXJldHVybiBwfXJldHVybiBudWxsfXJldHVybiBjKHQpfWZ1bmN0aW9uIGYoZSl7
ZnVuY3Rpb24gdCh0LG4scixvLGkpe2lmKCEodFtuXWluc3RhbmNlb2YgZSkpe3ZhciBhPWUubmFt
ZXx8VDtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK18odFtu
XSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYCIrYSsiYC4i
KX1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlvbiBkKGUpe2Z1bmN0aW9uIHQodCxuLHIs
byxpKXtmb3IodmFyIGE9dFtuXSxjPTA7YzxlLmxlbmd0aDtjKyspaWYocyhhLGVbY10pKXJldHVy
biBudWxsO3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHZhbHVlIGAiK2Er
ImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgb25lIG9mICIrSlNPTi5zdHJpbmdpZnko
ZSkrIi4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9jKHQpOnIudGhhdFJldHVybnNOdWxsfWZ1
bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBl
KXJldHVybiBuZXcgdSgiUHJvcGVydHkgYCIrYSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMg
aW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuIik7dmFyIHM9dFtuXSxj
PWcocyk7aWYoIm9iamVjdCIhPT1jKXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIithKyJg
IG9mIHR5cGUgYCIrYysiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhbiBvYmplY3Qu
Iik7Zm9yKHZhciBwIGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eShwKSl7dmFyIGw9ZShzLHAscixv
LGErIi4iK3AsaSk7aWYobCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsfXJldHVybiBudWxsfXJl
dHVybiBjKHQpfWZ1bmN0aW9uIHkoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe2Zvcih2YXIgcz0w
O3M8ZS5sZW5ndGg7cysrKXtpZihudWxsPT0oMCxlW3NdKSh0LG4scixvLGEsaSkpcmV0dXJuIG51
bGx9cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2ErImAgc3VwcGxpZWQgdG8gYCIrcisi
YC4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9jKHQpOnIudGhhdFJldHVybnNOdWxsfWZ1bmN0
aW9uIHYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe3ZhciBzPXRbbl0sYz1nKHMpO2lmKCJvYmpl
Y3QiIT09YylyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK2Mr
ImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYG9iamVjdGAuIik7Zm9yKHZhciBwIGlu
IGUpe3ZhciBsPWVbcF07aWYobCl7dmFyIGY9bChzLHAscixvLGErIi4iK3AsaSk7aWYoZilyZXR1
cm4gZn19cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rpb24gbSh0KXtzd2l0Y2godHlwZW9m
IHQpe2Nhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiEwO2Nh
c2UiYm9vbGVhbiI6cmV0dXJuIXQ7Y2FzZSJvYmplY3QiOmlmKEFycmF5LmlzQXJyYXkodCkpcmV0
dXJuIHQuZXZlcnkobSk7aWYobnVsbD09PXR8fGUodCkpcmV0dXJuITA7dmFyIHI9bih0KTtpZigh
cilyZXR1cm4hMTt2YXIgbyxpPXIuY2FsbCh0KTtpZihyIT09dC5lbnRyaWVzKXtmb3IoOyEobz1p
Lm5leHQoKSkuZG9uZTspaWYoIW0oby52YWx1ZSkpcmV0dXJuITF9ZWxzZSBmb3IoOyEobz1pLm5l
eHQoKSkuZG9uZTspe3ZhciBhPW8udmFsdWU7aWYoYSYmIW0oYVsxXSkpcmV0dXJuITF9cmV0dXJu
ITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRShlLHQpe3JldHVybiJzeW1ib2wiPT09ZXx8
KCJTeW1ib2wiPT09dFsiQEB0b1N0cmluZ1RhZyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s
JiZ0IGluc3RhbmNlb2YgU3ltYm9sKX1mdW5jdGlvbiBnKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVy
biBBcnJheS5pc0FycmF5KGUpPyJhcnJheSI6ZSBpbnN0YW5jZW9mIFJlZ0V4cD8ib2JqZWN0IjpF
KHQsZSk/InN5bWJvbCI6dH1mdW5jdGlvbiBiKGUpe3ZhciB0PWcoZSk7aWYoIm9iamVjdCI9PT10
KXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iZGF0ZSI7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4
cClyZXR1cm4icmVnZXhwIn1yZXR1cm4gdH1mdW5jdGlvbiBfKGUpe3JldHVybiBlLmNvbnN0cnVj
dG9yJiZlLmNvbnN0cnVjdG9yLm5hbWU/ZS5jb25zdHJ1Y3Rvci5uYW1lOlR9dmFyIHc9ImZ1bmN0
aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLEE9IkBAaXRlcmF0b3IiLFQ9Ijw8
YW5vbnltb3VzPj4iLHg9e2FycmF5OnAoImFycmF5IiksYm9vbDpwKCJib29sZWFuIiksZnVuYzpw
KCJmdW5jdGlvbiIpLG51bWJlcjpwKCJudW1iZXIiKSxvYmplY3Q6cCgib2JqZWN0Iiksc3RyaW5n
OnAoInN0cmluZyIpLHN5bWJvbDpwKCJzeW1ib2wiKSxhbnk6ZnVuY3Rpb24oKXtyZXR1cm4gYyhy
LnRoYXRSZXR1cm5zTnVsbCl9KCksYXJyYXlPZjpsLGVsZW1lbnQ6ZnVuY3Rpb24oKXtmdW5jdGlv
biB0KHQsbixyLG8saSl7dmFyIGE9dFtuXTtpZighZShhKSl7cmV0dXJuIG5ldyB1KCJJbnZhbGlk
ICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitnKGEpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4
cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX0o
KSxpbnN0YW5jZU9mOmYsbm9kZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixvKXtyZXR1
cm4gbShlW3RdKT9udWxsOm5ldyB1KCJJbnZhbGlkICIrcisiIGAiK28rImAgc3VwcGxpZWQgdG8g
YCIrbisiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuIil9cmV0dXJuIGMoZSl9KCksb2JqZWN0T2Y6
aCxvbmVPZjpkLG9uZU9mVHlwZTp5LHNoYXBlOnZ9O3JldHVybiB1LnByb3RvdHlwZT1FcnJvci5w
cm90b3R5cGUseC5jaGVja1Byb3BUeXBlcz1hLHguUHJvcFR5cGVzPXgseH19LHs0MDo0MCw0Mjo0
Miw0NDo0NCw0Njo0Niw0OTo0OX1dLDQ5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Qu
ZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSx7
fV19LHt9LFsyOV0pKDI5KX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3QuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzA3Yjk0MTkyYThmZTMxOTY1ZTFmMmFmOTEyYzNkZmYyMjZlM2I0YgotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0
LmpzCkBAIC0wLDAgKzEsMzk4NyBAQAorIC8qKgorICAqIFJlYWN0IHYxNS41LjQKKyAgKi8KKyhm
dW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09
InVuZGVmaW5lZCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT0i
ZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10sZil9ZWxzZXt2YXIgZztpZih0eXBlb2Yg
d2luZG93IT09InVuZGVmaW5lZCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1
bmRlZmluZWQiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09InVuZGVmaW5lZCIpe2c9
c2VsZn1lbHNle2c9dGhpc31nLlJlYWN0ID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxt
b2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtp
ZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1
aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3
IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxF
X05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBv
cnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhw
b3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0i
ZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0
dXJuIHN9KSh7MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKKy8qKgorICogRXNj
YXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWQKKyAqCisg
KiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuCisgKiBAcmV0dXJuIHtzdHJpbmd9
IHRoZSBlc2NhcGVkIGtleS4KKyAqLworCitmdW5jdGlvbiBlc2NhcGUoa2V5KSB7CisgIHZhciBl
c2NhcGVSZWdleCA9IC9bPTpdL2c7CisgIHZhciBlc2NhcGVyTG9va3VwID0geworICAgICc9Jzog
Jz0wJywKKyAgICAnOic6ICc9MicKKyAgfTsKKyAgdmFyIGVzY2FwZWRTdHJpbmcgPSAoJycgKyBr
ZXkpLnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkgeworICAgIHJldHVybiBl
c2NhcGVyTG9va3VwW21hdGNoXTsKKyAgfSk7CisKKyAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJp
bmc7Cit9CisKKy8qKgorICogVW5lc2NhcGUgYW5kIHVud3JhcCBrZXkgZm9yIGh1bWFuLXJlYWRh
YmxlIGRpc3BsYXkKKyAqCisgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIHVuZXNjYXBlLgorICog
QHJldHVybiB7c3RyaW5nfSB0aGUgdW5lc2NhcGVkIGtleS4KKyAqLworZnVuY3Rpb24gdW5lc2Nh
cGUoa2V5KSB7CisgIHZhciB1bmVzY2FwZVJlZ2V4ID0gLyg9MHw9MikvZzsKKyAgdmFyIHVuZXNj
YXBlckxvb2t1cCA9IHsKKyAgICAnPTAnOiAnPScsCisgICAgJz0yJzogJzonCisgIH07CisgIHZh
ciBrZXlTdWJzdHJpbmcgPSBrZXlbMF0gPT09ICcuJyAmJiBrZXlbMV0gPT09ICckJyA/IGtleS5z
dWJzdHJpbmcoMikgOiBrZXkuc3Vic3RyaW5nKDEpOworCisgIHJldHVybiAoJycgKyBrZXlTdWJz
dHJpbmcpLnJlcGxhY2UodW5lc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7CisgICAgcmV0
dXJuIHVuZXNjYXBlckxvb2t1cFttYXRjaF07CisgIH0pOworfQorCit2YXIgS2V5RXNjYXBlVXRp
bHMgPSB7CisgIGVzY2FwZTogZXNjYXBlLAorICB1bmVzY2FwZTogdW5lc2NhcGUKK307CisKK21v
ZHVsZS5leHBvcnRzID0gS2V5RXNjYXBlVXRpbHM7Cit9LHt9XSwyOltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisg
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3Zh
ciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKKworLyoqCisgKiBTdGF0aWMgcG9vbGVycy4gU2V2
ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZgorICogYXJn
dW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQs
IGJ1dCB3b3VsZAorICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4g
SW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0bworICogdGhlIENsYXNzIGl0c2VsZiwg
bm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhl
bQorICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLgorICovCit2YXIgb25lQXJndW1lbnRQ
b29sZXIgPSBmdW5jdGlvbiAoY29weUZpZWxkc0Zyb20pIHsKKyAgdmFyIEtsYXNzID0gdGhpczsK
KyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBL
bGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgY29weUZp
ZWxkc0Zyb20pOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4g
bmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKTsKKyAgfQorfTsKKwordmFyIHR3b0FyZ3VtZW50UG9v
bGVyID0gZnVuY3Rpb24gKGExLCBhMikgeworICB2YXIgS2xhc3MgPSB0aGlzOworICBpZiAoS2xh
c3MuaW5zdGFuY2VQb29sLmxlbmd0aCkgeworICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3Rh
bmNlUG9vbC5wb3AoKTsKKyAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpOworICAgIHJl
dHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7
CisgIH0KK307CisKK3ZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwg
YTMpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5n
dGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAg
S2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7CisgICAgcmV0dXJuIGluc3RhbmNlOwor
ICB9IGVsc2UgeworICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7CisgIH0KK307CisK
K3ZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMywgYTQpIHsKKyAg
dmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAg
ICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2Fs
bChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBl
bHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0KTsKKyAgfQorfTsKKwor
dmFyIHN0YW5kYXJkUmVsZWFzZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgdmFyIEtsYXNz
ID0gdGhpczsKKyAgIShpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSA/ICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RyeWluZyB0byByZWxlYXNlIGFu
IGluc3RhbmNlIGludG8gYSBwb29sIG9mIGEgZGlmZmVyZW50IHR5cGUuJykgOiBfcHJvZEludmFy
aWFudCgnMjUnKSA6IHZvaWQgMDsKKyAgaW5zdGFuY2UuZGVzdHJ1Y3RvcigpOworICBpZiAoS2xh
c3MuaW5zdGFuY2VQb29sLmxlbmd0aCA8IEtsYXNzLnBvb2xTaXplKSB7CisgICAgS2xhc3MuaW5z
dGFuY2VQb29sLnB1c2goaW5zdGFuY2UpOworICB9Cit9OworCit2YXIgREVGQVVMVF9QT09MX1NJ
WkUgPSAxMDsKK3ZhciBERUZBVUxUX1BPT0xFUiA9IG9uZUFyZ3VtZW50UG9vbGVyOworCisvKioK
KyAqIEF1Z21lbnRzIGBDb3B5Q29uc3RydWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1
Z21lbnRpbmcgb25seSB0aGUgY2xhc3MKKyAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGlu
ZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxkcy4gQW55IENvcHlDb25zdHJ1Y3RvcgorICogeW91IGdp
dmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29sU2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9y
IGEKKyAqIHByb3RvdHlwaWNhbCBgZGVzdHJ1Y3RvcmAgb24gaW5zdGFuY2VzLgorICoKKyAqIEBw
YXJhbSB7RnVuY3Rpb259IENvcHlDb25zdHJ1Y3RvciBDb25zdHJ1Y3RvciB0aGF0IGNhbiBiZSB1
c2VkIHRvIHJlc2V0LgorICogQHBhcmFtIHtGdW5jdGlvbn0gcG9vbGVyIEN1c3RvbWl6YWJsZSBw
b29sZXIuCisgKi8KK3ZhciBhZGRQb29saW5nVG8gPSBmdW5jdGlvbiAoQ29weUNvbnN0cnVjdG9y
LCBwb29sZXIpIHsKKyAgLy8gQ2FzdGluZyBhcyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhl
IGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgdHJ1c3RzCisgIC8vIGl0IHRvIG1hdGNoIHRoZSB0
eXBlIHdlIGRlY2xhcmVkCisgIHZhciBOZXdLbGFzcyA9IENvcHlDb25zdHJ1Y3RvcjsKKyAgTmV3
S2xhc3MuaW5zdGFuY2VQb29sID0gW107CisgIE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8
fCBERUZBVUxUX1BPT0xFUjsKKyAgaWYgKCFOZXdLbGFzcy5wb29sU2l6ZSkgeworICAgIE5ld0ts
YXNzLnBvb2xTaXplID0gREVGQVVMVF9QT09MX1NJWkU7CisgIH0KKyAgTmV3S2xhc3MucmVsZWFz
ZSA9IHN0YW5kYXJkUmVsZWFzZXI7CisgIHJldHVybiBOZXdLbGFzczsKK307CisKK3ZhciBQb29s
ZWRDbGFzcyA9IHsKKyAgYWRkUG9vbGluZ1RvOiBhZGRQb29saW5nVG8sCisgIG9uZUFyZ3VtZW50
UG9vbGVyOiBvbmVBcmd1bWVudFBvb2xlciwKKyAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3Vt
ZW50UG9vbGVyLAorICB0aHJlZUFyZ3VtZW50UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLAor
ICBmb3VyQXJndW1lbnRQb29sZXI6IGZvdXJBcmd1bWVudFBvb2xlcgorfTsKKworbW9kdWxlLmV4
cG9ydHMgPSBQb29sZWRDbGFzczsKK30seyIyNSI6MjUsIjI5IjoyOX1dLDM6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisK
Kyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDMxKTsKKwordmFyIFJlYWN0
Q2hpbGRyZW4gPSBfZGVyZXFfKDQpOwordmFyIFJlYWN0Q29tcG9uZW50ID0gX2RlcmVxXyg2KTsK
K3ZhciBSZWFjdFB1cmVDb21wb25lbnQgPSBfZGVyZXFfKDE3KTsKK3ZhciBSZWFjdENsYXNzID0g
X2RlcmVxXyg1KTsKK3ZhciBSZWFjdERPTUZhY3RvcmllcyA9IF9kZXJlcV8oOSk7Cit2YXIgUmVh
Y3RFbGVtZW50ID0gX2RlcmVxXygxMCk7Cit2YXIgUmVhY3RQcm9wVHlwZXMgPSBfZGVyZXFfKDE1
KTsKK3ZhciBSZWFjdFZlcnNpb24gPSBfZGVyZXFfKDE5KTsKKwordmFyIG9ubHlDaGlsZCA9IF9k
ZXJlcV8oMjQpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKwordmFyIGNyZWF0ZUVsZW1l
bnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudDsKK3ZhciBjcmVhdGVGYWN0b3J5ID0gUmVh
Y3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7Cit2YXIgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50
LmNsb25lRWxlbWVudDsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICB2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDIwKTsKKyAgdmFyIFJlYWN0RWxlbWVu
dFZhbGlkYXRvciA9IF9kZXJlcV8oMTIpOworICB2YXIgZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0
ZWQgPSBmYWxzZTsKKyAgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVh
dGVFbGVtZW50OworICBjcmVhdGVGYWN0b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0
ZUZhY3Rvcnk7CisgIGNsb25lRWxlbWVudCA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jbG9uZUVs
ZW1lbnQ7Cit9CisKK3ZhciBfX3NwcmVhZCA9IF9hc3NpZ247CisKK2lmICgiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIHdhcm5lZCA9IGZhbHNlOworICBfX3NwcmVhZCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJu
aW5nKHdhcm5lZCwgJ1JlYWN0Ll9fc3ByZWFkIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3Qg
YmUgdXNlZC4gVXNlICcgKyAnT2JqZWN0LmFzc2lnbiBkaXJlY3RseSBvciBhbm90aGVyIGhlbHBl
ciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgJyArICdzZW1hbnRpY3MuIFlvdSBtYXkgYmUgc2VlaW5n
IHRoaXMgd2FybmluZyBkdWUgdG8geW91ciBjb21waWxlci4gJyArICdTZWUgaHR0cHM6Ly9mYi5t
ZS9yZWFjdC1zcHJlYWQtZGVwcmVjYXRpb24gZm9yIG1vcmUgZGV0YWlscy4nKSA6IHZvaWQgMDsK
KyAgICB3YXJuZWQgPSB0cnVlOworICAgIHJldHVybiBfYXNzaWduLmFwcGx5KG51bGwsIGFyZ3Vt
ZW50cyk7CisgIH07Cit9CisKK3ZhciBSZWFjdCA9IHsKKworICAvLyBNb2Rlcm4KKworICBDaGls
ZHJlbjogeworICAgIG1hcDogUmVhY3RDaGlsZHJlbi5tYXAsCisgICAgZm9yRWFjaDogUmVhY3RD
aGlsZHJlbi5mb3JFYWNoLAorICAgIGNvdW50OiBSZWFjdENoaWxkcmVuLmNvdW50LAorICAgIHRv
QXJyYXk6IFJlYWN0Q2hpbGRyZW4udG9BcnJheSwKKyAgICBvbmx5OiBvbmx5Q2hpbGQKKyAgfSwK
KworICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50LAorICBQdXJlQ29tcG9uZW50OiBSZWFjdFB1
cmVDb21wb25lbnQsCisKKyAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCwKKyAgY2xvbmVF
bGVtZW50OiBjbG9uZUVsZW1lbnQsCisgIGlzVmFsaWRFbGVtZW50OiBSZWFjdEVsZW1lbnQuaXNW
YWxpZEVsZW1lbnQsCisKKyAgLy8gQ2xhc3NpYworCisgIFByb3BUeXBlczogUmVhY3RQcm9wVHlw
ZXMsCisgIGNyZWF0ZUNsYXNzOiBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzLAorICBjcmVhdGVGYWN0
b3J5OiBjcmVhdGVGYWN0b3J5LAorICBjcmVhdGVNaXhpbjogZnVuY3Rpb24gKG1peGluKSB7Cisg
ICAgLy8gQ3VycmVudGx5IGEgbm9vcC4gV2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIGFuZCB0cmFj
ZSBtaXhpbnMuCisgICAgcmV0dXJuIG1peGluOworICB9LAorCisgIC8vIFRoaXMgbG9va3MgRE9N
IHNwZWNpZmljIGJ1dCB0aGVzZSBhcmUgYWN0dWFsbHkgaXNvbW9ycGhpYyBoZWxwZXJzCisgIC8v
IHNpbmNlIHRoZXkgYXJlIGp1c3QgZ2VuZXJhdGluZyBET00gc3RyaW5ncy4KKyAgRE9NOiBSZWFj
dERPTUZhY3RvcmllcywKKworICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sCisKKyAgLy8gRGVwcmVj
YXRlZCBob29rIGZvciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuCisg
IF9fc3ByZWFkOiBfX3NwcmVhZAorfTsKKworLy8gVE9ETzogRml4IHRlc3RzIHNvIHRoYXQgdGhp
cyBkZXByZWNhdGlvbiB3YXJuaW5nIGRvZXNuJ3QgY2F1c2UgZmFpbHVyZXMuCitpZiAoImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkgewor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdCwgJ1Byb3BUeXBlcycsIHsKKyAgICAgIGdl
dDogZnVuY3Rpb24gKCkgeworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkLCAnQWNjZXNzaW5nIFByb3BUeXBl
cyB2aWEgdGhlIG1haW4gUmVhY3QgcGFja2FnZSBpcyBkZXByZWNhdGVkLiBVc2UgJyArICd0aGUg
cHJvcC10eXBlcyBwYWNrYWdlIGZyb20gbnBtIGluc3RlYWQuJykgOiB2b2lkIDA7CisgICAgICAg
IGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFJlYWN0
UHJvcFR5cGVzOworICAgICAgfQorICAgIH0pOworICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0g
UmVhY3Q7Cit9LHsiMTAiOjEwLCIxMiI6MTIsIjE1IjoxNSwiMTciOjE3LCIxOSI6MTksIjIwIjoy
MCwiMjQiOjI0LCIzMCI6MzAsIjMxIjozMSwiNCI6NCwiNSI6NSwiNiI6NiwiOSI6OX1dLDQ6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFBvb2xlZENsYXNzID0gX2RlcmVxXygyKTsK
K3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDEwKTsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBf
ZGVyZXFfKDI3KTsKK3ZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gX2RlcmVxXygyNik7CisKK3Zh
ciB0d29Bcmd1bWVudFBvb2xlciA9IFBvb2xlZENsYXNzLnR3b0FyZ3VtZW50UG9vbGVyOwordmFy
IGZvdXJBcmd1bWVudFBvb2xlciA9IFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcjsKKwor
dmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1wvKy9nOworZnVuY3Rpb24gZXNjYXBl
VXNlclByb3ZpZGVkS2V5KHRleHQpIHsKKyAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UodXNl
clByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTsKK30KKworLyoqCisgKiBQb29sZWRDbGFz
cyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5n
IGEgY2hpbGQKKyAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tz
LgorICoKKyAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmcKKyAqIEBwYXJhbSB7IWZ1
bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0
aC4KKyAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250
ZXh0IHdpdGguCisgKi8KK2Z1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rp
b24sIGZvckVhY2hDb250ZXh0KSB7CisgIHRoaXMuZnVuYyA9IGZvckVhY2hGdW5jdGlvbjsKKyAg
dGhpcy5jb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7CisgIHRoaXMuY291bnQgPSAwOworfQorRm9y
RWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeworICB0
aGlzLmZ1bmMgPSBudWxsOworICB0aGlzLmNvbnRleHQgPSBudWxsOworICB0aGlzLmNvdW50ID0g
MDsKK307CitQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29B
cmd1bWVudFBvb2xlcik7CisKK2Z1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZChib29rS2VlcGlu
ZywgY2hpbGQsIG5hbWUpIHsKKyAgdmFyIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLAorICAgICAg
Y29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7CisKKyAgZnVuYy5jYWxsKGNvbnRleHQsIGNo
aWxkLCBib29rS2VlcGluZy5jb3VudCsrKTsKK30KKworLyoqCisgKiBJdGVyYXRlcyB0aHJvdWdo
IGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVu
YC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3At
bGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uZm9yZWFjaAorICoKKyAqIFRoZSBwcm92aWRl
ZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoCisgKiBs
ZWFmIGNoaWxkLgorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29u
dGFpbmVyLgorICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuYworICogQHBh
cmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC4KKyAqLwor
ZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENv
bnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gY2hpbGRyZW47
CisgIH0KKyAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29s
ZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTsKKyAgdHJhdmVyc2VBbGxDaGlsZHJlbihj
aGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpOworICBGb3JFYWNo
Qm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpOworfQorCisvKioKKyAqIFBvb2xl
ZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZv
cm1pbmcgYSBjaGlsZAorICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJh
Y2tzLgorICoKKyAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZworICogQHBhcmFtIHshKn0g
bWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLgor
ICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFw
cGluZyB3aXRoLgorICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0g
bWFwcGluZyB3aXRoLgorICovCitmdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIGtl
eVByZWZpeCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHsKKyAgdGhpcy5yZXN1bHQgPSBtYXBS
ZXN1bHQ7CisgIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4OworICB0aGlzLmZ1bmMgPSBtYXBG
dW5jdGlvbjsKKyAgdGhpcy5jb250ZXh0ID0gbWFwQ29udGV4dDsKKyAgdGhpcy5jb3VudCA9IDA7
Cit9CitNYXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsK
KyAgdGhpcy5yZXN1bHQgPSBudWxsOworICB0aGlzLmtleVByZWZpeCA9IG51bGw7CisgIHRoaXMu
ZnVuYyA9IG51bGw7CisgIHRoaXMuY29udGV4dCA9IG51bGw7CisgIHRoaXMuY291bnQgPSAwOwor
fTsKK1Bvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgZm91ckFyZ3VtZW50
UG9vbGVyKTsKKworZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGlu
ZywgY2hpbGQsIGNoaWxkS2V5KSB7CisgIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQs
CisgICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsCisgICAgICBmdW5jID0g
Ym9va0tlZXBpbmcuZnVuYywKKyAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0Owor
CisKKyAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2Vl
cGluZy5jb3VudCsrKTsKKyAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7CisgICAg
bWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtl
eSwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTsKKyAgfSBlbHNlIGlmIChtYXBw
ZWRDaGlsZCAhPSBudWxsKSB7CisgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCht
YXBwZWRDaGlsZCkpIHsKKyAgICAgIG1hcHBlZENoaWxkID0gUmVhY3RFbGVtZW50LmNsb25lQW5k
UmVwbGFjZUtleShtYXBwZWRDaGlsZCwKKyAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkg
YW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzCisgICAgICAvLyB0cmF2ZXJzZUFs
bENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW4KKyAgICAgIGtleVBy
ZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBl
ZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcv
JyA6ICcnKSArIGNoaWxkS2V5KTsKKyAgICB9CisgICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQp
OworICB9Cit9CisKK2Z1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRy
ZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHsKKyAgdmFyIGVzY2FwZWRQcmVmaXgg
PSAnJzsKKyAgaWYgKHByZWZpeCAhPSBudWxsKSB7CisgICAgZXNjYXBlZFByZWZpeCA9IGVzY2Fw
ZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nOworICB9CisgIHZhciB0cmF2ZXJzZUNvbnRl
eHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMs
IGNvbnRleHQpOworICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGls
ZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpOworICBNYXBCb29rS2VlcGluZy5yZWxlYXNl
KHRyYXZlcnNlQ29udGV4dCk7Cit9CisKKy8qKgorICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0
eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0
LmNoaWxkcmVuLm1hcAorICoKKyAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5
LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2gKKyAqIGxlYWYgY2hpbGQuCisgKgorICog
QHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuCisgKiBAcGFyYW0g
e2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7Kn0g
Y29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi4KKyAqIEByZXR1cm4ge29iamVjdH0gT2Jq
ZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuCisgKi8KK2Z1bmN0aW9u
IG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9
PSBudWxsKSB7CisgICAgcmV0dXJuIGNoaWxkcmVuOworICB9CisgIHZhciByZXN1bHQgPSBbXTsK
KyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBm
dW5jLCBjb250ZXh0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gZm9yRWFjaFNp
bmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkgeworICByZXR1cm4g
bnVsbDsKK30KKworLyoqCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJl
IHR5cGljYWxseSBzcGVjaWZpZWQgYXMKKyAqIGBwcm9wcy5jaGlsZHJlbmAuCisgKgorICogU2Vl
IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1s
I3JlYWN0LmNoaWxkcmVuLmNvdW50CisgKgorICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRy
ZW4gdHJlZSBjb250YWluZXIuCisgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hp
bGRyZW4uCisgKi8KK2Z1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHsK
KyAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGls
ZER1bW15LCBudWxsKTsKK30KKworLyoqCisgKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0
eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZAorICogcmV0dXJuIGFu
IGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi4KKyAqCisgKiBTZWUg
aHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwj
cmVhY3QuY2hpbGRyZW4udG9hcnJheQorICovCitmdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7
CisgIHZhciByZXN1bHQgPSBbXTsKKyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGls
ZHJlbiwgcmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpOwor
ICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgUmVhY3RDaGlsZHJlbiA9IHsKKyAgZm9yRWFjaDog
Zm9yRWFjaENoaWxkcmVuLAorICBtYXA6IG1hcENoaWxkcmVuLAorICBtYXBJbnRvV2l0aEtleVBy
ZWZpeEludGVybmFsOiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsLAorICBjb3VudDogY291
bnRDaGlsZHJlbiwKKyAgdG9BcnJheTogdG9BcnJheQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBS
ZWFjdENoaWxkcmVuOworfSx7IjEwIjoxMCwiMiI6MiwiMjYiOjI2LCIyNyI6Mjd9XSw1OltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMjUp
LAorICAgIF9hc3NpZ24gPSBfZGVyZXFfKDMxKTsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gX2Rl
cmVxXyg2KTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDEwKTsKK3ZhciBSZWFjdFByb3BU
eXBlTG9jYXRpb25OYW1lcyA9IF9kZXJlcV8oMTQpOwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVl
ID0gX2RlcmVxXygxMyk7CisKK3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oMjgpOwordmFyIGlu
dmFyaWFudCA9IF9kZXJlcV8oMjkpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKwordmFy
IE1JWElOU19LRVkgPSAnbWl4aW5zJzsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFsbG93IHRo
ZSBjcmVhdGlvbiBvZiBhbm9ueW1vdXMgZnVuY3Rpb25zIHdoaWNoIGRvIG5vdAorLy8gaGF2ZSAu
bmFtZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGJlaW5nIGFzc2lnbmVkIHRvLgor
ZnVuY3Rpb24gaWRlbnRpdHkoZm4pIHsKKyAgcmV0dXJuIGZuOworfQorCisvKioKKyAqIFBvbGlj
aWVzIHRoYXQgZGVzY3JpYmUgbWV0aG9kcyBpbiBgUmVhY3RDbGFzc0ludGVyZmFjZWAuCisgKi8K
KworCit2YXIgaW5qZWN0ZWRNaXhpbnMgPSBbXTsKKworLyoqCisgKiBDb21wb3NpdGUgY29tcG9u
ZW50cyBhcmUgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgdGhhdCBjb21wb3NlIG90aGVyIGNvbXBv
c2l0ZQorICogb3IgaG9zdCBjb21wb25lbnRzLgorICoKKyAqIFRvIGNyZWF0ZSBhIG5ldyB0eXBl
IG9mIGBSZWFjdENsYXNzYCwgcGFzcyBhIHNwZWNpZmljYXRpb24gb2YKKyAqIHlvdXIgbmV3IGNs
YXNzIHRvIGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIg
Y2xhc3MKKyAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAg
bWV0aG9kLgorICoKKyAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moewor
ICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgKiAgICAgICByZXR1cm4gPGRpdj5IZWxsbyBX
b3JsZDwvZGl2PjsKKyAqICAgICB9CisgKiAgIH0pOworICoKKyAqIFRoZSBjbGFzcyBzcGVjaWZp
Y2F0aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmUK
KyAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVy
ZmFjZWAgZm9yCisgKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3RoZXIg
cHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGUKKyAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2ls
bCBiZSBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS4KKyAqCisgKiBAaW50ZXJmYWNlIFJlYWN0
Q2xhc3NJbnRlcmZhY2UKKyAqIEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RDbGFzc0ludGVyZmFj
ZSA9IHsKKworICAvKioKKyAgICogQW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRl
IHdoZW4gZGVmaW5pbmcgeW91ciBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHthcnJheX0K
KyAgICogQG9wdGlvbmFsCisgICAqLworICBtaXhpbnM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoq
CisgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBz
aG91bGQgYmUgZGVmaW5lZCBvbgorICAgKiB0aGUgY29tcG9uZW50J3MgY29uc3RydWN0b3IgaW5z
dGVhZCBvZiBpdHMgcHJvdG90eXBlIChzdGF0aWMgbWV0aG9kcykuCisgICAqCisgICAqIEB0eXBl
IHtvYmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgc3RhdGljczogJ0RFRklORV9NQU5Z
JywKKworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBv
bmVudC4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBwcm9wVHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2Yg
Y29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHtvYmpl
Y3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29udGV4dFR5cGVzOiAnREVGSU5FX01BTlkn
LAorCisgIC8qKgorICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgdGhpcyBjb21wb25l
bnQgc2V0cyBmb3IgaXRzIGNoaWxkcmVuLgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQorICAg
KiBAb3B0aW9uYWwKKyAgICovCisgIGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLAor
CisgIC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2RzID09PT0KKworICAvKioKKyAgICogSW52b2tl
ZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdp
bGwgYmUgc2V0IG9uCisgICAqIGB0aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNp
ZmllZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNrKS4KKyAgICoKKyAgICogVGhpcyBtZXRob2Qg
aXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3Qg
cmVseQorICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRlYC4KKyAgICoK
KyAgICogQHJldHVybiB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGdldERlZmF1
bHRQcm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCcsCisKKyAgLyoqCisgICAqIEludm9rZWQgb25j
ZSBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwg
YmUgdXNlZAorICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuCisgICAq
CisgICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICogICAgIHJldHVybiB7
CisgICAqICAgICAgIGlzT246IGZhbHNlLAorICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28o
KQorICAgKiAgICAgfQorICAgKiAgIH0KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0fQorICAg
KiBAb3B0aW9uYWwKKyAgICovCisgIGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdF
RCcsCisKKyAgLyoqCisgICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAq
LworICBnZXRDaGlsZENvbnRleHQ6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAg
KiBVc2VzIHByb3BzIGZyb20gYHRoaXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRl
YCB0byByZW5kZXIgdGhlCisgICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LgorICAgKgor
ICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMg
bWV0aG9kIGlzIGludm9rZWQsIHNvCisgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3Rz
LgorICAgKgorICAgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAqICAgICB2YXIgbmFtZSA9
IHRoaXMucHJvcHMubmFtZTsKKyAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9k
aXY+OworICAgKiAgIH0KKyAgICoKKyAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9CisgICAq
IEByZXF1aXJlZAorICAgKi8KKyAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLAorCisgIC8vID09PT0g
RGVsZWdhdGUgbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29t
cG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLgorICAg
KiBUaGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0cywgYnV0IGFueSBleHRlcm5hbCBzdWJzY3JpcHRp
b25zIG9yIGRhdGEgY3JlYXRlZAorICAgKiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQg
dXAgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YC4KKyAgICoKKyAgICogQG9wdGlvbmFsCisgICAq
LworICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIElu
dm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSBy
ZXByZXNlbnRhdGlvbi4KKyAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQg
dGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMg
YW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBo
YXMKKyAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUg
Zmlyc3QgdGltZS4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00g
ZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisgICAq
LworICBjb21wb25lbnREaWRNb3VudDogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52
b2tlZCBiZWZvcmUgdGhlIGNvbXBvbmVudCByZWNlaXZlcyBuZXcgcHJvcHMuCisgICAqCisgICAq
IFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9u
IGJ5IHVwZGF0aW5nIHRoZQorICAgKiBzdGF0ZSB1c2luZyBgdGhpcy5zZXRTdGF0ZWAuIEN1cnJl
bnQgcHJvcHMgYXJlIGFjY2Vzc2VkIHZpYSBgdGhpcy5wcm9wc2AuCisgICAqCisgICAqICAgY29t
cG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkg
eworICAgKiAgICAgdGhpcy5zZXRTdGF0ZSh7CisgICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzog
bmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMubGlrZUNvdW50CisgICAqICAgICB9KTsK
KyAgICogICB9CisgICAqCisgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBv
bmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wCisgICAqIHRyYW5zaXRpb24g
bWF5IGNhdXNlIGEgc3RhdGUgY2hhbmdlLCBidXQgdGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlLiBJ
ZiB5b3UKKyAgICogbmVlZCBpdCwgeW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9u
ZW50V2lsbFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAg
ICogQG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAnREVGSU5F
X01BTlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21w
b25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2YKKyAgICogcmVjZWl2aW5nIG5l
dyBwcm9wcywgc3RhdGUgYW5kL29yIGNvbnRleHQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFu
IG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0
aGUKKyAgICogdHJhbnNpdGlvbiB0byB0aGUgbmV3IHByb3BzL3N0YXRlL2NvbnRleHQgd2lsbCBu
b3QgcmVxdWlyZSBhIGNvbXBvbmVudAorICAgKiB1cGRhdGUuCisgICAqCisgICAqICAgc2hvdWxk
Q29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRl
eHQpIHsKKyAgICogICAgIHJldHVybiAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKSB8fAor
ICAgKiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fAorICAgKiAgICAgICAh
ZXF1YWwobmV4dENvbnRleHQsIHRoaXMuY29udGV4dCk7CisgICAqICAgfQorICAgKgorICAgKiBA
cGFyYW0ge29iamVjdH0gbmV4dFByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRl
CisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHQKKyAgICogQHJldHVybiB7Ym9vbGVh
bn0gVHJ1ZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUuCisgICAqIEBvcHRpb25hbAor
ICAgKi8KKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiAnREVGSU5FX09OQ0UnLAorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRv
IGEgdHJhbnNpdGlvbiBmcm9tCisgICAqIGB0aGlzLnByb3BzYCwgYHRoaXMuc3RhdGVgIGFuZCBg
dGhpcy5jb250ZXh0YCB0byBgbmV4dFByb3BzYCwgYG5leHRTdGF0ZWAKKyAgICogYW5kIGBuZXh0
Q29udGV4dGAuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZv
cm0gcHJlcGFyYXRpb24gYmVmb3JlIGFuIHVwZGF0ZSBvY2N1cnMuCisgICAqCisgICAqIE5PVEU6
IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC4KKyAg
ICoKKyAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9
IG5leHRTdGF0ZQorICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0CisgICAqIEBwYXJh
bSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQG9wdGlvbmFs
CisgICAqLworICBjb21wb25lbnRXaWxsVXBkYXRlOiAnREVGSU5FX01BTlknLAorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCdzIERPTSByZXByZXNlbnRhdGlvbiBoYXMg
YmVlbiB1cGRhdGVkLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBv
cGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhcworICAgKiBiZWVuIHVwZGF0
ZWQuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHMKKyAgICogQHBhcmFtIHs/
b2JqZWN0fSBwcmV2U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q29udGV4dAorICAg
KiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0
aGUgY29tcG9uZW50LgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudERpZFVwZGF0
ZTogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25l
bnQgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmUKKyAgICog
aXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuCisgICAqCisgICAqIFVzZSB0aGlzIGFz
IGFuIG9wcG9ydHVuaXR5IHRvIGRlYWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy4KKyAg
ICoKKyAgICogTk9URTogVGhlcmUgaXMgbm8gYGNvbXBvbmVudERpZFVubW91bnRgIHNpbmNlIHlv
dXIgY29tcG9uZW50IHdpbGwgaGF2ZSBiZWVuCisgICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50
LgorICAgKgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAn
REVGSU5FX01BTlknLAorCisgIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09CisKKyAgLyoq
CisgICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXBy
ZXNlbnRhdGlvbi4KKyAgICoKKyAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0
J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uCisgICAqIFNvcGhpc3Rp
Y2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLgorICAgKgorICAgKiBAcGFy
YW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5h
bAorICAgKiBAb3ZlcnJpZGFibGUKKyAgICovCisgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURF
X0JBU0UnCisKK307CisKKy8qKgorICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24g
a2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICoKKyAqIEFsdGhvdWdoIHRo
ZXNlIGFyZSBkZWNsYXJlZCBsaWtlIGluc3RhbmNlIHByb3BlcnRpZXMgaW4gdGhlIHNwZWNpZmlj
YXRpb24KKyAqIHdoZW4gZGVmaW5pbmcgY2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3Ng
LCB0aGV5IGFyZSBhY3R1YWxseSBzdGF0aWMKKyAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUg
Y29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlCisgKiBiZWluZyBz
dGF0aWMsIHRoZXkgbXVzdCBiZSBkZWZpbmVkIG91dHNpZGUgb2YgdGhlICJzdGF0aWNzIiBrZXkg
dW5kZXIKKyAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC4KKyAq
LwordmFyIFJFU0VSVkVEX1NQRUNfS0VZUyA9IHsKKyAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uIChD
b25zdHJ1Y3RvciwgZGlzcGxheU5hbWUpIHsKKyAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9
IGRpc3BsYXlOYW1lOworICB9LAorICBtaXhpbnM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgbWl4
aW5zKSB7CisgICAgaWYgKG1peGlucykgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhp
bnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0
b3IsIG1peGluc1tpXSk7CisgICAgICB9CisgICAgfQorICB9LAorICBjaGlsZENvbnRleHRUeXBl
czogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcykgeworICAgIGlmICgi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlwZURlZihD
b25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMsICdjaGlsZENvbnRleHQnKTsKKyAgICB9Cisg
ICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rv
ci5jaGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0VHlwZXMpOworICB9LAorICBjb250ZXh0
VHlwZXM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7CisgICAgaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENv
bnN0cnVjdG9yLCBjb250ZXh0VHlwZXMsICdjb250ZXh0Jyk7CisgICAgfQorICAgIENvbnN0cnVj
dG9yLmNvbnRleHRUeXBlcyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcywg
Y29udGV4dFR5cGVzKTsKKyAgfSwKKyAgLyoqCisgICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0
UHJvcHMgd2hpY2ggc2hvdWxkIG1vdmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlcworICAgKiBh
dXRvbWF0aWMgbWVyZ2luZy4KKyAgICovCisgIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gKENv
bnN0cnVjdG9yLCBnZXREZWZhdWx0UHJvcHMpIHsKKyAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVm
YXVsdFByb3BzKSB7CisgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBjcmVhdGVN
ZXJnZWRSZXN1bHRGdW5jdGlvbihDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsIGdldERlZmF1
bHRQcm9wcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9w
cyA9IGdldERlZmF1bHRQcm9wczsKKyAgICB9CisgIH0sCisgIHByb3BUeXBlczogZnVuY3Rpb24g
KENvbnN0cnVjdG9yLCBwcm9wVHlwZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHByb3BUeXBl
cywgJ3Byb3AnKTsKKyAgICB9CisgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gX2Fzc2lnbih7
fSwgQ29uc3RydWN0b3IucHJvcFR5cGVzLCBwcm9wVHlwZXMpOworICB9LAorICBzdGF0aWNzOiBm
dW5jdGlvbiAoQ29uc3RydWN0b3IsIHN0YXRpY3MpIHsKKyAgICBtaXhTdGF0aWNTcGVjSW50b0Nv
bXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7CisgIH0sCisgIGF1dG9iaW5kOiBmdW5jdGlv
biAoKSB7fSB9OworCitmdW5jdGlvbiB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVE
ZWYsIGxvY2F0aW9uKSB7CisgIGZvciAodmFyIHByb3BOYW1lIGluIHR5cGVEZWYpIHsKKyAgICBp
ZiAodHlwZURlZi5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgIC8vIHVzZSBhIHdh
cm5pbmcgaW5zdGVhZCBvZiBhbiBpbnZhcmlhbnQgc28gY29tcG9uZW50cworICAgICAgLy8gZG9u
J3Qgc2hvdyB1cCBpbiBwcm9kIGJ1dCBvbmx5IGluIF9fREVWX18KKyAgICAgICJkZXZlbG9wbWVu
dCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09
PSAnZnVuY3Rpb24nLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEg
ZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICsgJ1JlYWN0LlByb3BUeXBlcy4nLCBDb25zdHJ1Y3Rv
ci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVz
W2xvY2F0aW9uXSwgcHJvcE5hbWUpIDogdm9pZCAwOworICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpIHsKKyAgdmFy
IHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpID8g
UmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXSA6IG51bGw7CisKKyAgLy8gRGlzYWxsb3cgb3ZlcnJp
ZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC4KKyAg
aWYgKFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICEoc3BlY1Bv
bGljeSA9PT0gJ09WRVJSSURFX0JBU0UnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1w
dGluZyB0byBvdmVycmlkZSBgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1
cmUgdGhhdCB5b3VyIG1ldGhvZCBuYW1lcyBkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhv
ZHMuJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzMnLCBuYW1lKSA6IHZvaWQgMDsKKyAgfQor
CisgIC8vIERpc2FsbG93IGRlZmluaW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4
cGxpY2l0bHkgYWxsb3dlZC4KKyAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHsKKyAgICAhKHNwZWNQ
b2xpY3kgPT09ICdERUZJTkVfTUFOWScgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01F
UkdFRCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNg
IG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBk
dWUgdG8gYSBtaXhpbi4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3NCcsIG5hbWUpIDogdm9p
ZCAwOworICB9Cit9CisKKy8qKgorICogTWl4aW4gaGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5
IHZhbGlkYXRpb24gYW5kIHJlc2VydmVkCisgKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hlbiBidWls
ZGluZyBSZWFjdCBjbGFzc2VzLgorICovCitmdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChD
b25zdHJ1Y3Rvciwgc3BlYykgeworICBpZiAoIXNwZWMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YXIgdHlwZW9mU3BlYyA9IHR5cGVvZiBzcGVj
OworICAgICAgdmFyIGlzTWl4aW5WYWxpZCA9IHR5cGVvZlNwZWMgPT09ICdvYmplY3QnICYmIHNw
ZWMgIT09IG51bGw7CisKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdh
cm5pbmcoaXNNaXhpblZhbGlkLCAnJXM6IFlvdVwncmUgYXR0ZW1wdGluZyB0byBpbmNsdWRlIGEg
bWl4aW4gdGhhdCBpcyBlaXRoZXIgbnVsbCAnICsgJ29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRo
ZSBtaXhpbnMgaW5jbHVkZWQgYnkgdGhlIGNvbXBvbmVudCwgJyArICdhcyB3ZWxsIGFzIGFueSBt
aXhpbnMgdGhleSBpbmNsdWRlIHRoZW1zZWx2ZXMuICcgKyAnRXhwZWN0ZWQgb2JqZWN0IGJ1dCBn
b3QgJXMuJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBzcGVjID09
PSBudWxsID8gbnVsbCA6IHR5cGVvZlNwZWMpIDogdm9pZCAwOworICAgIH0KKworICAgIHJldHVy
bjsKKyAgfQorCisgICEodHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicpID8gImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91XCdy
ZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1p
eGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlh
bnQoJzc1JykgOiB2b2lkIDA7CisgICEhUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMp
ID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVh
Y3RDbGFzczogWW91XCdyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBhcyBhIG1peGlu
LiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlhbnQo
Jzc2JykgOiB2b2lkIDA7CisKKyAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlOwor
ICB2YXIgYXV0b0JpbmRQYWlycyA9IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzOworCisgIC8v
IEJ5IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3Vy
ZSB0aGUgc2FtZQorICAvLyBjaGFpbmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0
aCBERUZJTkVfTUFOWSBwb2xpY3ksIHdoZXRoZXIKKyAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVm
b3JlIG9yIGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuCisgIGlmIChzcGVjLmhhc093
blByb3BlcnR5KE1JWElOU19LRVkpKSB7CisgICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhD
b25zdHJ1Y3Rvciwgc3BlYy5taXhpbnMpOworICB9CisKKyAgZm9yICh2YXIgbmFtZSBpbiBzcGVj
KSB7CisgICAgaWYgKCFzcGVjLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBjb250aW51
ZTsKKyAgICB9CisKKyAgICBpZiAobmFtZSA9PT0gTUlYSU5TX0tFWSkgeworICAgICAgLy8gV2Ug
aGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAg
ICAgY29udGludWU7CisgICAgfQorCisgICAgdmFyIHByb3BlcnR5ID0gc3BlY1tuYW1lXTsKKyAg
ICB2YXIgaXNBbHJlYWR5RGVmaW5lZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpOworICAg
IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSk7CisKKyAgICBp
ZiAoUkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBSRVNF
UlZFRF9TUEVDX0tFWVNbbmFtZV0oQ29uc3RydWN0b3IsIHByb3BlcnR5KTsKKyAgICB9IGVsc2Ug
eworICAgICAgLy8gU2V0dXAgbWV0aG9kcyBvbiBwcm90b3R5cGU6CisgICAgICAvLyBUaGUgZm9s
bG93aW5nIG1lbWJlciBtZXRob2RzIHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDoK
KyAgICAgIC8vIDEuIEV4cGVjdGVkIFJlYWN0Q2xhc3MgbWV0aG9kcyAoaW4gdGhlICJpbnRlcmZh
Y2UiKS4KKyAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGlu
KS4KKyAgICAgIHZhciBpc1JlYWN0Q2xhc3NNZXRob2QgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhh
c093blByb3BlcnR5KG5hbWUpOworICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVy
dHkgPT09ICdmdW5jdGlvbic7CisgICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPSBpc0Z1bmN0aW9u
ICYmICFpc1JlYWN0Q2xhc3NNZXRob2QgJiYgIWlzQWxyZWFkeURlZmluZWQgJiYgc3BlYy5hdXRv
YmluZCAhPT0gZmFsc2U7CisKKyAgICAgIGlmIChzaG91bGRBdXRvQmluZCkgeworICAgICAgICBh
dXRvQmluZFBhaXJzLnB1c2gobmFtZSwgcHJvcGVydHkpOworICAgICAgICBwcm90b1tuYW1lXSA9
IHByb3BlcnR5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQp
IHsKKyAgICAgICAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV07
CisKKyAgICAgICAgICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkg
dmFsaWRhdGVNZXRob2RPdmVycmlkZS4KKyAgICAgICAgICAhKGlzUmVhY3RDbGFzc01ldGhvZCAm
JiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcgfHwgc3BlY1BvbGljeSA9PT0g
J0RFRklORV9NQU5ZJykpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnUmVhY3RDbGFzczogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5
ICVzIHdoZW4gbWl4aW5nIGluIGNvbXBvbmVudCBzcGVjcy4nLCBzcGVjUG9saWN5LCBuYW1lKSA6
IF9wcm9kSW52YXJpYW50KCc3NycsIHNwZWNQb2xpY3ksIG5hbWUpIDogdm9pZCAwOworCisgICAg
ICAgICAgLy8gRm9yIG1ldGhvZHMgd2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNh
bGwgdGhlIGV4aXN0aW5nCisgICAgICAgICAgLy8gbWV0aG9kcyBiZWZvcmUgY2FsbGluZyB0aGUg
bmV3IHByb3BlcnR5LCBtZXJnaW5nIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgIGlmIChzcGVj
UG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJykgeworICAgICAgICAgICAgcHJvdG9bbmFt
ZV0gPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOwor
ICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJykgeworICAg
ICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0s
IHByb3BlcnR5KTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJv
dG9bbmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgICAgICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0
aGUgZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZworICAgICAgICAgICAgLy8gYXQg
cHJvZmlsaW5nIHRvb2xzLgorICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1
bmN0aW9uJyAmJiBzcGVjLmRpc3BsYXlOYW1lKSB7CisgICAgICAgICAgICAgIHByb3RvW25hbWVd
LmRpc3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSArICdfJyArIG5hbWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1
bmN0aW9uIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7
CisgIGlmICghc3RhdGljcykgeworICAgIHJldHVybjsKKyAgfQorICBmb3IgKHZhciBuYW1lIGlu
IHN0YXRpY3MpIHsKKyAgICB2YXIgcHJvcGVydHkgPSBzdGF0aWNzW25hbWVdOworICAgIGlmICgh
c3RhdGljcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQor
CisgICAgdmFyIGlzUmVzZXJ2ZWQgPSBuYW1lIGluIFJFU0VSVkVEX1NQRUNfS0VZUzsKKyAgICAh
IWlzUmVzZXJ2ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQo
ZmFsc2UsICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGEgcmVzZXJ2
ZWQgcHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblwndCBiZSBvbiB0aGUgInN0YXRpY3MiIGtl
eS4gRGVmaW5lIGl0IGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IGluc3RlYWQ7IGl0IHdpbGwgc3Rp
bGwgYmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IuJywgbmFtZSkgOiBfcHJvZEludmFy
aWFudCgnNzgnLCBuYW1lKSA6IHZvaWQgMDsKKworICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUg
aW4gQ29uc3RydWN0b3I7CisgICAgISFpc0luaGVyaXRlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1w
dGluZyB0byBkZWZpbmUgYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhp
cyBjb25mbGljdCBtYXkgYmUgZHVlIHRvIGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZEludmFyaWFu
dCgnNzknLCBuYW1lKSA6IHZvaWQgMDsKKyAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5
OworICB9Cit9CisKKy8qKgorICogTWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3Ro
IGNvbnRhaW4gdGhlIHNhbWUga2V5LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZp
cnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC4KKyAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhl
IHNlY29uZCBvYmplY3QKKyAqIEByZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhhcyBiZWVu
IG11dGF0ZWQgdG8gY29udGFpbiBldmVyeXRoaW5nIGluIHR3by4KKyAqLworZnVuY3Rpb24gbWVy
Z2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhvbmUsIHR3bykgeworICAhKG9uZSAmJiB0d28gJiYg
dHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbWVyZ2VJbnRv
V2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJykgOiBfcHJv
ZEludmFyaWFudCgnODAnKSA6IHZvaWQgMDsKKworICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7Cisg
ICAgaWYgKHR3by5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAhKG9uZVtrZXldID09PSB1
bmRlZmluZWQpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZh
bHNlLCAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBUcmllZCB0byBtZXJnZSB0d28g
b2JqZWN0cyB3aXRoIHRoZSBzYW1lIGtleTogYCVzYC4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVl
IHRvIGEgbWl4aW47IGluIHBhcnRpY3VsYXIsIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB0d28gZ2V0
SW5pdGlhbFN0YXRlKCkgb3IgZ2V0RGVmYXVsdFByb3BzKCkgbWV0aG9kcyByZXR1cm5pbmcgb2Jq
ZWN0cyB3aXRoIGNsYXNoaW5nIGtleXMuJywga2V5KSA6IF9wcm9kSW52YXJpYW50KCc4MScsIGtl
eSkgOiB2b2lkIDA7CisgICAgICBvbmVba2V5XSA9IHR3b1trZXldOworICAgIH0KKyAgfQorICBy
ZXR1cm4gb25lOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMg
dHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuCisgKgorICogQHBh
cmFtIHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC4KKyAqIEBwYXJhbSB7
ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLgorICogQHJldHVybiB7ZnVu
Y3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy4K
KyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKG9u
ZSwgdHdvKSB7CisgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRSZXN1bHQoKSB7CisgICAgdmFyIGEg
PSBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB2YXIgYiA9IHR3by5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgIGlmIChhID09IG51bGwpIHsKKyAgICAgIHJldHVybiBiOworICAg
IH0gZWxzZSBpZiAoYiA9PSBudWxsKSB7CisgICAgICByZXR1cm4gYTsKKyAgICB9CisgICAgdmFy
IGMgPSB7fTsKKyAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGEpOworICAgIG1l
cmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7CisgICAgcmV0dXJuIGM7CisgIH07Cit9
CisKKy8qKgorICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25z
IGFuZCBpZ25vcmVzIHRoZWlyIHJldHVybiB2YWxlcy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9u
fSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHdv
IEZ1bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rp
b24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLgorICogQHByaXZhdGUK
KyAqLworZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgIHJldHVy
biBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oKSB7CisgICAgb25lLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7CisgICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07Cit9CisKKy8qKgor
ICogQmluZHMgYSBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4KKyAqCisgKiBAcGFyYW0ge29iamVj
dH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQu
CisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWV0aG9kIHRvIGJlIGJvdW5kLgorICogQHJl
dHVybiB7ZnVuY3Rpb259IFRoZSBib3VuZCBtZXRob2QuCisgKi8KK2Z1bmN0aW9uIGJpbmRBdXRv
QmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCkgeworICB2YXIgYm91bmRNZXRob2QgPSBtZXRo
b2QuYmluZChjb21wb25lbnQpOworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
KSB7CisgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAg
ICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7CisgICAgYm91bmRNZXRo
b2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gbnVsbDsKKyAgICB2YXIgY29tcG9uZW50TmFtZSA9
IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTsKKyAgICB2YXIgX2JpbmQgPSBib3Vu
ZE1ldGhvZC5iaW5kOworICAgIGJvdW5kTWV0aG9kLmJpbmQgPSBmdW5jdGlvbiAobmV3VGhpcykg
eworICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShf
bGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7
CisgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisg
ICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2Ug
ZWZmZWN0aXZlbHkgd2lsbAorICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiAidGhpcyIgdGhh
dCB0aGUgdXNlciBpcyB0cnlpbmcgdG8gdXNlLCBzbworICAgICAgLy8gbGV0J3Mgd2Fybi4KKyAg
ICAgIGlmIChuZXdUaGlzICE9PSBjb21wb25lbnQgJiYgbmV3VGhpcyAhPT0gbnVsbCkgeworICAg
ICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYmlu
ZCgpOiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyAr
ICdjb21wb25lbnQgaW5zdGFuY2UuIFNlZSAlcycsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAwOwor
ICAgICAgfSBlbHNlIGlmICghYXJncy5sZW5ndGgpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5n
IGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICsgJ1JlYWN0IGRvZXMgdGhp
cyBmb3IgeW91IGF1dG9tYXRpY2FsbHkgaW4gYSBoaWdoLXBlcmZvcm1hbmNlICcgKyAnd2F5LCBz
byB5b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLCBjb21wb25lbnROYW1l
KSA6IHZvaWQgMDsKKyAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kOworICAgICAgfQorICAgICAg
dmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTsK
KyAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAg
ICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kOworICAgICAgcmVi
b3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzOworICAgICAgcmV0dXJuIHJl
Ym91bmRNZXRob2Q7CisgICAgfTsKKyAgfQorICByZXR1cm4gYm91bmRNZXRob2Q7Cit9CisKKy8q
KgorICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC4KKyAqCisg
KiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29p
bmcgdG8gYmUgYm91bmQuCisgKi8KK2Z1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZHMoY29tcG9u
ZW50KSB7CisgIHZhciBwYWlycyA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlyczsKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkgKz0gMikgeworICAgIHZhciBhdXRv
QmluZEtleSA9IHBhaXJzW2ldOworICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07CisgICAg
Y29tcG9uZW50W2F1dG9CaW5kS2V5XSA9IGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1l
dGhvZCk7CisgIH0KK30KKworLyoqCisgKiBBZGQgbW9yZSB0byB0aGUgUmVhY3RDbGFzcyBiYXNl
IGNsYXNzLiBUaGVzZSBhcmUgYWxsIGxlZ2FjeSBmZWF0dXJlcyBhbmQKKyAqIHRoZXJlZm9yZSBu
b3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuCisgKi8KK3ZhciBS
ZWFjdENsYXNzTWl4aW4gPSB7CisKKyAgLyoqCisgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXBy
ZWNhdGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudAorICAg
KiB0eXBlIHNpZ25hdHVyZSBhbmQgdGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2
b2lkIHRoYXQuCisgICAqLworICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChuZXdTdGF0ZSwgY2Fs
bGJhY2spIHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLCBuZXdT
dGF0ZSk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNh
bGxiYWNrKHRoaXMsIGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7CisgICAgfQorICB9LAorCisg
IC8qKgorICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50
IGlzIG1vdW50ZWQuCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFs
c2Ugb3RoZXJ3aXNlLgorICAgKiBAcHJvdGVjdGVkCisgICAqIEBmaW5hbAorICAgKi8KKyAgaXNN
b3VudGVkOiBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMudXBkYXRlci5pc01vdW50ZWQo
dGhpcyk7CisgIH0KK307CisKK3ZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkg
e307CitfYXNzaWduKFJlYWN0Q2xhc3NDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVu
dC5wcm90b3R5cGUsIFJlYWN0Q2xhc3NNaXhpbik7CisKK3ZhciBkaWRXYXJuRGVwcmVjYXRlZCA9
IGZhbHNlOworCisvKioKKyAqIE1vZHVsZSBmb3IgY3JlYXRpbmcgY29tcG9zaXRlIGNvbXBvbmVu
dHMuCisgKgorICogQGNsYXNzIFJlYWN0Q2xhc3MKKyAqLwordmFyIFJlYWN0Q2xhc3MgPSB7CisK
KyAgLyoqCisgICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEg
Y2xhc3Mgc3BlY2lmaWNhdGlvbi4KKyAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlv
L3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzCisgICAqCisg
ICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3Qg
ZGVmaW5lIGByZW5kZXJgKS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25z
dHJ1Y3RvciBmdW5jdGlvbi4KKyAgICogQHB1YmxpYworICAgKi8KKyAgY3JlYXRlQ2xhc3M6IGZ1
bmN0aW9uIChzcGVjKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykg
eworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJu
RGVwcmVjYXRlZCwgJyVzOiBSZWFjdC5jcmVhdGVDbGFzcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxs
IGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAxNi4gJyArICdVc2UgcGxhaW4gSmF2YVNjcmlwdCBjbGFz
c2VzIGluc3RlYWQuIElmIHlvdVwncmUgbm90IHlldCByZWFkeSB0byAnICsgJ21pZ3JhdGUsIGNy
ZWF0ZS1yZWFjdC1jbGFzcyBpcyBhdmFpbGFibGUgb24gbnBtIGFzIGEgJyArICdkcm9wLWluIHJl
cGxhY2VtZW50LicsIHNwZWMgJiYgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBDb21wb25lbnQnKSA6
IHZvaWQgMDsKKyAgICAgIGRpZFdhcm5EZXByZWNhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBUbyBrZWVwIG91ciB3YXJuaW5ncyBtb3JlIHVuZGVyc3RhbmRhYmxlLCB3ZSdsbCB1c2UgYSBs
aXR0bGUgaGFjayBoZXJlIHRvCisgICAgLy8gZW5zdXJlIHRoYXQgQ29uc3RydWN0b3IubmFtZSAh
PT0gJ0NvbnN0cnVjdG9yJy4gVGhpcyBtYWtlcyBzdXJlIHdlIGRvbid0CisgICAgLy8gdW5uZWNl
c3NhcmlseSBpZGVudGlmeSBhIGNsYXNzIHdpdGhvdXQgZGlzcGxheU5hbWUgYXMgJ0NvbnN0cnVj
dG9yJy4KKyAgICB2YXIgQ29uc3RydWN0b3IgPSBpZGVudGl0eShmdW5jdGlvbiAocHJvcHMsIGNv
bnRleHQsIHVwZGF0ZXIpIHsKKyAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgZ2V0cyBvdmVycmlk
ZGVuIGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQgaXMgdXNlZAorICAgICAgLy8gYnkgbW9ja3MgdG8g
YXNzZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVkLgorCisgICAgICBpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcodGhpcyBpbnN0YW5jZW9mIENvbnN0cnVjdG9yLCAnU29tZXRoaW5nIGlzIGNh
bGxpbmcgYSBSZWFjdCBjb21wb25lbnQgZGlyZWN0bHkuIFVzZSBhIGZhY3Rvcnkgb3IgJyArICdK
U1ggaW5zdGVhZC4gU2VlOiBodHRwczovL2ZiLm1lL3JlYWN0LWxlZ2FjeWZhY3RvcnknKSA6IHZv
aWQgMDsKKyAgICAgIH0KKworICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmcKKyAgICAgIGlm
ICh0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkgeworICAgICAgICBiaW5kQXV0b0Jp
bmRNZXRob2RzKHRoaXMpOworICAgICAgfQorCisgICAgICB0aGlzLnByb3BzID0gcHJvcHM7Cisg
ICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OworICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmpl
Y3Q7CisgICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVl
OworCisgICAgICB0aGlzLnN0YXRlID0gbnVsbDsKKworICAgICAgLy8gUmVhY3RDbGFzc2VzIGRv
ZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZQorICAgICAgLy8g
Z2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlh
bGl6YXRpb24uCisKKyAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0
ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsOworICAgICAgaWYgKCJkZXZlbG9wbWVu
dCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRv
IHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC4KKyAgICAgICAgaWYgKGluaXRp
YWxTdGF0ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5j
dGlvbikgeworICAgICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25z
aWRlciB3YXJuaW5nIGhlcmUgYW5kCisgICAgICAgICAgLy8gZGVwcmVjYXRpbmcgdGhpcyBjb252
ZW5pZW5jZS4KKyAgICAgICAgICBpbml0aWFsU3RhdGUgPSBudWxsOworICAgICAgICB9CisgICAg
ICB9CisgICAgICAhKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5p
c0FycmF5KGluaXRpYWxTdGF0ZSkpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
aW52YXJpYW50KGZhbHNlLCAnJXMuZ2V0SW5pdGlhbFN0YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9i
amVjdCBvciBudWxsJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRl
Q29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnODInLCBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFt
ZSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDsKKworICAgICAgdGhpcy5z
dGF0ZSA9IGluaXRpYWxTdGF0ZTsKKyAgICB9KTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUg
PSBuZXcgUmVhY3RDbGFzc0NvbXBvbmVudCgpOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3Jl
YWN0QXV0b0JpbmRQYWlycyA9IFtdOworCisgICAgaW5qZWN0ZWRNaXhpbnMuZm9yRWFjaChtaXhT
cGVjSW50b0NvbXBvbmVudC5iaW5kKG51bGwsIENvbnN0cnVjdG9yKSk7CisKKyAgICBtaXhTcGVj
SW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRo
ZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2Vk
LgorICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgIENvbnN0cnVj
dG9yLmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpOworICAgIH0K
KworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIC8vIFRo
aXMgaXMgYSB0YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIHRoZXNlIG1ldGhvZCBuYW1l
cyBpcyBvaywKKyAgICAgIC8vIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGNyZWF0ZUNsYXNzLiBJZiBp
dCdzIG5vdCwgdGhlbiBpdCdzIGxpa2VseSBhCisgICAgICAvLyBtaXN0YWtlIHNvIHdlJ2xsIHdh
cm4geW91IHRvIHVzZSB0aGUgc3RhdGljIHByb3BlcnR5LCBwcm9wZXJ0eQorICAgICAgLy8gaW5p
dGlhbGl6ZXIgb3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5LgorICAgICAgaWYgKENvbnN0cnVj
dG9yLmdldERlZmF1bHRQcm9wcykgeworICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJv
cHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTsKKyAgICAgIH0KKyAgICAgIGlmIChDb25zdHJ1
Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnBy
b3RvdHlwZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlciA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2NyZWF0ZUNsYXNzKC4u
Lik6IENsYXNzIHNwZWNpZmljYXRpb24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2Qu
JykgOiBfcHJvZEludmFyaWFudCgnODMnKSA6IHZvaWQgMDsKKworICAgIGlmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRTaG91bGRVcGRh
dGUsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCku
IERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBw
aHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3Rl
ZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCcp
IDogdm9pZCAwOworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyghQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMsICclcyBo
YXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQg
eW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIHNwZWMuZGlzcGxheU5hbWUg
fHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7CisgICAgfQorCisgICAgLy8gUmVkdWNlIHRpbWUg
c3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuCisg
ICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7CisgICAgICBp
ZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkgeworICAgICAgICBDb25zdHJ1
Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBDb25zdHJ1Y3RvcjsKKyAgfSwKKworICBpbmplY3Rpb246IHsKKyAgICBpbmplY3RN
aXhpbjogZnVuY3Rpb24gKG1peGluKSB7CisgICAgICBpbmplY3RlZE1peGlucy5wdXNoKG1peGlu
KTsKKyAgICB9CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENsYXNzOworfSx7
IjEwIjoxMCwiMTMiOjEzLCIxNCI6MTQsIjI1IjoyNSwiMjgiOjI4LCIyOSI6MjksIjMwIjozMCwi
MzEiOjMxLCI2Ijo2fV0sNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJ
bnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gX2Rl
cmVxXygxMyk7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMjApOwordmFyIGVt
cHR5T2JqZWN0ID0gX2RlcmVxXygyOCk7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2
YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworCisvKioKKyAqIEJhc2UgY2xhc3MgaGVscGVycyBm
b3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LgorICovCitmdW5jdGlvbiBSZWFj
dENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgeworICB0aGlzLnByb3BzID0gcHJv
cHM7CisgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0
OworICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9u
ZSBnZXRzIGluamVjdGVkIGJ5IHRoZQorICAvLyByZW5kZXJlci4KKyAgdGhpcy51cGRhdGVyID0g
dXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30KKworUmVhY3RDb21wb25lbnQucHJv
dG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTsKKworLyoqCisgKiBTZXRzIGEgc3Vic2V0IG9m
IHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZQorICogc3RhdGUuIFlvdSBzaG91
bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS4KKyAqCisgKiBUaGVyZSBpcyBubyBn
dWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBz
bworICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1h
eSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4KKyAqCisgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhh
dCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksCisgKiBhcyB0aGV5
IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4g
b3B0aW9uYWwKKyAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxs
IHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5CisgKiBjb21wbGV0ZWQuCisgKgorICogV2hlbiBhIGZ1
bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21l
IHBvaW50IGluCisgKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUg
Y2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGUKKyAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRl
LCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50CisgKiBmcm9t
IHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZl
UHJvcHMgYnV0IGJlZm9yZQorICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcg
c3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmUKKyAqIGFzc2lnbmVkIHRv
IHRoaXMuCisgKgorICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0
IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG8KKyAqICAgICAgICBwcm9kdWNlIG5leHQgcGFy
dGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLgorICogQHBhcmFtIHs/
ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICogQGZp
bmFsCisgKiBAcHJvdGVjdGVkCisgKi8KK1JlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0
ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7CisgICEodHlwZW9mIHBhcnRp
YWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9u
JyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Yg
c3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4g
b2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKSA6IF9wcm9kSW52YXJpYW50KCc4NScpIDogdm9p
ZCAwOworICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7
CisgIGlmIChjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhp
cywgY2FsbGJhY2ssICdzZXRTdGF0ZScpOworICB9Cit9OworCisvKioKKyAqIEZvcmNlcyBhbiB1
cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgK
KyAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLgor
ICoKKyAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUg
ZGVlcGVyIGFzcGVjdCBvZiB0aGUKKyAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1
dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLgorICoKKyAqIFRoaXMgd2lsbCBub3QgaW52b2tl
IGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAqIGBjb21wb25l
bnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuCisgKgorICogQHBhcmFtIHs/
ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuCisgKiBA
ZmluYWwKKyAqIEBwcm90ZWN0ZWQKKyAqLworUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNl
VXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9y
Y2VVcGRhdGUodGhpcyk7CisgIGlmIChjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1
ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpOworICB9Cit9OworCisv
KioKKyAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNz
aWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2UKKyAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRl
IHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzCisgKiBtb2Rl
cm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYg
aXQncyBhY2Nlc3NlZC4KKyAqLworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykg
eworICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7CisgICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcs
ICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGlu
ZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5
IGxlYWtzLiddLAorICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3Ig
eW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1
Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddCisgIH07CisgIHZhciBkZWZpbmVE
ZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykgeworICAgIGlm
IChjYW5EZWZpbmVQcm9wZXJ0eSkgeworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0
Q29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGZhbHNlLCAnJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3Qg
Y2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKSA6IHZvaWQgMDsKKyAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH07CisgIGZvciAo
dmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykgeworICAgIGlmIChkZXByZWNhdGVkQVBJcy5o
YXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7CisgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmco
Zm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTsKKyAgICB9CisgIH0KK30KKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudDsKK30seyIxMyI6MTMsIjIwIjoyMCwiMjUiOjI1LCIy
OCI6MjgsIjI5IjoyOSwiMzAiOjMwfV0sNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQg
dW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxl
IGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFs
IGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBm
aWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7
CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMjUpOworCit2YXIgUmVhY3RDdXJyZW50
T3duZXIgPSBfZGVyZXFfKDgpOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2YXIg
d2FybmluZyA9IF9kZXJlcV8oMzApOworCitmdW5jdGlvbiBpc05hdGl2ZShmbikgeworICAvLyBC
YXNlZCBvbiBpc05hdGl2ZSgpIGZyb20gTG9kYXNoCisgIHZhciBmdW5jVG9TdHJpbmcgPSBGdW5j
dGlvbi5wcm90b3R5cGUudG9TdHJpbmc7CisgIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyAr
IGZ1bmNUb1N0cmluZworICAvLyBUYWtlIGFuIGV4YW1wbGUgbmF0aXZlIGZ1bmN0aW9uIHNvdXJj
ZSBmb3IgY29tcGFyaXNvbgorICAuY2FsbChoYXNPd25Qcm9wZXJ0eSkKKyAgLy8gU3RyaXAgcmVn
ZXggY2hhcmFjdGVycyBzbyB3ZSBjYW4gdXNlIGl0IGZvciByZWdleAorICAucmVwbGFjZSgvW1xc
XiQuKis/KClbXF17fXxdL2csICdcXCQmJykKKyAgLy8gUmVtb3ZlIGhhc093blByb3BlcnR5IGZy
b20gdGhlIHRlbXBsYXRlIHRvIG1ha2UgaXQgZ2VuZXJpYworICAucmVwbGFjZSgvaGFzT3duUHJv
cGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywgJyQxLio/Jykg
KyAnJCcpOworICB0cnkgeworICAgIHZhciBzb3VyY2UgPSBmdW5jVG9TdHJpbmcuY2FsbChmbik7
CisgICAgcmV0dXJuIHJlSXNOYXRpdmUudGVzdChzb3VyY2UpOworICB9IGNhdGNoIChlcnIpIHsK
KyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KKwordmFyIGNhblVzZUNvbGxlY3Rpb25zID0KKy8v
IEFycmF5LmZyb20KK3R5cGVvZiBBcnJheS5mcm9tID09PSAnZnVuY3Rpb24nICYmCisvLyBNYXAK
K3R5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwKSAmJgorLy8gTWFwLnBy
b3RvdHlwZS5rZXlzCitNYXAucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIE1hcC5wcm90b3R5
cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXAucHJvdG90eXBlLmtleXMpICYm
CisvLyBTZXQKK3R5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0KSAmJgor
Ly8gU2V0LnByb3RvdHlwZS5rZXlzCitTZXQucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIFNl
dC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQucHJvdG90eXBl
LmtleXMpOworCit2YXIgc2V0SXRlbTsKK3ZhciBnZXRJdGVtOwordmFyIHJlbW92ZUl0ZW07Cit2
YXIgZ2V0SXRlbUlEczsKK3ZhciBhZGRSb290OwordmFyIHJlbW92ZVJvb3Q7Cit2YXIgZ2V0Um9v
dElEczsKKworaWYgKGNhblVzZUNvbGxlY3Rpb25zKSB7CisgIHZhciBpdGVtTWFwID0gbmV3IE1h
cCgpOworICB2YXIgcm9vdElEU2V0ID0gbmV3IFNldCgpOworCisgIHNldEl0ZW0gPSBmdW5jdGlv
biAoaWQsIGl0ZW0pIHsKKyAgICBpdGVtTWFwLnNldChpZCwgaXRlbSk7CisgIH07CisgIGdldEl0
ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByZXR1cm4gaXRlbU1hcC5nZXQoaWQpOworICB9Owor
ICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgaXRlbU1hcFsnZGVsZXRlJ10oaWQp
OworICB9OworICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBBcnJheS5m
cm9tKGl0ZW1NYXAua2V5cygpKTsKKyAgfTsKKworICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7
CisgICAgcm9vdElEU2V0LmFkZChpZCk7CisgIH07CisgIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICByb290SURTZXRbJ2RlbGV0ZSddKGlkKTsKKyAgfTsKKyAgZ2V0Um9vdElEcyA9
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbShyb290SURTZXQua2V5cygpKTsK
KyAgfTsKK30gZWxzZSB7CisgIHZhciBpdGVtQnlLZXkgPSB7fTsKKyAgdmFyIHJvb3RCeUtleSA9
IHt9OworCisgIC8vIFVzZSBub24tbnVtZXJpYyBrZXlzIHRvIHByZXZlbnQgVjggcGVyZm9ybWFu
Y2UgaXNzdWVzOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83
MjMyCisgIHZhciBnZXRLZXlGcm9tSUQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICByZXR1cm4gJy4n
ICsgaWQ7CisgIH07CisgIHZhciBnZXRJREZyb21LZXkgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAg
cmV0dXJuIHBhcnNlSW50KGtleS5zdWJzdHIoMSksIDEwKTsKKyAgfTsKKworICBzZXRJdGVtID0g
ZnVuY3Rpb24gKGlkLCBpdGVtKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7Cisg
ICAgaXRlbUJ5S2V5W2tleV0gPSBpdGVtOworICB9OworICBnZXRJdGVtID0gZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7CisgICAgcmV0dXJuIGl0ZW1CeUtl
eVtrZXldOworICB9OworICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtl
eSA9IGdldEtleUZyb21JRChpZCk7CisgICAgZGVsZXRlIGl0ZW1CeUtleVtrZXldOworICB9Owor
ICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVt
QnlLZXkpLm1hcChnZXRJREZyb21LZXkpOworICB9OworCisgIGFkZFJvb3QgPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICByb290QnlLZXlba2V5
XSA9IHRydWU7CisgIH07CisgIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIg
a2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBkZWxldGUgcm9vdEJ5S2V5W2tleV07CisgIH07
CisgIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJv
b3RCeUtleSkubWFwKGdldElERnJvbUtleSk7CisgIH07Cit9CisKK3ZhciB1bm1vdW50ZWRJRHMg
PSBbXTsKKworZnVuY3Rpb24gcHVyZ2VEZWVwKGlkKSB7CisgIHZhciBpdGVtID0gZ2V0SXRlbShp
ZCk7CisgIGlmIChpdGVtKSB7CisgICAgdmFyIGNoaWxkSURzID0gaXRlbS5jaGlsZElEczsKKwor
ICAgIHJlbW92ZUl0ZW0oaWQpOworICAgIGNoaWxkSURzLmZvckVhY2gocHVyZ2VEZWVwKTsKKyAg
fQorfQorCitmdW5jdGlvbiBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3du
ZXJOYW1lKSB7CisgIHJldHVybiAnXG4gICAgaW4gJyArIChuYW1lIHx8ICdVbmtub3duJykgKyAo
c291cmNlID8gJyAoYXQgJyArIHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcL10vLCAn
JykgKyAnOicgKyBzb3VyY2UubGluZU51bWJlciArICcpJyA6IG93bmVyTmFtZSA/ICcgKGNyZWF0
ZWQgYnkgJyArIG93bmVyTmFtZSArICcpJyA6ICcnKTsKK30KKworZnVuY3Rpb24gZ2V0RGlzcGxh
eU5hbWUoZWxlbWVudCkgeworICBpZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgcmV0dXJuICcj
ZW1wdHknOworICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyB8fCB0eXBl
b2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHsKKyAgICByZXR1cm4gJyN0ZXh0JzsKKyAgfSBlbHNl
IGlmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJykgeworICAgIHJldHVybiBlbGVt
ZW50LnR5cGU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGVsZW1lbnQudHlwZS5kaXNwbGF5TmFt
ZSB8fCBlbGVtZW50LnR5cGUubmFtZSB8fCAnVW5rbm93bic7CisgIH0KK30KKworZnVuY3Rpb24g
ZGVzY3JpYmVJRChpZCkgeworICB2YXIgbmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0
RGlzcGxheU5hbWUoaWQpOworICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2su
Z2V0RWxlbWVudChpZCk7CisgIHZhciBvd25lcklEID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXRPd25lcklEKGlkKTsKKyAgdmFyIG93bmVyTmFtZTsKKyAgaWYgKG93bmVySUQpIHsKKyAgICBv
d25lck5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKG93bmVySUQp
OworICB9CisgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZWxlbWVu
dCwgJ1JlYWN0Q29tcG9uZW50VHJlZUhvb2s6IE1pc3NpbmcgUmVhY3QgZWxlbWVudCBmb3IgZGVi
dWdJRCAlcyB3aGVuICcgKyAnYnVpbGRpbmcgc3RhY2snLCBpZCkgOiB2b2lkIDA7CisgIHJldHVy
biBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIGVsZW1lbnQgJiYgZWxlbWVudC5fc291cmNl
LCBvd25lck5hbWUpOworfQorCit2YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHsKKyAgb25T
ZXRDaGlsZHJlbjogZnVuY3Rpb24gKGlkLCBuZXh0Q2hpbGRJRHMpIHsKKyAgICB2YXIgaXRlbSA9
IGdldEl0ZW0oaWQpOworICAgICFpdGVtID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52
YXJpYW50KCcxNDQnKSA6IHZvaWQgMDsKKyAgICBpdGVtLmNoaWxkSURzID0gbmV4dENoaWxkSURz
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRJRHMubGVuZ3RoOyBpKyspIHsK
KyAgICAgIHZhciBuZXh0Q2hpbGRJRCA9IG5leHRDaGlsZElEc1tpXTsKKyAgICAgIHZhciBuZXh0
Q2hpbGQgPSBnZXRJdGVtKG5leHRDaGlsZElEKTsKKyAgICAgICFuZXh0Q2hpbGQgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBob29r
IGV2ZW50cyB0byBmaXJlIGZvciB0aGUgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMg
aXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MCcpIDogdm9pZCAw
OworICAgICAgIShuZXh0Q2hpbGQuY2hpbGRJRHMgIT0gbnVsbCB8fCB0eXBlb2YgbmV4dENoaWxk
LmVsZW1lbnQgIT09ICdvYmplY3QnIHx8IG5leHRDaGlsZC5lbGVtZW50ID09IG51bGwpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQg
b25TZXRDaGlsZHJlbigpIHRvIGZpcmUgZm9yIGEgY29udGFpbmVyIGNoaWxkIGJlZm9yZSBpdHMg
cGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50
KCcxNDEnKSA6IHZvaWQgMDsKKyAgICAgICFuZXh0Q2hpbGQuaXNNb3VudGVkID8gImRldmVsb3Bt
ZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgb25Nb3Vu
dENvbXBvbmVudCgpIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNs
dWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnNzEnKSA6IHZv
aWQgMDsKKyAgICAgIGlmIChuZXh0Q2hpbGQucGFyZW50SUQgPT0gbnVsbCkgeworICAgICAgICBu
ZXh0Q2hpbGQucGFyZW50SUQgPSBpZDsKKyAgICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGRuJ3Qg
YmUgbmVjZXNzYXJ5IGJ1dCBtb3VudGluZyBhIG5ldyByb290IGR1cmluZyBpbgorICAgICAgICAv
LyBjb21wb25lbnRXaWxsTW91bnQgY3VycmVudGx5IGNhdXNlcyBub3QteWV0LW1vdW50ZWQgY29t
cG9uZW50cyB0bworICAgICAgICAvLyBiZSBwdXJnZWQgZnJvbSBvdXIgdHJlZSBkYXRhIHNvIHRo
ZWlyIHBhcmVudCBpZCBpcyBtaXNzaW5nLgorICAgICAgfQorICAgICAgIShuZXh0Q2hpbGQucGFy
ZW50SUQgPT09IGlkKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0V4cGVjdGVkIG9uQmVmb3JlTW91bnRDb21wb25lbnQoKSBwYXJlbnQgYW5kIG9u
U2V0Q2hpbGRyZW4oKSB0byBiZSBjb25zaXN0ZW50ICglcyBoYXMgcGFyZW50cyAlcyBhbmQgJXMp
LicsIG5leHRDaGlsZElELCBuZXh0Q2hpbGQucGFyZW50SUQsIGlkKSA6IF9wcm9kSW52YXJpYW50
KCcxNDInLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVudElELCBpZCkgOiB2b2lkIDA7Cisg
ICAgfQorICB9LAorICBvbkJlZm9yZU1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQsIGVsZW1l
bnQsIHBhcmVudElEKSB7CisgICAgdmFyIGl0ZW0gPSB7CisgICAgICBlbGVtZW50OiBlbGVtZW50
LAorICAgICAgcGFyZW50SUQ6IHBhcmVudElELAorICAgICAgdGV4dDogbnVsbCwKKyAgICAgIGNo
aWxkSURzOiBbXSwKKyAgICAgIGlzTW91bnRlZDogZmFsc2UsCisgICAgICB1cGRhdGVDb3VudDog
MAorICAgIH07CisgICAgc2V0SXRlbShpZCwgaXRlbSk7CisgIH0sCisgIG9uQmVmb3JlVXBkYXRl
Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQsIGVsZW1lbnQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0
ZW0oaWQpOworICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01vdW50ZWQpIHsKKyAgICAgIC8vIFdl
IG1heSBlbmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdp
bGxVbm1vdW50KCkuCisgICAgICAvLyBJbiB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVudC4K
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXRlbS5lbGVtZW50ID0gZWxlbWVudDsKKyAgfSwK
KyAgb25Nb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJ
dGVtKGlkKTsKKyAgICAhaXRlbSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ0l0ZW0gbXVzdCBoYXZlIGJlZW4gc2V0JykgOiBfcHJvZEludmFyaWFu
dCgnMTQ0JykgOiB2b2lkIDA7CisgICAgaXRlbS5pc01vdW50ZWQgPSB0cnVlOworICAgIHZhciBp
c1Jvb3QgPSBpdGVtLnBhcmVudElEID09PSAwOworICAgIGlmIChpc1Jvb3QpIHsKKyAgICAgIGFk
ZFJvb3QoaWQpOworICAgIH0KKyAgfSwKKyAgb25VcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uIChp
ZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgaWYgKCFpdGVtIHx8ICFpdGVt
LmlzTW91bnRlZCkgeworICAgICAgLy8gV2UgbWF5IGVuZCB1cCBoZXJlIGFzIGEgcmVzdWx0IG9m
IHNldFN0YXRlKCkgaW4gY29tcG9uZW50V2lsbFVubW91bnQoKS4KKyAgICAgIC8vIEluIHRoaXMg
Y2FzZSwgaWdub3JlIHRoZSBlbGVtZW50LgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpdGVt
LnVwZGF0ZUNvdW50Kys7CisgIH0sCisgIG9uVW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoaXRlbSkgeworICAgICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiBpdCBleGlzdHMuCisgICAgICAvLyBgaXRlbWAgbWlnaHQg
bm90IGV4aXN0IGlmIGl0IGlzIGluc2lkZSBhbiBlcnJvciBib3VuZGFyeSwgYW5kIGEgc2libGlu
ZworICAgICAgLy8gZXJyb3IgYm91bmRhcnkgY2hpbGQgdGhyZXcgd2hpbGUgbW91bnRpbmcuIFRo
ZW4gdGhpcyBpbnN0YW5jZSBuZXZlcgorICAgICAgLy8gZ290IGEgY2hhbmNlIHRvIG1vdW50LCBi
dXQgaXQgc3RpbGwgZ2V0cyBhbiB1bm1vdW50aW5nIGV2ZW50IGR1cmluZworICAgICAgLy8gdGhl
IGVycm9yIGJvdW5kYXJ5IGNsZWFudXAuCisgICAgICBpdGVtLmlzTW91bnRlZCA9IGZhbHNlOwor
ICAgICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7CisgICAgICBpZiAoaXNSb290
KSB7CisgICAgICAgIHJlbW92ZVJvb3QoaWQpOworICAgICAgfQorICAgIH0KKyAgICB1bm1vdW50
ZWRJRHMucHVzaChpZCk7CisgIH0sCisgIHB1cmdlVW5tb3VudGVkQ29tcG9uZW50czogZnVuY3Rp
b24gKCkgeworICAgIGlmIChSZWFjdENvbXBvbmVudFRyZWVIb29rLl9wcmV2ZW50UHVyZ2luZykg
eworICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZy4KKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRlZElEcy5sZW5ndGg7
IGkrKykgeworICAgICAgdmFyIGlkID0gdW5tb3VudGVkSURzW2ldOworICAgICAgcHVyZ2VEZWVw
KGlkKTsKKyAgICB9CisgICAgdW5tb3VudGVkSURzLmxlbmd0aCA9IDA7CisgIH0sCisgIGlzTW91
bnRlZDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBy
ZXR1cm4gaXRlbSA/IGl0ZW0uaXNNb3VudGVkIDogZmFsc2U7CisgIH0sCisgIGdldEN1cnJlbnRT
dGFja0FkZGVuZHVtOiBmdW5jdGlvbiAodG9wRWxlbWVudCkgeworICAgIHZhciBpbmZvID0gJyc7
CisgICAgaWYgKHRvcEVsZW1lbnQpIHsKKyAgICAgIHZhciBuYW1lID0gZ2V0RGlzcGxheU5hbWUo
dG9wRWxlbWVudCk7CisgICAgICB2YXIgb3duZXIgPSB0b3BFbGVtZW50Ll9vd25lcjsKKyAgICAg
IGluZm8gKz0gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCB0b3BFbGVtZW50Ll9zb3VyY2Us
IG93bmVyICYmIG93bmVyLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgdmFyIGN1cnJlbnRPd25l
ciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7CisgICAgdmFyIGlkID0gY3VycmVudE93bmVy
ICYmIGN1cnJlbnRPd25lci5fZGVidWdJRDsKKworICAgIGluZm8gKz0gUmVhY3RDb21wb25lbnRU
cmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChpZCk7CisgICAgcmV0dXJuIGluZm87CisgIH0s
CisgIGdldFN0YWNrQWRkZW5kdW1CeUlEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaW5mbyA9
ICcnOworICAgIHdoaWxlIChpZCkgeworICAgICAgaW5mbyArPSBkZXNjcmliZUlEKGlkKTsKKyAg
ICAgIGlkID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRQYXJlbnRJRChpZCk7CisgICAgfQor
ICAgIHJldHVybiBpbmZvOworICB9LAorICBnZXRDaGlsZElEczogZnVuY3Rpb24gKGlkKSB7Cisg
ICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0uY2hpbGRJ
RHMgOiBbXTsKKyAgfSwKKyAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uIChpZCkgeworICAgIHZh
ciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAgICBp
ZiAoIWVsZW1lbnQpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gZ2V0
RGlzcGxheU5hbWUoZWxlbWVudCk7CisgIH0sCisgIGdldEVsZW1lbnQ6IGZ1bmN0aW9uIChpZCkg
eworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmVs
ZW1lbnQgOiBudWxsOworICB9LAorICBnZXRPd25lcklEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2
YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7CisgICAg
aWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Ll9vd25lcikgeworICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfQorICAgIHJldHVybiBlbGVtZW50Ll9vd25lci5fZGVidWdJRDsKKyAgfSwKKyAgZ2V0UGFy
ZW50SUQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAg
cmV0dXJuIGl0ZW0gPyBpdGVtLnBhcmVudElEIDogbnVsbDsKKyAgfSwKKyAgZ2V0U291cmNlOiBm
dW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHZhciBlbGVt
ZW50ID0gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7CisgICAgdmFyIHNvdXJjZSA9IGVsZW1l
bnQgIT0gbnVsbCA/IGVsZW1lbnQuX3NvdXJjZSA6IG51bGw7CisgICAgcmV0dXJuIHNvdXJjZTsK
KyAgfSwKKyAgZ2V0VGV4dDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFj
dENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICAgIGlmICh0eXBlb2YgZWxlbWVu
dCA9PT0gJ3N0cmluZycpIHsKKyAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7CisgICAgICByZXR1cm4gJycgKyBlbGVtZW50
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0sCisgIGdldFVw
ZGF0ZUNvdW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOwor
ICAgIHJldHVybiBpdGVtID8gaXRlbS51cGRhdGVDb3VudCA6IDA7CisgIH0sCisKKworICBnZXRS
b290SURzOiBnZXRSb290SURzLAorICBnZXRSZWdpc3RlcmVkSURzOiBnZXRJdGVtSURzCit9Owor
Cittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2s7Cit9LHsiMjUiOjI1LCIy
OSI6MjksIjMwIjozMCwiOCI6OH1dLDg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
CisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLgorICoKKyAqIFRoZSBj
dXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVu
dHMgdGhhdCBhcmUKKyAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC4KKyAqLwordmFyIFJl
YWN0Q3VycmVudE93bmVyID0geworCisgIC8qKgorICAgKiBAaW50ZXJuYWwKKyAgICogQHR5cGUg
e1JlYWN0Q29tcG9uZW50fQorICAgKi8KKyAgY3VycmVudDogbnVsbAorCit9OworCittb2R1bGUu
ZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyOworfSx7fV0sOTpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxMCk7CisKKy8qKgorICogQ3Jl
YXRlIGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuCisgKgorICogQHBy
aXZhdGUKKyAqLwordmFyIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFj
dG9yeTsKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIFJlYWN0
RWxlbWVudFZhbGlkYXRvciA9IF9kZXJlcV8oMTIpOworICBjcmVhdGVET01GYWN0b3J5ID0gUmVh
Y3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUZhY3Rvcnk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBh
IG1hcHBpbmcgZnJvbSBzdXBwb3J0ZWQgSFRNTCB0YWdzIHRvIGBSZWFjdERPTUNvbXBvbmVudGAg
Y2xhc3Nlcy4KKyAqIFRoaXMgaXMgYWxzbyBhY2Nlc3NpYmxlIHZpYSBgUmVhY3QuRE9NYC4KKyAq
CisgKiBAcHVibGljCisgKi8KK3ZhciBSZWFjdERPTUZhY3RvcmllcyA9IHsKKyAgYTogY3JlYXRl
RE9NRmFjdG9yeSgnYScpLAorICBhYmJyOiBjcmVhdGVET01GYWN0b3J5KCdhYmJyJyksCisgIGFk
ZHJlc3M6IGNyZWF0ZURPTUZhY3RvcnkoJ2FkZHJlc3MnKSwKKyAgYXJlYTogY3JlYXRlRE9NRmFj
dG9yeSgnYXJlYScpLAorICBhcnRpY2xlOiBjcmVhdGVET01GYWN0b3J5KCdhcnRpY2xlJyksCisg
IGFzaWRlOiBjcmVhdGVET01GYWN0b3J5KCdhc2lkZScpLAorICBhdWRpbzogY3JlYXRlRE9NRmFj
dG9yeSgnYXVkaW8nKSwKKyAgYjogY3JlYXRlRE9NRmFjdG9yeSgnYicpLAorICBiYXNlOiBjcmVh
dGVET01GYWN0b3J5KCdiYXNlJyksCisgIGJkaTogY3JlYXRlRE9NRmFjdG9yeSgnYmRpJyksCisg
IGJkbzogY3JlYXRlRE9NRmFjdG9yeSgnYmRvJyksCisgIGJpZzogY3JlYXRlRE9NRmFjdG9yeSgn
YmlnJyksCisgIGJsb2NrcXVvdGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jsb2NrcXVvdGUnKSwKKyAg
Ym9keTogY3JlYXRlRE9NRmFjdG9yeSgnYm9keScpLAorICBicjogY3JlYXRlRE9NRmFjdG9yeSgn
YnInKSwKKyAgYnV0dG9uOiBjcmVhdGVET01GYWN0b3J5KCdidXR0b24nKSwKKyAgY2FudmFzOiBj
cmVhdGVET01GYWN0b3J5KCdjYW52YXMnKSwKKyAgY2FwdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgn
Y2FwdGlvbicpLAorICBjaXRlOiBjcmVhdGVET01GYWN0b3J5KCdjaXRlJyksCisgIGNvZGU6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2NvZGUnKSwKKyAgY29sOiBjcmVhdGVET01GYWN0b3J5KCdjb2wnKSwK
KyAgY29sZ3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ2NvbGdyb3VwJyksCisgIGRhdGE6IGNyZWF0
ZURPTUZhY3RvcnkoJ2RhdGEnKSwKKyAgZGF0YWxpc3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ2RhdGFs
aXN0JyksCisgIGRkOiBjcmVhdGVET01GYWN0b3J5KCdkZCcpLAorICBkZWw6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2RlbCcpLAorICBkZXRhaWxzOiBjcmVhdGVET01GYWN0b3J5KCdkZXRhaWxzJyksCisg
IGRmbjogY3JlYXRlRE9NRmFjdG9yeSgnZGZuJyksCisgIGRpYWxvZzogY3JlYXRlRE9NRmFjdG9y
eSgnZGlhbG9nJyksCisgIGRpdjogY3JlYXRlRE9NRmFjdG9yeSgnZGl2JyksCisgIGRsOiBjcmVh
dGVET01GYWN0b3J5KCdkbCcpLAorICBkdDogY3JlYXRlRE9NRmFjdG9yeSgnZHQnKSwKKyAgZW06
IGNyZWF0ZURPTUZhY3RvcnkoJ2VtJyksCisgIGVtYmVkOiBjcmVhdGVET01GYWN0b3J5KCdlbWJl
ZCcpLAorICBmaWVsZHNldDogY3JlYXRlRE9NRmFjdG9yeSgnZmllbGRzZXQnKSwKKyAgZmlnY2Fw
dGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnZmlnY2FwdGlvbicpLAorICBmaWd1cmU6IGNyZWF0ZURP
TUZhY3RvcnkoJ2ZpZ3VyZScpLAorICBmb290ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvb3Rlcicp
LAorICBmb3JtOiBjcmVhdGVET01GYWN0b3J5KCdmb3JtJyksCisgIGgxOiBjcmVhdGVET01GYWN0
b3J5KCdoMScpLAorICBoMjogY3JlYXRlRE9NRmFjdG9yeSgnaDInKSwKKyAgaDM6IGNyZWF0ZURP
TUZhY3RvcnkoJ2gzJyksCisgIGg0OiBjcmVhdGVET01GYWN0b3J5KCdoNCcpLAorICBoNTogY3Jl
YXRlRE9NRmFjdG9yeSgnaDUnKSwKKyAgaDY6IGNyZWF0ZURPTUZhY3RvcnkoJ2g2JyksCisgIGhl
YWQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWQnKSwKKyAgaGVhZGVyOiBjcmVhdGVET01GYWN0b3J5
KCdoZWFkZXInKSwKKyAgaGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdoZ3JvdXAnKSwKKyAgaHI6
IGNyZWF0ZURPTUZhY3RvcnkoJ2hyJyksCisgIGh0bWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2h0bWwn
KSwKKyAgaTogY3JlYXRlRE9NRmFjdG9yeSgnaScpLAorICBpZnJhbWU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2lmcmFtZScpLAorICBpbWc6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltZycpLAorICBpbnB1dDog
Y3JlYXRlRE9NRmFjdG9yeSgnaW5wdXQnKSwKKyAgaW5zOiBjcmVhdGVET01GYWN0b3J5KCdpbnMn
KSwKKyAga2JkOiBjcmVhdGVET01GYWN0b3J5KCdrYmQnKSwKKyAga2V5Z2VuOiBjcmVhdGVET01G
YWN0b3J5KCdrZXlnZW4nKSwKKyAgbGFiZWw6IGNyZWF0ZURPTUZhY3RvcnkoJ2xhYmVsJyksCisg
IGxlZ2VuZDogY3JlYXRlRE9NRmFjdG9yeSgnbGVnZW5kJyksCisgIGxpOiBjcmVhdGVET01GYWN0
b3J5KCdsaScpLAorICBsaW5rOiBjcmVhdGVET01GYWN0b3J5KCdsaW5rJyksCisgIG1haW46IGNy
ZWF0ZURPTUZhY3RvcnkoJ21haW4nKSwKKyAgbWFwOiBjcmVhdGVET01GYWN0b3J5KCdtYXAnKSwK
KyAgbWFyazogY3JlYXRlRE9NRmFjdG9yeSgnbWFyaycpLAorICBtZW51OiBjcmVhdGVET01GYWN0
b3J5KCdtZW51JyksCisgIG1lbnVpdGVtOiBjcmVhdGVET01GYWN0b3J5KCdtZW51aXRlbScpLAor
ICBtZXRhOiBjcmVhdGVET01GYWN0b3J5KCdtZXRhJyksCisgIG1ldGVyOiBjcmVhdGVET01GYWN0
b3J5KCdtZXRlcicpLAorICBuYXY6IGNyZWF0ZURPTUZhY3RvcnkoJ25hdicpLAorICBub3Njcmlw
dDogY3JlYXRlRE9NRmFjdG9yeSgnbm9zY3JpcHQnKSwKKyAgb2JqZWN0OiBjcmVhdGVET01GYWN0
b3J5KCdvYmplY3QnKSwKKyAgb2w6IGNyZWF0ZURPTUZhY3RvcnkoJ29sJyksCisgIG9wdGdyb3Vw
OiBjcmVhdGVET01GYWN0b3J5KCdvcHRncm91cCcpLAorICBvcHRpb246IGNyZWF0ZURPTUZhY3Rv
cnkoJ29wdGlvbicpLAorICBvdXRwdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ291dHB1dCcpLAorICBw
OiBjcmVhdGVET01GYWN0b3J5KCdwJyksCisgIHBhcmFtOiBjcmVhdGVET01GYWN0b3J5KCdwYXJh
bScpLAorICBwaWN0dXJlOiBjcmVhdGVET01GYWN0b3J5KCdwaWN0dXJlJyksCisgIHByZTogY3Jl
YXRlRE9NRmFjdG9yeSgncHJlJyksCisgIHByb2dyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdwcm9n
cmVzcycpLAorICBxOiBjcmVhdGVET01GYWN0b3J5KCdxJyksCisgIHJwOiBjcmVhdGVET01GYWN0
b3J5KCdycCcpLAorICBydDogY3JlYXRlRE9NRmFjdG9yeSgncnQnKSwKKyAgcnVieTogY3JlYXRl
RE9NRmFjdG9yeSgncnVieScpLAorICBzOiBjcmVhdGVET01GYWN0b3J5KCdzJyksCisgIHNhbXA6
IGNyZWF0ZURPTUZhY3RvcnkoJ3NhbXAnKSwKKyAgc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdz
Y3JpcHQnKSwKKyAgc2VjdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnc2VjdGlvbicpLAorICBzZWxl
Y3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3NlbGVjdCcpLAorICBzbWFsbDogY3JlYXRlRE9NRmFjdG9y
eSgnc21hbGwnKSwKKyAgc291cmNlOiBjcmVhdGVET01GYWN0b3J5KCdzb3VyY2UnKSwKKyAgc3Bh
bjogY3JlYXRlRE9NRmFjdG9yeSgnc3BhbicpLAorICBzdHJvbmc6IGNyZWF0ZURPTUZhY3Rvcnko
J3N0cm9uZycpLAorICBzdHlsZTogY3JlYXRlRE9NRmFjdG9yeSgnc3R5bGUnKSwKKyAgc3ViOiBj
cmVhdGVET01GYWN0b3J5KCdzdWInKSwKKyAgc3VtbWFyeTogY3JlYXRlRE9NRmFjdG9yeSgnc3Vt
bWFyeScpLAorICBzdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1cCcpLAorICB0YWJsZTogY3JlYXRl
RE9NRmFjdG9yeSgndGFibGUnKSwKKyAgdGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rib2R5Jyks
CisgIHRkOiBjcmVhdGVET01GYWN0b3J5KCd0ZCcpLAorICB0ZXh0YXJlYTogY3JlYXRlRE9NRmFj
dG9yeSgndGV4dGFyZWEnKSwKKyAgdGZvb3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3Rmb290JyksCisg
IHRoOiBjcmVhdGVET01GYWN0b3J5KCd0aCcpLAorICB0aGVhZDogY3JlYXRlRE9NRmFjdG9yeSgn
dGhlYWQnKSwKKyAgdGltZTogY3JlYXRlRE9NRmFjdG9yeSgndGltZScpLAorICB0aXRsZTogY3Jl
YXRlRE9NRmFjdG9yeSgndGl0bGUnKSwKKyAgdHI6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyJyksCisg
IHRyYWNrOiBjcmVhdGVET01GYWN0b3J5KCd0cmFjaycpLAorICB1OiBjcmVhdGVET01GYWN0b3J5
KCd1JyksCisgIHVsOiBjcmVhdGVET01GYWN0b3J5KCd1bCcpLAorICAndmFyJzogY3JlYXRlRE9N
RmFjdG9yeSgndmFyJyksCisgIHZpZGVvOiBjcmVhdGVET01GYWN0b3J5KCd2aWRlbycpLAorICB3
YnI6IGNyZWF0ZURPTUZhY3RvcnkoJ3dicicpLAorCisgIC8vIFNWRworICBjaXJjbGU6IGNyZWF0
ZURPTUZhY3RvcnkoJ2NpcmNsZScpLAorICBjbGlwUGF0aDogY3JlYXRlRE9NRmFjdG9yeSgnY2xp
cFBhdGgnKSwKKyAgZGVmczogY3JlYXRlRE9NRmFjdG9yeSgnZGVmcycpLAorICBlbGxpcHNlOiBj
cmVhdGVET01GYWN0b3J5KCdlbGxpcHNlJyksCisgIGc6IGNyZWF0ZURPTUZhY3RvcnkoJ2cnKSwK
KyAgaW1hZ2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2ltYWdlJyksCisgIGxpbmU6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2xpbmUnKSwKKyAgbGluZWFyR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpbmVh
ckdyYWRpZW50JyksCisgIG1hc2s6IGNyZWF0ZURPTUZhY3RvcnkoJ21hc2snKSwKKyAgcGF0aDog
Y3JlYXRlRE9NRmFjdG9yeSgncGF0aCcpLAorICBwYXR0ZXJuOiBjcmVhdGVET01GYWN0b3J5KCdw
YXR0ZXJuJyksCisgIHBvbHlnb246IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlnb24nKSwKKyAgcG9s
eWxpbmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3BvbHlsaW5lJyksCisgIHJhZGlhbEdyYWRpZW50OiBj
cmVhdGVET01GYWN0b3J5KCdyYWRpYWxHcmFkaWVudCcpLAorICByZWN0OiBjcmVhdGVET01GYWN0
b3J5KCdyZWN0JyksCisgIHN0b3A6IGNyZWF0ZURPTUZhY3RvcnkoJ3N0b3AnKSwKKyAgc3ZnOiBj
cmVhdGVET01GYWN0b3J5KCdzdmcnKSwKKyAgdGV4dDogY3JlYXRlRE9NRmFjdG9yeSgndGV4dCcp
LAorICB0c3BhbjogY3JlYXRlRE9NRmFjdG9yeSgndHNwYW4nKQorfTsKKworbW9kdWxlLmV4cG9y
dHMgPSBSZWFjdERPTUZhY3RvcmllczsKK30seyIxMCI6MTAsIjEyIjoxMn1dLDEwOltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
LworCisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBS
ZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8oOCk7CisKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygz
MCk7Cit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDIwKTsKK3ZhciBoYXNPd25Qcm9w
ZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisKK3ZhciBSRUFDVF9FTEVN
RU5UX1RZUEUgPSBfZGVyZXFfKDExKTsKKwordmFyIFJFU0VSVkVEX1BST1BTID0geworICBrZXk6
IHRydWUsCisgIHJlZjogdHJ1ZSwKKyAgX19zZWxmOiB0cnVlLAorICBfX3NvdXJjZTogdHJ1ZQor
fTsKKwordmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5p
bmdTaG93bjsKKworZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7CisgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChj
b25maWcsICdyZWYnKSkgeworICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0OworICAgICAgaWYgKGdldHRlciAmJiBnZXR0
ZXIuaXNSZWFjdFdhcm5pbmcpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAg
IH0KKyAgfQorICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkOworfQorCitmdW5jdGlv
biBoYXNWYWxpZEtleShjb25maWcpIHsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7Cisg
ICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcs
ICdrZXknKS5nZXQ7CisgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBj
b25maWcua2V5ICE9PSB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGRlZmluZUtleVByb3BXYXJu
aW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkgeworICB2YXIgd2FybkFib3V0QWNjZXNzaW5n
S2V5ID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24p
IHsKKyAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTsKKyAgICAgICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclczogYGtleWAgaXMg
bm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRl
ZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyAr
ICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFz
IGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIubWUvcmVhY3Qtc3BlY2lhbC1wcm9w
cyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7CisgICAgfQorICB9OworICB3YXJuQWJvdXRBY2Nl
c3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlOworICBPYmplY3QuZGVmaW5lUHJvcGVydHko
cHJvcHMsICdrZXknLCB7CisgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksCisgICAgY29u
ZmlndXJhYmxlOiB0cnVlCisgIH0pOworfQorCitmdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2Fybmlu
Z0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHsKKyAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1Jl
ZiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7
CisgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7CisgICAgICAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXM6IGByZWZgIGlzIG5v
dCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZp
bmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAn
dmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBh
IGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL2ZiLm1lL3JlYWN0LXNwZWNpYWwtcHJvcHMp
JywgZGlzcGxheU5hbWUpIDogdm9pZCAwOworICAgIH0KKyAgfTsKKyAgd2FybkFib3V0QWNjZXNz
aW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBy
b3BzLCAncmVmJywgeworICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLAorICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZQorICB9KTsKK30KKworLyoqCisgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVh
dGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0bworICogdGhl
IGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIG5vIGlu
c3RhbmNlb2YgY2hlY2sKKyAqIHdpbGwgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxk
IGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrCisgKiBpZiBzb21l
dGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LgorICoKKyAqIEBwYXJhbSB7Kn0gdHlwZQorICogQHBh
cmFtIHsqfSBrZXkKKyAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmCisgKiBAcGFyYW0geyp9
IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2Ag
aXMKKyAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVu
dCBpcyBjYWxsZWQsIHNvIHRoYXQgd2UKKyAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQg
b2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93CisgKiBmdW5jdGlv
bnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3
aWxsIGJlIG5vCisgKiBjaGFuZ2UgaW4gYmVoYXZpb3IuCisgKiBAcGFyYW0geyp9IHNvdXJjZSBB
biBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSkK
KyAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3Jt
YXRpb24uCisgKiBAcGFyYW0geyp9IG93bmVyCisgKiBAcGFyYW0geyp9IHByb3BzCisgKiBAaW50
ZXJuYWwKKyAqLwordmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwg
c2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHsKKyAgdmFyIGVsZW1lbnQgPSB7CisgICAgLy8g
VGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVs
ZW1lbnQKKyAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLAorCisgICAgLy8gQnVpbHQt
aW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudAorICAgIHR5cGU6IHR5cGUs
CisgICAga2V5OiBrZXksCisgICAgcmVmOiByZWYsCisgICAgcHJvcHM6IHByb3BzLAorCisgICAg
Ly8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxl
bWVudC4KKyAgICBfb3duZXI6IG93bmVyCisgIH07CisKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJykgeworICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5
IG11dGF0aXZlLiBXZSBwdXQgaXQgb24KKyAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3Jl
IHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LgorICAgIC8vIFRoaXMgY2Fu
IGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW4K
KyAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4KKyAgICBlbGVt
ZW50Ll9zdG9yZSA9IHt9OworCisgICAgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50
cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2UKKyAgICAvLyB0aGUgdmFsaWRh
dGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkCisg
ICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUg
dGVzdCBmcmFtZXdvcmsKKyAgICAvLyBpZ25vcmVzIGl0LgorICAgIGlmIChjYW5EZWZpbmVQcm9w
ZXJ0eSkgeworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFs
aWRhdGVkJywgeworICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgICAgICBlbnVtZXJh
YmxlOiBmYWxzZSwKKyAgICAgICAgd3JpdGFibGU6IHRydWUsCisgICAgICAgIHZhbHVlOiBmYWxz
ZQorICAgICAgfSk7CisgICAgICAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3Bl
cnRpZXMuCisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywgewor
ICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwK
KyAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAgICB2YWx1ZTogc2VsZgorICAgICAgfSk7
CisgICAgICAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBz
aG91bGQgYmUgY29uc2lkZXJlZAorICAgICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMg
YW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uCisgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJs
ZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTog
ZmFsc2UsCisgICAgICAgIHZhbHVlOiBzb3VyY2UKKyAgICAgIH0pOworICAgIH0gZWxzZSB7Cisg
ICAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSBmYWxzZTsKKyAgICAgIGVsZW1lbnQuX3Nl
bGYgPSBzZWxmOworICAgICAgZWxlbWVudC5fc291cmNlID0gc291cmNlOworICAgIH0KKyAgICBp
ZiAoT2JqZWN0LmZyZWV6ZSkgeworICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTsK
KyAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGVs
ZW1lbnQ7Cit9OworCisvKioKKyAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVu
dCBvZiB0aGUgZ2l2ZW4gdHlwZS4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9y
ZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVlbGVtZW50CisgKi8KK1Jl
YWN0RWxlbWVudC5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgY2hpbGRy
ZW4pIHsKKyAgdmFyIHByb3BOYW1lOworCisgIC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0
ZWQKKyAgdmFyIHByb3BzID0ge307CisKKyAgdmFyIGtleSA9IG51bGw7CisgIHZhciByZWYgPSBu
dWxsOworICB2YXIgc2VsZiA9IG51bGw7CisgIHZhciBzb3VyY2UgPSBudWxsOworCisgIGlmIChj
b25maWcgIT0gbnVsbCkgeworICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7CisgICAgICBy
ZWYgPSBjb25maWcucmVmOworICAgIH0KKyAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkgewor
ICAgICAga2V5ID0gJycgKyBjb25maWcua2V5OworICAgIH0KKworICAgIHNlbGYgPSBjb25maWcu
X19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjsKKyAgICBzb3VyY2Ug
PSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7
CisgICAgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9i
amVjdAorICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7CisgICAgICBpZiAoaGFzT3duUHJv
cGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJv
cGVydHkocHJvcE5hbWUpKSB7CisgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9w
TmFtZV07CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUg
dGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250bworICAvLyB0
aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC4KKyAgdmFyIGNoaWxkcmVuTGVuZ3RoID0g
YXJndW1lbnRzLmxlbmd0aCAtIDI7CisgIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkgeworICAg
IHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGgg
PiAxKSB7CisgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7CisgICAgICBjaGlsZEFy
cmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTsKKyAgICB9CisgICAgaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHsKKyAgICAgICAg
T2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTsKKyAgICAgIH0KKyAgICB9CisgICAgcHJvcHMuY2hp
bGRyZW4gPSBjaGlsZEFycmF5OworICB9CisKKyAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzCisg
IGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7CisgICAgdmFyIGRlZmF1bHRQcm9wcyA9
IHR5cGUuZGVmYXVsdFByb3BzOworICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7
CisgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcHJv
cHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGlmIChrZXkg
fHwgcmVmKSB7CisgICAgICBpZiAodHlwZW9mIHByb3BzLiQkdHlwZW9mID09PSAndW5kZWZpbmVk
JyB8fCBwcm9wcy4kJHR5cGVvZiAhPT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7CisgICAgICAgIHZh
ciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5
TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTsKKyAgICAgICAgaWYgKGtleSkg
eworICAgICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZikgeworICAgICAgICAgIGRlZmluZVJlZlBy
b3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwg
c291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7Cit9OworCisvKioKKyAq
IFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgUmVhY3RFbGVtZW50cyBvZiBhIGdpdmVu
IHR5cGUuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3At
bGV2ZWwtYXBpLmh0bWwjcmVhY3QuY3JlYXRlZmFjdG9yeQorICovCitSZWFjdEVsZW1lbnQuY3Jl
YXRlRmFjdG9yeSA9IGZ1bmN0aW9uICh0eXBlKSB7CisgIHZhciBmYWN0b3J5ID0gUmVhY3RFbGVt
ZW50LmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTsKKyAgLy8gRXhwb3NlIHRoZSB0eXBl
IG9uIHRoZSBmYWN0b3J5IGFuZCB0aGUgcHJvdG90eXBlIHNvIHRoYXQgaXQgY2FuIGJlCisgIC8v
IGVhc2lseSBhY2Nlc3NlZCBvbiBlbGVtZW50cy4gRS5nLiBgPEZvbyAvPi50eXBlID09PSBGb29g
LgorICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmFtZWQgYGNvbnN0cnVjdG9yYCBzaW5jZSB0aGlz
IG1heSBub3QgYmUgdGhlIGZ1bmN0aW9uCisgIC8vIHRoYXQgY3JlYXRlZCB0aGUgZWxlbWVudCwg
YW5kIGl0IG1heSBub3QgZXZlbiBiZSBhIGNvbnN0cnVjdG9yLgorICAvLyBMZWdhY3kgaG9vayBU
T0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWQKKyAgZmFjdG9yeS50eXBlID0gdHlwZTsKKyAg
cmV0dXJuIGZhY3Rvcnk7Cit9OworCitSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlS2V5ID0g
ZnVuY3Rpb24gKG9sZEVsZW1lbnQsIG5ld0tleSkgeworICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0
RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1l
bnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1l
bnQucHJvcHMpOworCisgIHJldHVybiBuZXdFbGVtZW50OworfTsKKworLyoqCisgKiBDbG9uZSBh
bmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCB1c2luZyBlbGVtZW50IGFzIHRoZSBzdGFydGlu
ZyBwb2ludC4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3Rv
cC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jbG9uZWVsZW1lbnQKKyAqLworUmVhY3RFbGVtZW50LmNs
b25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7CisgIHZh
ciBwcm9wTmFtZTsKKworICAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkCisgIHZhciBwcm9w
cyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOworCisgIC8vIFJlc2VydmVkIG5hbWVzIGFy
ZSBleHRyYWN0ZWQKKyAgdmFyIGtleSA9IGVsZW1lbnQua2V5OworICB2YXIgcmVmID0gZWxlbWVu
dC5yZWY7CisgIC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2
ZWQuCisgIHZhciBzZWxmID0gZWxlbWVudC5fc2VsZjsKKyAgLy8gU291cmNlIGlzIHByZXNlcnZl
ZCBzaW5jZSBjbG9uZUVsZW1lbnQgaXMgdW5saWtlbHkgdG8gYmUgdGFyZ2V0ZWQgYnkgYQorICAv
LyB0cmFuc3BpbGVyLCBhbmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBwcm9iYWJseSBhIGJldHRl
ciBpbmRpY2F0b3Igb2YgdGhlCisgIC8vIHRydWUgb3duZXIuCisgIHZhciBzb3VyY2UgPSBlbGVt
ZW50Ll9zb3VyY2U7CisKKyAgLy8gT3duZXIgd2lsbCBiZSBwcmVzZXJ2ZWQsIHVubGVzcyByZWYg
aXMgb3ZlcnJpZGRlbgorICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjsKKworICBpZiAoY29u
ZmlnICE9IG51bGwpIHsKKyAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkgeworICAgICAgLy8g
U2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuCisgICAgICByZWYgPSBjb25m
aWcucmVmOworICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50OworICAgIH0K
KyAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkgeworICAgICAga2V5ID0gJycgKyBjb25maWcu
a2V5OworICAgIH0KKworICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0
aW5nIHByb3BzCisgICAgdmFyIGRlZmF1bHRQcm9wczsKKyAgICBpZiAoZWxlbWVudC50eXBlICYm
IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHsKKyAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1l
bnQudHlwZS5kZWZhdWx0UHJvcHM7CisgICAgfQorICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmln
KSB7CisgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAh
UkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7CisgICAgICAgIGlmIChj
b25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMKKyAgICAgICAgICBwcm9w
c1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9u
ZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvCisgIC8vIHRoZSBuZXds
eSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LgorICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVu
dHMubGVuZ3RoIC0gMjsKKyAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7CisgICAgcHJvcHMu
Y2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHsK
KyAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHsKKyAgICAgIGNoaWxkQXJyYXlbaV0g
PSBhcmd1bWVudHNbaSArIDJdOworICAgIH0KKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJy
YXk7CisgIH0KKworICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYs
IHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTsKK307CisKKy8qKgorICogVmVyaWZpZXMgdGhl
IG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1
Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5pc3ZhbGlkZWxlbWVudAor
ICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3QKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYg
YG9iamVjdGAgaXMgYSB2YWxpZCBjb21wb25lbnQuCisgKiBAZmluYWwKKyAqLworUmVhY3RFbGVt
ZW50LmlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkgeworICByZXR1cm4gdHlwZW9m
IG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVv
ZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFOworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVs
ZW1lbnQ7Cit9LHsiMTEiOjExLCIyMCI6MjAsIjMwIjozMCwiMzEiOjMxLCI4Ijo4fV0sMTE6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNC1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFn
IHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbAorLy8g
bm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNl
LgorCit2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9u
JyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJvbFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAw
eGVhYzc7CisKK21vZHVsZS5leHBvcnRzID0gUkVBQ1RfRUxFTUVOVF9UWVBFOworfSx7fV0sMTI6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
NC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKy8qKgorICogUmVhY3RFbGVtZW50VmFsaWRhdG9yIHByb3ZpZGVzIGEgd3Jh
cHBlciBhcm91bmQgYSBlbGVtZW50IGZhY3RvcnkKKyAqIHdoaWNoIHZhbGlkYXRlcyB0aGUgcHJv
cHMgcGFzc2VkIHRvIHRoZSBlbGVtZW50LiBUaGlzIGlzIGludGVuZGVkIHRvIGJlCisgKiB1c2Vk
IG9ubHkgaW4gREVWIGFuZCBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHN0YXRpYyB0eXBlIGNoZWNr
ZXIgZm9yIGxhbmd1YWdlcworICogdGhhdCBzdXBwb3J0IGl0LgorICovCisKKyd1c2Ugc3RyaWN0
JzsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXyg4KTsKK3ZhciBSZWFjdENvbXBv
bmVudFRyZWVIb29rID0gX2RlcmVxXyg3KTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDEw
KTsKKwordmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9IF9kZXJlcV8oMjEpOworCit2YXIgY2FuRGVm
aW5lUHJvcGVydHkgPSBfZGVyZXFfKDIwKTsKK3ZhciBnZXRJdGVyYXRvckZuID0gX2RlcmVxXygy
Mik7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworCitmdW5jdGlvbiBnZXREZWNsYXJhdGlv
bkVycm9yQWRkZW5kdW0oKSB7CisgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7Cisg
ICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICBp
ZiAobmFtZSkgeworICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcg
KyBuYW1lICsgJ2AuJzsKKyAgICB9CisgIH0KKyAgcmV0dXJuICcnOworfQorCitmdW5jdGlvbiBn
ZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMpIHsKKyAgaWYgKGVsZW1lbnRQ
cm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50UHJv
cHMuX19zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgIHZhciBzb3VyY2UgPSBlbGVtZW50UHJv
cHMuX19zb3VyY2U7CisgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2Uo
L14uKltcXFwvXS8sICcnKTsKKyAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVy
OworICAgIHJldHVybiAnIENoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBs
aW5lTnVtYmVyICsgJy4nOworICB9CisgIHJldHVybiAnJzsKK30KKworLyoqCisgKiBXYXJuIGlm
IHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxk
cmVuIG9yCisgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBr
ZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW4KKyAqIHVwZGF0ZXMuCisgKi8KK3ZhciBvd25l
ckhhc0tleVVzZVdhcm5pbmcgPSB7fTsKKworZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVy
cm9ySW5mbyhwYXJlbnRUeXBlKSB7CisgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFk
ZGVuZHVtKCk7CisKKyAgaWYgKCFpbmZvKSB7CisgICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2Yg
cGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5
TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7CisgICAgaWYgKHBhcmVudE5hbWUpIHsKKyAgICAgIGlu
Zm8gPSAnIENoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPCcgKyBwYXJlbnRO
YW1lICsgJz4uJzsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGluZm87Cit9CisKKy8qKgorICogV2Fy
biBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRv
IGl0LgorICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3Jv
dyBhbmQgc2hyaW5rIG9yIGJlCisgKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVu
J3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG8KKyAqIGhhdmUgYSAia2V5
IiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBh
IHdhcm5pbmcKKyAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLgorICoKKyAqIEBpbnRlcm5hbAor
ICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEg
a2V5LgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLgor
ICovCitmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHsK
KyAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxl
bWVudC5rZXkgIT0gbnVsbCkgeworICAgIHJldHVybjsKKyAgfQorICBlbGVtZW50Ll9zdG9yZS52
YWxpZGF0ZWQgPSB0cnVlOworCisgIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5VXNlV2Fybmlu
Zy51bmlxdWVLZXkgfHwgKG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgPSB7fSk7CisK
KyAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJy
b3JJbmZvKHBhcmVudFR5cGUpOworICBpZiAobWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9y
SW5mb10pIHsKKyAgICByZXR1cm47CisgIH0KKyAgbWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVy
cm9ySW5mb10gPSB0cnVlOworCisgIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhl
IG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhCisgIC8vIHByb3BlcnR5
LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBm
b3IKKyAgLy8gYXNzaWduaW5nIGl0IGEga2V5LgorICB2YXIgY2hpbGRPd25lciA9ICcnOworICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RD
dXJyZW50T3duZXIuY3VycmVudCkgeworICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9y
aWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLgorICAgIGNoaWxkT3duZXIgPSAnIEl0IHdhcyBw
YXNzZWQgYSBjaGlsZCBmcm9tICcgKyBlbGVtZW50Ll9vd25lci5nZXROYW1lKCkgKyAnLic7Cisg
IH0KKworICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAn
RWFjaCBjaGlsZCBpbiBhbiBhcnJheSBvciBpdGVyYXRvciBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAi
a2V5IiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMg
Zm9yIG1vcmUgaW5mb3JtYXRpb24uJXMnLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGls
ZE93bmVyLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVs
ZW1lbnQpKSA6IHZvaWQgMDsKK30KKworLyoqCisgKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50
IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuCisgKiBhcnJheSB3
aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxp
dGVyYWwKKyAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LgorICoKKyAqIEBpbnRlcm5hbAorICog
QHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5
cGUuCisgKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuCisgKi8K
K2Z1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHsKKyAgaWYgKHR5
cGVvZiBub2RlICE9PSAnb2JqZWN0JykgeworICAgIHJldHVybjsKKyAgfQorICBpZiAoQXJyYXku
aXNBcnJheShub2RlKSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkr
KykgeworICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTsKKyAgICAgIGlmIChSZWFjdEVsZW1lbnQu
aXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7CisgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hp
bGQsIHBhcmVudFR5cGUpOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIGlmIChSZWFjdEVsZW1l
bnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHsKKyAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3Nl
ZCBpbiBhIHZhbGlkIGxvY2F0aW9uLgorICAgIGlmIChub2RlLl9zdG9yZSkgeworICAgICAgbm9k
ZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKyAgICB9CisgIH0gZWxzZSBpZiAobm9kZSkgewor
ICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTsKKyAgICAvLyBFbnRyeSBp
dGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLgorICAgIGlmIChpdGVyYXRvckZuKSB7Cisg
ICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7CisgICAgICAgIHZhciBpdGVy
YXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTsKKyAgICAgICAgdmFyIHN0ZXA7CisgICAgICAg
IHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICBpZiAo
UmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7CisgICAgICAgICAgICB2
YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyAqIEdpdmVuIGFuIGVs
ZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmlu
aXRpb24sCisgKiBwcm92aWRlZCBieSB0aGUgdHlwZS4KKyAqCisgKiBAcGFyYW0ge1JlYWN0RWxl
bWVudH0gZWxlbWVudAorICovCitmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7
CisgIHZhciBjb21wb25lbnRDbGFzcyA9IGVsZW1lbnQudHlwZTsKKyAgaWYgKHR5cGVvZiBjb21w
b25lbnRDbGFzcyAhPT0gJ2Z1bmN0aW9uJykgeworICAgIHJldHVybjsKKyAgfQorICB2YXIgbmFt
ZSA9IGNvbXBvbmVudENsYXNzLmRpc3BsYXlOYW1lIHx8IGNvbXBvbmVudENsYXNzLm5hbWU7Cisg
IGlmIChjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMpIHsKKyAgICBjaGVja1JlYWN0VHlwZVNwZWMo
Y29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVs
ZW1lbnQsIG51bGwpOworICB9CisgIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVs
dFByb3BzID09PSAnZnVuY3Rpb24nKSB7CisgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nID8gd2FybmluZyhjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNz
QXBwcm92ZWQsICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3Qu
Y3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVk
IGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJykgOiB2b2lkIDA7CisgIH0KK30KKwordmFyIFJlYWN0
RWxlbWVudFZhbGlkYXRvciA9IHsKKworICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiAodHlwZSwg
cHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIHZhbGlkVHlwZSA9IHR5cGVvZiB0eXBlID09PSAn
c3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJzsKKyAgICAvLyBXZSB3YXJuIGlu
IHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlv
biB0bworICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiBy
ZW5kZXIuCisgICAgaWYgKCF2YWxpZFR5cGUpIHsKKyAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0g
J2Z1bmN0aW9uJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgdmFyIGlu
Zm8gPSAnJzsKKyAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9
PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGgg
PT09IDApIHsKKyAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0
IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArICdpdFwncyBkZWZpbmVkIGluLic7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFk
ZGVuZHVtKHByb3BzKTsKKyAgICAgICAgaWYgKHNvdXJjZUluZm8pIHsKKyAgICAgICAgICBpbmZv
ICs9IHNvdXJjZUluZm87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW5mbyArPSBnZXRE
ZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTsKKyAgICAgICAgfQorCisgICAgICAgIGluZm8gKz0g
UmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bSgpOworCisgICAg
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFj
dC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZv
ciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21w
b3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5
cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiB2b2lkIDA7CisgICAgICB9CisgICAgfQorCisgICAg
dmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworCisgICAgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3Ig
YSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC4KKyAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0
aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuCisgICAgaWYg
KGVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisgICAg
Ly8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5
IHZhbGlkYXRpb24gbG9naWMKKyAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVu
Y3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuCisgICAgLy8gV2UgZG9u
J3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9k
LgorICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFu
ZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzCisgICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mg
d2lsbCBhcHBlYXIuKQorICAgIGlmICh2YWxpZFR5cGUpIHsKKyAgICAgIGZvciAodmFyIGkgPSAy
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlz
KGFyZ3VtZW50c1tpXSwgdHlwZSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFsaWRhdGVQcm9w
VHlwZXMoZWxlbWVudCk7CisKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBjcmVhdGVG
YWN0b3J5OiBmdW5jdGlvbiAodHlwZSkgeworICAgIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gUmVh
Y3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTsKKyAgICAv
LyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWQKKyAgICB2YWxpZGF0
ZWRGYWN0b3J5LnR5cGUgPSB0eXBlOworCisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICAgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHsKKyAgICAgICAgICBl
bnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWN0
b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2Jl
Zm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3RvcnkuJykgOiB2b2lkIDA7CisgICAgICAgICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7CisgICAgICAgICAgICAgIHZh
bHVlOiB0eXBlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB0eXBlOworICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlk
YXRlZEZhY3Rvcnk7CisgIH0sCisKKyAgY2xvbmVFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwg
cHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xv
bmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgZm9yICh2YXIgaSA9IDI7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3Vt
ZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTsKKyAgICB9CisgICAgdmFsaWRhdGVQcm9wVHlwZXMo
bmV3RWxlbWVudCk7CisgICAgcmV0dXJuIG5ld0VsZW1lbnQ7CisgIH0KKworfTsKKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7Cit9LHsiMTAiOjEwLCIyMCI6MjAsIjIx
IjoyMSwiMjIiOjIyLCIzMCI6MzAsIjciOjcsIjgiOjh9XSwxMzpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworCitmdW5jdGlvbiB3YXJuTm9v
cChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nKSB7CisgICAgdmFyIGNvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29u
c3RydWN0b3I7CisgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhm
YWxzZSwgJyVzKC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcgY29t
cG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4gdW5t
b3VudGVkIGNvbXBvbmVudC4gJyArICdUaGlzIGlzIGEgbm8tb3AuIFBsZWFzZSBjaGVjayB0aGUg
Y29kZSBmb3IgdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjYWxsZXJOYW1lLCBjb25z
dHJ1Y3RvciAmJiAoY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSkg
fHwgJ1JlYWN0Q2xhc3MnKSA6IHZvaWQgMDsKKyAgfQorfQorCisvKioKKyAqIFRoaXMgaXMgdGhl
IGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLgorICovCit2YXIgUmVhY3ROb29wVXBk
YXRlUXVldWUgPSB7CisKKyAgLyoqCisgICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNv
bXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC4KKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBw
dWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LgorICAgKiBAcmV0dXJu
IHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3Rl
Y3RlZAorICAgKiBAZmluYWwKKyAgICovCisgIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0lu
c3RhbmNlKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9LAorCisgIC8qKgorICAgKiBFbnF1ZXVl
IGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1
cGRhdGVzCisgICAqIGhhdmUgcHJvY2Vzc2VkLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xh
c3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQu
CisgICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMg
dXBkYXRlZC4KKyAgICogQGludGVybmFsCisgICAqLworICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0
aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2spIHt9LAorCisgIC8qKgorICAgKiBGb3JjZXMg
YW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3
aXRoCisgICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0
aW9uLgorICAgKgorICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cg
dGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlCisgICAqIGNvbXBvbmVudCdzIHN0YXRlIGhh
cyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLgorICAgKgorICAgKiBUaGlz
IHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52
b2tlCisgICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAu
CisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3Rh
bmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVl
dWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7CisgICAgd2Fybk5vb3Ao
cHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpOworICB9LAorCisgIC8qKgorICAgKiBSZXBs
YWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBt
dXRhdGUgc3RhdGUuCisgICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0
YWJsZS4KKyAgICoKKyAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVg
IHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc28KKyAgICogYWNjZXNzaW5nIGB0aGlzLnN0
YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4K
KyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFu
Y2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0
YXRlIE5leHQgc3RhdGUuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZVJlcGxhY2VT
dGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlKSB7CisgICAgd2Fy
bk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTsKKyAgfSwKKworICAvKioKKyAg
ICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBf
cGVuZGluZ1N0YXRlIGlzCisgICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBz
dHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcAorICAgKiBwcm9wZXJ0aWVzIHdo
aWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2Ug
aXQKKyAgICogZHVyaW5nIHRoZSBtZXJnZS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNz
fSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1l
cmdlZCB3aXRoIHN0YXRlLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVTZXRTdGF0
ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHsKKyAgICB3YXJuTm9v
cChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3ROb29wVXBkYXRlUXVldWU7Cit9LHsiMzAiOjMwfV0sMTQ6W2Z1bmN0aW9uKF9kZXJl
cV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTsK
KworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBSZWFjdFByb3BUeXBl
TG9jYXRpb25OYW1lcyA9IHsKKyAgICBwcm9wOiAncHJvcCcsCisgICAgY29udGV4dDogJ2NvbnRl
eHQnLAorICAgIGNoaWxkQ29udGV4dDogJ2NoaWxkIGNvbnRleHQnCisgIH07Cit9CisKK21vZHVs
ZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXM7Cit9LHt9XSwxNTpbZnVuY3Rp
b24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
Ki8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3JlcXVpcmUgPSBfZGVyZXFfKDEwKSwKKyAgICBp
c1ZhbGlkRWxlbWVudCA9IF9yZXF1aXJlLmlzVmFsaWRFbGVtZW50OworCit2YXIgZmFjdG9yeSA9
IF9kZXJlcV8oMzMpOworCittb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQp
OworfSx7IjEwIjoxMCwiMzMiOjMzfV0sMTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3Qn
OworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNf
T1JfWU9VX1dJTExfQkVfRklSRUQnOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVz
U2VjcmV0OworfSx7fV0sMTc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3Np
Z24gPSBfZGVyZXFfKDMxKTsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gX2RlcmVxXyg2KTsKK3Zh
ciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9kZXJlcV8oMTMpOworCit2YXIgZW1wdHlPYmplY3Qg
PSBfZGVyZXFfKDI4KTsKKworLyoqCisgKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRh
dGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC4KKyAqLworZnVuY3Rpb24gUmVhY3RQdXJlQ29tcG9u
ZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7CisgIC8vIER1cGxpY2F0ZWQgZnJvbSBSZWFj
dENvbXBvbmVudC4KKyAgdGhpcy5wcm9wcyA9IHByb3BzOworICB0aGlzLmNvbnRleHQgPSBjb250
ZXh0OworICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsKKyAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUg
ZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGUKKyAg
Ly8gcmVuZGVyZXIuCisgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRl
UXVldWU7Cit9CisKK2Z1bmN0aW9uIENvbXBvbmVudER1bW15KCkge30KK0NvbXBvbmVudER1bW15
LnByb3RvdHlwZSA9IFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZTsKK1JlYWN0UHVyZUNvbXBvbmVu
dC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTsKK1JlYWN0UHVyZUNvbXBvbmVudC5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWFjdFB1cmVDb21wb25lbnQ7CisvLyBBdm9pZCBhbiBl
eHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy4KK19hc3NpZ24oUmVhY3RQdXJl
Q29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RDb21wb25lbnQucHJvdG90eXBlKTsKK1JlYWN0UHVy
ZUNvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlOworCittb2R1
bGUuZXhwb3J0cyA9IFJlYWN0UHVyZUNvbXBvbmVudDsKK30seyIxMyI6MTMsIjI4IjoyOCwiMzEi
OjMxLCI2Ijo2fV0sMTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24g
PSBfZGVyZXFfKDMxKTsKKwordmFyIFJlYWN0ID0gX2RlcmVxXygzKTsKKworLy8gYHZlcnNpb25g
IHdpbGwgYmUgYWRkZWQgaGVyZSBieSB0aGUgUmVhY3QgbW9kdWxlLgordmFyIFJlYWN0VU1ERW50
cnkgPSBfYXNzaWduKFJlYWN0LCB7CisgIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09S
X1lPVV9XSUxMX0JFX0ZJUkVEOiB7CisgICAgUmVhY3RDdXJyZW50T3duZXI6IF9kZXJlcV8oOCkK
KyAgfQorfSk7CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgX2Fz
c2lnbihSZWFjdFVNREVudHJ5Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9X
SUxMX0JFX0ZJUkVELCB7CisgICAgLy8gUmVhY3RDb21wb25lbnRUcmVlSG9vayBzaG91bGQgbm90
IGJlIGluY2x1ZGVkIGluIHByb2R1Y3Rpb24uCisgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vazog
X2RlcmVxXyg3KSwKKyAgICBnZXROZXh0RGVidWdJRDogX2RlcmVxXygyMykKKyAgfSk7Cit9CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RVTURFbnRyeTsKK30seyIyMyI6MjMsIjMiOjMsIjMxIjoz
MSwiNyI6NywiOCI6OH1dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK21vZHVsZS5l
eHBvcnRzID0gJzE1LjUuNCc7Cit9LHt9XSwyMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmlj
dCc7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZhbHNlOworaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICB0cnkgeworICAgIC8vICRGbG93Rml4TWUgaHR0cHM6Ly9n
aXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NQorICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSh7fSwgJ3gnLCB7IGdldDogZnVuY3Rpb24gKCkge30gfSk7CisgICAgY2FuRGVmaW5lUHJv
cGVydHkgPSB0cnVlOworICB9IGNhdGNoICh4KSB7CisgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRl
ZmluZVByb3BlcnR5CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBjYW5EZWZpbmVQcm9wZXJ0
eTsKK30se31dLDIxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlv
biAocHJvY2Vzcyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJp
Y3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwordmFyIFJlYWN0UHJv
cFR5cGVMb2NhdGlvbk5hbWVzID0gX2RlcmVxXygxNCk7Cit2YXIgUmVhY3RQcm9wVHlwZXNTZWNy
ZXQgPSBfZGVyZXFfKDE2KTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkpOwordmFyIHdh
cm5pbmcgPSBfZGVyZXFfKDMwKTsKKwordmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2s7CisKK2lm
ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYgJiYgImRldmVs
b3BtZW50IiA9PT0gJ3Rlc3QnKSB7CisgIC8vIFRlbXBvcmFyeSBoYWNrLgorICAvLyBJbmxpbmUg
cmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDoKKyAgLy8gaHR0cHM6Ly9naXRodWIu
Y29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwCisgIC8vIFJlbW92ZSB0aGUgaW5saW5lIHJl
cXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6CisgIC8vIGh0dHBzOi8vZ2l0
aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzgKKyAgUmVhY3RDb21wb25lbnRUcmVlSG9v
ayA9IF9kZXJlcV8oNyk7Cit9CisKK3ZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTsKKworLyoq
CisgKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuCisg
KiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25j
ZS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVh
Y3RQcm9wVHlwZQorICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0
IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkCisgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5n
LiAicHJvcCIsICJjb250ZXh0IiwgImNoaWxkIGNvbnRleHQiCisgKiBAcGFyYW0ge3N0cmluZ30g
Y29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLgor
ICogQHBhcmFtIHs/b2JqZWN0fSBlbGVtZW50IFRoZSBSZWFjdCBlbGVtZW50IHRoYXQgaXMgYmVp
bmcgdHlwZS1jaGVja2VkCisgKiBAcGFyYW0gez9udW1iZXJ9IGRlYnVnSUQgVGhlIFJlYWN0IGNv
bXBvbmVudCBpbnN0YW5jZSB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHByaXZhdGUK
KyAqLworZnVuY3Rpb24gY2hlY2tSZWFjdFR5cGVTcGVjKHR5cGVTcGVjcywgdmFsdWVzLCBsb2Nh
dGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCwgZGVidWdJRCkgeworICBmb3IgKHZhciB0eXBl
U3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7CisgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0
eSh0eXBlU3BlY05hbWUpKSB7CisgICAgICB2YXIgZXJyb3I7CisgICAgICAvLyBQcm9wIHR5cGUg
dmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0bwor
ICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9y
ZS4gU28gd2UgbG9nIGl0LgorICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQg
dXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LgorICAgICAgdHJ5IHsKKyAgICAgICAgLy8gVGhpcyBp
cyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBz
YW1lCisgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0
IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS4KKyAgICAgICAgISh0eXBlb2YgdHlwZVNwZWNzW3R5cGVT
cGVjTmFtZV0gPT09ICdmdW5jdGlvbicpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0
IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSBSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50
TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlv
bl0sIHR5cGVTcGVjTmFtZSkgOiBfcHJvZEludmFyaWFudCgnODQnLCBjb21wb25lbnROYW1lIHx8
ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlw
ZVNwZWNOYW1lKSA6IHZvaWQgMDsKKyAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNO
YW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGws
IFJlYWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGVy
cm9yID0gZXg7CisgICAgICB9CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAnJXM6IHR5cGUgc3Bl
Y2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdm
dW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAl
cy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhl
IHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9m
LCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVu
dCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRp
b25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKSA6IHZvaWQgMDsK
KyAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBs
b2dnZWRUeXBlRmFpbHVyZXMpKSB7CisgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1
cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZQorICAgICAgICAv
LyBzYW1lIGVycm9yLgorICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0g
PSB0cnVlOworCisgICAgICAgIHZhciBjb21wb25lbnRTdGFja0luZm8gPSAnJzsKKworICAgICAg
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICAgaWYgKCFS
ZWFjdENvbXBvbmVudFRyZWVIb29rKSB7CisgICAgICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVI
b29rID0gX2RlcmVxXyg3KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGRlYnVnSUQgIT09
IG51bGwpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50
VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVidWdJRCk7CisgICAgICAgICAgfSBlbHNl
IGlmIChlbGVtZW50ICE9PSBudWxsKSB7CisgICAgICAgICAgICBjb21wb25lbnRTdGFja0luZm8g
PSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQp
OworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0
aW9uLCBlcnJvci5tZXNzYWdlLCBjb21wb25lbnRTdGFja0luZm8pIDogdm9pZCAwOworICAgICAg
fQorICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGNoZWNrUmVhY3RUeXBlU3BlYzsK
K30pLmNhbGwodGhpcyx1bmRlZmluZWQpCit9LHsiMTQiOjE0LCIxNiI6MTYsIjI1IjoyNSwiMjki
OjI5LCIzMCI6MzAsIjciOjd9XSwyMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisK
Ky8qIGdsb2JhbCBTeW1ib2wgKi8KKwordmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1i
b2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yOwordmFyIEZBVVhfSVRFUkFUT1Jf
U1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuCisKKy8qKgorICog
UmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRl
cmFibGUgb2JqZWN0LgorICoKKyAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRo
IHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OgorICoKKyAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdl
dEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7CisgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAqICAg
ICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTsKKyAqICAgICAg
IC4uLgorICogICAgIH0KKyAqCisgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGUKKyAq
IEByZXR1cm4gez9mdW5jdGlvbn0KKyAqLworZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0
ZXJhYmxlKSB7CisgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1Jf
U1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxl
W0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7CisgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1
bmN0aW9uJykgeworICAgIHJldHVybiBpdGVyYXRvckZuOworICB9Cit9CisKK21vZHVsZS5leHBv
cnRzID0gZ2V0SXRlcmF0b3JGbjsKK30se31dLDIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNl
bnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0
aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRF
TlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKwordmFyIG5leHREZWJ1Z0lEID0gMTsKKworZnVuY3Rpb24gZ2V0TmV4dERlYnVnSUQo
KSB7CisgIHJldHVybiBuZXh0RGVidWdJRCsrOworfQorCittb2R1bGUuZXhwb3J0cyA9IGdldE5l
eHREZWJ1Z0lEOworfSx7fV0sMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJv
ZEludmFyaWFudCA9IF9kZXJlcV8oMjUpOworCit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygx
MCk7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKKworLyoqCisgKiBSZXR1cm5zIHRo
ZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRo
YXQgdGhlcmUKKyAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLgorICoKKyAq
IFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGku
aHRtbCNyZWFjdC5jaGlsZHJlbi5vbmx5CisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0cworICog
cGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIg
ZnVuY3Rpb24gaXMgdG8KKyAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJl
IG9mIGNoaWxkcmVuLgorICoKKyAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29s
bGVjdGlvbiBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBh
bmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlCisgKiBzdHJ1Y3R1cmUuCisg
Ki8KK2Z1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikgeworICAhUmVhY3RFbGVtZW50LmlzVmFs
aWRFbGVtZW50KGNoaWxkcmVuKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBh
IHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MycpIDog
dm9pZCAwOworICByZXR1cm4gY2hpbGRyZW47Cit9CisKK21vZHVsZS5leHBvcnRzID0gb25seUNo
aWxkOworfSx7IjEwIjoxMCwiMjUiOjI1LCIyOSI6Mjl9XSwyNTpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8K
Kyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBXQVJOSU5HOiBETyBOT1QgbWFudWFsbHkgcmVxdWly
ZSB0aGlzIG1vZHVsZS4KKyAqIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgYGludmFyaWFudCgu
Li4pYCB1c2VkIGJ5IHRoZSBlcnJvciBjb2RlIHN5c3RlbQorICogYW5kIHdpbGwgX29ubHlfIGJl
IHJlcXVpcmVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGJhYmVsIHBhc3MuCisgKiBJdCBhbHdheXMg
dGhyb3dzLgorICovCisKK2Z1bmN0aW9uIHJlYWN0UHJvZEludmFyaWFudChjb2RlKSB7CisgIHZh
ciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOworCisgIHZhciBtZXNzYWdlID0gJ01p
bmlmaWVkIFJlYWN0IGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyAnaHR0cDovL2ZhY2Vi
b29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9JyAr
IGNvZGU7CisKKyAgZm9yICh2YXIgYXJnSWR4ID0gMDsgYXJnSWR4IDwgYXJnQ291bnQ7IGFyZ0lk
eCsrKSB7CisgICAgbWVzc2FnZSArPSAnJmFyZ3NbXT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFy
Z3VtZW50c1thcmdJZHggKyAxXSk7CisgIH0KKworICBtZXNzYWdlICs9ICcgZm9yIHRoZSBmdWxs
IG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50JyArICcgZm9y
IGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJzsKKworICB2YXIg
ZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7CisgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZp
b2xhdGlvbic7CisgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91
dCByZWFjdFByb2RJbnZhcmlhbnQncyBvd24gZnJhbWUKKworICB0aHJvdyBlcnJvcjsKK30KKwor
bW9kdWxlLmV4cG9ydHMgPSByZWFjdFByb2RJbnZhcmlhbnQ7Cit9LHt9XSwyNjpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwor
dmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXyg4KTsKK3ZhciBSRUFDVF9FTEVNRU5UX1RZ
UEUgPSBfZGVyZXFfKDExKTsKKwordmFyIGdldEl0ZXJhdG9yRm4gPSBfZGVyZXFfKDIyKTsKK3Zh
ciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKK3ZhciBLZXlFc2NhcGVVdGlscyA9IF9kZXJlcV8o
MSk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOworCit2YXIgU0VQQVJBVE9SID0gJy4nOwor
dmFyIFNVQlNFUEFSQVRPUiA9ICc6JzsKKworLyoqCisgKiBUaGlzIGlzIGlubGluZWQgZnJvbSBS
ZWFjdEVsZW1lbnQgc2luY2UgdGhpcyBmaWxlIGlzIHNoYXJlZCBiZXR3ZWVuCisgKiBpc29tb3Jw
aGljIGFuZCByZW5kZXJlcnMuIFdlIGNvdWxkIGV4dHJhY3QgdGhpcyB0byBhCisgKgorICovCisK
Ky8qKgorICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRo
IG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5CisgKiBwYXR0ZXJuLgorICovCisKK3ZhciBkaWRX
YXJuQWJvdXRNYXBzID0gZmFsc2U7CisKKy8qKgorICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRo
YXQgaWRlbnRpZmllcyBhIGNvbXBvbmVudCB3aXRoaW4gYSBzZXQuCisgKgorICogQHBhcmFtIHsq
fSBjb21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwg
a2V5IGlzIG5vdCBwcm92aWRlZC4KKyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24g
Z2V0Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHsKKyAgLy8gRG8gc29tZSB0eXBlY2hl
Y2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmUK
KyAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuCisgIGlm
IChjb21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgY29tcG9uZW50
LmtleSAhPSBudWxsKSB7CisgICAgLy8gRXhwbGljaXQga2V5CisgICAgcmV0dXJuIEtleUVzY2Fw
ZVV0aWxzLmVzY2FwZShjb21wb25lbnQua2V5KTsKKyAgfQorICAvLyBJbXBsaWNpdCBrZXkgZGV0
ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldAorICByZXR1cm4gaW5kZXgudG9TdHJpbmco
MzYpOworfQorCisvKioKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29u
dGFpbmVyLgorICogQHBhcmFtIHshc3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUga2V5IHBh
dGggc28gZmFyLgorICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGlu
dm9rZSB3aXRoIGVhY2ggY2hpbGQgZm91bmQuCisgKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRl
eHQgVXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhlIHRyYXZlcnNhbAorICog
cHJvY2Vzcy4KKyAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4g
dGhpcyBzdWJ0cmVlLgorICovCitmdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGls
ZHJlbiwgbmFtZVNvRmFyLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7CisgIHZhciB0eXBl
ID0gdHlwZW9mIGNoaWxkcmVuOworCisgIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBl
ID09PSAnYm9vbGVhbicpIHsKKyAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQg
YXMgbnVsbC4KKyAgICBjaGlsZHJlbiA9IG51bGw7CisgIH0KKworICBpZiAoY2hpbGRyZW4gPT09
IG51bGwgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ251bWJlcicgfHwKKyAgLy8g
VGhlIGZvbGxvd2luZyBpcyBpbmxpbmVkIGZyb20gUmVhY3RFbGVtZW50LiBUaGlzIG1lYW5zIHdl
IGNhbiBvcHRpbWl6ZQorICAvLyBzb21lIGNoZWNrcy4gUmVhY3QgRmliZXIgYWxzbyBpbmxpbmVz
IHRoaXMgbG9naWMgZm9yIHNpbWlsYXIgcHVycG9zZXMuCisgIHR5cGUgPT09ICdvYmplY3QnICYm
IGNoaWxkcmVuLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHsKKyAgICBjYWxsYmFj
ayh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkcmVuLAorICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hp
bGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5CisgICAg
Ly8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93
cy4KKyAgICBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNo
aWxkcmVuLCAwKSA6IG5hbWVTb0Zhcik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB2YXIgY2hp
bGQ7CisgIHZhciBuZXh0TmFtZTsKKyAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9m
IGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuCisgIHZhciBuZXh0TmFtZVBy
ZWZpeCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBB
UkFUT1I7CisKKyAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgY2hpbGQgPSBjaGlsZHJl
bltpXTsKKyAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXko
Y2hpbGQsIGkpOworICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBs
KGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7CisgICAgfQorICB9
IGVsc2UgeworICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7Cisg
ICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2Fs
bChjaGlsZHJlbik7CisgICAgICB2YXIgc3RlcDsKKyAgICAgIGlmIChpdGVyYXRvckZuICE9PSBj
aGlsZHJlbi5lbnRyaWVzKSB7CisgICAgICAgIHZhciBpaSA9IDA7CisgICAgICAgIHdoaWxlICgh
KHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICBjaGlsZCA9IHN0ZXAu
dmFsdWU7CisgICAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVu
dEtleShjaGlsZCwgaWkrKyk7CisgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxs
Q2hpbGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7
CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9
ICcnOworICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgICAg
ICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJy
ZW50LmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkg
eworICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVu
ZGVyIG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuQWJvdXRNYXBzLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJl
biBpcyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4gSXQgaXMgYW4gJyArICdleHBlcmltZW50YWwg
ZmVhdHVyZSB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICsgJ3NlcXVl
bmNlIC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLiVzJywgbWFwc0Fz
Q2hpbGRyZW5BZGRlbmR1bSkgOiB2b2lkIDA7CisgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5
IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuCisgICAgICAgIHdoaWxlICghKHN0ZXAg
PSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZh
bHVlOworICAgICAgICAgIGlmIChlbnRyeSkgeworICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsx
XTsKKyAgICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBLZXlFc2NhcGVVdGls
cy5lc2NhcGUoZW50cnlbMF0pICsgU1VCU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxk
LCAwKTsKKyAgICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1w
bChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcp
IHsKKyAgICAgIHZhciBhZGRlbmR1bSA9ICcnOworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJykgeworICAgICAgICBhZGRlbmR1bSA9ICcgSWYgeW91IG1lYW50IHRvIHJl
bmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQg
b3Igd3JhcCB0aGUgb2JqZWN0IHVzaW5nIGNyZWF0ZUZyYWdtZW50KG9iamVjdCkgZnJvbSB0aGUg
JyArICdSZWFjdCBhZGQtb25zLic7CisgICAgICAgIGlmIChjaGlsZHJlbi5faXNSZWFjdEVsZW1l
bnQpIHsKKyAgICAgICAgICBhZGRlbmR1bSA9ICcgSXQgbG9va3MgbGlrZSB5b3VcJ3JlIHVzaW5n
IGFuIGVsZW1lbnQgY3JlYXRlZCBieSBhIGRpZmZlcmVudCAnICsgJ3ZlcnNpb24gb2YgUmVhY3Qu
IE1ha2Ugc3VyZSB0byB1c2Ugb25seSBvbmUgY29weSBvZiBSZWFjdC4nOworICAgICAgICB9Cisg
ICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgICAgICAgdmFyIG5h
bWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICAgICAgICBpZiAo
bmFtZSkgeworICAgICAgICAgICAgYWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhv
ZCBvZiBgJyArIG5hbWUgKyAnYC4nOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTsKKyAgICAgICFmYWxz
ZSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ09i
amVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogJXMpLiVzJywgY2hp
bGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycg
KyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5n
LCBhZGRlbmR1bSkgOiBfcHJvZEludmFyaWFudCgnMzEnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tv
YmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxk
cmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IHZvaWQg
MDsKKyAgICB9CisgIH0KKworICByZXR1cm4gc3VidHJlZUNvdW50OworfQorCisvKioKKyAqIFRy
YXZlcnNlcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5j
aGlsZHJlbmAsIGJ1dAorICogbWlnaHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1
dGVzOgorICoKKyAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwg
Li4uKWAKKyAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGls
ZHJlbiwgLi4uKWAKKyAqCisgKiBUaGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwg
YXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCB0aGUKKyAqIGVudGlyZSB0cmF2ZXJzYWwu
IEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0
aGF0CisgKiB0aGUgY2FsbGJhY2sgbWlnaHQgZmluZCByZWxldmFudC4KKyAqCisgKiBAcGFyYW0g
ez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIG9iamVjdC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9u
fSBjYWxsYmFjayBUbyBpbnZva2UgdXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuCisgKiBAcGFy
YW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLgorICogQHJldHVy
biB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuCisgKi8K
K2Z1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJz
ZUNvbnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gMDsKKyAg
fQorCisgIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxi
YWNrLCB0cmF2ZXJzZUNvbnRleHQpOworfQorCittb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxs
Q2hpbGRyZW47Cit9LHsiMSI6MSwiMTEiOjExLCIyMiI6MjIsIjI1IjoyNSwiMjkiOjI5LCIzMCI6
MzAsIjgiOjh9XSwyNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisidXNlIHN0
cmljdCI7CisKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCitmdW5j
dGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHsKKyAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAg
ICByZXR1cm4gYXJnOworICB9OworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBh
bmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzCisgKiBw
cmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVu
ZHBvaW50cyB3aGljaAorICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxh
Y2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS4KKyAqLwordmFyIGVtcHR5RnVuY3Rpb24g
PSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307CisKK2VtcHR5RnVuY3Rpb24udGhhdFJldHVy
bnMgPSBtYWtlRW1wdHlGdW5jdGlvbjsKK2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9
IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTsKK2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVl
ID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVs
bCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpOworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1Ro
aXMgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzOworfTsKK2VtcHR5RnVuY3Rpb24udGhh
dFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHsKKyAgcmV0dXJuIGFyZzsKK307CisK
K21vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjsKK30se31dLDI4OltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlPYmplY3QgPSB7fTsKKworaWYgKCJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTsK
K30KKworbW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDsKK30se31dLDI5OltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNl
bnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
c291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5k
IGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNv
dXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisg
Ki8KKworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQg
c3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS4KKyAqCisgKiBQcm92
aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3Vt
ZW50cworICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0
IHlvdSB3ZXJlCisgKiBleHBlY3RpbmcuCisgKgorICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdp
bGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnQKKyAqIHdpbGwg
cmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi4KKyAq
LworCit2YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQp
IHt9OworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhbGlkYXRl
Rm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7CisgICAgaWYgKGZvcm1h
dCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1
aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7CisgICAgfQorICB9OworfQorCitmdW5j
dGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAg
dmFsaWRhdGVGb3JtYXQoZm9ybWF0KTsKKworICBpZiAoIWNvbmRpdGlvbikgeworICAgIHZhciBl
cnJvcjsKKyAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGVycm9yID0gbmV3
IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVk
IGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRp
dGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHZhciBhcmdz
ID0gW2EsIGIsIGMsIGQsIGUsIGZdOworICAgICAgdmFyIGFyZ0luZGV4ID0gMDsKKyAgICAgIGVy
cm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdOworICAgICAgfSkpOworICAgICAgZXJyb3IubmFt
ZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJzsKKyAgICB9CisKKyAgICBlcnJvci5mcmFtZXNUb1Bv
cCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lCisgICAg
dGhyb3cgZXJyb3I7CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7Cit9LHt9
XSwzMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdo
dCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1wdHlGdW5jdGlvbiA9IF9kZXJl
cV8oMjcpOworCisvKioKKyAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3
YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC4KKyAqIFRoaXMgY2FuIGJlIHVzZWQg
dG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWwKKyAq
IHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25t
ZW50cyB3aWxsIGtlZXAgdGhlCisgKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29k
ZSBwYXRocy4KKyAqLworCit2YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247CisKK2lmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg
cHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGZvcm1hdCkgeworICAgICAgZm9y
ICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9s
ZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICAgIGFy
Z3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAgICB2YXIgYXJn
SW5kZXggPSAwOworICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBs
YWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4Kytd
OworICAgICAgfSk7CisgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7CisgICAgICB9CisgICAgICB0cnkgewor
ICAgICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tCisgICAgICAgIC8v
IFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1
c2UgdGhpcyBzdGFjaworICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNl
ZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS4KKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2Up
OworICAgICAgfSBjYXRjaCAoeCkge30KKyAgICB9OworCisgICAgd2FybmluZyA9IGZ1bmN0aW9u
IHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQpIHsKKyAgICAgIGlmIChmb3JtYXQgPT09IHVuZGVm
aW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9y
bWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcp
OworICAgICAgfQorCisgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUg
cHJvcFR5cGU6ICcpID09PSAwKSB7CisgICAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0
ZUNvbXBvbmVudCBwcm9wdHlwZSBjaGVjay4KKyAgICAgIH0KKworICAgICAgaWYgKCFjb25kaXRp
b24pIHsKKyAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0g
QXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVu
MjsgX2tleTIrKykgeworICAgICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5
Ml07CisgICAgICAgIH0KKworICAgICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBb
Zm9ybWF0XS5jb25jYXQoYXJncykpOworICAgICAgfQorICAgIH07CisgIH0pKCk7Cit9CisKK21v
ZHVsZS5leHBvcnRzID0gd2FybmluZzsKK30seyIyNyI6Mjd9XSwzMTpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKgorb2JqZWN0LWFzc2lnbgorKGMpIFNpbmRyZSBTb3JodXMK
K0BsaWNlbnNlIE1JVAorKi8KKworJ3VzZSBzdHJpY3QnOworLyogZXNsaW50LWRpc2FibGUgbm8t
dW51c2VkLXZhcnMgKi8KK3ZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlTeW1ib2xzOwordmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eTsKK3ZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5w
cm9wZXJ0eUlzRW51bWVyYWJsZTsKKworZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7CisgICAgaWYg
KHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVu
ZGVmaW5lZCcpOworICAgIH0KKworICAgIHJldHVybiBPYmplY3QodmFsKTsKK30KKworZnVuY3Rp
b24gc2hvdWxkVXNlTmF0aXZlKCkgeworICAgIHRyeSB7CisgICAgICAgIGlmICghT2JqZWN0LmFz
c2lnbikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZl
cnNpb25zLgorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1
ZXMvZGV0YWlsP2lkPTQxMTgKKyAgICAgICAgdmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7
ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVycworICAgICAgICB0ZXN0MVs1
XSA9ICdkZSc7CisgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlb
MF0gPT09ICc1JykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9
MzA1NgorICAgICAgICB2YXIgdGVzdDIgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgaSsrKSB7CisgICAgICAgICAgICB0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGkpXSA9IGk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgICAgIHJldHVy
biB0ZXN0MltuXTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChvcmRlcjIuam9pbignJykgIT09
ICcwMTIzNDU2Nzg5JykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/
aWQ9MzA1NgorICAgICAgICB2YXIgdGVzdDMgPSB7fTsKKyAgICAgICAgJ2FiY2RlZmdoaWprbG1u
b3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7CisgICAgICAgICAg
ICB0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKE9iamVj
dC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09CisgICAgICAgICAg
ICAgICAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0JykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBjYXRjaCAoZXJyKSB7
CisgICAgICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBi
dXQgYmV0dGVyIHRvIGJlIHNhZmUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K21vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVu
Y3Rpb24gKHRhcmdldCwgc291cmNlKSB7CisgICAgdmFyIGZyb207CisgICAgdmFyIHRvID0gdG9P
YmplY3QodGFyZ2V0KTsKKyAgICB2YXIgc3ltYm9sczsKKworICAgIGZvciAodmFyIHMgPSAxOyBz
IDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7CisgICAgICAgIGZyb20gPSBPYmplY3QoYXJndW1l
bnRzW3NdKTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkgeworICAgICAgICAgICAg
aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkgeworICAgICAgICAgICAgICAgIHRv
W2tleV0gPSBmcm9tW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CisgICAgICAgICAgICBzeW1ib2xzID0gZ2V0T3du
UHJvcGVydHlTeW1ib2xzKGZyb20pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
eW1ib2xzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb3BJc0VudW1lcmFi
bGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICB0b1tzeW1i
b2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRvOworfTsKKworfSx7fV0sMzI6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKi8KKworJ3VzZSBzdHJpY3QnOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgIHZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKKyAgdmFyIHdhcm5pbmcgPSBf
ZGVyZXFfKDMwKTsKKyAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX2RlcmVxXygzNSk7Cisg
IHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTsKK30KKworLyoqCisgKiBBc3NlcnQgdGhhdCB0
aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuCisgKiBFcnJvciBtZXNzYWdlcyBh
cmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS4KKyAqCisgKiBAcGFyYW0g
e29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZQorICogQHBh
cmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1j
aGVja2VkCisgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiAicHJvcCIsICJjb250ZXh0
IiwgImNoaWxkIGNvbnRleHQiCisgKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1l
IG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLgorICogQHBhcmFtIHs/RnVuY3Rp
b259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay4KKyAqIEBwcml2YXRlCisg
Ki8KK2Z1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwg
Y29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJykgeworICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHsKKyAg
ICAgIGlmICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkgeworICAgICAg
ICB2YXIgZXJyb3I7CisgICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4g
SW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvCisgICAgICAgIC8vIGZhaWwgdGhlIHJl
bmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC4KKyAg
ICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVt
IHRocm93LgorICAgICAgICB0cnkgeworICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxs
eSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZQorICAgICAgICAg
IC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0
ZXIgbWVzc2FnZS4KKyAgICAgICAgICBpbnZhcmlhbnQodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3Bl
Y05hbWVdID09PSAnZnVuY3Rpb24nLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBt
dXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICsgJ1JlYWN0LlByb3BUeXBlcy4nLCBj
b21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUpOwor
ICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3Bl
Y05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3Jl
dCk7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgZXJyb3IgPSBleDsKKyAgICAg
ICAgfQorICAgICAgICB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAn
JXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNo
ZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQg
cmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJn
dW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNl
T2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWly
ZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlv
biwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IpOworICAgICAgICBpZiAoZXJyb3IgaW5zdGFu
Y2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkgewor
ICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJl
IHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZQorICAgICAgICAgIC8vIHNhbWUgZXJyb3IuCisgICAg
ICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTsKKworICAgICAg
ICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnOworCisgICAgICAgICAg
d2FybmluZyhmYWxzZSwgJ0ZhaWxlZCAlcyB0eXBlOiAlcyVzJywgbG9jYXRpb24sIGVycm9yLm1l
c3NhZ2UsIHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzOworCit9LHsi
MjkiOjI5LCIzMCI6MzAsIjM1IjozNX1dLDMzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLy8g
UmVhY3QgMTUuNSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNzdW1lcyBQcm9wVHlwZXMg
YXJlIHN0aWxsIGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uCisvLyBUaGVyZWZvcmUgd2UgcmUtZXhw
b3J0IGRldmVsb3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUgUHJvcFR5cGVzIGNoZWNr
cyBoZXJlLgorLy8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRvIHRoZSBgcHJvcC10eXBl
c2AgbnBtIGxpYnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZQorLy8gYGluZGV4LmpzYCBl
bnRyeSBwb2ludCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1l
bnQuCit2YXIgZmFjdG9yeSA9IF9kZXJlcV8oMzQpOworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihpc1ZhbGlkRWxlbWVudCkgeworICAvLyBJdCBpcyBzdGlsbCBhbGxvd2VkIGluIDE1LjUuCisg
IHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gZmFsc2U7CisgIHJldHVybiBmYWN0b3J5KGlzVmFs
aWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTsKK307CisKK30seyIzNCI6MzR9XSwzNDpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVxXygyNyk7
Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzAp
OworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfZGVyZXFfKDM1KTsKK3ZhciBjaGVja1By
b3BUeXBlcyA9IF9kZXJlcV8oMzIpOworCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFs
aWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7CisgIC8qIGdsb2JhbCBTeW1ib2wgKi8K
KyAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYg
U3ltYm9sLml0ZXJhdG9yOworICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRv
cic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy4KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgaXRl
cmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0Lgor
ICAgKgorICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFi
bGUgYXMgY29udGV4dDoKKyAgICoKKyAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0
b3JGbihteUl0ZXJhYmxlKTsKKyAgICogICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAqICAgICAg
IHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTsKKyAgICogICAgICAg
Li4uCisgICAqICAgICB9CisgICAqCisgICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJs
ZQorICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259CisgICAqLworICBmdW5jdGlvbiBnZXRJdGVyYXRv
ckZuKG1heWJlSXRlcmFibGUpIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUg
JiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwg
bWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pOworICAgIGlmICh0eXBlb2YgaXRl
cmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47CisgICAg
fQorICB9CisKKyAgLyoqCisgICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRl
Y2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlCisgICAqIHN1cHBsaWVk
IHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6CisgICAqCisgICAqICAgdmFyIFBy
b3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTsKKyAgICogICB2YXIgTXlBcnRpY2xlID0g
UmVhY3QuY3JlYXRlQ2xhc3MoeworICAgKiAgICAgcHJvcFR5cGVzOiB7CisgICAqICAgICAgIC8v
IEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkICJkZXNjcmlwdGlvbiIuCisgICAqICAgICAg
IGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsCisgICAqCisgICAqICAgICAgIC8vIEEgcmVxdWly
ZWQgZW51bSBwcm9wIG5hbWVkICJjYXRlZ29yeSIuCisgICAqICAgICAgIGNhdGVnb3J5OiBQcm9w
cy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCwKKyAgICoKKyAgICogICAgICAg
Ly8gQSBwcm9wIG5hbWVkICJkaWFsb2ciIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlh
bG9nLgorICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVp
cmVkCisgICAqICAgICB9LAorICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH0KKyAg
ICogICB9KTsKKyAgICoKKyAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0
aGVzZSBtZXRob2RzIGFyZSB1c2VkOgorICAgKgorICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxm
dW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLikKKyAg
ICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/CisgICAqCisg
ICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0
aGUgc2FtZSBzaWduYXR1cmUuIFRoaXMKKyAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0
b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOgorICAgKgorICAgKiAgdmFyIE15
TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAgICogICAgcHJvcFR5cGVzOiB7CisgICAqICAg
ICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkICJocmVmIi4KKyAgICog
ICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHsKKyAg
ICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAqICAgICAgICBp
ZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiYK
KyAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHsKKyAgICogICAg
ICAgICAgcmV0dXJuIG5ldyBFcnJvcigKKyAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJp
bmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgKworICAgKiAgICAgICAgICAg
IGNvbXBvbmVudE5hbWUKKyAgICogICAgICAgICAgKTsKKyAgICogICAgICAgIH0KKyAgICogICAg
ICB9CisgICAqICAgIH0sCisgICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufQorICAgKiAg
fSk7CisgICAqCisgICAqIEBpbnRlcm5hbAorICAgKi8KKworICB2YXIgQU5PTllNT1VTID0gJzw8
YW5vbnltb3VzPj4nOworCisgIC8vIEltcG9ydGFudCEKKyAgLy8gS2VlcCB0aGlzIGxpc3QgaW4g
c3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hp
bXMuanNgLgorICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7CisgICAgYXJyYXk6IGNyZWF0ZVByaW1p
dGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLAorICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdib29sZWFuJyksCisgICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIo
J2Z1bmN0aW9uJyksCisgICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVt
YmVyJyksCisgICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0Jyks
CisgICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksCisgICAg
c3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksCisKKyAgICBhbnk6
IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksCisgICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVD
aGVja2VyLAorICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLAorICAgIGlu
c3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsCisgICAgbm9kZTogY3JlYXRlTm9k
ZUNoZWNrZXIoKSwKKyAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlciwKKyAg
ICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLAorICAgIG9uZU9mVHlwZTogY3JlYXRlVW5p
b25UeXBlQ2hlY2tlciwKKyAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcgorICB9Owor
CisgIC8qKgorICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJp
bmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duCisgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3Rz
L09iamVjdC9pcworICAgKi8KKyAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqLwor
ICBmdW5jdGlvbiBpcyh4LCB5KSB7CisgICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobQorICAgIGlm
ICh4ID09PSB5KSB7CisgICAgICAvLyBTdGVwcyAxLTUsIDctMTAKKyAgICAgIC8vIFN0ZXBzIDYu
Yi02LmU6ICswICE9IC0wCisgICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOCisgICAgICByZXR1
cm4geCAhPT0geCAmJiB5ICE9PSB5OworICAgIH0KKyAgfQorICAvKmVzbGludC1lbmFibGUgbm8t
c2VsZi1jb21wYXJlKi8KKworICAvKioKKyAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbAorICAgKiBQcm9w
VHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24n
dCB1c2UgcmVhbAorICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBz
dGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtCisgICAqIGlzIHByb2hpYml0aXZlbHkgZXhw
ZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXQKKyAgICog
aGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBt
YXRjaGVkLgorICAgKi8KKyAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlKSB7CisgICAg
dGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB0aGlzLnN0YWNrID0gJyc7CisgIH0KKyAgLy8g
TWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLgor
ICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTsKKworICBmdW5jdGlv
biBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkgeworICAgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxD
YWNoZSA9IHt9OworICAgIH0KKyAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJv
cHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNy
ZXQpIHsKKyAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUzsK
KyAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTsKKworICAgICAg
aWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHsKKyAgICAgICAgaWYgKHRocm93
T25EaXJlY3RBY2Nlc3MpIHsKKyAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNl
cnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2UKKyAgICAgICAgICBpbnZhcmlhbnQoCisgICAgICAg
ICAgICBmYWxzZSwKKyAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRp
cmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICsK
KyAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRo
ZW0uICcgKworICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNr
LXByb3AtdHlwZXMnCisgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIGlmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5
cGVzCisgICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BO
YW1lOworICAgICAgICAgIGlmICghbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldKSB7
CisgICAgICAgICAgICB3YXJuaW5nKAorICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAg
ICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9u
ICcgKworICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJXNgIHByb3Agb24gYCVzYC4g
VGhpcyBpcyBkZXByZWNhdGVkICcgKworICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4g
dGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgKworICAgICAgICAgICAgICAn
WW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BU
eXBlcyAnICsKKyAgICAgICAgICAgICAgJ2xpYnJhcnkuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0
LXdhcm5pbmctZG9udC1jYWxsLXByb3B0eXBlcyAnICsgJ2ZvciBkZXRhaWxzLicsCisgICAgICAg
ICAgICAgIHByb3BGdWxsTmFtZSwKKyAgICAgICAgICAgICAgY29tcG9uZW50TmFtZQorICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9
IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAocHJvcHNb
cHJvcE5hbWVdID09IG51bGwpIHsKKyAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHsKKyAgICAgICAg
ICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3
IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsg
J2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdg
LCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJl
dHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVs
bE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnRO
YW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHZhbGlk
YXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFt
ZSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5
cGUuYmluZChudWxsLCBmYWxzZSk7CisgICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0g
Y2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7CisKKyAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlw
ZTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVk
VHlwZSkgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50
TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7CisgICAgICB2YXIgcHJvcFZh
bHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUo
cHJvcFZhbHVlKTsKKyAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7CisgICAg
ICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBw
YXNzIHRoZSAnb2JqZWN0JworICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1v
cmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gJ29m
IHR5cGUgYG9iamVjdGAnLgorICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlw
ZShwcm9wVmFsdWUpOworCisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxp
ZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdg
JyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2As
IGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTsKKyAgICAgIH0KKyAg
ICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNo
ZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIo
KSB7CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb24u
dGhhdFJldHVybnNOdWxsKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hl
Y2tlcih0eXBlQ2hlY2tlcikgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFt
ZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAgaWYgKHR5
cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICByZXR1cm4gbmV3IFBy
b3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50
IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGlu
c2lkZSBhcnJheU9mLicpOworICAgICAgfQorICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3By
b3BOYW1lXTsKKyAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7CisgICAgICAg
IHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICAgIHJldHVybiBu
ZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxO
YW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcg
KyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTsKKyAgICAgIH0KKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0
KTsKKyAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgICByZXR1
cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0K
KyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisK
KyAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkgeworICAgIGZ1bmN0aW9uIHZh
bGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIGlm
ICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkgeworICAgICAgICB2YXIgcHJvcFR5cGUgPSBn
ZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3Io
J0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUg
JyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSAr
ICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpOworICAgICAgfQorICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tl
cih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2Vy
KGV4cGVjdGVkQ2xhc3MpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUs
IGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICghKHBy
b3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7CisgICAgICAgIHZhciBl
eHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7CisgICAg
ICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NO
YW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcp
ICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpOworICAgICAg
fQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVU
eXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNo
ZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRW
YWx1ZXMpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4g
aW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7CisgICAgICByZXR1cm4gZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc051bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMs
IHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAg
ICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaXMocHJvcFZh
bHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnko
ZXhwZWN0ZWRWYWx1ZXMpOworICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlk
ICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHBy
b3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBl
eHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpOworICAgIH0KKyAgICByZXR1
cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rp
b24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikgeworICAgIGZ1bmN0aW9u
IHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BG
dWxsTmFtZSkgeworICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykg
eworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1
bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZh
bGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTsKKyAgICAgIH0KKyAgICAg
IHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2YXIgcHJvcFR5cGUgPSBn
ZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykg
eworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9u
ICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSAr
ICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmpl
Y3QuJykpOworICAgICAgfQorICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkgeworICAg
ICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICB2YXIg
ZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRp
b24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAg
ICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRl
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVD
aGVja2VycykgeworICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkg
eworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwg
J0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLCBleHBlY3RlZCBhbiBpbnN0
YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uLnRo
YXRSZXR1cm5zTnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJv
cE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykgeworICAg
ICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07CisgICAgICAgIGlmIChj
aGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpID09IG51bGwpIHsKKyAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJy
b3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBs
aWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTsKKyAgICB9CisgICAgcmV0
dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBw
cm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgeworICAgICAg
aWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkgeworICAgICAgICByZXR1cm4gbmV3IFByb3BU
eXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdg
IHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJl
YWN0Tm9kZS4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0
dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykgeworICAgIGZ1bmN0aW9uIHZh
bGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIHZh
ciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAocHJvcFR5cGUg
IT09ICdvYmplY3QnKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxp
ZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHBy
b3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4
cGVjdGVkIGBvYmplY3RgLicpKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGtleSBpbiBzaGFw
ZVR5cGVzKSB7CisgICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldOworICAgICAg
ICBpZiAoIWNoZWNrZXIpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2Nh
dGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7Cisg
ICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFp
bmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBpc05vZGUocHJv
cFZhbHVlKSB7CisgICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7CisgICAgICBjYXNlICdu
dW1iZXInOgorICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSAnYm9vbGVhbic6CisgICAgICAgIHJldHVy
biAhcHJvcFZhbHVlOworICAgICAgY2FzZSAnb2JqZWN0JzoKKyAgICAgICAgaWYgKEFycmF5Lmlz
QXJyYXkocHJvcFZhbHVlKSkgeworICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNO
b2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFs
aWRFbGVtZW50KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpOwor
ICAgICAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJh
dG9yRm4uY2FsbChwcm9wVmFsdWUpOworICAgICAgICAgIHZhciBzdGVwOworICAgICAgICAgIGlm
IChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykgeworICAgICAgICAgICAgd2hpbGUg
KCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAgICAgICAgICBpZiAoIWlz
Tm9kZShzdGVwLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFu
IHZhbHVlcy4KKyAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRv
bmUpIHsKKyAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTsKKyAgICAgICAgICAg
ICAgaWYgKGVudHJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7
CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHsKKyAgICAvLyBOYXRp
dmUgU3ltYm9sLgorICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHsKKyAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0
cmluZ1RhZ10gPT09ICdTeW1ib2wnCisgICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZydd
ID09PSAnU3ltYm9sJykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRmFs
bGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVk
LgorICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0
YW5jZW9mIFN5bWJvbCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworICB9CisKKyAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVj
aWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLgorICBmdW5jdGlvbiBnZXRQcm9wVHlw
ZShwcm9wVmFsdWUpIHsKKyAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlOworICAg
IGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgIHJldHVybiAnYXJyYXknOwor
ICAgIH0KKyAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAvLyBP
bGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24n
IHJhdGhlciB0aGFuCisgICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSds
bCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS8KKyAgICAgIC8vIHBhc3NlcyBQcm9w
VHlwZXMub2JqZWN0LgorICAgICAgcmV0dXJuICdvYmplY3QnOworICAgIH0KKyAgICBpZiAoaXNT
eW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHsKKyAgICAgIHJldHVybiAnc3ltYm9sJzsKKyAg
ICB9CisgICAgcmV0dXJuIHByb3BUeXBlOworICB9CisKKyAgLy8gVGhpcyBoYW5kbGVzIG1vcmUg
dHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLgor
ICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC4KKyAgZnVuY3Rpb24gZ2V0UHJl
Y2lzZVR5cGUocHJvcFZhbHVlKSB7CisgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJv
cFZhbHVlKTsKKyAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7CisgICAgICBpZiAocHJv
cFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgeworICAgICAgICByZXR1cm4gJ2RhdGUnOworICAgICAg
fSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgICAgcmV0dXJu
ICdyZWdleHAnOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcHJvcFR5cGU7CisgIH0KKwor
ICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LgorICBmdW5jdGlv
biBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7CisgICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0
b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7CisgICAgICByZXR1cm4gQU5PTllN
T1VTOworICAgIH0KKyAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7CisgIH0K
KworICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzOworICBS
ZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlczsKKworICByZXR1cm4gUmVh
Y3RQcm9wVHlwZXM7Cit9OworCit9LHsiMjciOjI3LCIyOSI6MjksIjMwIjozMCwiMzIiOjMyLCIz
NSI6MzV9XSwzNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdFByb3BUeXBlc1Nl
Y3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7CisKK30se31dfSx7fSxbMThd
KSgxOCkKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0Lm1pbi5qcyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0Lm1pbi5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kNmE4NDRiMGNhNzhkMGM1MGJhMzViNThmN2M2NTFkMTUxMTg3NmQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qu
bWluLmpzCkBAIC0wLDAgKzEsMTIgQEAKKy8qKgorICogUmVhY3QgdjE1LjUuNAorICoKKyAqIENv
cHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1z
dHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRp
cmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBw
YXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1l
IGRpcmVjdG9yeS4KKyAqCisgKi8KKyFmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIGV4
cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNl
IGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vs
c2V7dmFyIGU7ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIh
PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMs
ZS5SZWFjdD10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUsbixyKXtmdW5jdGlv
biBvKHUsYSl7aWYoIW5bdV0pe2lmKCFlW3VdKXt2YXIgcz0iZnVuY3Rpb24iPT10eXBlb2YgcmVx
dWlyZSYmcmVxdWlyZTtpZighYSYmcylyZXR1cm4gcyh1LCEwKTtpZihpKXJldHVybiBpKHUsITAp
O3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3UrIiciKTt0aHJvdyBjLmNv
ZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIGw9blt1XT17ZXhwb3J0czp7fX07ZVt1XVswXS5j
YWxsKGwuZXhwb3J0cyxmdW5jdGlvbih0KXt2YXIgbj1lW3VdWzFdW3RdO3JldHVybiBvKG58fHQp
fSxsLGwuZXhwb3J0cyx0LGUsbixyKX1yZXR1cm4gblt1XS5leHBvcnRzfWZvcih2YXIgaT0iZnVu
Y3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSx1PTA7dTxyLmxlbmd0aDt1KyspbyhyW3Vd
KTtyZXR1cm4gb30oezE6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0
KXt2YXIgZT17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrdCkucmVwbGFjZSgvWz06
XS9nLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9ZnVuY3Rpb24gbyh0KXt2YXIgZT17Ij0wIjoi
PSIsIj0yIjoiOiJ9O3JldHVybigiIisoIi4iPT09dFswXSYmIiQiPT09dFsxXT90LnN1YnN0cmlu
ZygyKTp0LnN1YnN0cmluZygxKSkpLnJlcGxhY2UoLyg9MHw9MikvZyxmdW5jdGlvbih0KXtyZXR1
cm4gZVt0XX0pfXZhciBpPXtlc2NhcGU6cix1bmVzY2FwZTpvfTtlLmV4cG9ydHM9aX0se31dLDI6
W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyMCksbz0odCgyNCksZnVuY3Rp
b24odCl7dmFyIGU9dGhpcztpZihlLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBuPWUuaW5zdGFu
Y2VQb29sLnBvcCgpO3JldHVybiBlLmNhbGwobix0KSxufXJldHVybiBuZXcgZSh0KX0pLGk9ZnVu
Y3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKG4uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIHI9bi5p
bnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIG4uY2FsbChyLHQsZSkscn1yZXR1cm4gbmV3IG4odCxl
KX0sdT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztpZihyLmluc3RhbmNlUG9vbC5sZW5ndGgp
e3ZhciBvPXIuaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiByLmNhbGwobyx0LGUsbiksb31yZXR1
cm4gbmV3IHIodCxlLG4pfSxhPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXM7aWYoby5pbnN0
YW5jZVBvb2wubGVuZ3RoKXt2YXIgaT1vLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gby5jYWxs
KGksdCxlLG4sciksaX1yZXR1cm4gbmV3IG8odCxlLG4scil9LHM9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpczt0IGluc3RhbmNlb2YgZXx8cigiMjUiKSx0LmRlc3RydWN0b3IoKSxlLmluc3RhbmNlUG9v
bC5sZW5ndGg8ZS5wb29sU2l6ZSYmZS5pbnN0YW5jZVBvb2wucHVzaCh0KX0sYz1vLGw9ZnVuY3Rp
b24odCxlKXt2YXIgbj10O3JldHVybiBuLmluc3RhbmNlUG9vbD1bXSxuLmdldFBvb2xlZD1lfHxj
LG4ucG9vbFNpemV8fChuLnBvb2xTaXplPTEwKSxuLnJlbGVhc2U9cyxufSxmPXthZGRQb29saW5n
VG86bCxvbmVBcmd1bWVudFBvb2xlcjpvLHR3b0FyZ3VtZW50UG9vbGVyOmksdGhyZWVBcmd1bWVu
dFBvb2xlcjp1LGZvdXJBcmd1bWVudFBvb2xlcjphfTtlLmV4cG9ydHM9Zn0sezIwOjIwLDI0OjI0
fV0sMzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDI2KSxvPXQoNCksaT10
KDYpLHU9dCgxNCksYT10KDUpLHM9dCg4KSxjPXQoOSksbD10KDEzKSxmPXQoMTYpLHA9dCgxOSks
ZD0odCgyNSksYy5jcmVhdGVFbGVtZW50KSx5PWMuY3JlYXRlRmFjdG9yeSxoPWMuY2xvbmVFbGVt
ZW50LHY9cixtPXtDaGlsZHJlbjp7bWFwOm8ubWFwLGZvckVhY2g6by5mb3JFYWNoLGNvdW50Om8u
Y291bnQsdG9BcnJheTpvLnRvQXJyYXksb25seTpwfSxDb21wb25lbnQ6aSxQdXJlQ29tcG9uZW50
OnUsY3JlYXRlRWxlbWVudDpkLGNsb25lRWxlbWVudDpoLGlzVmFsaWRFbGVtZW50OmMuaXNWYWxp
ZEVsZW1lbnQsUHJvcFR5cGVzOmwsY3JlYXRlQ2xhc3M6YS5jcmVhdGVDbGFzcyxjcmVhdGVGYWN0
b3J5OnksY3JlYXRlTWl4aW46ZnVuY3Rpb24odCl7cmV0dXJuIHR9LERPTTpzLHZlcnNpb246Zixf
X3NwcmVhZDp2fTtlLmV4cG9ydHM9bX0sezEzOjEzLDE0OjE0LDE2OjE2LDE5OjE5LDI1OjI1LDI2
OjI2LDQ6NCw1OjUsNjo2LDg6OCw5Ojl9XSw0OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIodCl7cmV0dXJuKCIiK3QpLnJlcGxhY2UoRSwiJCYvIil9ZnVuY3Rpb24gbyh0
LGUpe3RoaXMuZnVuYz10LHRoaXMuY29udGV4dD1lLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBpKHQs
ZSxuKXt2YXIgcj10LmZ1bmMsbz10LmNvbnRleHQ7ci5jYWxsKG8sZSx0LmNvdW50KyspfWZ1bmN0
aW9uIHUodCxlLG4pe2lmKG51bGw9PXQpcmV0dXJuIHQ7dmFyIHI9by5nZXRQb29sZWQoZSxuKTtt
KHQsaSxyKSxvLnJlbGVhc2Uocil9ZnVuY3Rpb24gYSh0LGUsbixyKXt0aGlzLnJlc3VsdD10LHRo
aXMua2V5UHJlZml4PWUsdGhpcy5mdW5jPW4sdGhpcy5jb250ZXh0PXIsdGhpcy5jb3VudD0wfWZ1
bmN0aW9uIHModCxlLG4pe3ZhciBvPXQucmVzdWx0LGk9dC5rZXlQcmVmaXgsdT10LmZ1bmMsYT10
LmNvbnRleHQscz11LmNhbGwoYSxlLHQuY291bnQrKyk7QXJyYXkuaXNBcnJheShzKT9jKHMsbyxu
LHYudGhhdFJldHVybnNBcmd1bWVudCk6bnVsbCE9cyYmKGguaXNWYWxpZEVsZW1lbnQocykmJihz
PWguY2xvbmVBbmRSZXBsYWNlS2V5KHMsaSsoIXMua2V5fHxlJiZlLmtleT09PXMua2V5PyIiOnIo
cy5rZXkpKyIvIikrbikpLG8ucHVzaChzKSl9ZnVuY3Rpb24gYyh0LGUsbixvLGkpe3ZhciB1PSIi
O251bGwhPW4mJih1PXIobikrIi8iKTt2YXIgYz1hLmdldFBvb2xlZChlLHUsbyxpKTttKHQscyxj
KSxhLnJlbGVhc2UoYyl9ZnVuY3Rpb24gbCh0LGUsbil7aWYobnVsbD09dClyZXR1cm4gdDt2YXIg
cj1bXTtyZXR1cm4gYyh0LHIsbnVsbCxlLG4pLHJ9ZnVuY3Rpb24gZih0LGUsbil7cmV0dXJuIG51
bGx9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiBtKHQsZixudWxsKX1mdW5jdGlvbiBkKHQpe3ZhciBl
PVtdO3JldHVybiBjKHQsZSxudWxsLHYudGhhdFJldHVybnNBcmd1bWVudCksZX12YXIgeT10KDIp
LGg9dCg5KSx2PXQoMjIpLG09dCgyMSksYj15LnR3b0FyZ3VtZW50UG9vbGVyLGc9eS5mb3VyQXJn
dW1lbnRQb29sZXIsRT0vXC8rL2c7by5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3Ro
aXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0seS5hZGRQb29saW5n
VG8obyxiKSxhLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQ9bnVs
bCx0aGlzLmtleVByZWZpeD1udWxsLHRoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRo
aXMuY291bnQ9MH0seS5hZGRQb29saW5nVG8oYSxnKTt2YXIgeD17Zm9yRWFjaDp1LG1hcDpsLG1h
cEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWw6Yyxjb3VudDpwLHRvQXJyYXk6ZH07ZS5leHBvcnRz
PXh9LHsyOjIsMjE6MjEsMjI6MjIsOTo5fV0sNTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKHQpe3JldHVybiB0fWZ1bmN0aW9uIG8odCxlKXt2YXIgbj1FLmhhc093blBy
b3BlcnR5KGUpP0VbZV06bnVsbDtfLmhhc093blByb3BlcnR5KGUpJiYiT1ZFUlJJREVfQkFTRSIh
PT1uJiZwKCI3MyIsZSksdCYmIkRFRklORV9NQU5ZIiE9PW4mJiJERUZJTkVfTUFOWV9NRVJHRUQi
IT09biYmcCgiNzQiLGUpfWZ1bmN0aW9uIGkodCxlKXtpZihlKXsiZnVuY3Rpb24iPT10eXBlb2Yg
ZSYmcCgiNzUiKSxoLmlzVmFsaWRFbGVtZW50KGUpJiZwKCI3NiIpO3ZhciBuPXQucHJvdG90eXBl
LHI9bi5fX3JlYWN0QXV0b0JpbmRQYWlycztlLmhhc093blByb3BlcnR5KGIpJiZ4Lm1peGlucyh0
LGUubWl4aW5zKTtmb3IodmFyIGkgaW4gZSlpZihlLmhhc093blByb3BlcnR5KGkpJiZpIT09Yil7
dmFyIHU9ZVtpXSxhPW4uaGFzT3duUHJvcGVydHkoaSk7aWYobyhhLGkpLHguaGFzT3duUHJvcGVy
dHkoaSkpeFtpXSh0LHUpO2Vsc2V7dmFyIGw9RS5oYXNPd25Qcm9wZXJ0eShpKSxmPSJmdW5jdGlv
biI9PXR5cGVvZiB1LGQ9ZiYmIWwmJiFhJiYhMSE9PWUuYXV0b2JpbmQ7aWYoZClyLnB1c2goaSx1
KSxuW2ldPXU7ZWxzZSBpZihhKXt2YXIgeT1FW2ldOyghbHx8IkRFRklORV9NQU5ZX01FUkdFRCIh
PT15JiYiREVGSU5FX01BTlkiIT09eSkmJnAoIjc3Iix5LGkpLCJERUZJTkVfTUFOWV9NRVJHRUQi
PT09eT9uW2ldPXMobltpXSx1KToiREVGSU5FX01BTlkiPT09eSYmKG5baV09YyhuW2ldLHUpKX1l
bHNlIG5baV09dX19fX1mdW5jdGlvbiB1KHQsZSl7aWYoZSlmb3IodmFyIG4gaW4gZSl7dmFyIHI9
ZVtuXTtpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgbz1uIGluIHg7byYmcCgiNzgiLG4pO3Zh
ciBpPW4gaW4gdDtpJiZwKCI3OSIsbiksdFtuXT1yfX19ZnVuY3Rpb24gYSh0LGUpe3QmJmUmJiJv
YmplY3QiPT10eXBlb2YgdCYmIm9iamVjdCI9PXR5cGVvZiBlfHxwKCI4MCIpO2Zvcih2YXIgbiBp
biBlKWUuaGFzT3duUHJvcGVydHkobikmJih2b2lkIDAhPT10W25dJiZwKCI4MSIsbiksdFtuXT1l
W25dKTtyZXR1cm4gdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5h
cHBseSh0aGlzLGFyZ3VtZW50cykscj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihudWxsPT1u
KXJldHVybiByO2lmKG51bGw9PXIpcmV0dXJuIG47dmFyIG89e307cmV0dXJuIGEobyxuKSxhKG8s
ciksb319ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkodGhpcyxhcmd1
bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGUu
YmluZCh0KX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZT10Ll9fcmVhY3RBdXRvQmluZFBhaXJzLG49
MDtuPGUubGVuZ3RoO24rPTIpe3ZhciByPWVbbl0sbz1lW24rMV07dFtyXT1sKHQsbyl9fXZhciBw
PXQoMjApLGQ9dCgyNikseT10KDYpLGg9dCg5KSx2PSh0KDEyKSx0KDExKSksbT10KDIzKSxiPSh0
KDI0KSx0KDI1KSwibWl4aW5zIiksZz1bXSxFPXttaXhpbnM6IkRFRklORV9NQU5ZIixzdGF0aWNz
OiJERUZJTkVfTUFOWSIscHJvcFR5cGVzOiJERUZJTkVfTUFOWSIsY29udGV4dFR5cGVzOiJERUZJ
TkVfTUFOWSIsY2hpbGRDb250ZXh0VHlwZXM6IkRFRklORV9NQU5ZIixnZXREZWZhdWx0UHJvcHM6
IkRFRklORV9NQU5ZX01FUkdFRCIsZ2V0SW5pdGlhbFN0YXRlOiJERUZJTkVfTUFOWV9NRVJHRUQi
LGdldENoaWxkQ29udGV4dDoiREVGSU5FX01BTllfTUVSR0VEIixyZW5kZXI6IkRFRklORV9PTkNF
Iixjb21wb25lbnRXaWxsTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnREaWRNb3VudDoiREVG
SU5FX01BTlkiLGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IkRFRklORV9NQU5ZIixzaG91bGRD
b21wb25lbnRVcGRhdGU6IkRFRklORV9PTkNFIixjb21wb25lbnRXaWxsVXBkYXRlOiJERUZJTkVf
TUFOWSIsY29tcG9uZW50RGlkVXBkYXRlOiJERUZJTkVfTUFOWSIsY29tcG9uZW50V2lsbFVubW91
bnQ6IkRFRklORV9NQU5ZIix1cGRhdGVDb21wb25lbnQ6Ik9WRVJSSURFX0JBU0UifSx4PXtkaXNw
bGF5TmFtZTpmdW5jdGlvbih0LGUpe3QuZGlzcGxheU5hbWU9ZX0sbWl4aW5zOmZ1bmN0aW9uKHQs
ZSl7aWYoZSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpKHQsZVtuXSl9LGNoaWxkQ29udGV4
dFR5cGVzOmZ1bmN0aW9uKHQsZSl7dC5jaGlsZENvbnRleHRUeXBlcz1kKHt9LHQuY2hpbGRDb250
ZXh0VHlwZXMsZSl9LGNvbnRleHRUeXBlczpmdW5jdGlvbih0LGUpe3QuY29udGV4dFR5cGVzPWQo
e30sdC5jb250ZXh0VHlwZXMsZSl9LGdldERlZmF1bHRQcm9wczpmdW5jdGlvbih0LGUpe3QuZ2V0
RGVmYXVsdFByb3BzP3QuZ2V0RGVmYXVsdFByb3BzPXModC5nZXREZWZhdWx0UHJvcHMsZSk6dC5n
ZXREZWZhdWx0UHJvcHM9ZX0scHJvcFR5cGVzOmZ1bmN0aW9uKHQsZSl7dC5wcm9wVHlwZXM9ZCh7
fSx0LnByb3BUeXBlcyxlKX0sc3RhdGljczpmdW5jdGlvbih0LGUpe3UodCxlKX0sYXV0b2JpbmQ6
ZnVuY3Rpb24oKXt9fSxfPXtyZXBsYWNlU3RhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLnVwZGF0ZXIu
ZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLHQpLGUmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJh
Y2sodGhpcyxlLCJyZXBsYWNlU3RhdGUiKX0saXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMudXBkYXRlci5pc01vdW50ZWQodGhpcyl9fSxQPWZ1bmN0aW9uKCl7fTtkKFAucHJvdG90eXBl
LHkucHJvdG90eXBlLF8pO3ZhciB3PXtjcmVhdGVDbGFzczpmdW5jdGlvbih0KXt2YXIgZT1yKGZ1
bmN0aW9uKHQsbixyKXt0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCYmZih0aGlzKSx0
aGlzLnByb3BzPXQsdGhpcy5jb250ZXh0PW4sdGhpcy5yZWZzPW0sdGhpcy51cGRhdGVyPXJ8fHYs
dGhpcy5zdGF0ZT1udWxsO3ZhciBvPXRoaXMuZ2V0SW5pdGlhbFN0YXRlP3RoaXMuZ2V0SW5pdGlh
bFN0YXRlKCk6bnVsbDsoIm9iamVjdCIhPXR5cGVvZiBvfHxBcnJheS5pc0FycmF5KG8pKSYmcCgi
ODIiLGUuZGlzcGxheU5hbWV8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuc3RhdGU9
b30pO2UucHJvdG90eXBlPW5ldyBQLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5
cGUuX19yZWFjdEF1dG9CaW5kUGFpcnM9W10sZy5mb3JFYWNoKGkuYmluZChudWxsLGUpKSxpKGUs
dCksZS5nZXREZWZhdWx0UHJvcHMmJihlLmRlZmF1bHRQcm9wcz1lLmdldERlZmF1bHRQcm9wcygp
KSxlLnByb3RvdHlwZS5yZW5kZXJ8fHAoIjgzIik7Zm9yKHZhciBuIGluIEUpZS5wcm90b3R5cGVb
bl18fChlLnByb3RvdHlwZVtuXT1udWxsKTtyZXR1cm4gZX0saW5qZWN0aW9uOntpbmplY3RNaXhp
bjpmdW5jdGlvbih0KXtnLnB1c2godCl9fX07ZS5leHBvcnRzPXd9LHsxMToxMSwxMjoxMiwyMDoy
MCwyMzoyMywyNDoyNCwyNToyNSwyNjoyNiw2OjYsOTo5fV0sNjpbZnVuY3Rpb24odCxlLG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxuKXt0aGlzLnByb3BzPXQsdGhpcy5jb250ZXh0PWUs
dGhpcy5yZWZzPXUsdGhpcy51cGRhdGVyPW58fGl9dmFyIG89dCgyMCksaT10KDExKSx1PSh0KDE3
KSx0KDIzKSk7dCgyNCksdCgyNSk7ci5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fSxyLnBy
b3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbih0LGUpeyJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0
aW9uIiE9dHlwZW9mIHQmJm51bGwhPXQmJm8oIjg1IiksdGhpcy51cGRhdGVyLmVucXVldWVTZXRT
dGF0ZSh0aGlzLHQpLGUmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhpcyxlLCJzZXRT
dGF0ZSIpfSxyLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZXIu
ZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpLHQmJnRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2so
dGhpcyx0LCJmb3JjZVVwZGF0ZSIpfTtlLmV4cG9ydHM9cn0sezExOjExLDE3OjE3LDIwOjIwLDIz
OjIzLDI0OjI0LDI1OjI1fV0sNzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17
Y3VycmVudDpudWxsfTtlLmV4cG9ydHM9cn0se31dLDg6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0
cmljdCI7dmFyIHI9dCg5KSxvPXIuY3JlYXRlRmFjdG9yeSxpPXthOm8oImEiKSxhYmJyOm8oImFi
YnIiKSxhZGRyZXNzOm8oImFkZHJlc3MiKSxhcmVhOm8oImFyZWEiKSxhcnRpY2xlOm8oImFydGlj
bGUiKSxhc2lkZTpvKCJhc2lkZSIpLGF1ZGlvOm8oImF1ZGlvIiksYjpvKCJiIiksYmFzZTpvKCJi
YXNlIiksYmRpOm8oImJkaSIpLGJkbzpvKCJiZG8iKSxiaWc6bygiYmlnIiksYmxvY2txdW90ZTpv
KCJibG9ja3F1b3RlIiksYm9keTpvKCJib2R5IiksYnI6bygiYnIiKSxidXR0b246bygiYnV0dG9u
IiksY2FudmFzOm8oImNhbnZhcyIpLGNhcHRpb246bygiY2FwdGlvbiIpLGNpdGU6bygiY2l0ZSIp
LGNvZGU6bygiY29kZSIpLGNvbDpvKCJjb2wiKSxjb2xncm91cDpvKCJjb2xncm91cCIpLGRhdGE6
bygiZGF0YSIpLGRhdGFsaXN0Om8oImRhdGFsaXN0IiksZGQ6bygiZGQiKSxkZWw6bygiZGVsIiks
ZGV0YWlsczpvKCJkZXRhaWxzIiksZGZuOm8oImRmbiIpLGRpYWxvZzpvKCJkaWFsb2ciKSxkaXY6
bygiZGl2IiksZGw6bygiZGwiKSxkdDpvKCJkdCIpLGVtOm8oImVtIiksZW1iZWQ6bygiZW1iZWQi
KSxmaWVsZHNldDpvKCJmaWVsZHNldCIpLGZpZ2NhcHRpb246bygiZmlnY2FwdGlvbiIpLGZpZ3Vy
ZTpvKCJmaWd1cmUiKSxmb290ZXI6bygiZm9vdGVyIiksZm9ybTpvKCJmb3JtIiksaDE6bygiaDEi
KSxoMjpvKCJoMiIpLGgzOm8oImgzIiksaDQ6bygiaDQiKSxoNTpvKCJoNSIpLGg2Om8oImg2Iiks
aGVhZDpvKCJoZWFkIiksaGVhZGVyOm8oImhlYWRlciIpLGhncm91cDpvKCJoZ3JvdXAiKSxocjpv
KCJociIpLGh0bWw6bygiaHRtbCIpLGk6bygiaSIpLGlmcmFtZTpvKCJpZnJhbWUiKSxpbWc6bygi
aW1nIiksaW5wdXQ6bygiaW5wdXQiKSxpbnM6bygiaW5zIiksa2JkOm8oImtiZCIpLGtleWdlbjpv
KCJrZXlnZW4iKSxsYWJlbDpvKCJsYWJlbCIpLGxlZ2VuZDpvKCJsZWdlbmQiKSxsaTpvKCJsaSIp
LGxpbms6bygibGluayIpLG1haW46bygibWFpbiIpLG1hcDpvKCJtYXAiKSxtYXJrOm8oIm1hcmsi
KSxtZW51Om8oIm1lbnUiKSxtZW51aXRlbTpvKCJtZW51aXRlbSIpLG1ldGE6bygibWV0YSIpLG1l
dGVyOm8oIm1ldGVyIiksbmF2Om8oIm5hdiIpLG5vc2NyaXB0Om8oIm5vc2NyaXB0Iiksb2JqZWN0
Om8oIm9iamVjdCIpLG9sOm8oIm9sIiksb3B0Z3JvdXA6bygib3B0Z3JvdXAiKSxvcHRpb246bygi
b3B0aW9uIiksb3V0cHV0Om8oIm91dHB1dCIpLHA6bygicCIpLHBhcmFtOm8oInBhcmFtIikscGlj
dHVyZTpvKCJwaWN0dXJlIikscHJlOm8oInByZSIpLHByb2dyZXNzOm8oInByb2dyZXNzIikscTpv
KCJxIikscnA6bygicnAiKSxydDpvKCJydCIpLHJ1Ynk6bygicnVieSIpLHM6bygicyIpLHNhbXA6
bygic2FtcCIpLHNjcmlwdDpvKCJzY3JpcHQiKSxzZWN0aW9uOm8oInNlY3Rpb24iKSxzZWxlY3Q6
bygic2VsZWN0Iiksc21hbGw6bygic21hbGwiKSxzb3VyY2U6bygic291cmNlIiksc3BhbjpvKCJz
cGFuIiksc3Ryb25nOm8oInN0cm9uZyIpLHN0eWxlOm8oInN0eWxlIiksc3ViOm8oInN1YiIpLHN1
bW1hcnk6bygic3VtbWFyeSIpLHN1cDpvKCJzdXAiKSx0YWJsZTpvKCJ0YWJsZSIpLHRib2R5Om8o
InRib2R5IiksdGQ6bygidGQiKSx0ZXh0YXJlYTpvKCJ0ZXh0YXJlYSIpLHRmb290Om8oInRmb290
IiksdGg6bygidGgiKSx0aGVhZDpvKCJ0aGVhZCIpLHRpbWU6bygidGltZSIpLHRpdGxlOm8oInRp
dGxlIiksdHI6bygidHIiKSx0cmFjazpvKCJ0cmFjayIpLHU6bygidSIpLHVsOm8oInVsIiksdmFy
Om8oInZhciIpLHZpZGVvOm8oInZpZGVvIiksd2JyOm8oIndiciIpLGNpcmNsZTpvKCJjaXJjbGUi
KSxjbGlwUGF0aDpvKCJjbGlwUGF0aCIpLGRlZnM6bygiZGVmcyIpLGVsbGlwc2U6bygiZWxsaXBz
ZSIpLGc6bygiZyIpLGltYWdlOm8oImltYWdlIiksbGluZTpvKCJsaW5lIiksbGluZWFyR3JhZGll
bnQ6bygibGluZWFyR3JhZGllbnQiKSxtYXNrOm8oIm1hc2siKSxwYXRoOm8oInBhdGgiKSxwYXR0
ZXJuOm8oInBhdHRlcm4iKSxwb2x5Z29uOm8oInBvbHlnb24iKSxwb2x5bGluZTpvKCJwb2x5bGlu
ZSIpLHJhZGlhbEdyYWRpZW50Om8oInJhZGlhbEdyYWRpZW50IikscmVjdDpvKCJyZWN0Iiksc3Rv
cDpvKCJzdG9wIiksc3ZnOm8oInN2ZyIpLHRleHQ6bygidGV4dCIpLHRzcGFuOm8oInRzcGFuIil9
O2UuZXhwb3J0cz1pfSx7OTo5fV0sOTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKHQpe3JldHVybiB2b2lkIDAhPT10LnJlZn1mdW5jdGlvbiBvKHQpe3JldHVybiB2b2lk
IDAhPT10LmtleX12YXIgaT10KDI2KSx1PXQoNyksYT0odCgyNSksdCgxNyksT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eSkscz10KDEwKSxjPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxf
X3NvdXJjZTohMH0sbD1mdW5jdGlvbih0LGUsbixyLG8saSx1KXtyZXR1cm57JCR0eXBlb2Y6cyx0
eXBlOnQsa2V5OmUscmVmOm4scHJvcHM6dSxfb3duZXI6aX19O2wuY3JlYXRlRWxlbWVudD1mdW5j
dGlvbih0LGUsbil7dmFyIGkscz17fSxmPW51bGwscD1udWxsO2lmKG51bGwhPWUpe3IoZSkmJihw
PWUucmVmKSxvKGUpJiYoZj0iIitlLmtleSksdm9pZCAwPT09ZS5fX3NlbGY/bnVsbDplLl9fc2Vs
Zix2b2lkIDA9PT1lLl9fc291cmNlP251bGw6ZS5fX3NvdXJjZTtmb3IoaSBpbiBlKWEuY2FsbChl
LGkpJiYhYy5oYXNPd25Qcm9wZXJ0eShpKSYmKHNbaV09ZVtpXSl9dmFyIGQ9YXJndW1lbnRzLmxl
bmd0aC0yO2lmKDE9PT1kKXMuY2hpbGRyZW49bjtlbHNlIGlmKGQ+MSl7Zm9yKHZhciB5PUFycmF5
KGQpLGg9MDtoPGQ7aCsrKXlbaF09YXJndW1lbnRzW2grMl07cy5jaGlsZHJlbj15fWlmKHQmJnQu
ZGVmYXVsdFByb3BzKXt2YXIgdj10LmRlZmF1bHRQcm9wcztmb3IoaSBpbiB2KXZvaWQgMD09PXNb
aV0mJihzW2ldPXZbaV0pfXJldHVybiBsKHQsZixwLDAsMCx1LmN1cnJlbnQscyl9LGwuY3JlYXRl
RmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT1sLmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLHQpO3Jl
dHVybiBlLnR5cGU9dCxlfSxsLmNsb25lQW5kUmVwbGFjZUtleT1mdW5jdGlvbih0LGUpe3JldHVy
biBsKHQudHlwZSxlLHQucmVmLHQuX3NlbGYsdC5fc291cmNlLHQuX293bmVyLHQucHJvcHMpfSxs
LmNsb25lRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHMsZj1pKHt9LHQucHJvcHMpLHA9dC5r
ZXksZD10LnJlZix5PSh0Ll9zZWxmLHQuX3NvdXJjZSx0Ll9vd25lcik7aWYobnVsbCE9ZSl7cihl
KSYmKGQ9ZS5yZWYseT11LmN1cnJlbnQpLG8oZSkmJihwPSIiK2Uua2V5KTt2YXIgaDt0LnR5cGUm
JnQudHlwZS5kZWZhdWx0UHJvcHMmJihoPXQudHlwZS5kZWZhdWx0UHJvcHMpO2ZvcihzIGluIGUp
YS5jYWxsKGUscykmJiFjLmhhc093blByb3BlcnR5KHMpJiYodm9pZCAwPT09ZVtzXSYmdm9pZCAw
IT09aD9mW3NdPWhbc106ZltzXT1lW3NdKX12YXIgdj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09
PXYpZi5jaGlsZHJlbj1uO2Vsc2UgaWYodj4xKXtmb3IodmFyIG09QXJyYXkodiksYj0wO2I8djti
KyspbVtiXT1hcmd1bWVudHNbYisyXTtmLmNoaWxkcmVuPW19cmV0dXJuIGwodC50eXBlLHAsZCww
LDAseSxmKX0sbC5pc1ZhbGlkRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlw
ZW9mIHQmJm51bGwhPT10JiZ0LiQkdHlwZW9mPT09c30sZS5leHBvcnRzPWx9LHsxMDoxMCwxNzox
NywyNToyNSwyNjoyNiw3Ojd9XSwxMDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFj
dC5lbGVtZW50Iil8fDYwMTAzO2UuZXhwb3J0cz1yfSx7fV0sMTE6W2Z1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9KHQoMjUpLHtpc01vdW50ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuITF9
LGVucXVldWVDYWxsYmFjazpmdW5jdGlvbih0LGUpe30sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0
aW9uKHQpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbih0LGUpe30sZW5xdWV1ZVNldFN0
YXRlOmZ1bmN0aW9uKHQsZSl7fX0pO2UuZXhwb3J0cz1yfSx7MjU6MjV9XSwxMjpbZnVuY3Rpb24o
dCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTtlLmV4cG9ydHM9cn0se31dLDEzOltmdW5jdGlv
bih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoOSksbz1yLmlzVmFsaWRFbGVtZW50LGk9dCgy
OCk7ZS5leHBvcnRzPWkobyl9LHsyODoyOCw5Ojl9XSwxNDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKHQsZSxuKXt0aGlzLnByb3BzPXQsdGhpcy5jb250ZXh0PWUsdGhp
cy5yZWZzPXMsdGhpcy51cGRhdGVyPW58fGF9ZnVuY3Rpb24gbygpe312YXIgaT10KDI2KSx1PXQo
NiksYT10KDExKSxzPXQoMjMpO28ucHJvdG90eXBlPXUucHJvdG90eXBlLHIucHJvdG90eXBlPW5l
dyBvLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsaShyLnByb3RvdHlwZSx1LnByb3RvdHlwZSks
ci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsZS5leHBvcnRzPXJ9LHsxMToxMSwy
MzoyMywyNjoyNiw2OjZ9XSwxNTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10
KDI2KSxvPXQoMyksaT1yKG8se19fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9X
SUxMX0JFX0ZJUkVEOntSZWFjdEN1cnJlbnRPd25lcjp0KDcpfX0pO2UuZXhwb3J0cz1pfSx7MjY6
MjYsMzozLDc6N31dLDE2OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0i
MTUuNS40In0se31dLDE3OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0h
MX0se31dLDE4OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7dmFy
IGU9dCYmKG8mJnRbb118fHRbaV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBlfXZh
ciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixpPSJAQGl0ZXJh
dG9yIjtlLmV4cG9ydHM9cn0se31dLDE5OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIodCl7cmV0dXJuIGkuaXNWYWxpZEVsZW1lbnQodCl8fG8oIjE0MyIpLHR9dmFyIG89
dCgyMCksaT10KDkpO3QoMjQpO2UuZXhwb3J0cz1yfSx7MjA6MjAsMjQ6MjQsOTo5fV0sMjA6W2Z1
bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtmb3IodmFyIGU9YXJndW1l
bnRzLmxlbmd0aC0xLG49Ik1pbmlmaWVkIFJlYWN0IGVycm9yICMiK3QrIjsgdmlzaXQgaHR0cDov
L2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlh
bnQ9Iit0LHI9MDtyPGU7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3Vt
ZW50c1tyKzFdKTtuKz0iIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlm
aWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1
bCB3YXJuaW5ncy4iO3ZhciBvPW5ldyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9IkludmFyaWFudCBW
aW9sYXRpb24iLG8uZnJhbWVzVG9Qb3A9MSxvfWUuZXhwb3J0cz1yfSx7fV0sMjE6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0JiYib2JqZWN0Ij09
dHlwZW9mIHQmJm51bGwhPXQua2V5P2MuZXNjYXBlKHQua2V5KTplLnRvU3RyaW5nKDM2KX1mdW5j
dGlvbiBvKHQsZSxuLGkpe3ZhciBwPXR5cGVvZiB0O2lmKCJ1bmRlZmluZWQiIT09cCYmImJvb2xl
YW4iIT09cHx8KHQ9bnVsbCksbnVsbD09PXR8fCJzdHJpbmciPT09cHx8Im51bWJlciI9PT1wfHwi
b2JqZWN0Ij09PXAmJnQuJCR0eXBlb2Y9PT1hKXJldHVybiBuKGksdCwiIj09PWU/bCtyKHQsMCk6
ZSksMTt2YXIgZCx5LGg9MCx2PSIiPT09ZT9sOmUrZjtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2
YXIgbT0wO208dC5sZW5ndGg7bSsrKWQ9dFttXSx5PXYrcihkLG0pLGgrPW8oZCx5LG4saSk7ZWxz
ZXt2YXIgYj1zKHQpO2lmKGIpe3ZhciBnLEU9Yi5jYWxsKHQpO2lmKGIhPT10LmVudHJpZXMpZm9y
KHZhciB4PTA7IShnPUUubmV4dCgpKS5kb25lOylkPWcudmFsdWUseT12K3IoZCx4KyspLGgrPW8o
ZCx5LG4saSk7ZWxzZSBmb3IoOyEoZz1FLm5leHQoKSkuZG9uZTspe3ZhciBfPWcudmFsdWU7XyYm
KGQ9X1sxXSx5PXYrYy5lc2NhcGUoX1swXSkrZityKGQsMCksaCs9byhkLHksbixpKSl9fWVsc2Ug
aWYoIm9iamVjdCI9PT1wKXt2YXIgUD1TdHJpbmcodCk7dSgiMzEiLCJbb2JqZWN0IE9iamVjdF0i
PT09UD8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjpQ
LCIiKX19cmV0dXJuIGh9ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJuIG51bGw9PXQ/MDpvKHQsIiIs
ZSxuKX12YXIgdT10KDIwKSxhPSh0KDcpLHQoMTApKSxzPXQoMTgpLGM9KHQoMjQpLHQoMSkpLGw9
KHQoMjUpLCIuIiksZj0iOiI7ZS5leHBvcnRzPWl9LHsxOjEsMTA6MTAsMTg6MTgsMjA6MjAsMjQ6
MjQsMjU6MjUsNzo3fV0sMjI6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
cih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG89ZnVuY3Rpb24oKXt9O28udGhh
dFJldHVybnM9cixvLnRoYXRSZXR1cm5zRmFsc2U9cighMSksby50aGF0UmV0dXJuc1RydWU9cigh
MCksby50aGF0UmV0dXJuc051bGw9cihudWxsKSxvLnRoYXRSZXR1cm5zVGhpcz1mdW5jdGlvbigp
e3JldHVybiB0aGlzfSxvLnRoYXRSZXR1cm5zQXJndW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9
LGUuZXhwb3J0cz1vfSx7fV0sMjM6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9
e307ZS5leHBvcnRzPXJ9LHt9XSwyNDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKHQsZSxuLHIsaSx1LGEscyl7aWYobyhlKSwhdCl7dmFyIGM7aWYodm9pZCAwPT09ZSlj
PW5ldyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5p
ZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0
aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBsPVtuLHIsaSx1LGEsc10sZj0wO2M9
bmV3IEVycm9yKGUucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBsW2YrK119KSksYy5u
YW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyBjLmZyYW1lc1RvUG9wPTEsY319dmFyIG89
ZnVuY3Rpb24odCl7fTtlLmV4cG9ydHM9cn0se31dLDI1OltmdW5jdGlvbih0LGUsbil7InVzZSBz
dHJpY3QiO3ZhciByPXQoMjIpLG89cjtlLmV4cG9ydHM9b30sezIyOjIyfV0sMjY6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtpZihudWxsPT09dHx8dm9pZCAwPT09
dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0
aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9dmFyIG89T2JqZWN0LmdldE93
blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdT1PYmpl
Y3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3Ry
eXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgdD1uZXcgU3RyaW5nKCJhYmMiKTtpZih0
WzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModClbMF0pcmV0dXJuITE7
Zm9yKHZhciBlPXt9LG49MDtuPDEwO24rKyllWyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pXT1u
O2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLm1hcChmdW5j
dGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oIiIpKXJldHVybiExO3ZhciByPXt9O3JldHVybiJh
YmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT10
fSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30s
cikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9u
KHQsZSl7Zm9yKHZhciBuLGEscz1yKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtuPU9i
amVjdChhcmd1bWVudHNbY10pO2Zvcih2YXIgbCBpbiBuKWkuY2FsbChuLGwpJiYoc1tsXT1uW2xd
KTtpZihvKXthPW8obik7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspdS5jYWxsKG4sYVtmXSkm
JihzW2FbZl1dPW5bYVtmXV0pfX1yZXR1cm4gc319LHt9XSwyNzpbZnVuY3Rpb24odCxlLG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSxuLHIsbyl7fWUuZXhwb3J0cz1yfSx7MjQ6MjQsMjU6
MjUsMzA6MzB9XSwyODpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDI5KTtl
LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCwhMSl9fSx7Mjk6Mjl9XSwyOTpbZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDIyKSxvPXQoMjQpLGk9KHQoMjUpLHQoMzAp
KSx1PXQoMjcpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIGU9dCYm
KF8mJnRbX118fHRbUF0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBlfWZ1bmN0aW9u
IGEodCxlKXtyZXR1cm4gdD09PWU/MCE9PXR8fDEvdD09MS9lOnQhPT10JiZlIT09ZX1mdW5jdGlv
biBzKHQpe3RoaXMubWVzc2FnZT10LHRoaXMuc3RhY2s9IiJ9ZnVuY3Rpb24gYyh0KXtmdW5jdGlv
biBuKG4scix1LGEsYyxsLGYpe2lmKGE9YXx8dyxsPWx8fHUsZiE9PWkpaWYoZSlvKCExLCJDYWxs
aW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0
byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlw
ZXMiKTtlbHNlO3JldHVybiBudWxsPT1yW3VdP24/bmV3IHMobnVsbD09PXJbdV0/IlRoZSAiK2Mr
IiBgIitsKyJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIithKyJgLCBidXQgaXRzIHZhbHVl
IGlzIGBudWxsYC4iOiJUaGUgIitjKyIgYCIrbCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4g
YCIrYSsiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4iKTpudWxsOnQocix1LGEsYyxs
KX12YXIgcj1uLmJpbmQobnVsbCwhMSk7cmV0dXJuIHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwh
MCkscn1mdW5jdGlvbiBsKHQpe2Z1bmN0aW9uIGUoZSxuLHIsbyxpLHUpe3ZhciBhPWVbbl07aWYo
ZyhhKSE9PXQpcmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitF
KGEpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGAiK3QrImAuIik7cmV0dXJuIG51
bGx9cmV0dXJuIGMoZSl9ZnVuY3Rpb24gZih0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7aWYoImZ1
bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuIG5ldyBzKCJQcm9wZXJ0eSBgIit1KyJgIG9mIGNvbXBv
bmVudCBgIityKyJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9m
LiIpO3ZhciBhPWVbbl07aWYoIUFycmF5LmlzQXJyYXkoYSkpe3JldHVybiBuZXcgcygiSW52YWxp
ZCAiK28rIiBgIit1KyJgIG9mIHR5cGUgYCIrZyhhKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBl
eHBlY3RlZCBhbiBhcnJheS4iKX1mb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGw9dChh
LGMscixvLHUrIlsiK2MrIl0iLGkpO2lmKGwgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbH1yZXR1
cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBwKHQpe2Z1bmN0aW9uIGUoZSxuLHIsbyxpKXtp
ZighKGVbbl1pbnN0YW5jZW9mIHQpKXt2YXIgdT10Lm5hbWV8fHc7cmV0dXJuIG5ldyBzKCJJbnZh
bGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIit4KGVbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3Ir
ImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGAiK3UrImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGMo
ZSl9ZnVuY3Rpb24gZCh0KXtmdW5jdGlvbiBlKGUsbixyLG8saSl7Zm9yKHZhciB1PWVbbl0sYz0w
O2M8dC5sZW5ndGg7YysrKWlmKGEodSx0W2NdKSlyZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHMoIklu
dmFsaWQgIitvKyIgYCIraSsiYCBvZiB2YWx1ZSBgIit1KyJgIHN1cHBsaWVkIHRvIGAiK3IrImAs
IGV4cGVjdGVkIG9uZSBvZiAiK0pTT04uc3RyaW5naWZ5KHQpKyIuIil9cmV0dXJuIEFycmF5Lmlz
QXJyYXkodCk/YyhlKTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiB5KHQpe2Z1bmN0aW9uIGUo
ZSxuLHIsbyx1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdClyZXR1cm4gbmV3IHMoIlByb3BlcnR5
IGAiK3UrImAgb2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRp
b24gaW5zaWRlIG9iamVjdE9mLiIpO3ZhciBhPWVbbl0sYz1nKGEpO2lmKCJvYmplY3QiIT09Yyly
ZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBvZiB0eXBlIGAiK2MrImAgc3VwcGxp
ZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LiIpO2Zvcih2YXIgbCBpbiBhKWlmKGEu
aGFzT3duUHJvcGVydHkobCkpe3ZhciBmPXQoYSxsLHIsbyx1KyIuIitsLGkpO2lmKGYgaW5zdGFu
Y2VvZiBFcnJvcilyZXR1cm4gZn1yZXR1cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBoKHQp
e2Z1bmN0aW9uIGUoZSxuLHIsbyx1KXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7aWYobnVs
bD09KDAsdFthXSkoZSxuLHIsbyx1LGkpKXJldHVybiBudWxsfXJldHVybiBuZXcgcygiSW52YWxp
ZCAiK28rIiBgIit1KyJgIHN1cHBsaWVkIHRvIGAiK3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJy
YXkodCk/YyhlKTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiB2KHQpe2Z1bmN0aW9uIGUoZSxu
LHIsbyx1KXt2YXIgYT1lW25dLGM9ZyhhKTtpZigib2JqZWN0IiE9PWMpcmV0dXJuIG5ldyBzKCJJ
bnZhbGlkICIrbysiIGAiK3UrImAgb2YgdHlwZSBgIitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAs
IGV4cGVjdGVkIGBvYmplY3RgLiIpO2Zvcih2YXIgbCBpbiB0KXt2YXIgZj10W2xdO2lmKGYpe3Zh
ciBwPWYoYSxsLHIsbyx1KyIuIitsLGkpO2lmKHApcmV0dXJuIHB9fXJldHVybiBudWxsfXJldHVy
biBjKGUpfWZ1bmN0aW9uIG0oZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm51bWJlciI6Y2FzZSJz
dHJpbmciOmNhc2UidW5kZWZpbmVkIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiFlO2Nh
c2Uib2JqZWN0IjppZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmV2ZXJ5KG0pO2lmKG51bGw9
PT1lfHx0KGUpKXJldHVybiEwO3ZhciByPW4oZSk7aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNh
bGwoZSk7aWYociE9PWUuZW50cmllcyl7Zm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KWlmKCFtKG8u
dmFsdWUpKXJldHVybiExfWVsc2UgZm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KXt2YXIgdT1vLnZh
bHVlO2lmKHUmJiFtKHVbMV0pKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1
bmN0aW9uIGIodCxlKXtyZXR1cm4ic3ltYm9sIj09PXR8fCgiU3ltYm9sIj09PWVbIkBAdG9TdHJp
bmdUYWciXXx8ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZSBpbnN0YW5jZW9mIFN5bWJvbCl9
ZnVuY3Rpb24gZyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8iYXJy
YXkiOnQgaW5zdGFuY2VvZiBSZWdFeHA/Im9iamVjdCI6YihlLHQpPyJzeW1ib2wiOmV9ZnVuY3Rp
b24gRSh0KXt2YXIgZT1nKHQpO2lmKCJvYmplY3QiPT09ZSl7aWYodCBpbnN0YW5jZW9mIERhdGUp
cmV0dXJuImRhdGUiO2lmKHQgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJu
IGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci5uYW1l
P3QuY29uc3RydWN0b3IubmFtZTp3fXZhciBfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5
bWJvbC5pdGVyYXRvcixQPSJAQGl0ZXJhdG9yIix3PSI8PGFub255bW91cz4+IixOPXthcnJheTps
KCJhcnJheSIpLGJvb2w6bCgiYm9vbGVhbiIpLGZ1bmM6bCgiZnVuY3Rpb24iKSxudW1iZXI6bCgi
bnVtYmVyIiksb2JqZWN0OmwoIm9iamVjdCIpLHN0cmluZzpsKCJzdHJpbmciKSxzeW1ib2w6bCgi
c3ltYm9sIiksYW55OmZ1bmN0aW9uKCl7cmV0dXJuIGMoci50aGF0UmV0dXJuc051bGwpfSgpLGFy
cmF5T2Y6ZixlbGVtZW50OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4scixvLGkpe3ZhciB1PWVb
bl07aWYoIXQodSkpe3JldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUg
YCIrZyh1KSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVs
ZW1lbnQuIil9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9KCksaW5zdGFuY2VPZjpwLG5vZGU6ZnVu
Y3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyl7cmV0dXJuIG0odFtlXSk/bnVsbDpuZXcgcygi
SW52YWxpZCAiK3IrIiBgIitvKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVh
Y3ROb2RlLiIpfXJldHVybiBjKHQpfSgpLG9iamVjdE9mOnksb25lT2Y6ZCxvbmVPZlR5cGU6aCxz
aGFwZTp2fTtyZXR1cm4gcy5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLE4uY2hlY2tQcm9wVHlw
ZXM9dSxOLlByb3BUeXBlcz1OLE59fSx7MjI6MjIsMjQ6MjQsMjU6MjUsMjc6MjcsMzA6MzB9XSwz
MDpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IlNFQ1JFVF9ET19OT1Rf
UEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0se31dfSx7fSxbMTVdKSgxNSl9KTsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0
L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwNGZi
ZGJkYjRlZDRhZmUwOWQ1NTQzZGI1MjBkYzZhOWRkZDQxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpA
QCAtMCwwICsxLDM3NiBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRk
aW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOwor
ICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAw
JTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVy
aXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdl
YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9v
dGhpbmc6IGdyYXlzY2FsZTsKK30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNh
IE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAx
LjRlbTsKKyAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICAgIGNvbG9yOiAjNGQ0ZDRkOworICAg
IG1pbi13aWR0aDogMjMwcHg7CisgICAgbWF4LXdpZHRoOiA1NTBweDsKKyAgICBtYXJnaW46IDAg
YXV0bzsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96
LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9
CisKKzpmb2N1cyB7CisgICAgb3V0bGluZTogMDsKK30KKworLmhpZGRlbiB7CisgICAgZGlzcGxh
eTogbm9uZTsKK30KKworLnRvZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgbWFy
Z2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm94LXNo
YWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAg
MjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQorCisudG9kb2FwcCBpbnB1dDo6LXdl
YmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZv
bnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGlucHV0
OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Omlu
cHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWln
aHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworLnRvZG9hcHAgaDEgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xNTVweDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBmb250LXNpemU6IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0OiAxMDA7CisgICAgdGV4dC1hbGln
bjogY2VudGVyOworICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjE1KTsKKyAgICAtd2Vi
a2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1vei10ZXh0LXJl
bmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6
ZUxlZ2liaWxpdHk7Cit9CisKKy5uZXctdG9kbywKKy5lZGl0IHsKKyAgICBwb3NpdGlvbjogcmVs
YXRpdmU7CisgICAgbWFyZ2luOiAwOworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTog
MjRweDsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJp
dDsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYm9yZGVyOiAwOworICAgIGNvbG9yOiBp
bmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5Owor
ICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7Cisg
ICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBh
bnRpYWxpYXNlZDsKKyAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOworfQor
CisubmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9y
ZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMDMpOworICAgIGJv
eC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCwwLjAzKTsKK30KKworLm1haW4g
eworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10
b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCisudG9nZ2xlLWFsbCB7CisgICAgdGV4dC1hbGln
bjogY2VudGVyOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIG9w
YWNpdHk6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOworfQorCisudG9nZ2xlLWFsbCArIGxh
YmVsIHsKKyAgICB3aWR0aDogNjBweDsKKyAgICBoZWlnaHQ6IDM0cHg7CisgICAgZm9udC1zaXpl
OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01MnB4OworICAgIGxlZnQ6
IC0xM3B4OworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgIHRyYW5z
Zm9ybTogcm90YXRlKDkwZGVnKTsKK30KKworLnRvZ2dsZS1hbGwgKyBsYWJlbDpiZWZvcmUgewor
ICAgIGNvbnRlbnQ6ICfina8nOworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2
ZTZlNjsKKyAgICBwYWRkaW5nOiAxMHB4IDI3cHggMTBweCAyN3B4OworfQorCisudG9nZ2xlLWFs
bDpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30KKworLnRv
ZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHls
ZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOwor
ICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VkZWRl
ZDsKK30KKworLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBu
b25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0b206IG5v
bmU7CisgICAgcGFkZGluZzogMDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGluZzogMTJw
eCAxNnB4OworICAgIG1hcmdpbjogMCAwIDAgNDNweDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0
aW5nIC52aWV3IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpIC50b2dn
bGUgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBh
dXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHls
aW5nICovCisgICAgaGVpZ2h0OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0
b3A6IDA7CisgICAgYm90dG9tOiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjog
bm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsK
KyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUgeworICAg
IG9wYWNpdHk6IDA7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZSArIGxhYmVsIHsKKyAgICAv
KgorICAgICAgICBGaXJlZm94IHJlcXVpcmVzIGAjYCB0byBiZSBlc2NhcGVkIC0gaHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNDMzCisgICAgICAgIElFIGFu
ZCBFZGdlIHJlcXVpcmVzICpldmVyeXRoaW5nKiB0byBiZSBlc2NhcGVkIHRvIHJlbmRlciwgc28g
d2UgZG8gdGhhdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGAjYCAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1p
Y3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzcxNTc0NTkv
CisgICAgKi8KKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1
dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUy
MHdpZHRoJTNEJTIyNDAlMjIlMjBoZWlnaHQlM0QlMjI0MCUyMiUyMHZpZXdCb3glM0QlMjItMTAl
MjAtMTglMjAxMDAlMjAxMzUlMjIlM0UlM0NjaXJjbGUlMjBjeCUzRCUyMjUwJTIyJTIwY3klM0Ql
MjI1MCUyMiUyMHIlM0QlMjI1MCUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIy
JTIzZWRlZGVkJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMyUyMi8lM0UlM0Mvc3ZnJTNFJyk7Cisg
ICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9u
OiBjZW50ZXIgbGVmdDsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQgKyBsYWJl
bCB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwl
M0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0
aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIyNDAlMjIlMjB2aWV3Qm94JTNEJTIyLTEwJTIwLTE4
JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xlJTIwY3glM0QlMjI1MCUyMiUyMGN5JTNEJTIyNTAl
MjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2Jk
ZGFkNSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjMlMjIvJTNFJTNDcGF0aCUyMGZpbGwlM0QlMjIl
MjM1ZGMyYWYlMjIlMjBkJTNEJTIyTTcyJTIwMjVMNDIlMjA3MSUyMDI3JTIwNTZsLTQlMjA0JTIw
MjAlMjAyMCUyMDM0LTUyeiUyMi8lM0UlM0Mvc3ZnJTNFJyk7Cit9CisKKy50b2RvLWxpc3QgbGkg
bGFiZWwgeworICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKKyAgICBwYWRkaW5nOiAxNXB4IDE1
cHggMTVweCA2MHB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7
CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworLnRvZG8tbGlzdCBsaS5jb21wbGV0
ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGlu
ZS10aHJvdWdoOworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBu
b25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEw
cHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsK
KyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNj
YzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAw
LjJzIGVhc2Utb3V0OworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBj
b2xvcjogI2FmNWI1ZTsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAg
Y29udGVudDogJ8OXJzsKK30KKworLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAg
ZGlzcGxheTogYmxvY2s7Cit9CisKKy50b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6
IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJn
aW4tYm90dG9tOiAtMXB4OworfQorCisuZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBw
YWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLmZvb3Rlcjpi
ZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBy
aWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7
CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgw
LCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAg
ICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAg
ICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAxN3B4IDJw
eCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30KKworLnRvZG8tY291bnQgeworICAgIGZsb2F0
OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy50b2RvLWNvdW50IHN0cm9uZyB7
CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworLmZpbHRlcnMgeworICAgIG1hcmdpbjogMDsK
KyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKy5maWx0ZXJzIGxpIHsK
KyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKy5maWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBp
bmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50Owor
ICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAg
Ym9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBh
LnNlbGVjdGVkIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9
CisKKy5jbGVhci1jb21wbGV0ZWQsCitodG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAg
ICBmbG9hdDogcmlnaHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0
OiAyMHB4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7
Cit9CisKKy5jbGVhci1jb21wbGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lOworfQorCisuaW5mbyB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xv
cjogI2JmYmZiZjsKKyAgICBmb250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4
IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K
KworLmluZm8gcCB7CisgICAgbGluZS1oZWlnaHQ6IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNv
bG9yOiBpbmhlcml0OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdo
dDogNDAwOworfQorCisuaW5mbyBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsKK30KKworLyoKKyAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxl
IFNhZmFyaS4KKyAgICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hl
Y2tib3hlcyBpbiBGaXJlZm94CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRl
dmljZS1waXhlbC1yYXRpbzowKSB7CisgICAgLnRvZ2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBs
aSAudG9nZ2xlIHsKKyAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9k
by1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorfQorCitA
bWVkaWEgKG1heC13aWR0aDogNDMwcHgpIHsKKyAgICAuZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0
OiA1MHB4OworICAgIH0KKworICAgIC5maWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4Owor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNh
MmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCkBAIC0wLDAgKzEsMTQxIEBACitociB7
CisgICAgbWFyZ2luOiAyMHB4IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJvcmRlci10b3A6IDFw
eCBkYXNoZWQgI2M1YzVjNTsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmN2Y3Zjc7
Cit9CisKKy5sZWFybiBhIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgIHRleHQtZGVj
b3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogI2I4M2Y0NTsKK30KKworLmxlYXJuIGE6aG92ZXIg
eworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAgIGNvbG9yOiAjNzg3ZTdlOwor
fQorCisubGVhcm4gaDMsCisubGVhcm4gaDQsCisubGVhcm4gaDUgeworICAgIG1hcmdpbjogMTBw
eCAwOworICAgIGZvbnQtd2VpZ2h0OiA1MDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICBj
b2xvcjogIzAwMDsKK30KKworLmxlYXJuIGgzIHsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9CisK
Ky5sZWFybiBoNCB7CisgICAgZm9udC1zaXplOiAxOHB4OworfQorCisubGVhcm4gaDUgeworICAg
IG1hcmdpbi1ib3R0b206IDA7CisgICAgZm9udC1zaXplOiAxNHB4OworfQorCisubGVhcm4gdWwg
eworICAgIHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwIDAgMzBweCAyNXB4OworfQorCisubGVh
cm4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworfQorCisubGVhcm4gcCB7CisgICAgZm9u
dC1zaXplOiAxNXB4OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgbGluZS1oZWlnaHQ6IDEu
MzsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKyNpc3N1
ZS1jb3VudCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnF1b3RlIHsKKyAgICBib3JkZXI6
IG5vbmU7CisgICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOworfQorCisucXVvdGUgcCB7CisgICAg
Zm9udC1zdHlsZTogaXRhbGljOworfQorCisucXVvdGUgcDpiZWZvcmUgeworICAgIGNvbnRlbnQ6
ICfigJwnOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHRvcDogLTIwcHg7CisgICAgbGVmdDogM3B4OworfQorCisu
cXVvdGUgcDphZnRlciB7CisgICAgY29udGVudDogJ+KAnSc7CisgICAgZm9udC1zaXplOiA1MHB4
OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9t
OiAtNDJweDsKKyAgICByaWdodDogM3B4OworfQorCisucXVvdGUgZm9vdGVyIHsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDBweDsKKyAgICByaWdodDogMDsKK30KKwor
LnF1b3RlIGZvb3RlciBpbWcgeworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLnF1b3Rl
IGZvb3RlciBhIHsKKyAgICBtYXJnaW4tbGVmdDogNXB4OworICAgIHZlcnRpY2FsLWFsaWduOiBt
aWRkbGU7Cit9CisKKy5zcGVlY2gtYnViYmxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgcGFkZGluZzogMTBweDsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cisg
ICAgYm9yZGVyLXJhZGl1czogNXB4OworfQorCisuc3BlZWNoLWJ1YmJsZTphZnRlciB7CisgICAg
Y29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMTAwJTsKKyAg
ICByaWdodDogMzBweDsKKyAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAg
Ym9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOworfQorCisubGVhcm4tYmFyID4g
LmxlYXJuIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgd2lkdGg6IDI3MnB4OworICAg
IHRvcDogOHB4OworICAgIGxlZnQ6IC0zMDBweDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJv
cmRlci1yYWRpdXM6IDVweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAy
NTUsIC42KTsKKyAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OworICAgIHRyYW5zaXRpb24t
ZHVyYXRpb246IDUwMG1zOworfQorCitAbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKKyAgICAu
bGVhcm4tYmFyIHsKKyAgICAgICAgd2lkdGg6IGF1dG87CisgICAgICAgIHBhZGRpbmctbGVmdDog
MzAwcHg7CisgICAgfQorCisgICAgLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxlZnQ6
IDhweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxl
cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0
N2JkMTNhODM5MjI3N2Y4MzBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpAQCAtMCwwICsxLDI0OSBAQAor
LyogZ2xvYmFsIF8gKi8KKyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAg
LyoganNoaW50IGlnbm9yZTpzdGFydCAqLworICAgIC8vIFVuZGVyc2NvcmUncyBUZW1wbGF0ZSBN
b2R1bGUKKyAgICAvLyBDb3VydGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCisgICAgdmFyIF8gPSAo
ZnVuY3Rpb24gKF8pIHsKKyAgICAgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsK
KyAgICAgICAgICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFy
Z3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdz
SW5kZXgrKykgeworICAgICAgICAgICAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1thcmdz
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvYmplY3Rba2V5XSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0W2tleV0gPSBpdGVyYWJsZVtrZXldOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IGRl
ZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hh
bmdlIHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFs
dGVybmF0aXZlIGRlbGltaXRlcnMuCisgICAgICAgIF8udGVtcGxhdGVTZXR0aW5ncyA9IHsKKyAg
ICAgICAgICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBp
bnRlcnBvbGF0ZSA6IC88JT0oW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGVzY2FwZSAgICAg
IDogLzwlLShbXHNcU10rPyklPi9nCisgICAgICAgIH07CisKKyAgICAgICAgLy8gV2hlbiBjdXN0
b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBh
bgorICAgICAgICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4
LCB3ZSBuZWVkIG9uZSB0aGF0IGlzCisgICAgICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNo
LgorICAgICAgICB2YXIgbm9NYXRjaCA9IC8oLileLzsKKworICAgICAgICAvLyBDZXJ0YWluIGNo
YXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8g
YQorICAgICAgICAvLyBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgdmFyIGVzY2FwZXMgPSB7Cisg
ICAgICAgICAgICAiJyI6ICAgICAgIiciLAorICAgICAgICAgICAgJ1xcJzogICAgICdcXCcsCisg
ICAgICAgICAgICAnXHInOiAgICAgJ3InLAorICAgICAgICAgICAgJ1xuJzogICAgICduJywKKyAg
ICAgICAgICAgICdcdCc6ICAgICAndCcsCisgICAgICAgICAgICAnXHUyMDI4JzogJ3UyMDI4JywK
KyAgICAgICAgICAgICdcdTIwMjknOiAndTIwMjknCisgICAgICAgIH07CisKKyAgICAgICAgdmFy
IGVzY2FwZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAgICAgICAgLy8g
SmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJi
aXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgICAgICAvLyBhbmQg
Y29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KKyAgICAg
ICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7CisgICAgICAg
ICAgICB2YXIgcmVuZGVyOworICAgICAgICAgICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBz
ZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTsKKworICAgICAgICAgICAgLy8gQ29tYmluZSBk
ZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisg
ICAgICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWworICAgICAgICAgICAgICAgIChz
ZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0
aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNl
dHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICAgICAgXS5qb2luKCd8
JykgKyAnfCQnLCAnZycpOworCisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBz
b3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAg
ICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKKyAg
ICAgICAgICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBp
bnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgeworICAgICAgICAgICAgICAgIHNvdXJjZSAr
PSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNl
KGVzY2FwZXIsIGZ1bmN0aW9uKG1hdGNoKSB7IHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07
IH0pOworCisgICAgICAgICAgICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2Fw
ZShfX3QpKStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50
ZXJwb2xhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIg
KyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNv
dXJjZSArPSAiJztcbiI7CisKKyAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNw
ZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgICAgICBp
ZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3Vy
Y2UgKyAnfVxuJzsKKworICAgICAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1B
cnJheS5wcm90b3R5cGUuam9pbiwiICsKKyAgICAgICAgICAgICAgICAicHJpbnQ9ZnVuY3Rpb24o
KXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAgICAgICAgIHNv
dXJjZSArICJyZXR1cm4gX19wO1xuIjsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdf
Jywgc291cmNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBl
LnNvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKKyAgICAg
ICAgICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252
ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCisgICAgICAgICAgICB0ZW1wbGF0ZS5zb3VyY2Ug
PSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBz
b3VyY2UgKyAnfSc7CisKKyAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgICAgICAgfTsK
KworICAgICAgICByZXR1cm4gXzsKKyAgICB9KSh7fSk7CisKKyAgICBpZiAobG9jYXRpb24uaG9z
dG5hbWUgPT09ICd0b2RvbXZjLmNvbScpIHsKKyAgICAgICAgKGZ1bmN0aW9uKGkscyxvLGcscixh
LG0pe2lbJ0dvb2dsZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpewor
ICAgICAgICAoaVtyXS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3
IERhdGUoKTthPXMuY3JlYXRlRWxlbWVudChvKSwKKyAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlU
YWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
YSxtKQorICAgICAgICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdv
b2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7CisgICAgICAgIGdhKCdjcmVh
dGUnLCAnVUEtMzEwODEwNjItMScsICdhdXRvJyk7CisgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2
aWV3Jyk7CisgICAgfQorICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKyAgICBmdW5jdGlv
biByZWRpcmVjdCgpIHsKKyAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVq
cy5naXRodWIuaW8nKSB7CisgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJl
Zi5yZXBsYWNlKCd0YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMuY29tJyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKKyAgICAgICAgdmFy
IGJhc2UgPSBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2V4YW1wbGVzLycpOworICAgICAgICByZXR1
cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
Z2V0RmlsZShmaWxlLCBjYWxsYmFjaykgeworICAgICAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsK
KyAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4g
VG9kb01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisg
ICAgICAgIHhoci5vcGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7CisgICAgICAg
IHhoci5zZW5kKCk7CisKKyAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgeworICAg
ICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTGVhcm4pKSB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0
ZW1wbGF0ZSwgZnJhbWV3b3JrOworCisgICAgICAgIGlmICh0eXBlb2YgbGVhcm5KU09OICE9PSAn
b2JqZWN0JykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsZWFybkpTT04g
PSBKU09OLnBhcnNlKGxlYXJuSlNPTik7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvbmZpZykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7Cisg
ICAgICAgICAgICBmcmFtZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7CisgICAgICAgICAg
ICB0ZW1wbGF0ZSA9IGxlYXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghZnJhbWV3b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZy
YW1ld29ya10nKSkgeworICAgICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcignW2RhdGEtZnJhbWV3b3JrXScpLmRhdGFzZXQuZnJhbWV3b3JrOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgIGlmIChsZWFybkpT
T04uYmFja2VuZCkgeworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09O
LmJhY2tlbmQ7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZy
YW1ld29yazsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICBiYWNr
ZW5kOiB0cnVlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWFybkpTT05b
ZnJhbWV3b3JrXSkgeworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09O
W2ZyYW1ld29ya107CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9
IGZyYW1ld29yazsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kKCk7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLmZldGNoSXNzdWVDb3VudCgpOworICAgIH0KKworICAgIExlYXJuLnByb3RvdHlw
ZS5hcHBlbmQgPSBmdW5jdGlvbiAob3B0cykgeworICAgICAgICB2YXIgYXNpZGUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdhc2lkZScpOworICAgICAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRl
bXBsYXRlKHRoaXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAgICAgIGFzaWRl
LmNsYXNzTmFtZSA9ICdsZWFybic7CisKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5iYWNrZW5k
KSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgZGVtbyBsaW5rCisgICAgICAgICAgICB2YXIgc291
cmNlTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yKCcuc291cmNlLWxpbmtzJyk7CisgICAgICAg
ICAgICB2YXIgaGVhZGluZyA9IHNvdXJjZUxpbmtzLmZpcnN0RWxlbWVudENoaWxkOworICAgICAg
ICAgICAgdmFyIHNvdXJjZUxpbmsgPSBzb3VyY2VMaW5rcy5sYXN0RWxlbWVudENoaWxkOworICAg
ICAgICAgICAgLy8gQ29ycmVjdCBsaW5rIHBhdGgKKyAgICAgICAgICAgIHZhciBocmVmID0gc291
cmNlTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmsuc2V0
QXR0cmlidXRlKCdocmVmJywgaHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZignaHR0cCcpKSk7
CisgICAgICAgICAgICBzb3VyY2VMaW5rcy5pbm5lckhUTUwgPSBoZWFkaW5nLm91dGVySFRNTCAr
IHNvdXJjZUxpbmsub3V0ZXJIVE1MOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
TG9jYWxpemUgZGVtbyBsaW5rcworICAgICAgICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1
ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsnKTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlw
ZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykuc3Vic3RyKDAsIDQpICE9
PSAnaHR0cCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdo
cmVmJywgZmluZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3Vt
ZW50LmJvZHkuY2xhc3NOYW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1i
YXInKS50cmltKCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdh
ZnRlckJlZ2luJywgYXNpZGUub3V0ZXJIVE1MKTsKKyAgICB9OworCisgICAgTGVhcm4ucHJvdG90
eXBlLmZldGNoSXNzdWVDb3VudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlzc3VlTGlu
ayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudC1saW5rJyk7CisgICAgICAg
IGlmIChpc3N1ZUxpbmspIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSBpc3N1ZUxpbmsuaHJlZi5y
ZXBsYWNlKCdodHRwczovL2dpdGh1Yi5jb20nLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBv
cycpOworICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAg
ICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgICAgICAgICB4aHIub25sb2Fk
ID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUmVzcG9uc2UgPSBK
U09OLnBhcnNlKGUudGFyZ2V0LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHBh
cnNlZFJlc3BvbnNlIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGNvdW50ID0gcGFyc2VkUmVzcG9uc2UubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y291bnQgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlTGluay5pbm5lckhU
TUwgPSAnVGhpcyBhcHAgaGFzICcgKyBjb3VudCArICcgb3BlbiBpc3N1ZXMnOworICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50Jykuc3R5
bGUuZGlzcGxheSA9ICdpbmxpbmUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgcmVkaXJlY3QoKTsKKyAgICBnZXRGaWxlKCdsZWFybi5qc29uJywg
TGVhcm4pOworfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25wbS1zaHJpbmt3
cmFwLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ucG0tc2hyaW5rd3JhcC5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyZWU3ODIwNzU5ZWFkYzY2ZGNjNGM4NzI5YTlkOGExODdhNzQwYTUKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ucG0tc2hyaW5rd3JhcC5qc29uCkBAIC0wLDAgKzEs
MTA0IEBACit7CisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImFzYXAiOiB7CisgICAgICAidmVy
c2lvbiI6ICIyLjAuNSIsCisgICAgICAiZnJvbSI6ICJhc2FwQD49Mi4wLjMgPDIuMS4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc2FwLy0vYXNhcC0y
LjAuNS50Z3oiCisgICAgfSwKKyAgICAiY2xhc3NuYW1lcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjIuMi41IiwKKyAgICAgICJmcm9tIjogImNsYXNzbmFtZXNAPj0yLjIuNSA8My4wLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsYXNzbmFtZXMvLS9j
bGFzc25hbWVzLTIuMi41LnRneiIKKyAgICB9LAorICAgICJjb3JlLWpzIjogeworICAgICAgInZl
cnNpb24iOiAiMS4yLjciLAorICAgICAgImZyb20iOiAiY29yZS1qc0A+PTEuMC4wIDwyLjAuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS1qcy8t
L2NvcmUtanMtMS4yLjcudGd6IgorICAgIH0sCisgICAgImRpcmVjdG9yIjogeworICAgICAgInZl
cnNpb24iOiAiMS4yLjgiLAorICAgICAgImZyb20iOiAiZGlyZWN0b3JAPj0xLjIuOCA8Mi4wLjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpcmVjdG9y
Ly0vZGlyZWN0b3ItMS4yLjgudGd6IgorICAgIH0sCisgICAgImVuY29kaW5nIjogeworICAgICAg
InZlcnNpb24iOiAiMC4xLjEyIiwKKyAgICAgICJmcm9tIjogImVuY29kaW5nQD49MC4xLjExIDww
LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW5j
b2RpbmcvLS9lbmNvZGluZy0wLjEuMTIudGd6IgorICAgIH0sCisgICAgImZianMiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjguNiIsCisgICAgICAiZnJvbSI6ICJmYmpzQD49MC44LjQgPDAuOS4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYmpzLy0v
ZmJqcy0wLjguNi50Z3oiCisgICAgfSwKKyAgICAiaWNvbnYtbGl0ZSI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuNC4xNSIsCisgICAgICAiZnJvbSI6ICJpY29udi1saXRlQD49MC40LjEzIDwwLjUu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWNvbnYt
bGl0ZS8tL2ljb252LWxpdGUtMC40LjE1LnRneiIKKyAgICB9LAorICAgICJpcy1zdHJlYW0iOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAiZnJvbSI6ICJpcy1zdHJlYW1APj0x
LjAuMSA8Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2lzLXN0cmVhbS8tL2lzLXN0cmVhbS0xLjEuMC50Z3oiCisgICAgfSwKKyAgICAiaXNvbW9y
cGhpYy1mZXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKKyAgICAgICJmcm9tIjog
Imlzb21vcnBoaWMtZmV0Y2hAPj0yLjEuMSA8My4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzb21vcnBoaWMtZmV0Y2gvLS9pc29tb3JwaGljLWZl
dGNoLTIuMi4xLnRneiIKKyAgICB9LAorICAgICJqcy10b2tlbnMiOiB7CisgICAgICAidmVyc2lv
biI6ICIyLjAuMCIsCisgICAgICAiZnJvbSI6ICJqcy10b2tlbnNAPj0yLjAuMCA8My4wLjAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzLXRva2Vucy8t
L2pzLXRva2Vucy0yLjAuMC50Z3oiCisgICAgfSwKKyAgICAibG9vc2UtZW52aWZ5IjogeworICAg
ICAgInZlcnNpb24iOiAiMS4zLjAiLAorICAgICAgImZyb20iOiAibG9vc2UtZW52aWZ5QD49MS4x
LjAgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9sb29zZS1lbnZpZnkvLS9sb29zZS1lbnZpZnktMS4zLjAudGd6IgorICAgIH0sCisgICAgIm5v
ZGUtZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjYuMyIsCisgICAgICAiZnJvbSI6ICJu
b2RlLWZldGNoQD49MS4wLjEgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWZldGNoLy0vbm9kZS1mZXRjaC0xLjYuMy50Z3oiCisgICAg
fSwKKyAgICAib2JqZWN0LWFzc2lnbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAg
ICAgICJmcm9tIjogIm9iamVjdC1hc3NpZ25APj00LjEuMCA8NS4wLjAiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1hc3NpZ24vLS9vYmplY3Qt
YXNzaWduLTQuMS4wLnRneiIKKyAgICB9LAorICAgICJwcm9taXNlIjogeworICAgICAgInZlcnNp
b24iOiAiNy4xLjEiLAorICAgICAgImZyb20iOiAicHJvbWlzZUA+PTcuMS4xIDw4LjAuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvbWlzZS8tL3By
b21pc2UtNy4xLjEudGd6IgorICAgIH0sCisgICAgInJlYWN0IjogeworICAgICAgInZlcnNpb24i
OiAiMTUuNC4wIiwKKyAgICAgICJmcm9tIjogInJlYWN0QDE1LjQuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QvLS9yZWFjdC0xNS40LjAudGd6
IgorICAgIH0sCisgICAgInJlYWN0LWRvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjQuMCIs
CisgICAgICAiZnJvbSI6ICJyZWFjdC1kb21AMTUuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1kb20vLS9yZWFjdC1kb20tMTUuNC4wLnRn
eiIKKyAgICB9LAorICAgICJ0b2RvbXZjLWFwcC1jc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIy
LjAuNiIsCisgICAgICAiZnJvbSI6ICJ0b2RvbXZjLWFwcC1jc3NAPj0yLjAuMCA8My4wLjAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBw
LWNzcy8tL3RvZG9tdmMtYXBwLWNzcy0yLjAuNi50Z3oiCisgICAgfSwKKyAgICAidG9kb212Yy1j
b21tb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCisgICAgICAiZnJvbSI6ICJ0b2Rv
bXZjLWNvbW1vbkA+PTEuMC4yIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0xLjAuMy50
Z3oiCisgICAgfSwKKyAgICAidWEtcGFyc2VyLWpzIjogeworICAgICAgInZlcnNpb24iOiAiMC43
LjEyIiwKKyAgICAgICJmcm9tIjogInVhLXBhcnNlci1qc0A+PTAuNy45IDwwLjguMCIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdWEtcGFyc2VyLWpzLy0v
dWEtcGFyc2VyLWpzLTAuNy4xMi50Z3oiCisgICAgfSwKKyAgICAid2hhdHdnLWZldGNoIjogewor
ICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgImZyb20iOiAid2hhdHdnLWZldGNoQD49
MC4xMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93
aGF0d2ctZmV0Y2gvLS93aGF0d2ctZmV0Y2gtMi4wLjEudGd6IgorICAgIH0KKyAgfQorfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3QvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlNmYzZDZmMjQwNDlhZWE1Yzk0MGM3NzA1NTYz
ZjNmMDk2NjVjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9wYWNrYWdl
Lmpzb24KQEAgLTAsMCArMSwyMCBAQAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJzY3JpcHRz
IjogeworICAgICJtYWtlIjogImJhYmVsIC0tcGx1Z2lucyB0cmFuc2Zvcm0tcmVhY3QtanN4IGpz
L2FwcC5qc3ggfCB1Z2xpZnlqcyAtbyBidWlsZC5taW4uanMiCisgIH0sCisgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgImNsYXNzbmFtZXMiOiAiXjIuMi41IiwKKyAgICAiZGlyZWN0b3IiOiAiXjEu
Mi44IiwKKyAgICAicmVhY3QiOiAiXjE1LjQuMCIsCisgICAgInJlYWN0LWRvbSI6ICJeMTUuNC4w
IiwKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIl4yLjAuMCIsCisgICAgInRvZG9tdmMtY29tbW9u
IjogIl4xLjAuMiIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiYmFiZWwtY2xp
IjogIl42LjEwLjEiLAorICAgICJiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeCI6ICJe
Ni44LjAiLAorICAgICJiYWJlbC1wbHVnaW4tdWdsaWZ5IjogIl4xLjAuMiIsCisgICAgInVnbGlm
eS1qcyI6ICJeMi42LjQiCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXgu
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjU5M2FjYTFhNzQ3
MDBkOTZiZjBhN2ExMDY0ZGFjMWY4YmZkZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+RVM2IOKA
oiBUb2RvTVZDPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVf
bW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgIDwv
aGVhZD4KKyAgPGJvZHk+CisgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAgICAgICA8
aGVhZGVyIGNsYXNzPSJoZWFkZXIiPgorICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAg
ICAgICAgIDxpbnB1dCBjbGFzcz0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRv
IGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICAgIDwvaGVhZGVyPgorCisgICAgICAgIDxzZWN0
aW9uIGNsYXNzPSJtYWluIj4KKyAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlLWFsbCIg
dHlwZT0iY2hlY2tib3giPgorICAgICAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+TWFy
ayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJ0b2RvLWxp
c3QiPjwvdWw+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8Zm9vdGVyIGNsYXNzPSJm
b290ZXIiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZG8tY291bnQiPjwvc3Bhbj4KKyAg
ICAgICAgICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhy
ZWY9IiMvIiBjbGFzcz0ic2VsZWN0ZWQiPkFsbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxs
aT48YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxp
PjxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+PC9saT4KKyAgICAgICAgICAgIDwv
dWw+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNv
bXBsZXRlZDwvYnV0dG9uPgorICAgICAgICA8L2Zvb3Rlcj4KKyAgICA8L3NlY3Rpb24+CisKKyAg
ICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQg
YSB0b2RvPC9wPgorICAgICAgICA8YnI+CisgICAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0
cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgICA8c2Ny
aXB0IHNyYz0ic3JjL2NvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJz
cmMvaGVscGVycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy90ZW1wbGF0ZS5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy9zdG9yZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9InNyYy9tb2RlbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
InNyYy92aWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ic3JjL2FwcC5qcyI+PC9z
Y3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVf
bW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MTliNDc5YmU0
MTU5MTRmMGRiM2VhMTNkYzAzNjBhMDY2OGVkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzCkBAIC0wLDAgKzEs
Mzc3IEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cit9
CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgYm9yZGVy
OiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIHZl
cnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBm
b250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICAtd2Via2l0LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxp
YXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cit9CisKK2JvZHkgeworICAg
IGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJp
ZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAg
ICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0aDog
NTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzog
YW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAg
Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisK
K2J1dHRvbiwKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIG91dGxpbmU6IG5vbmU7Cit9
CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBi
YWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwg
MC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsK
K30KKworLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZv
bnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZl
NmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1z
dHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7
Cit9CisKKy50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHls
ZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9
CisKKy50b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1
cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdl
aWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUs
IDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdp
YmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAg
ICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisu
ZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0
aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7
CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAg
IGJvcmRlcjogMDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAgIGJveC1zaGFk
b3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7CisgICAgYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
KyAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7Cit9CisKKy5uZXctdG9kbyB7CisgICAgcGFkZGluZzogMTZweCAxNnB4
IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAw
LCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCww
LDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHotaW5k
ZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKK2xhYmVsW2Zv
cj0ndG9nZ2xlLWFsbCddIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9nZ2xlLWFsbCB7
CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTU1cHg7CisgICAgbGVmdDogLTEy
cHg7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4OworICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KK30KKworLnRv
Z2dsZS1hbGw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNpemU6IDIy
cHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEwcHggMjdw
eDsKK30KKworLnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgeworICAgIGNvbG9yOiAjNzM3Mzcz
OworfQorCisudG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAg
ICBsaXN0LXN0eWxlOiBub25lOworfQorCisudG9kby1saXN0IGxpIHsKKyAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJvcmRlci1ib3R0b206IDFweCBz
b2xpZCAjZWRlZGVkOworfQorCisudG9kby1saXN0IGxpOmxhc3QtY2hpbGQgeworICAgIGJvcmRl
ci1ib3R0b206IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyB7CisgICAgYm9yZGVy
LWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisudG9kby1saXN0IGxpLmVkaXRp
bmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRoOiA1MDZweDsKKyAgICBw
YWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OworICAgIG1hcmdpbjogMCAwIDAgNDNweDsKK30K
KworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB3
aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNu
J3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0OiBhdXRvOworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9tOiAwOworICAgIG1hcmdpbjog
YXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25lOworfQorCisudG9kby1s
aXN0IGxpIC50b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcr
eG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0
MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIg
Y3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRlZGVkIiBzdHJva2Utd2lkdGg9
IjMiLz48L3N2Zz4nKTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIg
eworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0Jv
eD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0i
bm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBmaWxsPSIjNWRj
MmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz48L3N2Zz4nKTsK
K30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICB3
b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRpbmc6IDE1cHggNjBweCAxNXB4IDE1cHg7
CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGluZS1o
ZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOworfQorCisudG9kby1saXN0
IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5ZDk7CisgICAgdGV4dC1kZWNv
cmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3kgeworICAg
IGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAg
ICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lkdGg6IDQwcHg7CisgICAgaGVp
Z2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZvbnQtc2l6ZTogMzBweDsKKyAg
ICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAxMXB4OworICAgIHRyYW5zaXRp
b246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92
ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95OmFm
dGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisudG9kby1saXN0IGxpOmhvdmVyIC5kZXN0
cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworLnRvZG8tbGlzdCBsaSAuZWRpdCB7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQg
eworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKy5mb290ZXIgeworICAgIGNvbG9yOiAj
Nzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgdGV4
dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQor
CisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBsZWZ0OiAwOworICAgIGhl
aWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJveC1zaGFkb3c6IDAgMXB4
IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCA4cHggMCAtM3B4ICNm
NmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIp
LAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAg
ICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOworfQorCisudG9kby1jb3VudCB7
CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLnRvZG8tY291
bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCisuZmlsdGVycyB7CisgICAg
bWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgbGVmdDogMDsKK30KKworLmZp
bHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworLmZpbHRlcnMgbGkgYSB7Cisg
ICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7CisgICAgcGFkZGluZzogM3B4IDdw
eDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVyOiAxcHggc29saWQgdHJh
bnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisuZmlsdGVycyBsaSBhLnNl
bGVjdGVkLAorLmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3
NSwgNDcsIDQ3LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsKKyAgICBib3Jk
ZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKy5jbGVhci1jb21wbGV0ZWQs
CitodG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICAgIHRleHQtZGVj
b3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5jbGVhci1jb21wbGV0
ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuaW5mbyB7
CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsKKyAgICBmb250
LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmluZm8gcCB7CisgICAgbGlu
ZS1oZWlnaHQ6IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIHRl
eHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCisuaW5mbyBh
OmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyoKKyAgICBI
YWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAgICBDYW4ndCB1
c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94Cisq
LworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7
CisgICAgLnRvZ2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAg
YmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9kby1saXN0IGxpIC50b2dnbGUgewor
ICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgLnRvZ2dsZS1hbGwgeworICAgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJhbnNmb3JtOiBy
b3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgICAg
IGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDogNDMwcHgp
IHsKKyAgICAuZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0KKworICAgIC5m
aWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24gYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY1MjRlYmMyZDljMDU1MjE0YmRmMTI1MWM4NjgxMjQwOWY5YmM5ODAKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3Mv
cGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNjkgQEAKK3sKKyAgIm5hbWUiOiAidG9kb212Yy1hcHAt
Y3NzIiwKKyAgInN0eWxlIjogImluZGV4LmNzcyIsCisgICJ2ZXJzaW9uIjogIjIuMC4yIiwKKyAg
ImRlc2NyaXB0aW9uIjogIkNTUyBmb3IgVG9kb01WQyBhcHBzIiwKKyAgImxpY2Vuc2UiOiAiQ0Mt
QlktNC4wIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJs
IjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC1jc3MuZ2l0Igor
ICB9LAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlNpbmRyZSBTb3JodXMiLAorICAgICJl
bWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIiwKKyAgICAidXJsIjogInNpbmRyZXNvcmh1
cy5jb20iCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiaW5kZXguY3NzIgorICBdLAorICAia2V5
d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpzIiwKKyAgICAiYXBwIiwKKyAg
ICAidG9kbyIsCisgICAgInRlbXBsYXRlIiwKKyAgICAiY3NzIiwKKyAgICAic3R5bGUiLAorICAg
ICJzdHlsZXNoZWV0IgorICBdLAorICAiZ2l0SGVhZCI6ICJmZDFlODNmOGY1M2EwYjg1NTM3NDE1
MzY1ZjJhNjMwMWJiYjQxOTlmIiwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dp
dGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC1jc3MvaXNzdWVzIgorICB9LAorICAiaG9tZXBh
Z2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzIiwKKyAgIl9p
ZCI6ICJ0b2RvbXZjLWFwcC1jc3NAMi4wLjIiLAorICAic2NyaXB0cyI6IHt9LAorICAiX3NoYXN1
bSI6ICIzMWZmNjc5ZGMzYTQwOWIyNjBiYzdlMGE2ZWFjYTVmODc1N2E4OWExIiwKKyAgIl9mcm9t
IjogInRvZG9tdmMtYXBwLWNzc0A+PTIuMC4xIDwzLjAuMCIsCisgICJfbnBtVmVyc2lvbiI6ICIy
LjE0LjciLAorICAiX25vZGVWZXJzaW9uIjogIjQuMi4xIiwKKyAgIl9ucG1Vc2VyIjogeworICAg
ICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFp
bC5jb20iCisgIH0sCisgICJkaXN0IjogeworICAgICJzaGFzdW0iOiAiMzFmZjY3OWRjM2E0MDli
MjYwYmM3ZTBhNmVhY2E1Zjg3NTdhODlhMSIsCisgICAgInRhcmJhbGwiOiAiaHR0cDovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90b2RvbXZjLWFwcC1jc3MtMi4wLjIudGd6
IgorICB9LAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAic2luZHJl
c29yaHVzIiwKKyAgICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiYWRkeW9zbWFuaSIsCisgICAgICAiZW1haWwiOiAiYWRk
eW9zbWFuaUBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwYXNzeSIs
CisgICAgICAiZW1haWwiOiAicGhhcnRpZ0ByZHJlaS5uZXQiCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJzdGVwaGVucGx1c3BsdXMiLAorICAgICAgImVtYWlsIjogInNhd2NodWtAZ21h
aWwuY29tIgorICAgIH0KKyAgXSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJfcmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1h
cHAtY3NzLTIuMC4yLnRneiIsCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZv
dW5kISIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
YXBwLWNzcy9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFw
cC1jc3MvcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZGJlYmYwMjRjMDRhZWI2MDIwY2FmMTMxYTJl
ZDAzMTg5MDgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCkBAIC0wLDAgKzEsMjggQEAKKyMgdG9kb212Yy1h
cHAtY3NzCisKKz4gQ1NTIGZvciBUb2RvTVZDIGFwcHMKKworIVtdKHNjcmVlbnNob3QucG5nKQor
CisKKyMjIEluc3RhbGwKKworCitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtYXBw
LWNzcworYGBgCisKKworIyMgR2V0dGluZyBzdGFydGVkCisKK2BgYGh0bWwKKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3Mi
PgorYGBgCisKK1NlZSB0aGUgW1RvZG9NVkMgYXBwIHRlbXBsYXRlXShodHRwczovL2dpdGh1Yi5j
b20vdGFzdGVqcy90b2RvbXZjLWFwcC10ZW1wbGF0ZSkuCisKKworCisjIyBMaWNlbnNlCisKKzxh
IHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMv
YnkvNC4wL2RlZWQuZW5fVVMiPjxpbWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UiIHN0
eWxlPSJib3JkZXItd2lkdGg6MCIgc3JjPSJodHRwOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wv
YnkvNC4wLzgweDE1LnBuZyIgLz48L2E+PGJyIC8+VGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6
Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9J
bnRlcmFjdGl2ZVJlc291cmNlIiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxu
czpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vc2luZHJl
c29yaHVzLmNvbSIgcHJvcGVydHk9ImNjOmF0dHJpYnV0aW9uTmFtZSIgcmVsPSJjYzphdHRyaWJ1
dGlvblVSTCI+U2luZHJlIFNvcmh1czwvYT4gaXMgbGljZW5zZWQgdW5kZXIgYSA8YSByZWw9Imxp
Y2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9k
ZWVkLmVuX1VTIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFs
IExpY2Vuc2U8L2E+LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNhMmJj
MTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVs
ZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKQEAgLTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBt
YXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hl
ZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKwor
LmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1OworfQorCisubGVhcm4gYTpob3ZlciB7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5s
ZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luOiAxMHB4IDA7Cisg
ICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIGNvbG9yOiAj
MDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZvbnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJu
IGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2lu
LWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAg
cGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7
CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisKKy5sZWFybiBwIHsKKyAgICBmb250LXNpemU6
IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBsaW5lLWhlaWdodDogMS4zOworICAg
IG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50
IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsK
KyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0
eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7
CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBw
OmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAg
b3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4
OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUg
Zm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVy
IGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsK
K30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRk
aW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3Jk
ZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50
OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0
OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXIt
dG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4g
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4
cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJh
ZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYp
OworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlv
bjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1i
YXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsK
KyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4Owor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
Y29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1v
bi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0N2JkMTNhODM5MjI3N2Y4
MzBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWNvbW1vbi9iYXNlLmpzCkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLworKGZ1
bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3JlOnN0
YXJ0ICovCisgICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENvdXJ0
ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgeworICAg
ICAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50
cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBp
biBpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09
IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJh
YmxlW2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1
c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAgIC8v
IGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVy
cy4KKyAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVhdGUg
ICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShb
XHNcU10rPyklPi9nLAorICAgICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+
L2cKKyAgICAgICAgfTsKKworICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNl
dHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGludGVy
cG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQg
aXMKKyAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBub01h
dGNoID0gLyguKV4vOworCisgICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJl
IGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0cmlu
ZyBsaXRlcmFsLgorICAgICAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjogICAg
ICAiJyIsCisgICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6ICAg
ICAncicsCisgICAgICAgICAgICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0JzogICAg
ICd0JywKKyAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1MjAy
OSc6ICd1MjAyOScKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxy
fFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRl
bXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgICAg
ICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywg
cHJlc2VydmVzIHdoaXRlc3BhY2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBx
dW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0gZnVu
Y3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7Cisg
ICAgICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRl
U2V0dGluZ3MpOworCisgICAgICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUg
cmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBtYXRj
aGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBu
b01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8
IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwg
bm9NYXRjaCkuc291cmNlCisgICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisK
KyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3Ry
aW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOwor
ICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5yZXBs
YWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0
ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgs
IG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24o
bWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigo
X190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAg
ICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikp
PT1udWxsPycnOl9fdCkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBl
dmFsdWF0ZSArICJcbl9fcCs9JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKKwor
ICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRh
IHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFi
bGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisgICAg
ICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2lu
LCIgKworICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJn
dW1lbnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7
XG4iOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBG
dW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgICAg
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOwor
ICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBsYXRl
ID0gZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0
aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUg
dGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21w
aWxhdGlvbi4KKyAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNl
dHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAg
ICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBf
OworICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMu
Y29tJykgeworICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0
aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9aVty
XS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVF
bGVtZW50KG8pLAorICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3lu
Yz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0pKHdp
bmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20v
YW5hbHl0aWNzLmpzJywnZ2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2Mi0x
JywgJ2F1dG8nKTsKKyAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9CisgICAg
LyoganNoaW50IGlnbm9yZTplbmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAg
ICAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAg
ICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMu
Z2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9uLmhy
ZWYuaW5kZXhPZignZXhhbXBsZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1
YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxi
YWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0dXJu
IGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2
ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4oJ0dF
VCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKworICAg
ICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0
dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5y
ZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1
bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5z
dGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09O
LCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7
CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5K
U09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7CisgICAg
ICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1ld29y
ayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBsYXRl
ICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVhcm5K
U09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZXdv
cmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7CisgICAg
ICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdv
cmtdJykuZGF0YXNldC5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRlbXBs
YXRlID0gdGVtcGxhdGU7CisKKyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7CisgICAg
ICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAgICAg
ICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAg
ICAgdGhpcy5hcHBlbmQoeworICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7CisgICAg
ICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAgICAg
ICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAg
ICAgICAgdGhpcy5hcHBlbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJc3N1
ZUNvdW50KCk7CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9u
IChvcHRzKSB7CisgICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Fz
aWRlJyk7CisgICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0
ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJu
JzsKKworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIC8v
IFJlbW92ZSBkZW1vIGxpbmsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRlLnF1
ZXJ5U2VsZWN0b3IoJy5zb3VyY2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5nID0g
c291cmNlTGlua3MuZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNlTGlu
ayA9IHNvdXJjZUxpbmtzLmxhc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3JyZWN0
IGxpbmsgcGF0aAorICAgICAgICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJpYnV0
ZSgnaHJlZicpOworICAgICAgICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBo
cmVmLnN1YnN0cihocmVmLmxhc3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNvdXJj
ZUxpbmtzLmlubmVySFRNTCA9IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRlckhU
TUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtz
CisgICAgICAgICAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRl
bW8tbGluaycpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1v
TGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1vTGlu
ay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAgICAg
ICAgICAgICAgICAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsg
ZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUg
PSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAg
ICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5v
dXRlckhUTUwpOworICAgIH07CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2lzc3VlLWNvdW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykgewor
ICAgICAgICAgICAgdmFyIHVybCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8vZ2l0
aHViLmNvbScsICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAgICB2
YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3BlbignR0VU
JywgdXJsLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgICAgIHZhciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJnZXQu
cmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5zdGFu
Y2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRSZXNw
b25zZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBoYXMg
JyArIGNvdW50ICsgJyBvcGVuIGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGlu
ZSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBy
ZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2Fn
ZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2Fn
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgwNTZjNGJmMDc4NzgwOTI5M2MxZDMxZTViMmYzZmQ4NDNjMTEy
ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw2NCBAQAoreworICAibmFtZSI6ICJ0b2Rv
bXZjLWNvbW1vbiIsCisgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgImRlc2NyaXB0aW9uIjogIkNv
bW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzIiwKKyAgImxpY2Vuc2UiOiAi
TUlUIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjog
ImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbi5naXQiCisgIH0s
CisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiVGFzdGVKUyIKKyAgfSwKKyAgIm1haW4iOiAi
YmFzZS5qcyIsCisgICJmaWxlcyI6IFsKKyAgICAiYmFzZS5qcyIsCisgICAgImJhc2UuY3NzIgor
ICBdLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpzIiwKKyAg
ICAidXRpbCIsCisgICAgInV0aWxpdGllcyIKKyAgXSwKKyAgImdpdEhlYWQiOiAiZTgyZDBjNzll
MDE2ODdjZTc0MDdkZjc4NmNjNzg0YWQ4MjE2NmNiMyIsCisgICJidWdzIjogeworICAgICJ1cmwi
OiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24vaXNzdWVzIgorICB9
LAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21t
b24iLAorICAiX2lkIjogInRvZG9tdmMtY29tbW9uQDEuMC4yIiwKKyAgInNjcmlwdHMiOiB7fSwK
KyAgIl9zaGFzdW0iOiAiZWIzYWI2MTI4MWFjNzQ4MDlmNTg2OWM5MTdjN2IwOGJjODQyMzRlMCIs
CisgICJfZnJvbSI6ICJ0b2RvbXZjLWNvbW1vbkA+PTEuMC4yIDwyLjAuMCIsCisgICJfbnBtVmVy
c2lvbiI6ICIyLjcuNCIsCisgICJfbm9kZVZlcnNpb24iOiAiMC4xMi4yIiwKKyAgIl9ucG1Vc2Vy
IjogeworICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNv
cmh1c0BnbWFpbC5jb20iCisgIH0sCisgICJkaXN0IjogeworICAgICJzaGFzdW0iOiAiZWIzYWI2
MTI4MWFjNzQ4MDlmNTg2OWM5MTdjN2IwOGJjODQyMzRlMCIsCisgICAgInRhcmJhbGwiOiAiaHR0
cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8tL3RvZG9tdmMtY29tbW9uLTEu
MC4yLnRneiIKKyAgfSwKKyAgIm1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjog
InNpbmRyZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlvc21hbmkiLAorICAgICAgImVtYWls
IjogImFkZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
cGFzc3kiLAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRyZWkubmV0IgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwKKyAgICAgICJlbWFpbCI6ICJzYXdj
aHVrQGdtYWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJkaXJlY3RvcmllcyI6IHt9LAorICAiX3Jl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtY29tbW9uLy0vdG9k
b212Yy1jb21tb24tMS4wLjIudGd6IiwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRh
dGEgZm91bmQhIgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNWRlNTExOGYzZmM3NzU4ZThkZGMwYTY4
Njg3NDljZWU5Y2FmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKQEAgLTAsMCArMSwxNSBAQAorIyB0b2RvbXZj
LWNvbW1vbgorCis+IENvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzCisK
KworIyMgSW5zdGFsbAorCitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtY29tbW9u
CitgYGAKKworCisjIyBMaWNlbnNlCisKK01JVCDCqSBbVGFzdGVKU10oaHR0cDovL3Rhc3RlanMu
Y29tKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjZiYzkyZmNhNzE2NWVhYTg3YTA3NGVjZTUz
ZmJmYWEyZDhkZjlmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9wYWNrYWdlLmpz
b24KQEAgLTAsMCArMSw3IEBACit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIl4yLjAuMSIsCisgICAgInRvZG9tdmMtY29t
bW9uIjogIl4xLjAuMiIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvLmpz
aGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvLmpzaGludHJjCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmZDQ4ZWIy
OTFhM2ZjNGRkNWMyOWE3MmVlZGY4Yzc1ZTM5ODdkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1L3NyYy8uanNoaW50cmMKQEAgLTAsMCArMSwzIEBACit7CisJImVzbmV4dCI6IHRy
dWUKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2FwcC5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUvc3JjL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjVkOWM1NmQxYjM4YTk5YjdlZjE3YjgwMjRjYmEy
MDc5ODNlODg5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvYXBwLmpzCkBA
IC0wLDAgKzEsMjcgQEAKKyd1c2Ugc3RyaWN0JzsKKworbGV0IHRvZG87Citjb25zdCBzZXRWaWV3
ID0gKCkgPT4gdG9kby5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7
CisKK2NsYXNzIFRvZG8geworICAgIC8qKgorICAgICAqIEluaXQgbmV3IFRvZG8gTGlzdAorICAg
ICAqIEBwYXJhbSAge3N0cmluZ30gVGhlIG5hbWUgb2YgeW91ciBsaXN0CisgICAgICovCisgICAg
Y29uc3RydWN0b3IobmFtZSkgeworICAgICAgICB0aGlzLnN0b3JhZ2UgPSBuZXcgU3RvcmUobmFt
ZSk7CisgICAgICAgIHRoaXMubW9kZWwgPSBuZXcgTW9kZWwodGhpcy5zdG9yYWdlKTsKKworICAg
ICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCk7CisgICAgICAgIHRoaXMudmlldyA9
IG5ldyBWaWV3KHRoaXMudGVtcGxhdGUpOworCisgICAgICAgIHRoaXMuY29udHJvbGxlciA9IG5l
dyBDb250cm9sbGVyKHRoaXMubW9kZWwsIHRoaXMudmlldyk7CisgICAgfQorfQorCiskb24od2lu
ZG93LCAnbG9hZCcsICgpID0+IHsKKyAgICB0b2RvID0gbmV3IFRvZG8oJ3RvZG9zLXZhbmlsbGFq
cycpOworICAgIHNldFZpZXcoKTsKK30pOworCiskb24od2luZG93LCAnaGFzaGNoYW5nZScsIHNl
dFZpZXcpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvY29udHJvbGxlci5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUvc3JjL2NvbnRyb2xsZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI2OTNlYzIwZWUxMjVi
ZjgxZWZmZTdhNzJiODM3NGUxNjI4ZDlhMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUvc3JjL2NvbnRyb2xsZXIuanMKQEAgLTAsMCArMSwyMTQgQEAKKyd1c2Ugc3RyaWN0JzsKKwor
Y2xhc3MgQ29udHJvbGxlciB7CisgICAgLyoqCisgICAgICogVGFrZSBhIG1vZGVsICYgdmlldywg
dGhlbiBhY3QgYXMgY29udHJvbGxlciBiZXR3ZWVuIHRoZW0KKyAgICAgKiBAcGFyYW0gIHtvYmpl
Y3R9IG1vZGVsIFRoZSBtb2RlbCBpbnN0YW5jZQorICAgICAqIEBwYXJhbSAge29iamVjdH0gdmll
dyAgVGhlIHZpZXcgaW5zdGFuY2UKKyAgICAgKi8KKyAgICBjb25zdHJ1Y3Rvcihtb2RlbCwgdmll
dykgeworICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7CisgICAgICAgIHRoaXMudmlldyA9IHZp
ZXc7CisKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ25ld1RvZG8nLCB0aXRsZSA9PiB0aGlzLmFk
ZEl0ZW0odGl0bGUpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ2l0ZW1FZGl0JywgaXRlbSA9
PiB0aGlzLmVkaXRJdGVtKGl0ZW0uaWQpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ2l0ZW1F
ZGl0RG9uZScsIGl0ZW0gPT4gdGhpcy5lZGl0SXRlbVNhdmUoaXRlbS5pZCwgaXRlbS50aXRsZSkp
OworICAgICAgICB0aGlzLnZpZXcuYmluZCgnaXRlbUVkaXRDYW5jZWwnLCBpdGVtID0+IHRoaXMu
ZWRpdEl0ZW1DYW5jZWwoaXRlbS5pZCkpOworICAgICAgICB0aGlzLnZpZXcuYmluZCgnaXRlbVJl
bW92ZScsIGl0ZW0gPT4gdGhpcy5yZW1vdmVJdGVtKGl0ZW0uaWQpKTsKKyAgICAgICAgdGhpcy52
aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBpdGVtID0+IHRoaXMudG9nZ2xlQ29tcGxldGUoaXRlbS5p
ZCwgaXRlbS5jb21wbGV0ZWQpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ3JlbW92ZUNvbXBs
ZXRlZCcsICgpID0+IHRoaXMucmVtb3ZlQ29tcGxldGVkSXRlbXMoKSk7CisgICAgICAgIHRoaXMu
dmlldy5iaW5kKCd0b2dnbGVBbGwnLCBzdGF0dXMgPT4gdGhpcy50b2dnbGVBbGwoc3RhdHVzLmNv
bXBsZXRlZCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWQgJiBJbml0aWFsaXplIHRo
ZSB2aWV3CisgICAgICogQHBhcmFtIHtzdHJpbmd9ICAnJyB8ICdhY3RpdmUnIHwgJ2NvbXBsZXRl
ZCcKKyAgICAgKi8KKyAgICBzZXRWaWV3KGhhc2gpeworICAgICAgICBsZXQgcm91dGUgPSBoYXNo
LnNwbGl0KCcvJylbMV07CisgICAgICAgIGxldCBwYWdlID0gcm91dGUgfHwgJyc7CisgICAgICAg
IHRoaXMuX3VwZGF0ZUZpbHRlcihwYWdlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFdmVu
dCBmaXJlcyBvbiBsb2FkLiBHZXRzIGFsbCBpdGVtcyAmIGRpc3BsYXlzIHRoZW0KKyAgICAgKi8K
KyAgICBzaG93QWxsKCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZChkYXRhID0+IHRoaXMudmll
dy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSkpOworICAgIH0KKworICAgIC8qKgorICAgICAq
IFJlbmRlcnMgYWxsIGFjdGl2ZSB0YXNrcworICAgICAqLworICAgIHNob3dBY3RpdmUoKXsKKyAg
ICAgICAgdGhpcy5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IGZhbHNlfSwgZGF0YSA9PiB0aGlzLnZp
ZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBSZW5kZXJzIGFsbCBjb21wbGV0ZWQgdGFza3MKKyAgICAgKi8KKyAgICBzaG93Q29tcGxldGVk
KCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZGF0YSA9PiB0
aGlzLnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBBbiBldmVudCB0byBmaXJlIHdoZW5ldmVyIHlvdSB3YW50IHRvIGFkZCBhbiBpdGVt
LiBTaW1wbHkgcGFzcyBpbiB0aGUgZXZlbnQKKyAgICAgKiBvYmplY3QgYW5kIGl0J2xsIGhhbmRs
ZSB0aGUgRE9NIGluc2VydGlvbiBhbmQgc2F2aW5nIG9mIHRoZSBuZXcgaXRlbS4KKyAgICAgKi8K
KyAgICBhZGRJdGVtKHRpdGxlKXsKKyAgICAgICAgaWYgKHRpdGxlLnRyaW0oKSA9PT0gJycpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMubW9kZWwuY3Jl
YXRlKHRpdGxlLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCdjbGVhck5l
d1RvZG8nKTsKKyAgICAgICAgICAgIHRoaXMuX2ZpbHRlcih0cnVlKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgLyoKKyAgICAgKiBUcmlnZ2VycyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisg
ICAgICovCisgICAgZWRpdEl0ZW0oaWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoaWQsIGRh
dGEgPT4geworICAgICAgICAgICAgbGV0IHRpdGxlID0gZGF0YVswXS50aXRsZTsKKyAgICAgICAg
ICAgIHRoaXMudmlldy5yZW5kZXIoJ2VkaXRJdGVtJywge2lkLCB0aXRsZX0pOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmlzaGVzIHRoZSBpdGVtIGVkaXRpbmcgbW9k
ZSBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgZWRpdEl0ZW1TYXZlKGlkLCB0aXRsZSl7Cisg
ICAgICAgIHRpdGxlID0gdGl0bGUudHJpbSgpOworCisgICAgICAgIGlmICh0aXRsZS5sZW5ndGgg
IT09IDApIHsKKyAgICAgICAgICAgIHRoaXMubW9kZWwudXBkYXRlKGlkLCB7dGl0bGV9LCAoKSA9
PiB7CisgICAgICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcignZWRpdEl0ZW1Eb25lJywge2lk
LCB0aXRsZX0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB0aGlzLnJlbW92ZUl0ZW0oaWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAg
KiBDYW5jZWxzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS4KKyAgICAgKi8KKyAgICBlZGl0SXRlbUNh
bmNlbChpZCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZChpZCwgZGF0YSA9PiB7CisgICAgICAg
ICAgICBsZXQgdGl0bGUgPSBkYXRhWzBdLnRpdGxlOworICAgICAgICAgICAgdGhpcy52aWV3LnJl
bmRlcignZWRpdEl0ZW1Eb25lJywge2lkLCB0aXRsZX0pOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBET00gZWxlbWVudCB3aXRoIGdpdmVuIElELAorICAg
ICAqIFRoZW4gcmVtb3ZlIGl0IGZyb20gRE9NICYgU3RvcmFnZQorICAgICAqLworICAgIHJlbW92
ZUl0ZW0oaWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlbW92ZShpZCwgKCkgPT4gdGhpcy52aWV3
LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKSk7CisgICAgICAgIHRoaXMuX2ZpbHRlcigpOworICAg
IH0KKworICAgIC8qKgorICAgICAqIFdpbGwgcmVtb3ZlIGFsbCBjb21wbGV0ZWQgaXRlbXMgZnJv
bSB0aGUgRE9NIGFuZCBzdG9yYWdlLgorICAgICAqLworICAgIHJlbW92ZUNvbXBsZXRlZEl0ZW1z
KCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZGF0YSA9PiB7
CisgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGRhdGEpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLnJlbW92ZUl0ZW0oaXRlbS5pZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIHRoaXMuX2ZpbHRlcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdpdmUgaXQg
YW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhlIGl0
ZW0KKyAgICAgKiBpbiBzdG9yYWdlIGJhc2VkIG9uIHRoZSBjaGVja2JveCdzIHN0YXRlLgorICAg
ICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBj
b21wbGV0ZSBvciB1bmNvbXBsZXRlCisgICAgICogQHBhcmFtIHtvYmplY3R9IGNoZWNrYm94IFRo
ZSBjaGVja2JveCB0byBjaGVjayB0aGUgc3RhdGUgb2YgY29tcGxldGUKKyAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3Igbm90CisgICAgICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5l
ZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVyaW5nIHRoZSB0b2RvIGl0ZW1zCisgICAgICovCisg
ICAgdG9nZ2xlQ29tcGxldGUoaWQsIGNvbXBsZXRlZCwgc2lsZW50KXsKKyAgICAgICAgdGhpcy5t
b2RlbC51cGRhdGUoaWQsIHtjb21wbGV0ZWR9LCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLnZp
ZXcucmVuZGVyKCdlbGVtZW50Q29tcGxldGUnLCB7aWQsIGNvbXBsZXRlZH0pOworICAgICAgICB9
KTsKKworICAgICAgICBpZiAoIXNpbGVudCkgeworICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaWxsIHRvZ2dsZSBBTEwgY2hl
Y2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21wbGV0ZW5lc3Mgb2YgbW9kZWxzLgorICAgICAq
IEp1c3QgcGFzcyBpbiB0aGUgZXZlbnQgb2JqZWN0LgorICAgICAqLworICAgIHRvZ2dsZUFsbChj
b21wbGV0ZWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoe2NvbXBsZXRlZDogIWNvbXBsZXRl
ZH0sIGRhdGEgPT4geworICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBkYXRhKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBjb21wbGV0ZWQsIHRydWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl9maWx0ZXIoKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBwaWVjZXMgb2YgdGhlIHBhZ2Ug
d2hpY2ggY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgcmVtYWluaW5nCisgICAgICogbnVtYmVyIG9m
IHRvZG9zLgorICAgICAqLworICAgIF91cGRhdGVDb3VudCgpeworICAgICAgICB0aGlzLm1vZGVs
LmdldENvdW50KHRvZG9zID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZCA9IHRvZG9z
LmNvbXBsZXRlZDsKKyAgICAgICAgICAgIGNvbnN0IHZpc2libGUgPSBjb21wbGV0ZWQgPiAwOwor
ICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGNvbXBsZXRlZCA9PT0gdG9kb3MudG90YWw7CisK
KyAgICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ3VwZGF0ZUVsZW1lbnRDb3VudCcsIHRvZG9z
LmFjdGl2ZSk7CisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCdjbGVhckNvbXBsZXRlZEJ1
dHRvbicsIHtjb21wbGV0ZWQsIHZpc2libGV9KTsKKworICAgICAgICAgICAgdGhpcy52aWV3LnJl
bmRlcigndG9nZ2xlQWxsJywge2NoZWNrZWR9KTsKKyAgICAgICAgICAgIHRoaXMudmlldy5yZW5k
ZXIoJ2NvbnRlbnRCbG9ja1Zpc2liaWxpdHknLCB7dmlzaWJsZTogdG9kb3MudG90YWwgPiAwfSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlLWZpbHRlcnMgdGhlIHRv
ZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuCisgICAgICogQHBhcmFtIHtib29s
ZWFufHVuZGVmaW5lZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9mIHRvZG8gaXRlbXMu
CisgICAgICovCisgICAgX2ZpbHRlcihmb3JjZSl7CisgICAgICAgIGxldCBhY3RpdmUgPSB0aGlz
Ll9hY3RpdmVSb3V0ZTsKKyAgICAgICAgY29uc3QgYWN0aXZlUm91dGUgPSBhY3RpdmUuY2hhckF0
KDApLnRvVXBwZXJDYXNlKCkgKyBhY3RpdmUuc3Vic3RyKDEpOworCisgICAgICAgIC8vIFVwZGF0
ZSB0aGUgZWxlbWVudHMgb24gdGhlIHBhZ2UsIHdoaWNoIGNoYW5nZSB3aXRoIGVhY2ggY29tcGxl
dGVkIHRvZG8KKyAgICAgICAgdGhpcy5fdXBkYXRlQ291bnQoKTsKKworICAgICAgICAvLyBJZiB0
aGUgbGFzdCBhY3RpdmUgcm91dGUgaXNuJ3QgIkFsbCIsIG9yIHdlJ3JlIHN3aXRjaGluZyByb3V0
ZXMsIHdlCisgICAgICAgIC8vIHJlLWNyZWF0ZSB0aGUgdG9kbyBpdGVtIGVsZW1lbnRzLCBjYWxs
aW5nOgorICAgICAgICAvLyAgIHRoaXMuc2hvd1tBbGx8QWN0aXZlfENvbXBsZXRlZF0oKQorICAg
ICAgICBpZiAoZm9yY2UgfHwgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlICE9PSAnQWxsJyB8fCB0aGlz
Ll9sYXN0QWN0aXZlUm91dGUgIT09IGFjdGl2ZVJvdXRlKSB7CisgICAgICAgICAgICB0aGlzWydz
aG93JyArIGFjdGl2ZVJvdXRlXSgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fbGFzdEFj
dGl2ZVJvdXRlID0gYWN0aXZlUm91dGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2ltcGx5
IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0ZXMKKyAgICAgKi8KKyAgICBf
dXBkYXRlRmlsdGVyKGN1cnJlbnRQYWdlKXsKKyAgICAgICAgLy8gU3RvcmUgYSByZWZlcmVuY2Ug
dG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxsb3dpbmcgdXMgdG8gcmUtZmlsdGVyIHRvZG8KKyAgICAg
ICAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2VkIGNvbXBsZXRlIG9yIGluY29tcGxldGUuCisg
ICAgICAgIHRoaXMuX2FjdGl2ZVJvdXRlID0gY3VycmVudFBhZ2U7CisKKyAgICAgICAgaWYgKGN1
cnJlbnRQYWdlID09PSAnJykgeworICAgICAgICAgICAgdGhpcy5fYWN0aXZlUm91dGUgPSAnQWxs
JzsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2ZpbHRlcigpOworCisgICAgICAgIHRoaXMu
dmlldy5yZW5kZXIoJ3NldEZpbHRlcicsIGN1cnJlbnRQYWdlKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9oZWxwZXJzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvaGVs
cGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNTRmYzQ4MzUxNWY4MTljNTQ0MzM5OGI0MjlmZTRjMjVkYjU3
ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvaGVscGVycy5qcwpAQCAt
MCwwICsxLDUzIEBACisndXNlIHN0cmljdCc7CisKKworLy8gQWxsb3cgZm9yIGxvb3Bpbmcgb24g
bm9kZXMgYnkgY2hhaW5pbmc6CisvLyBxc2EoJy5mb28nKS5mb3JFYWNoKGZ1bmN0aW9uICgpIHt9
KQorTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDsK
KworLy8gR2V0IGVsZW1lbnQocykgYnkgQ1NTIHNlbGVjdG9yOgorZnVuY3Rpb24gcXMoc2VsZWN0
b3IsIHNjb3BlKSB7CisgICAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3Rv
cihzZWxlY3Rvcik7Cit9CisKK2Z1bmN0aW9uIHFzYShzZWxlY3Rvciwgc2NvcGUpIHsKKyAgICBy
ZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKK30K
KworLy8gYWRkRXZlbnRMaXN0ZW5lciB3cmFwcGVyOgorZnVuY3Rpb24gJG9uKHRhcmdldCwgdHlw
ZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHsKKyAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0
eXBlLCBjYWxsYmFjaywgISF1c2VDYXB0dXJlKTsKK30KKworLy8gQXR0YWNoIGEgaGFuZGxlciB0
byBldmVudCBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLAorLy8gbm93
IG9yIGluIHRoZSBmdXR1cmUsIGJhc2VkIG9uIGEgcm9vdCBlbGVtZW50CitmdW5jdGlvbiAkZGVs
ZWdhdGUodGFyZ2V0LCBzZWxlY3RvciwgdHlwZSwgaGFuZGxlcikgeworICAgIGxldCBkaXNwYXRj
aEV2ZW50ID0gZXZlbnQgPT4geworICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQu
dGFyZ2V0OworICAgICAgICBjb25zdCBwb3RlbnRpYWxFbGVtZW50cyA9IHFzYShzZWxlY3Rvciwg
dGFyZ2V0KTsKKyAgICAgICAgY29uc3QgaGFzTWF0Y2ggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhP
Zi5jYWxsKHBvdGVudGlhbEVsZW1lbnRzLCB0YXJnZXRFbGVtZW50KSA+PSAwOworCisgICAgICAg
IGlmIChoYXNNYXRjaCkgeworICAgICAgICAgICAgaGFuZGxlci5jYWxsKHRhcmdldEVsZW1lbnQs
IGV2ZW50KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvYmx1cgorICAgIGNvbnN0IHVzZUNhcHR1
cmUgPSB0eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0gJ2ZvY3VzJzsKKworICAgICRvbih0YXJn
ZXQsIHR5cGUsIGRpc3BhdGNoRXZlbnQsIHVzZUNhcHR1cmUpOworfQorCisvLyBGaW5kIHRoZSBl
bGVtZW50J3MgcGFyZW50IHdpdGggdGhlIGdpdmVuIHRhZyBuYW1lOgorLy8gJHBhcmVudChxcygn
YScpLCAnZGl2JykKK2Z1bmN0aW9uICRwYXJlbnQoZWxlbWVudCwgdGFnTmFtZSkgeworICAgIGlm
ICghZWxlbWVudC5wYXJlbnROb2RlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZS50
b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGU7CisgICAg
fQorCisgICAgcmV0dXJuICRwYXJlbnQoZWxlbWVudC5wYXJlbnROb2RlLCB0YWdOYW1lKTsKK30K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL21vZGVsLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9z
cmMvbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y4ZDU4MTgxYmI1MjEzM2YwY2Y2N2NkYmU2Mzc2Y2Y2
YTdlYTc4NwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL21vZGVsLmpzCkBA
IC0wLDAgKzEsMTE3IEBACisndXNlIHN0cmljdCc7CisKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3
IE1vZGVsIGluc3RhbmNlIGFuZCBob29rcyB1cCB0aGUgc3RvcmFnZS4KKyAqIEBjb25zdHJ1Y3Rv
cgorICogQHBhcmFtIHtvYmplY3R9IHN0b3JhZ2UgQSByZWZlcmVuY2UgdG8gdGhlIGNsaWVudCBz
aWRlIHN0b3JhZ2UgY2xhc3MKKyAqLworY2xhc3MgTW9kZWwgeworICAgIGNvbnN0cnVjdG9yKHN0
b3JhZ2UpIHsKKyAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHRvZG8gbW9kZWwKKyAgICAgKgorICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBbdGl0bGVdIFRoZSB0aXRsZSBvZiB0aGUgdGFzaworICAgICAqIEBwYXJhbSB7
ZnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdGhlIG1vZGVs
IGlzIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBjcmVhdGUodGl0bGUsIGNhbGxiYWNrKXsKKyAgICAg
ICAgdGl0bGUgPSB0aXRsZSB8fCAnJzsKKworICAgICAgICBsZXQgbmV3SXRlbSA9IHsKKyAgICAg
ICAgICAgIHRpdGxlOiB0aXRsZS50cmltKCksCisgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNl
CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5zdG9yYWdlLnNhdmUobmV3SXRlbSwgY2FsbGJh
Y2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGFuZCByZXR1cm5zIGEgbW9kZWwg
aW4gc3RvcmFnZS4gSWYgbm8gcXVlcnkgaXMgZ2l2ZW4gaXQnbGwgc2ltcGx5CisgICAgICogcmV0
dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNzIGluIGEgc3RyaW5nIG9yIG51bWJlciBpdCdsbCBs
b29rIHRoYXQgdXAgYXMKKyAgICAgKiB0aGUgSUQgb2YgdGhlIG1vZGVsIHRvIGZpbmQuIExhc3Rs
eSwgeW91IGNhbiBwYXNzIGl0IGFuIG9iamVjdCB0byBtYXRjaAorICAgICAqIGFnYWluc3QuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8b2JqZWN0fSBbcXVlcnldIEEgcXVl
cnkgdG8gbWF0Y2ggbW9kZWxzIGFnYWluc3QKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2Fs
bGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBmb3VuZAorICAg
ICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiBtb2RlbC5yZWFkKDEsIGZ1bmMpIC8vIFdpbGwg
ZmluZCB0aGUgbW9kZWwgd2l0aCBhbiBJRCBvZiAxCisgICAgICogbW9kZWwucmVhZCgnMScpIC8v
IFNhbWUgYXMgYWJvdmUKKyAgICAgKiAvL0JlbG93IHdpbGwgZmluZCBhIG1vZGVsIHdpdGggZm9v
IGVxdWFsbGluZyBiYXIgYW5kIGhlbGxvIGVxdWFsbGluZyB3b3JsZC4KKyAgICAgKiBtb2RlbC5y
ZWFkKHsgZm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCcgfSkKKyAgICAgKi8KKyAgICByZWFkKHF1
ZXJ5LCBjYWxsYmFjayl7CisgICAgICAgIGNvbnN0IHF1ZXJ5VHlwZSA9IHR5cGVvZiBxdWVyeTsK
KworICAgICAgICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBj
YWxsYmFjayA9IHF1ZXJ5OworICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmZpbmRBbGwoY2FsbGJh
Y2spOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0gJ3N0cmluZycgfHwgcXVlcnlU
eXBlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgcXVlcnkgPSBwYXJzZUludChxdWVyeSwg
MTApOworICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmZpbmQoe2lkOiBxdWVyeX0sIGNhbGxiYWNr
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kKHF1ZXJ5
LCBjYWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVz
IGEgbW9kZWwgYnkgZ2l2aW5nIGl0IGFuIElELCBkYXRhIHRvIHVwZGF0ZSwgYW5kIGEgY2FsbGJh
Y2sgdG8gZmlyZSB3aGVuCisgICAgICogdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgaWQgb2YgdGhlIG1vZGVsIHRvIHVwZGF0ZQor
ICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZSBhbmQg
dGhlaXIgbmV3IHZhbHVlCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorICAgICAqLworICAg
IHVwZGF0ZShpZCwgZGF0YSwgY2FsbGJhY2speworICAgICAgICB0aGlzLnN0b3JhZ2Uuc2F2ZShk
YXRhLCBjYWxsYmFjaywgaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZXMgYSBt
b2RlbCBmcm9tIHN0b3JhZ2UKKyAgICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUg
SUQgb2YgdGhlIG1vZGVsIHRvIHJlbW92ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxi
YWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHJlbW92YWwgaXMgY29tcGxldGUuCisg
ICAgICovCisgICAgcmVtb3ZlKGlkLCBjYWxsYmFjayl7CisgICAgICAgIHRoaXMuc3RvcmFnZS5y
ZW1vdmUoaWQsIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXQVJOSU5HOiBX
aWxsIHJlbW92ZSBBTEwgZGF0YSBmcm9tIHN0b3JhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBzdG9yYWdl
IGlzIHdpcGVkLgorICAgICAqLworICAgIHJlbW92ZUFsbChjYWxsYmFjayl7CisgICAgICAgIHRo
aXMuc3RvcmFnZS5kcm9wKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1
cm5zIGEgY291bnQgb2YgYWxsIHRvZG9zCisgICAgICovCisgICAgZ2V0Q291bnQoY2FsbGJhY2sp
eworICAgICAgICBsZXQgdG9kb3MgPSB7CisgICAgICAgICAgICBhY3RpdmU6IDAsCisgICAgICAg
ICAgICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAgICB0b3RhbDogMAorICAgICAgICB9OworCisg
ICAgICAgIHRoaXMuc3RvcmFnZS5maW5kQWxsKGRhdGEgPT4geworICAgICAgICAgICAgZm9yIChs
ZXQgdG9kbyBvZiBkYXRhKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvZG8uY29tcGxldGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHRvZG9zLmNvbXBsZXRlZCsrOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRvZG9zLmFjdGl2ZSsrOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRvZG9zLnRvdGFsKys7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHRvZG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS9zcmMvc3RvcmUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9zdG9yZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YmE5N2JkZGIzZmVhOGIxNmNjNTg5NTliNWJkNzAyNDA2YjkxYmY3Ci0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvc3RvcmUuanMKQEAgLTAsMCArMSwx
NTAgQEAKKy8qanNoaW50IGVxZXFlcTpmYWxzZSAqLworJ3VzZSBzdHJpY3QnOworCisvKioKKyAq
IENyZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmplY3QgYW5kIHdpbGwgY3JlYXRl
IGFuIGVtcHR5CisgKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rpb24gYWxyZWFkeSBleGlzdHMu
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3VyIERCIHdlIHdhbnQg
dG8gdXNlCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPdXIgZmFrZSBEQiB1c2VzIGNh
bGxiYWNrcyBiZWNhdXNlIGluCisgKiByZWFsIGxpZmUgeW91IHByb2JhYmx5IHdvdWxkIGJlIG1h
a2luZyBBSkFYIGNhbGxzCisgKi8KK2NsYXNzIFN0b3JlIHsKKyAgICBjb25zdHJ1Y3RvcihuYW1l
LCBjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9kYk5hbWUgPSBuYW1lOworICAgICAgICB0aGlz
Lm1lbW9yeVN0b3JhZ2UgPSB0aGlzLm1lbW9yeVN0b3JhZ2UgfHwge307CisKKyAgICAgICAgaWYg
KCF0aGlzLm1lbW9yeVN0b3JhZ2VbbmFtZV0pIHsKKyAgICAgICAgICAgIGxldCBkYXRhID0gewor
ICAgICAgICAgICAgICAgIHRvZG9zOiBbXQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
dGhpcy5tZW1vcnlTdG9yYWdlW25hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwo
dGhpcywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbbmFtZV0pKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGl0ZW1zIGJhc2VkIG9uIGEgcXVlcnkgZ2l2
ZW4gYXMgYSBKUyBvYmplY3QKKyAgICAgKgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBxdWVyeSBU
aGUgcXVlcnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAnYmFyJ30pCisgICAgICogQHBh
cmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBx
dWVyeSBoYXMKKyAgICAgKiBjb21wbGV0ZWQgcnVubmluZworICAgICAqCisgICAgICogQGV4YW1w
bGUKKyAgICAgKiBkYi5maW5kKHtmb286ICdiYXInLCBoZWxsbzogJ3dvcmxkJ30sIGZ1bmN0aW9u
IChkYXRhKSB7CisgICAgICAgICAqICAgLy8gZGF0YSB3aWxsIHJldHVybiBhbnkgaXRlbXMgdGhh
dCBoYXZlIGZvbzogYmFyIGFuZAorICAgICAgICAgKiAgIC8vIGhlbGxvOiB3b3JsZCBpbiB0aGVp
ciBwcm9wZXJ0aWVzCisgICAgICAgICAqIH0pCisgICAgICovCisgICAgZmluZChxdWVyeSwgY2Fs
bGJhY2speworICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBsZXQgdG9kb3MgPSBKU09OLnBhcnNlKHRoaXMubWVtb3J5U3Rv
cmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvczsKKworICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMs
IHRvZG9zLmZpbHRlcih0b2RvID0+IHsKKyAgICAgICAgICAgIGZvciAobGV0IHEgaW4gcXVlcnkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocXVlcnlbcV0gIT09IHRvZG9bcV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9tIHRoZSBjb2xsZWN0aW9uCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8g
ZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YQorICAgICAqLworICAgIGZpbmRBbGwoY2FsbGJhY2sp
eworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhp
cywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCBzYXZlIHRoZSBnaXZlbiBk
YXRhIHRvIHRoZSBEQi4gSWYgbm8gaXRlbSBleGlzdHMgaXQgd2lsbCBjcmVhdGUgYSBuZXcKKyAg
ICAgKiBpdGVtLCBvdGhlcndpc2UgaXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBpdGVt
J3MgcHJvcGVydGllcworICAgICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZURhdGEg
VGhlIGRhdGEgdG8gc2F2ZSBiYWNrIGludG8gdGhlIERCCisgICAgICogQHBhcmFtIHtmdW5jdGlv
bn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IGlkIEFuIG9wdGlvbmFsIHBhcmFtIHRvIGVudGVyIGFuIElEIG9mIGFuIGl0
ZW0gdG8gdXBkYXRlCisgICAgICovCisgICAgc2F2ZSh1cGRhdGVEYXRhLCBjYWxsYmFjaywgaWQp
eworICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbdGhp
cy5fZGJOYW1lXSk7CisgICAgICAgIGxldCB0b2RvcyA9IGRhdGEudG9kb3M7CisgICAgICAgIGNv
bnN0IGxlbiA9IHRvZG9zLmxlbmd0aDsKKworICAgICAgICAvLyBJZiBhbiBJRCB3YXMgYWN0dWFs
bHkgZ2l2ZW4sIGZpbmQgdGhlIGl0ZW0gYW5kIHVwZGF0ZSBlYWNoIHByb3BlcnR5CisgICAgICAg
IGlmIChpZCkgeworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChsZXQga2V5IGluIHVwZGF0ZURhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRvZG9zW2ldW2tleV0gPSB1cGRhdGVEYXRhW2tleV07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9
IEpTT04uc3RyaW5naWZ5KGRhdGEpOworCisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlT
dG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIGFuIElECisgICAgICAgICAgICB1cGRhdGVE
YXRhLmlkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisKKyAgICAgICAgICAgIHRvZG9zLnB1c2go
dXBkYXRlRGF0YSk7CisgICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2VbdGhpcy5fZGJOYW1l
XSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworCisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIFt1cGRhdGVEYXRhXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaWxsIHJlbW92
ZSBhbiBpdGVtIGZyb20gdGhlIFN0b3JlIGJhc2VkIG9uIGl0cyBJRAorICAgICAqCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRlbSB5b3Ugd2FudCB0byByZW1vdmUK
KyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSBh
ZnRlciBzYXZpbmcKKyAgICAgKi8KKyAgICByZW1vdmUoaWQsIGNhbGxiYWNrKXsKKyAgICAgICAg
Y29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0p
OworICAgICAgICBsZXQgdG9kb3MgPSBkYXRhLnRvZG9zOworICAgICAgICBjb25zdCBsZW4gPSB0
b2Rvcy5sZW5ndGg7CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2Rvcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgaWYgKHRvZG9zW2ldLmlkID09IGlkKSB7CisgICAgICAgICAg
ICAgICAgdG9kb3Muc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2Ri
TmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgICAgICBpZiAoY2FsbGJhY2spIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoq
CisgICAgICogV2lsbCBkcm9wIGFsbCBzdG9yYWdlIGFuZCBzdGFydCBmcmVzaAorICAgICAqCisg
ICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0
ZXIgZHJvcHBpbmcgdGhlIGRhdGEKKyAgICAgKi8KKyAgICBkcm9wKGNhbGxiYWNrKXsKKyAgICAg
ICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeSh7dG9k
b3M6IFtdfSk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxsYmFj
ay5jYWxsKHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0p
LnRvZG9zKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUv
c3JjL3RlbXBsYXRlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvdGVtcGxhdGUuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzdkNGRkNGM2MGJlMjY1Mzg4MWEyODBlOGRhN2RmOGQzZDYzMTMwNgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzCkBAIC0wLDAgKzEsOTUgQEAKKyd1
c2Ugc3RyaWN0JzsKKworCitjb25zdCBodG1sRXNjYXBlcyA9IHsKKyAgICAnJic6ICcmYW1wJywK
KyAgICAnPCc6ICcmbHQnLAorICAgICc+JzogJyZndCcsCisgICAgJyInOiAnJnF1b3QnLAorICAg
ICdcJyc6ICcmI3gyNycsCisgICAgJ2AnOiAnJiN4NjAnCit9OworCitjb25zdCByZVVuZXNjYXBl
ZEh0bWwgPSAvWyY8PiInYF0vZzsKK2NvbnN0IHJlSGFzVW5lc2NhcGVkSHRtbCA9IG5ldyBSZWdF
eHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7CisKK2xldCBlc2NhcGUgPSBzdHIgPT4gKHN0ciAm
JiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHIpKSA/IHN0ci5yZXBsYWNlKHJlVW5lc2NhcGVk
SHRtbCwgZXNjYXBlSHRtbENoYXIpIDogc3RyOworbGV0IGVzY2FwZUh0bWxDaGFyID0gY2hyID0+
IGh0bWxFc2NhcGVzW2Nocl07CisKK2NsYXNzIFRlbXBsYXRlIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGUgPSBgCisgICAgICAgICAgICA8bGkgZGF0
YS1pZD0ie3tpZH19IiBjbGFzcz0ie3tjb21wbGV0ZWR9fSI+CisgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idmlldyI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xl
IiB0eXBlPSJjaGVja2JveCIge3tjaGVja2VkfX0+CisgICAgICAgICAgICAgICAgICAgIDxsYWJl
bD57e3RpdGxlfX08L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJk
ZXN0cm95Ij48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwv
bGk+CisgICAgICAgIGA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiA8bGk+
IEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGZvciBwbGFjZW1lbnQgaW4geW91ciBhcHAuCisg
ICAgICoKKyAgICAgKiBOT1RFOiBJbiByZWFsIGxpZmUgeW91IHNob3VsZCBiZSB1c2luZyBhIHRl
bXBsYXRpbmcgZW5naW5lIHN1Y2ggYXMgTXVzdGFjaGUKKyAgICAgKiBvciBIYW5kbGViYXJzLCBo
b3dldmVyLCB0aGlzIGlzIGEgdmFuaWxsYSBKUyBleGFtcGxlLgorICAgICAqCisgICAgICogQHBh
cmFtIHtvYmplY3R9IGRhdGEgVGhlIG9iamVjdCBjb250YWluaW5nIGtleXMgeW91IHdhbnQgdG8g
ZmluZCBpbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSB0byByZXBs
YWNlLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgU3RyaW5nIG9mIGFuIDxsaT4gZWxl
bWVudAorICAgICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiB2aWV3LnNob3coeworICAgICAg
ICAgKiAgaWQ6IDEsCisgICAgICAgICAqICB0aXRsZTogIkhlbGxvIFdvcmxkIiwKKyAgICAgICAg
ICogIGNvbXBsZXRlZDogMCwKKyAgICAgICAgICogfSkKKyAgICAgKi8KKyAgICBzaG93KGRhdGEp
eworICAgICAgICBsZXQgaSA9IDA7CisgICAgICAgIGxldCB2aWV3ID0gJyc7CisgICAgICAgIGNv
bnN0IGxlbiA9IGRhdGEubGVuZ3RoOworCisgICAgICAgIGZvciAoaTsgaSA8IGxlbjsgaSsrKSB7
CisgICAgICAgICAgICBsZXQgY29tcGxldGVkID0gJyc7CisgICAgICAgICAgICBsZXQgY2hlY2tl
ZCA9ICcnOworICAgICAgICAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5kZWZhdWx0VGVtcGxhdGU7
CisKKyAgICAgICAgICAgIGlmIChkYXRhW2ldLmNvbXBsZXRlZCkgeworICAgICAgICAgICAgICAg
IGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnOworICAgICAgICAgICAgICAgIGNoZWNrZWQgPSAnY2hl
Y2tlZCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUu
cmVwbGFjZSgne3tpZH19JywgZGF0YVtpXS5pZCk7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRl
bXBsYXRlLnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVzY2FwZShkYXRhW2ldLnRpdGxlKSk7CisgICAg
ICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7Y29tcGxldGVkfX0nLCBjb21w
bGV0ZWQpOworICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NoZWNr
ZWR9fScsIGNoZWNrZWQpOworCisgICAgICAgICAgICB2aWV3ICs9IHRlbXBsYXRlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlz
cGxheXMgYSBjb3VudGVyIG9mIGhvdyBtYW55IHRvIGRvcyBhcmUgbGVmdCB0byBjb21wbGV0ZQor
ICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGFjdGl2ZVRvZG9zIFRoZSBudW1iZXIgb2Yg
YWN0aXZlIHRvZG9zLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5n
IHRoZSBjb3VudAorICAgICAqLworICAgIGl0ZW1Db3VudGVyKGFjdGl2ZVRvZG9zKXsKKyAgICAg
ICAgbGV0IHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8gJycgOiAncyc7CisgICAgICAgIHJl
dHVybiBgPHN0cm9uZz4ke2FjdGl2ZVRvZG9zfTwvc3Ryb25nPiBpdGVtJHtwbHVyYWx9IGxlZnRg
OworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHRleHQgd2l0aGluIHRoZSAi
Q2xlYXIgY29tcGxldGVkIiBidXR0b24KKyAgICAgKgorICAgICAqIEBwYXJhbSAge1t0eXBlXX0g
Y29tcGxldGVkVG9kb3MgVGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdG9kb3MuCisgICAgICogQHJl
dHVybnMge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50CisgICAgICovCisgICAg
Y2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVkVG9kb3MpeworICAgICAgICByZXR1cm4gKGNv
bXBsZXRlZFRvZG9zID4gMCkgPyAnQ2xlYXIgY29tcGxldGVkJyA6ICcnOworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3ZpZXcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy92
aWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVjZWRmZDVlMzMwM2MyOTgwM2RkZmY5NjNmYzMwMDBjNWYzMDNi
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy92aWV3LmpzCkBAIC0wLDAg
KzEsMTc2IEBACisndXNlIHN0cmljdCc7CisKKworbGV0IF9pdGVtSWQgPSBlbGVtZW50ID0+IHBh
cnNlSW50KCRwYXJlbnQoZWxlbWVudCwgJ2xpJykuZGF0YXNldC5pZCwgMTApOworCitsZXQgX3Nl
dEZpbHRlciA9IGN1cnJlbnRQYWdlID0+IHsKKyAgICBxcygnLmZpbHRlcnMgLnNlbGVjdGVkJyku
Y2xhc3NOYW1lID0gJyc7CisgICAgcXMoYC5maWx0ZXJzIFtocmVmPSIjLyR7Y3VycmVudFBhZ2V9
Il1gKS5jbGFzc05hbWUgPSAnc2VsZWN0ZWQnOworfTsKKworbGV0IF9lbGVtZW50Q29tcGxldGUg
PSAoaWQsIGNvbXBsZXRlZCkgPT4geworICAgIGxldCBsaXN0SXRlbSA9IHFzKGBbZGF0YS1pZD0i
JHtpZH0iXWApOworCisgICAgaWYgKCFsaXN0SXRlbSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gY29tcGxldGVkID8gJ2NvbXBsZXRlZCcgOiAn
JzsKKworICAgIC8vIEluIGNhc2UgaXQgd2FzIHRvZ2dsZWQgZnJvbSBhbiBldmVudCBhbmQgbm90
IGJ5IGNsaWNraW5nIHRoZSBjaGVja2JveAorICAgIHFzKCdpbnB1dCcsIGxpc3RJdGVtKS5jaGVj
a2VkID0gY29tcGxldGVkOworfTsKKworbGV0IF9lZGl0SXRlbSA9IChpZCwgdGl0bGUpID0+IHsK
KyAgICBsZXQgbGlzdEl0ZW0gPSBxcyhgW2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgIGlmICgh
bGlzdEl0ZW0pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpc3RJdGVtLmNsYXNz
TmFtZSArPSAnIGVkaXRpbmcnOworCisgICAgbGV0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaW5wdXQnKTsKKyAgICBpbnB1dC5jbGFzc05hbWUgPSAnZWRpdCc7CisKKyAgICBsaXN0
SXRlbS5hcHBlbmRDaGlsZChpbnB1dCk7CisgICAgaW5wdXQuZm9jdXMoKTsKKyAgICBpbnB1dC52
YWx1ZSA9IHRpdGxlOworfTsKKworLyoqCisgKiBWaWV3IHRoYXQgYWJzdHJhY3RzIGF3YXkgdGhl
IGJyb3dzZXIncyBET00gY29tcGxldGVseS4KKyAqIEl0IGhhcyB0d28gc2ltcGxlIGVudHJ5IHBv
aW50czoKKyAqCisgKiAgIC0gYmluZChldmVudE5hbWUsIGhhbmRsZXIpCisgKiAgICAgVGFrZXMg
YSB0b2RvIGFwcGxpY2F0aW9uIGV2ZW50IGFuZCByZWdpc3RlcnMgdGhlIGhhbmRsZXIKKyAqICAg
LSByZW5kZXIoY29tbWFuZCwgcGFyYW1ldGVyT2JqZWN0KQorICogICAgIFJlbmRlcnMgdGhlIGdp
dmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9ucworICovCitjbGFzcyBWaWV3IHsKKyAgICBjb25z
dHJ1Y3Rvcih0ZW1wbGF0ZSkgeworICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisK
KyAgICAgICAgdGhpcy5FTlRFUl9LRVkgPSAxMzsKKyAgICAgICAgdGhpcy5FU0NBUEVfS0VZID0g
Mjc7CisKKyAgICAgICAgdGhpcy4kdG9kb0xpc3QgPSBxcygnLnRvZG8tbGlzdCcpOworICAgICAg
ICB0aGlzLiR0b2RvSXRlbUNvdW50ZXIgPSBxcygnLnRvZG8tY291bnQnKTsKKyAgICAgICAgdGhp
cy4kY2xlYXJDb21wbGV0ZWQgPSBxcygnLmNsZWFyLWNvbXBsZXRlZCcpOworICAgICAgICB0aGlz
LiRtYWluID0gcXMoJy5tYWluJyk7CisgICAgICAgIHRoaXMuJGZvb3RlciA9IHFzKCcuZm9vdGVy
Jyk7CisgICAgICAgIHRoaXMuJHRvZ2dsZUFsbCA9IHFzKCcudG9nZ2xlLWFsbCcpOworICAgICAg
ICB0aGlzLiRuZXdUb2RvID0gcXMoJy5uZXctdG9kbycpOworCisgICAgICAgIHRoaXMudmlld0Nv
bW1hbmRzID0geworICAgICAgICAgICAgc2hvd0VudHJpZXM6IHBhcmFtZXRlciA9PiB0aGlzLiR0
b2RvTGlzdC5pbm5lckhUTUwgPSB0aGlzLnRlbXBsYXRlLnNob3cocGFyYW1ldGVyKSwKKyAgICAg
ICAgICAgIHJlbW92ZUl0ZW06IHBhcmFtZXRlciA9PiB0aGlzLl9yZW1vdmVJdGVtKHBhcmFtZXRl
ciksCisgICAgICAgICAgICB1cGRhdGVFbGVtZW50Q291bnQ6IHBhcmFtZXRlciA9PiB0aGlzLiR0
b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5pdGVtQ291bnRlcihwYXJh
bWV0ZXIpLAorICAgICAgICAgICAgY2xlYXJDb21wbGV0ZWRCdXR0b246IHBhcmFtZXRlciA9PiB0
aGlzLl9jbGVhckNvbXBsZXRlZEJ1dHRvbihwYXJhbWV0ZXIuY29tcGxldGVkLCBwYXJhbWV0ZXIu
dmlzaWJsZSksCisgICAgICAgICAgICBjb250ZW50QmxvY2tWaXNpYmlsaXR5OiBwYXJhbWV0ZXIg
PT4gdGhpcy4kbWFpbi5zdHlsZS5kaXNwbGF5ID0gdGhpcy4kZm9vdGVyLnN0eWxlLmRpc3BsYXkg
PSBwYXJhbWV0ZXIudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScsCisgICAgICAgICAgICB0b2dn
bGVBbGw6IHBhcmFtZXRlciA9PiB0aGlzLiR0b2dnbGVBbGwuY2hlY2tlZCA9IHBhcmFtZXRlci5j
aGVja2VkLAorICAgICAgICAgICAgc2V0RmlsdGVyOiBwYXJhbWV0ZXIgPT4gX3NldEZpbHRlcihw
YXJhbWV0ZXIpLAorICAgICAgICAgICAgY2xlYXJOZXdUb2RvOiBwYXJhbWV0ZXIgPT4gdGhpcy4k
bmV3VG9kby52YWx1ZSA9ICcnLAorICAgICAgICAgICAgZWxlbWVudENvbXBsZXRlOiBwYXJhbWV0
ZXIgPT4gX2VsZW1lbnRDb21wbGV0ZShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci5jb21wbGV0ZWQp
LAorICAgICAgICAgICAgZWRpdEl0ZW06IHBhcmFtZXRlciA9PiBfZWRpdEl0ZW0ocGFyYW1ldGVy
LmlkLCBwYXJhbWV0ZXIudGl0bGUpLAorICAgICAgICAgICAgZWRpdEl0ZW1Eb25lOiBwYXJhbWV0
ZXIgPT4gdGhpcy5fZWRpdEl0ZW1Eb25lKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKSwK
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBfcmVtb3ZlSXRlbShpZCkgeworICAgICAgICBsZXQg
ZWxlbSA9IHFzKGBbZGF0YS1pZD0iJHtpZH0iXWApOworCisgICAgICAgIGlmIChlbGVtKSB7Cisg
ICAgICAgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1vdmVDaGlsZChlbGVtKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIF9jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCwgdmlzaWJs
ZSkgeworICAgICAgICB0aGlzLiRjbGVhckNvbXBsZXRlZC5pbm5lckhUTUwgPSB0aGlzLnRlbXBs
YXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZENvdW50KTsKKyAgICAgICAgdGhpcy4k
Y2xlYXJDb21wbGV0ZWQuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUn
OworICAgIH0KKworICAgIF9lZGl0SXRlbURvbmUoaWQsIHRpdGxlKSB7CisgICAgICAgIGxldCBs
aXN0SXRlbSA9IHFzKGBbZGF0YS1pZD0iJHtpZH0iXWApOworCisgICAgICAgIGlmICghbGlzdEl0
ZW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBpbnB1
dCA9IHFzKCdpbnB1dC5lZGl0JywgbGlzdEl0ZW0pOworICAgICAgICBsaXN0SXRlbS5yZW1vdmVD
aGlsZChpbnB1dCk7CisKKyAgICAgICAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xh
c3NOYW1lLnJlcGxhY2UoJyBlZGl0aW5nJywgJycpOworCisgICAgICAgIHFzYSgnbGFiZWwnLCBs
aXN0SXRlbSkuZm9yRWFjaChsYWJlbCA9PiBsYWJlbC50ZXh0Q29udGVudCA9IHRpdGxlKTsKKyAg
ICB9CisKKyAgICByZW5kZXIodmlld0NtZCwgcGFyYW1ldGVyKSB7CisgICAgICAgIHRoaXMudmll
d0NvbW1hbmRzW3ZpZXdDbWRdKHBhcmFtZXRlcik7CisgICAgfQorCisgICAgX2JpbmRJdGVtRWRp
dERvbmUoaGFuZGxlcikgeworICAgICAgICBsZXQgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgJGRl
bGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAnYmx1cicsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGlmICghdGhpcy5kYXRhc2V0LmlzY2FuY2VsZWQpIHsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksCisg
ICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlCisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFJlbW92ZSB0aGUgY3Vy
c29yIGZyb20gdGhlIGlucHV0IHdoZW4geW91IGhpdCBlbnRlciBqdXN0IGxpa2UgaWYgaXQgd2Vy
ZSBhIHJlYWwgZm9ybQorICAgICAgICAkZGVsZWdhdGUoc2VsZi4kdG9kb0xpc3QsICdsaSAuZWRp
dCcsICdrZXlwcmVzcycsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50
LmtleUNvZGUgPT09IHNlbGYuRU5URVJfS0VZKSB7CisgICAgICAgICAgICAgICAgdGhpcy5ibHVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIF9iaW5kSXRlbUVk
aXRDYW5jZWwoaGFuZGxlcikgeworICAgICAgICBsZXQgc2VsZiA9IHRoaXM7CisKKyAgICAgICAg
JGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5dXAnLCBmdW5jdGlvbiAo
ZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBzZWxmLkVTQ0FQRV9L
RVkpIHsKKyAgICAgICAgICAgICAgICBsZXQgaWQgPSBfaXRlbUlkKHRoaXMpOworICAgICAgICAg
ICAgICAgIHRoaXMuZGF0YXNldC5pc2NhbmNlbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0
aGlzLmJsdXIoKTsKKworICAgICAgICAgICAgICAgIGhhbmRsZXIoeyBpZCB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgYmluZChldmVudCwgaGFuZGxlcikgewor
ICAgICAgICBpZiAoZXZlbnQgPT09ICduZXdUb2RvJykgeworICAgICAgICAgICAgJG9uKHRoaXMu
JG5ld1RvZG8sICdjaGFuZ2UnLCAoKSA9PiBoYW5kbGVyKHRoaXMuJG5ld1RvZG8udmFsdWUpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3JlbW92ZUNvbXBsZXRlZCcpIHsKKyAgICAg
ICAgICAgICRvbih0aGlzLiRjbGVhckNvbXBsZXRlZCwgJ2NsaWNrJywgaGFuZGxlcik7CisgICAg
ICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICd0b2dnbGVBbGwnKSB7CisgICAgICAgICAgICAkb24o
dGhpcy4kdG9nZ2xlQWxsLCAnY2xpY2snLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGhh
bmRsZXIoe2NvbXBsZXRlZDogdGhpcy5jaGVja2VkfSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0JykgeworICAgICAgICAgICAgJGRlbGVn
YXRlKHRoaXMuJHRvZG9MaXN0LCAnbGkgbGFiZWwnLCAnZGJsY2xpY2snLCBmdW5jdGlvbigpewor
ICAgICAgICAgICAgICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1SZW1vdmUnKSB7CisgICAg
ICAgICAgICAkZGVsZWdhdGUodGhpcy4kdG9kb0xpc3QsICcuZGVzdHJveScsICdjbGljaycsIGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgaGFuZGxlcih7aWQ6IF9pdGVtSWQodGhpcyl9KTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbVRvZ2ds
ZScpIHsKKyAgICAgICAgICAgICRkZWxlZ2F0ZSh0aGlzLiR0b2RvTGlzdCwgJy50b2dnbGUnLCAn
Y2xpY2snLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGhhbmRsZXIoeworICAgICAgICAg
ICAgICAgICAgICBpZDogX2l0ZW1JZCh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGVkOiB0aGlzLmNoZWNrZWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVkaXREb25lJykgeworICAgICAgICAg
ICAgdGhpcy5fYmluZEl0ZW1FZGl0RG9uZShoYW5kbGVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChl
dmVudCA9PT0gJ2l0ZW1FZGl0Q2FuY2VsJykgeworICAgICAgICAgICAgdGhpcy5fYmluZEl0ZW1F
ZGl0Q2FuY2VsKGhhbmRsZXIpOworICAgICAgICB9CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308634</attachid>
            <date>2017-04-28 17:43:19 -0700</date>
            <delta_ts>2017-05-11 19:15:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171448-20170428174319.patch</filename>
            <type>text/plain</type>
            <size>65162</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYxCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmI2ZjdlMTZmMGJjNDU4ZjI0NDAyZTE0ODY0
NWY1OThjODlmNWE5NDUgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRVMyMDE1IFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQ0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBBZGRzIEVTMjAxNSBUb2RvTVZDIGlt
cGxlbWVudGF0aW9uIGZvciBTcGVlZG9tZXRlcgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbDogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgor
ICAgICAgICAoaHRtbCwpOgorICAgICAgICAoYnV0dG9uKToKKyAgICAgICAgKGJvZHkpOgorICAg
ICAgICAoYnV0dG9uLCk6CisgICAgICAgICguaGlkZGVuKToKKyAgICAgICAgKC50b2RvYXBwKToK
KyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyKToKKyAg
ICAgICAgKC50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50b2Rv
YXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcik6CisgICAgICAgICgudG9kb2FwcCBoMSk6Cisg
ICAgICAgICgubmV3LXRvZG8sKToKKyAgICAgICAgKC5uZXctdG9kbyk6CisgICAgICAgICgubWFp
bik6CisgICAgICAgIChsYWJlbFtmb3I9J3RvZ2dsZS1hbGwnXSk6CisgICAgICAgICgudG9nZ2xl
LWFsbCk6CisgICAgICAgICgudG9nZ2xlLWFsbDpiZWZvcmUpOgorICAgICAgICAoLnRvZ2dsZS1h
bGw6Y2hlY2tlZDpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tbGlzdCk6CisgICAgICAgICgudG9k
by1saXN0IGxpKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCk6CisgICAgICAg
ICgudG9kby1saXN0IGxpLmVkaXRpbmcpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5n
IC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyk6CisgICAgICAg
ICgudG9kby1saXN0IGxpIC50b2dnbGUpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAudG9nZ2xl
OmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyKToK
KyAgICAgICAgKC50b2RvLWxpc3QgbGkgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5j
b21wbGV0ZWQgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveSk6CisgICAg
ICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyKToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6YWZ0ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJv
eSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGkuZWRpdGluZzpsYXN0LWNoaWxkKToKKyAgICAgICAgKC5mb290ZXIpOgorICAgICAgICAoLmZv
b3RlcjpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tY291bnQpOgorICAgICAgICAoLnRvZG8tY291
bnQgc3Ryb25nKToKKyAgICAgICAgKC5maWx0ZXJzKToKKyAgICAgICAgKC5maWx0ZXJzIGxpKToK
KyAgICAgICAgKC5maWx0ZXJzIGxpIGEpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYS5zZWxlY3Rl
ZCwpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCk6CisgICAgICAgICguY2xlYXIt
Y29tcGxldGVkLCk6CisgICAgICAgICguY2xlYXItY29tcGxldGVkOmhvdmVyKToKKyAgICAgICAg
KC5pbmZvKToKKyAgICAgICAgKC5pbmZvIHApOgorICAgICAgICAoLmluZm8gYSk6CisgICAgICAg
ICguaW5mbyBhOmhvdmVyKToKKyAgICAgICAgKEBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1p
bi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkpOgorICAgICAgICAoLnRvZ2dsZS1hbGwsKToKKyAgICAg
ICAgKEBtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWFwcC1jc3MvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL3JlYWRtZS5tZDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4KKyAgICAgICAgKGhyKToKKyAgICAgICAgKC5sZWFy
biBhKToKKyAgICAgICAgKC5sZWFybiBhOmhvdmVyKToKKyAgICAgICAgKC5sZWFybiBoMywpOgor
ICAgICAgICAoLmxlYXJuIGgzKToKKyAgICAgICAgKC5sZWFybiBoNCk6CisgICAgICAgICgubGVh
cm4gaDUpOgorICAgICAgICAoLmxlYXJuIHVsKToKKyAgICAgICAgKC5sZWFybiBsaSk6CisgICAg
ICAgICgubGVhcm4gcCk6CisgICAgICAgICgjaXNzdWUtY291bnQpOgorICAgICAgICAoLnF1b3Rl
KToKKyAgICAgICAgKC5xdW90ZSBwKToKKyAgICAgICAgKC5xdW90ZSBwOmJlZm9yZSk6CisgICAg
ICAgICgucXVvdGUgcDphZnRlcik6CisgICAgICAgICgucXVvdGUgZm9vdGVyKToKKyAgICAgICAg
KC5xdW90ZSBmb290ZXIgaW1nKToKKyAgICAgICAgKC5xdW90ZSBmb290ZXIgYSk6CisgICAgICAg
ICguc3BlZWNoLWJ1YmJsZSk6CisgICAgICAgICguc3BlZWNoLWJ1YmJsZTphZnRlcik6CisgICAg
ICAgICgubGVhcm4tYmFyID4gLmxlYXJuKToKKyAgICAgICAgKEBtZWRpYSAobWluLXdpZHRoOiA4
OTlweCkpOgorICAgICAgICAoLmxlYXJuLWJhcik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAoXy5kZWZhdWx0cyk6CisgICAgICAg
ICh0ZW1wbGF0ZSk6CisgICAgICAgIChlc2NhcGVyLl8udGVtcGxhdGUpOgorICAgICAgICAoXyk6
CisgICAgICAgIChsb2NhdGlvbi5ob3N0bmFtZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pLnIuaS5y
KToKKyAgICAgICAgKHJlZGlyZWN0KToKKyAgICAgICAgKGZpbmRSb290KToKKyAgICAgICAgKHho
ci5vbmxvYWQpOgorICAgICAgICAoZ2V0RmlsZSk6CisgICAgICAgIChMZWFybik6CisgICAgICAg
IChMZWFybi5wcm90b3R5cGUuYXBwZW5kKToKKyAgICAgICAgKExlYXJuLnByb3RvdHlwZS5mZXRj
aElzc3VlQ291bnQpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdl
Lmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUu
bWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1L3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5qc2hp
bnRyYzogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2FwcC5qczogQWRkZWQuCisgICAgICAgIChUb2RvKToK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9zcmMvY29udHJvbGxlci5qczogQWRkZWQuCisgICAgICAgIChDb250cm9sbGVyKToK
KyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLnNldFZpZXcpOgorICAgICAgICAoQ29udHJv
bGxlci5wcm90b3R5cGUuc2hvd0FsbCk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5z
aG93QWN0aXZlKToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLnNob3dDb21wbGV0ZWQp
OgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuYWRkSXRlbSk6CisgICAgICAgIChDb250
cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlw
ZS5lZGl0SXRlbVNhdmUpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW1D
YW5jZWwpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSk6CisgICAg
ICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVDb21wbGV0ZWRJdGVtcyk6CisgICAgICAg
IChDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVDb21wbGV0ZSk6CisgICAgICAgIChDb250cm9s
bGVyLnByb3RvdHlwZS50b2dnbGVBbGwpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUu
X3VwZGF0ZUNvdW50KToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIpOgor
ICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlcik6CisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3Jj
L2hlbHBlcnMuanM6IEFkZGVkLgorICAgICAgICAocXMpOgorICAgICAgICAocXNhKToKKyAgICAg
ICAgKG9uKToKKyAgICAgICAgKGRlbGVnYXRlKToKKyAgICAgICAgKHBhcmVudCk6CisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUv
c3JjL21vZGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vZGVsKToKKyAgICAgICAgKE1vZGVsLnBy
b3RvdHlwZS5jcmVhdGUpOgorICAgICAgICAoTW9kZWwucHJvdG90eXBlLnJlYWQpOgorICAgICAg
ICAoTW9kZWwucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChNb2RlbC5wcm90b3R5cGUucmVt
b3ZlKToKKyAgICAgICAgKE1vZGVsLnByb3RvdHlwZS5yZW1vdmVBbGwpOgorICAgICAgICAoTW9k
ZWwucHJvdG90eXBlLmdldENvdW50KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvc3RvcmUuanM6IEFkZGVkLgorICAg
ICAgICAoU3RvcmUpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLmZpbmQpOgorICAgICAgICAo
U3RvcmUucHJvdG90eXBlLmZpbmRBbGwpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLnNhdmUp
OgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLnJlbW92ZSk6CisgICAgICAgIChTdG9yZS5wcm90
b3R5cGUuZHJvcCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKFRl
bXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBsYXRlLmxpLmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVkX2hl
cmUuZGl2LmlucHV0KToKKyAgICAgICAgKFRlbXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBsYXRlLmxp
LmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVkX2hlcmUuZGl2KToKKyAgICAgICAgKFRlbXBsYXRlLnBy
b3RvdHlwZS5zaG93KToKKyAgICAgICAgKFRlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291bnRlcik6
CisgICAgICAgIChUZW1wbGF0ZS5wcm90b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3NyYy92aWV3LmpzOiBBZGRlZC4KKyAgICAgICAgKGxldC5fZWxlbWVudENvbXBsZXRlKToK
KyAgICAgICAgKGxldC5fZWRpdEl0ZW0pOgorICAgICAgICAoVmlldyk6CisgICAgICAgIChWaWV3
LnByb3RvdHlwZS5fcmVtb3ZlSXRlbSk6CisgICAgICAgIChWaWV3LnByb3RvdHlwZS5fY2xlYXJD
b21wbGV0ZWRCdXR0b24pOgorICAgICAgICAoVmlldy5wcm90b3R5cGUuX2VkaXRJdGVtRG9uZSk6
CisgICAgICAgIChWaWV3LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoVmlldy5wcm90b3R5
cGUuX2JpbmRJdGVtRWRpdERvbmUpOgorICAgICAgICAoVmlldy5wcm90b3R5cGUuX2JpbmRJdGVt
RWRpdENhbmNlbCk6CisgICAgICAgIChWaWV3LnByb3RvdHlwZS5iaW5kKToKKwogMjAxNy0wNC0y
NyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYmFj
ayB0ZXN0cyBpbmFkdmVydGVudGx5IGRlbGV0ZWQgaW4gcjIwNTAzMi4KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvaW5kZXguaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYjU5M2FjYTFhNzQ3MDBkOTZiZjBhN2ExMDY0ZGFjMWY4YmZkZWU5Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgICA8dGl0bGU+RVM2IOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3Nz
L2luZGV4LmNzcyI+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgPHNlY3Rpb24gY2xhc3M9InRv
ZG9hcHAiPgorICAgICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPgorICAgICAgICAgICAgPGgx
PnRvZG9zPC9oMT4KKyAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0ibmV3LXRvZG8iIHBsYWNlaG9s
ZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICAgIDwvaGVhZGVy
PgorCisgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJtYWluIj4KKyAgICAgICAgICAgIDxpbnB1dCBj
bGFzcz0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgorICAgICAgICAgICAgPGxhYmVsIGZv
cj0idG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAg
PHVsIGNsYXNzPSJ0b2RvLWxpc3QiPjwvdWw+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAg
ICA8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZG8t
Y291bnQiPjwvc3Bhbj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAg
ICAgICAgICAgPGxpPjxhIGhyZWY9IiMvIiBjbGFzcz0ic2VsZWN0ZWQiPkFsbDwvYT48L2xpPgor
ICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPjwvbGk+Cisg
ICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+PC9s
aT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjbGVhci1j
b21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorICAgICAgICA8L2Zvb3Rlcj4KKyAg
ICA8L3NlY3Rpb24+CisKKyAgICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgICAgPHA+RG91
YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgICA8YnI+CisgICAgICAgIDxwPlBh
cnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICA8
L2Zvb3Rlcj4KKyAgICA8c2NyaXB0IHNyYz0ic3JjL2NvbnRyb2xsZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJzcmMvaGVscGVycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9InNyYy90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy9zdG9y
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy9tb2RlbC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9InNyYy92aWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0ic3JjL2FwcC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM4MTliNDc5YmU0MTU5MTRmMGRiM2VhMTNkYzAzNjBhMDY2OGVkZjAKLS0tIC9kZXYv
bnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5k
ZXguY3NzCkBAIC0wLDAgKzEsMzc3IEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOwor
ICAgIHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRp
bmc6IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1z
aXplOiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWls
eTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJp
dDsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsK
KyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
Cit9CisKK2JvZHkgeworICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dy
b3VuZDogI2Y1ZjVmNTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4
OworICAgIG1heC13aWR0aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtp
dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzog
YW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQt
d2VpZ2h0OiAzMDA7Cit9CisKK2J1dHRvbiwKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAg
IG91dGxpbmU6IG5vbmU7Cit9CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
Ky50b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0
MHB4IDA7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRw
eCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJn
YmEoMCwgMCwgMCwgMC4xKTsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxh
Y2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAw
OworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhv
bGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cisg
ICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRl
ciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAg
Y29sb3I6ICNlNmU2ZTY7Cit9CisKKy50b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAtMTU1cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAx
MDBweDsKKyAgICBmb250LXdlaWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAg
ICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGlt
aXplTGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owor
fQorCisubmV3LXRvZG8sCisuZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1h
cmdpbjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9u
dC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1o
ZWlnaHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGNv
bG9yOiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAj
OTk5OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAu
Mik7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
KyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cit9CisKKy5uZXctdG9kbyB7CisgICAg
cGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFj
a2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAt
MnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisubWFpbiB7CisgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2
ZTY7Cit9CisKK2xhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKKyAgICBkaXNwbGF5OiBub25lOwor
fQorCisudG9nZ2xlLWFsbCB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTU1
cHg7CisgICAgbGVmdDogLTEycHg7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4
OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBT
YWZhcmkgKi8KK30KKworLnRvZ2dsZS1hbGw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsK
KyAgICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzog
MTBweCAyN3B4IDEwcHggMjdweDsKK30KKworLnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewor
ICAgIGNvbG9yOiAjNzM3MzczOworfQorCisudG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7Cisg
ICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisudG9kby1saXN0IGxp
IHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJv
cmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisudG9kby1saXN0IGxpOmxhc3Qt
Y2hpbGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRp
dGluZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisu
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdp
ZHRoOiA1MDZweDsKKyAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OworICAgIG1hcmdp
bjogMCAwIDAgNDNweDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2Vi
S2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0
OiBhdXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9t
OiAwOworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNh
ZmFyaSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBu
b25lOworfQorCisudG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVy
bCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1
Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRl
ZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKTsKK30KKworLnRvZG8tbGlzdCBsaSAudG9n
Z2xlOmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1s
O3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIg
aGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9
IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMi
Lz48cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAz
NC01MnoiLz48L3N2Zz4nKTsKK30KKworLnRvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd2hpdGUt
c3BhY2U6IHByZTsKKyAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRpbmc6IDE1
cHggNjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRz
OworfQorCisudG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5
ZDk7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lk
dGg6IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZv
bnQtc2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAx
MXB4OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKy50b2RvLWxp
c3QgbGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisudG9kby1s
aXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisudG9kby1s
aXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworLnRvZG8t
bGlzdCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5l
ZGl0aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKy5mb290
ZXIgeworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWln
aHQ6IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBz
b2xpZCAjZTZlNmU2OworfQorCisuZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAg
ICBsZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAg
IGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAg
ICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHgg
cmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZm
NiwKKyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwor
fQorCisudG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVm
dDsKK30KKworLnRvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQor
CisuZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1z
dHlsZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAg
bGVmdDogMDsKK30KKworLmZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKwor
LmZpbHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7Cisg
ICAgcGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQor
CisuZmlsdGVycyBsaSBhLnNlbGVjdGVkLAorLmZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9y
ZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisuZmlsdGVycyBsaSBhLnNl
bGVjdGVkIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisK
Ky5jbGVhci1jb21wbGV0ZWQsCitodG1sIC5jbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBm
bG9hdDogcmlnaHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAy
MHB4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9
CisKKy5jbGVhci1jb21wbGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOworfQorCisuaW5mbyB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjog
I2JmYmZiZjsKKyAgICBmb250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAg
cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKwor
LmluZm8gcCB7CisgICAgbGluZS1oZWlnaHQ6IDE7Cit9CisKKy5pbmZvIGEgeworICAgIGNvbG9y
OiBpbmhlcml0OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDog
NDAwOworfQorCisuaW5mbyBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsKK30KKworLyoKKyAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNh
ZmFyaS4KKyAgICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2ti
b3hlcyBpbiBGaXJlZm94CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmlj
ZS1waXhlbC1yYXRpbzowKSB7CisgICAgLnRvZ2dsZS1hbGwsCisgICAgLnRvZG8tbGlzdCBsaSAu
dG9nZ2xlIHsKKyAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAudG9kby1s
aXN0IGxpIC50b2dnbGUgeworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgLnRv
Z2dsZS1hbGwgeworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAg
ICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG5vbmU7CisgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEg
KG1heC13aWR0aDogNDMwcHgpIHsKKyAgICAuZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4
OworICAgIH0KKworICAgIC5maWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0K
K30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNz
cy9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1j
c3MvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1MjRlYmMyZDljMDU1MjE0YmRmMTI1MWM4Njgx
MjQwOWY5YmM5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNjkgQEAKK3sKKyAgIm5h
bWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgInN0eWxlIjogImluZGV4LmNzcyIsCisgICJ2ZXJz
aW9uIjogIjIuMC4yIiwKKyAgImRlc2NyaXB0aW9uIjogIkNTUyBmb3IgVG9kb01WQyBhcHBzIiwK
KyAgImxpY2Vuc2UiOiAiQ0MtQlktNC4wIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUi
OiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2Rv
bXZjLWFwcC1jc3MuZ2l0IgorICB9LAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlNpbmRy
ZSBTb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIiwKKyAgICAi
dXJsIjogInNpbmRyZXNvcmh1cy5jb20iCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiaW5kZXgu
Y3NzIgorICBdLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpz
IiwKKyAgICAiYXBwIiwKKyAgICAidG9kbyIsCisgICAgInRlbXBsYXRlIiwKKyAgICAiY3NzIiwK
KyAgICAic3R5bGUiLAorICAgICJzdHlsZXNoZWV0IgorICBdLAorICAiZ2l0SGVhZCI6ICJmZDFl
ODNmOGY1M2EwYjg1NTM3NDE1MzY1ZjJhNjMwMWJiYjQxOTlmIiwKKyAgImJ1Z3MiOiB7CisgICAg
InVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC1jc3MvaXNzdWVz
IgorICB9LAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212
Yy1hcHAtY3NzIiwKKyAgIl9pZCI6ICJ0b2RvbXZjLWFwcC1jc3NAMi4wLjIiLAorICAic2NyaXB0
cyI6IHt9LAorICAiX3NoYXN1bSI6ICIzMWZmNjc5ZGMzYTQwOWIyNjBiYzdlMGE2ZWFjYTVmODc1
N2E4OWExIiwKKyAgIl9mcm9tIjogInRvZG9tdmMtYXBwLWNzc0A+PTIuMC4xIDwzLjAuMCIsCisg
ICJfbnBtVmVyc2lvbiI6ICIyLjE0LjciLAorICAiX25vZGVWZXJzaW9uIjogIjQuMi4xIiwKKyAg
Il9ucG1Vc2VyIjogeworICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgImVtYWlsIjog
InNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisgIH0sCisgICJkaXN0IjogeworICAgICJzaGFzdW0i
OiAiMzFmZjY3OWRjM2E0MDliMjYwYmM3ZTBhNmVhY2E1Zjg3NTdhODlhMSIsCisgICAgInRhcmJh
bGwiOiAiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90b2RvbXZj
LWFwcC1jc3MtMi4wLjIudGd6IgorICB9LAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAg
ICAgIm5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAgICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNA
Z21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYWRkeW9zbWFuaSIsCisg
ICAgICAiZW1haWwiOiAiYWRkeW9zbWFuaUBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJwYXNzeSIsCisgICAgICAiZW1haWwiOiAicGhhcnRpZ0ByZHJlaS5uZXQiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJzdGVwaGVucGx1c3BsdXMiLAorICAgICAgImVt
YWlsIjogInNhd2NodWtAZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgImRpcmVjdG9yaWVzIjog
e30sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1h
cHAtY3NzLy0vdG9kb212Yy1hcHAtY3NzLTIuMC4yLnRneiIsCisgICJyZWFkbWUiOiAiRVJST1I6
IE5vIFJFQURNRSBkYXRhIGZvdW5kISIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVf
bW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZGJlYmYwMjRj
MDRhZWI2MDIwY2FmMTMxYTJlZDAzMTg5MDgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCkBAIC0wLDAgKzEs
MjggQEAKKyMgdG9kb212Yy1hcHAtY3NzCisKKz4gQ1NTIGZvciBUb2RvTVZDIGFwcHMKKworIVtd
KHNjcmVlbnNob3QucG5nKQorCisKKyMjIEluc3RhbGwKKworCitgYGAKKyQgbnBtIGluc3RhbGwg
LS1zYXZlIHRvZG9tdmMtYXBwLWNzcworYGBgCisKKworIyMgR2V0dGluZyBzdGFydGVkCisKK2Bg
YGh0bWwKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMt
YXBwLWNzcy9pbmRleC5jc3MiPgorYGBgCisKK1NlZSB0aGUgW1RvZG9NVkMgYXBwIHRlbXBsYXRl
XShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC10ZW1wbGF0ZSkuCisKKwor
CisjIyBMaWNlbnNlCisKKzxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29t
bW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMiPjxpbWcgYWx0PSJDcmVhdGl2ZSBD
b21tb25zIExpY2Vuc2UiIHN0eWxlPSJib3JkZXItd2lkdGg6MCIgc3JjPSJodHRwOi8vaS5jcmVh
dGl2ZWNvbW1vbnMub3JnL2wvYnkvNC4wLzgweDE1LnBuZyIgLz48L2E+PGJyIC8+VGhpcyA8c3Bh
biB4bWxuczpkY3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJs
Lm9yZy9kYy9kY21pdHlwZS9JbnRlcmFjdGl2ZVJlc291cmNlIiByZWw9ImRjdDp0eXBlIj53b3Jr
PC9zcGFuPiBieSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBo
cmVmPSJodHRwOi8vc2luZHJlc29yaHVzLmNvbSIgcHJvcGVydHk9ImNjOmF0dHJpYnV0aW9uTmFt
ZSIgcmVsPSJjYzphdHRyaWJ1dGlvblVSTCI+U2luZHJlIFNvcmh1czwvYT4gaXMgbGljZW5zZWQg
dW5kZXIgYSA8YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3Jn
L2xpY2Vuc2VzL2J5LzQuMC9kZWVkLmVuX1VTIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9u
IDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2U8L2E+LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDI1ZDNjODRh
YzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKQEAgLTAsMCArMSwx
NDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7CisgICAgYm9y
ZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNo
ZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1OworfQorCisubGVh
cm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgY29sb3I6
ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBoNSB7CisgICAg
bWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5lLWhlaWdodDog
MS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZvbnQtc2l6ZTog
MjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9CisKKy5sZWFy
biBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0cHg7Cit9CisK
Ky5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7
Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisKKy5sZWFybiBw
IHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBsaW5l
LWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsK
K30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisucXVvdGUgewor
ICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90
ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7Cisg
ICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4x
NTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAz
cHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250
LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIg
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0
OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4Owor
fQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGlj
YWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwg
MCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFm
dGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3Bh
cmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy5s
ZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDog
MjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEw
cHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEo
MjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7CisgICAg
dHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA4OTlw
eCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgcGFk
ZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAg
ICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3
NGY0N2JkMTNhODM5MjI3N2Y4MzBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCkBAIC0wLDAgKzEsMjQ5IEBACisv
KiBnbG9iYWwgXyAqLworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAv
KiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCisgICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1v
ZHVsZQorICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKKyAgICB2YXIgXyA9IChm
dW5jdGlvbiAoXykgeworICAgICAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgewor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJn
c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJ
bmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJ
bmRleF07CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQnkgZGVm
YXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFu
Z2UgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0
ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0geworICAg
ICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGlu
dGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgZXNjYXBlICAgICAg
OiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICAgICAgfTsKKworICAgICAgICAvLyBXaGVuIGN1c3Rv
bWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFu
CisgICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgs
IHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2gu
CisgICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOworCisgICAgICAgIC8vIENlcnRhaW4gY2hh
cmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBh
CisgICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgorICAgICAgICB2YXIgZXNjYXBlcyA9IHsKKyAg
ICAgICAgICAgICInIjogICAgICAiJyIsCisgICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKKyAg
ICAgICAgICAgICdccic6ICAgICAncicsCisgICAgICAgICAgICAnXG4nOiAgICAgJ24nLAorICAg
ICAgICAgICAgJ1x0JzogICAgICd0JywKKyAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAor
ICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAgICAgICAgfTsKKworICAgICAgICB2YXIg
ZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgICAgICAvLyBK
YXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxl
bWVudGF0aW9uLgorICAgICAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJp
dHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCisgICAgICAgIC8vIGFuZCBj
b3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgICAg
ICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKKyAgICAgICAg
ICAgIHZhciByZW5kZXI7CisgICAgICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNl
dHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOworCisgICAgICAgICAgICAvLyBDb21iaW5lIGRl
bGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAg
ICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAgICAgKHNl
dHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRp
bmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0
dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisgICAgICAgICAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7CisKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNv
dXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAg
ICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAg
ICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGlu
dGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9
IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uo
ZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBl
KF9fdCkpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRl
cnBvbGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiAr
IGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc291
cmNlICs9ICInO1xuIjsKKworICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3Bl
Y2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICAgICAgICAgIGlm
ICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJj
ZSArICd9XG4nOworCisgICAgICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFy
cmF5LnByb3RvdHlwZS5qb2luLCIgKworICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigp
e19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICAgICAgc291
cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18n
LCBzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGUu
c291cmNlID0gc291cmNlOworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAg
ICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZl
bmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9
ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNv
dXJjZSArICd9JzsKKworICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9Owor
CisgICAgICAgIHJldHVybiBfOworICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0
bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgeworICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEs
bSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7Cisg
ICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcg
RGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAorICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRh
Z05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShh
LG0pCisgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29v
Z2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0
ZScsICdVQS0zMTA4MTA2Mi0xJywgJ2F1dG8nKTsKKyAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZp
ZXcnKTsKKyAgICB9CisgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi8KKworICAgIGZ1bmN0aW9u
IHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpz
LmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVm
LnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIg
YmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhhbXBsZXMvJyk7CisgICAgICAgIHJldHVy
biBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBn
ZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgewor
ICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBU
b2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAg
ICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAg
eGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAg
ICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRl
bXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdv
YmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9
IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAg
ICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAg
IHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJh
bWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZGF0YXNldC5mcmFtZXdvcms7CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisKKyAgICAgICAgaWYgKGxlYXJuSlNP
Ti5iYWNrZW5kKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT04u
YmFja2VuZDsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJh
bWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoeworICAgICAgICAgICAgICAgIGJhY2tl
bmQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGxlYXJuSlNPTltm
cmFtZXdvcmtdKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05b
ZnJhbWV3b3JrXTsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0g
ZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuZmV0Y2hJc3N1ZUNvdW50KCk7CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBl
LmFwcGVuZCA9IGZ1bmN0aW9uIChvcHRzKSB7CisgICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7CisgICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVt
cGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKKyAgICAgICAgYXNpZGUu
Y2xhc3NOYW1lID0gJ2xlYXJuJzsKKworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQp
IHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZW1vIGxpbmsKKyAgICAgICAgICAgIHZhciBzb3Vy
Y2VMaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3IoJy5zb3VyY2UtbGlua3MnKTsKKyAgICAgICAg
ICAgIHZhciBoZWFkaW5nID0gc291cmNlTGlua3MuZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAg
ICAgICB2YXIgc291cmNlTGluayA9IHNvdXJjZUxpbmtzLmxhc3RFbGVtZW50Q2hpbGQ7CisgICAg
ICAgICAgICAvLyBDb3JyZWN0IGxpbmsgcGF0aAorICAgICAgICAgICAgdmFyIGhyZWYgPSBzb3Vy
Y2VMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAgICAgICAgICAgc291cmNlTGluay5zZXRB
dHRyaWJ1dGUoJ2hyZWYnLCBocmVmLnN1YnN0cihocmVmLmxhc3RJbmRleE9mKCdodHRwJykpKTsK
KyAgICAgICAgICAgIHNvdXJjZUxpbmtzLmlubmVySFRNTCA9IGhlYWRpbmcub3V0ZXJIVE1MICsg
c291cmNlTGluay5vdXRlckhUTUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBM
b2NhbGl6ZSBkZW1vIGxpbmtzCisgICAgICAgICAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVl
cnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBl
LmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgeworICAgICAgICAg
ICAgICAgIGlmIChkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09
ICdodHRwJykgeworICAgICAgICAgICAgICAgICAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hy
ZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJh
cicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2Fm
dGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07CisKKyAgICBMZWFybi5wcm90b3R5
cGUuZmV0Y2hJc3N1ZUNvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXNzdWVMaW5r
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50LWxpbmsnKTsKKyAgICAgICAg
aWYgKGlzc3VlTGluaykgeworICAgICAgICAgICAgdmFyIHVybCA9IGlzc3VlTGluay5ocmVmLnJl
cGxhY2UoJ2h0dHBzOi8vZ2l0aHViLmNvbScsICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9z
Jyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAg
ICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5vbmxvYWQg
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRSZXNwb25zZSA9IEpT
T04ucGFyc2UoZS50YXJnZXQucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAocGFy
c2VkUmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y291bnQgPSBwYXJzZWRSZXNwb25zZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
b3VudCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVMaW5rLmlubmVySFRN
TCA9ICdUaGlzIGFwcCBoYXMgJyArIGNvdW50ICsgJyBvcGVuIGlzc3Vlcyc7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQnKS5zdHls
ZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICByZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBM
ZWFybik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNTZjNGJmMDc4NzgwOTI5M2Mx
ZDMxZTViMmYzZmQ4NDNjMTEyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw2NCBAQAor
eworICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAg
ImRlc2NyaXB0aW9uIjogIkNvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBz
IiwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAi
Z2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZj
LWNvbW1vbi5naXQiCisgIH0sCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiVGFzdGVKUyIK
KyAgfSwKKyAgIm1haW4iOiAiYmFzZS5qcyIsCisgICJmaWxlcyI6IFsKKyAgICAiYmFzZS5qcyIs
CisgICAgImJhc2UuY3NzIgorICBdLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAor
ICAgICJ0YXN0ZWpzIiwKKyAgICAidXRpbCIsCisgICAgInV0aWxpdGllcyIKKyAgXSwKKyAgImdp
dEhlYWQiOiAiZTgyZDBjNzllMDE2ODdjZTc0MDdkZjc4NmNjNzg0YWQ4MjE2NmNiMyIsCisgICJi
dWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1j
b21tb24vaXNzdWVzIgorICB9LAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rh
c3RlanMvdG9kb212Yy1jb21tb24iLAorICAiX2lkIjogInRvZG9tdmMtY29tbW9uQDEuMC4yIiwK
KyAgInNjcmlwdHMiOiB7fSwKKyAgIl9zaGFzdW0iOiAiZWIzYWI2MTI4MWFjNzQ4MDlmNTg2OWM5
MTdjN2IwOGJjODQyMzRlMCIsCisgICJfZnJvbSI6ICJ0b2RvbXZjLWNvbW1vbkA+PTEuMC4yIDwy
LjAuMCIsCisgICJfbnBtVmVyc2lvbiI6ICIyLjcuNCIsCisgICJfbm9kZVZlcnNpb24iOiAiMC4x
Mi4yIiwKKyAgIl9ucG1Vc2VyIjogeworICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAg
ImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisgIH0sCisgICJkaXN0IjogeworICAg
ICJzaGFzdW0iOiAiZWIzYWI2MTI4MWFjNzQ4MDlmNTg2OWM5MTdjN2IwOGJjODQyMzRlMCIsCisg
ICAgInRhcmJhbGwiOiAiaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8t
L3RvZG9tdmMtY29tbW9uLTEuMC4yLnRneiIKKyAgfSwKKyAgIm1haW50YWluZXJzIjogWworICAg
IHsKKyAgICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2luZHJl
c29yaHVzQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlvc21h
bmkiLAorICAgICAgImVtYWlsIjogImFkZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicGFzc3kiLAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRyZWku
bmV0IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwKKyAg
ICAgICJlbWFpbCI6ICJzYXdjaHVrQGdtYWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJkaXJlY3Rv
cmllcyI6IHt9LAorICAiX3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rv
ZG9tdmMtY29tbW9uLy0vdG9kb212Yy1jb21tb24tMS4wLjIudGd6IiwKKyAgInJlYWRtZSI6ICJF
UlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9u
b2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNWRlNTEx
OGYzZmM3NzU4ZThkZGMwYTY4Njg3NDljZWU5Y2FmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKQEAgLTAsMCAr
MSwxNSBAQAorIyB0b2RvbXZjLWNvbW1vbgorCis+IENvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1
c2VkIGJ5IG91ciBhcHBzCisKKworIyMgSW5zdGFsbAorCitgYGAKKyQgbnBtIGluc3RhbGwgLS1z
YXZlIHRvZG9tdmMtY29tbW9uCitgYGAKKworCisjIyBMaWNlbnNlCisKK01JVCDCqSBbVGFzdGVK
U10oaHR0cDovL3Rhc3RlanMuY29tKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9wYWNrYWdl
Lmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjZiYzkyZmNh
NzE2NWVhYTg3YTA3NGVjZTUzZmJmYWEyZDhkZjlmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw3IEBACit7CisgICJwcml2YXRlIjogdHJ1
ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIl4yLjAuMSIs
CisgICAgInRvZG9tdmMtY29tbW9uIjogIl4xLjAuMiIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS9zcmMvLmpzaGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvLmpzaGludHJjCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZmZDQ4ZWIyOTFhM2ZjNGRkNWMyOWE3MmVlZGY4Yzc1ZTM5ODdkOTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy8uanNoaW50cmMKQEAgLTAsMCArMSwzIEBA
Cit7CisJImVzbmV4dCI6IHRydWUKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2Fw
cC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjVkOWM1NmQxYjM4
YTk5YjdlZjE3YjgwMjRjYmEyMDc5ODNlODg5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS9zcmMvYXBwLmpzCkBAIC0wLDAgKzEsMjcgQEAKKyd1c2Ugc3RyaWN0JzsKKworbGV0IHRv
ZG87Citjb25zdCBzZXRWaWV3ID0gKCkgPT4gdG9kby5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1l
bnQubG9jYXRpb24uaGFzaCk7CisKK2NsYXNzIFRvZG8geworICAgIC8qKgorICAgICAqIEluaXQg
bmV3IFRvZG8gTGlzdAorICAgICAqIEBwYXJhbSAge3N0cmluZ30gVGhlIG5hbWUgb2YgeW91ciBs
aXN0CisgICAgICovCisgICAgY29uc3RydWN0b3IobmFtZSkgeworICAgICAgICB0aGlzLnN0b3Jh
Z2UgPSBuZXcgU3RvcmUobmFtZSk7CisgICAgICAgIHRoaXMubW9kZWwgPSBuZXcgTW9kZWwodGhp
cy5zdG9yYWdlKTsKKworICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCk7Cisg
ICAgICAgIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMudGVtcGxhdGUpOworCisgICAgICAgIHRo
aXMuY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKHRoaXMubW9kZWwsIHRoaXMudmlldyk7Cisg
ICAgfQorfQorCiskb24od2luZG93LCAnbG9hZCcsICgpID0+IHsKKyAgICB0b2RvID0gbmV3IFRv
ZG8oJ3RvZG9zLXZhbmlsbGFqcycpOworICAgIHNldFZpZXcoKTsKK30pOworCiskb24od2luZG93
LCAnaGFzaGNoYW5nZScsIHNldFZpZXcpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMv
Y29udHJvbGxlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2NvbnRyb2xsZXIuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDI2OTNlYzIwZWUxMjViZjgxZWZmZTdhNzJiODM3NGUxNjI4ZDlhMwotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2NvbnRyb2xsZXIuanMKQEAgLTAsMCArMSwyMTQgQEAK
Kyd1c2Ugc3RyaWN0JzsKKworY2xhc3MgQ29udHJvbGxlciB7CisgICAgLyoqCisgICAgICogVGFr
ZSBhIG1vZGVsICYgdmlldywgdGhlbiBhY3QgYXMgY29udHJvbGxlciBiZXR3ZWVuIHRoZW0KKyAg
ICAgKiBAcGFyYW0gIHtvYmplY3R9IG1vZGVsIFRoZSBtb2RlbCBpbnN0YW5jZQorICAgICAqIEBw
YXJhbSAge29iamVjdH0gdmlldyAgVGhlIHZpZXcgaW5zdGFuY2UKKyAgICAgKi8KKyAgICBjb25z
dHJ1Y3Rvcihtb2RlbCwgdmlldykgeworICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7CisgICAg
ICAgIHRoaXMudmlldyA9IHZpZXc7CisKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ25ld1RvZG8n
LCB0aXRsZSA9PiB0aGlzLmFkZEl0ZW0odGl0bGUpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQo
J2l0ZW1FZGl0JywgaXRlbSA9PiB0aGlzLmVkaXRJdGVtKGl0ZW0uaWQpKTsKKyAgICAgICAgdGhp
cy52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGl0ZW0gPT4gdGhpcy5lZGl0SXRlbVNhdmUoaXRl
bS5pZCwgaXRlbS50aXRsZSkpOworICAgICAgICB0aGlzLnZpZXcuYmluZCgnaXRlbUVkaXRDYW5j
ZWwnLCBpdGVtID0+IHRoaXMuZWRpdEl0ZW1DYW5jZWwoaXRlbS5pZCkpOworICAgICAgICB0aGlz
LnZpZXcuYmluZCgnaXRlbVJlbW92ZScsIGl0ZW0gPT4gdGhpcy5yZW1vdmVJdGVtKGl0ZW0uaWQp
KTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBpdGVtID0+IHRoaXMudG9n
Z2xlQ29tcGxldGUoaXRlbS5pZCwgaXRlbS5jb21wbGV0ZWQpKTsKKyAgICAgICAgdGhpcy52aWV3
LmJpbmQoJ3JlbW92ZUNvbXBsZXRlZCcsICgpID0+IHRoaXMucmVtb3ZlQ29tcGxldGVkSXRlbXMo
KSk7CisgICAgICAgIHRoaXMudmlldy5iaW5kKCd0b2dnbGVBbGwnLCBzdGF0dXMgPT4gdGhpcy50
b2dnbGVBbGwoc3RhdHVzLmNvbXBsZXRlZCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIExv
YWQgJiBJbml0aWFsaXplIHRoZSB2aWV3CisgICAgICogQHBhcmFtIHtzdHJpbmd9ICAnJyB8ICdh
Y3RpdmUnIHwgJ2NvbXBsZXRlZCcKKyAgICAgKi8KKyAgICBzZXRWaWV3KGhhc2gpeworICAgICAg
ICBsZXQgcm91dGUgPSBoYXNoLnNwbGl0KCcvJylbMV07CisgICAgICAgIGxldCBwYWdlID0gcm91
dGUgfHwgJyc7CisgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcihwYWdlKTsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBFdmVudCBmaXJlcyBvbiBsb2FkLiBHZXRzIGFsbCBpdGVtcyAmIGRpc3Bs
YXlzIHRoZW0KKyAgICAgKi8KKyAgICBzaG93QWxsKCl7CisgICAgICAgIHRoaXMubW9kZWwucmVh
ZChkYXRhID0+IHRoaXMudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSkpOworICAgIH0K
KworICAgIC8qKgorICAgICAqIFJlbmRlcnMgYWxsIGFjdGl2ZSB0YXNrcworICAgICAqLworICAg
IHNob3dBY3RpdmUoKXsKKyAgICAgICAgdGhpcy5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IGZhbHNl
fSwgZGF0YSA9PiB0aGlzLnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpKTsKKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBSZW5kZXJzIGFsbCBjb21wbGV0ZWQgdGFza3MKKyAgICAgKi8K
KyAgICBzaG93Q29tcGxldGVkKCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZCh7Y29tcGxldGVk
OiB0cnVlfSwgZGF0YSA9PiB0aGlzLnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpKTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbiBldmVudCB0byBmaXJlIHdoZW5ldmVyIHlvdSB3
YW50IHRvIGFkZCBhbiBpdGVtLiBTaW1wbHkgcGFzcyBpbiB0aGUgZXZlbnQKKyAgICAgKiBvYmpl
Y3QgYW5kIGl0J2xsIGhhbmRsZSB0aGUgRE9NIGluc2VydGlvbiBhbmQgc2F2aW5nIG9mIHRoZSBu
ZXcgaXRlbS4KKyAgICAgKi8KKyAgICBhZGRJdGVtKHRpdGxlKXsKKyAgICAgICAgaWYgKHRpdGxl
LnRyaW0oKSA9PT0gJycpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMubW9kZWwuY3JlYXRlKHRpdGxlLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLnZp
ZXcucmVuZGVyKCdjbGVhck5ld1RvZG8nKTsKKyAgICAgICAgICAgIHRoaXMuX2ZpbHRlcih0cnVl
KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUcmlnZ2VycyB0aGUgaXRl
bSBlZGl0aW5nIG1vZGUuCisgICAgICovCisgICAgZWRpdEl0ZW0oaWQpeworICAgICAgICB0aGlz
Lm1vZGVsLnJlYWQoaWQsIGRhdGEgPT4geworICAgICAgICAgICAgbGV0IHRpdGxlID0gZGF0YVsw
XS50aXRsZTsKKyAgICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ2VkaXRJdGVtJywge2lkLCB0
aXRsZX0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbmlzaGVzIHRo
ZSBpdGVtIGVkaXRpbmcgbW9kZSBzdWNjZXNzZnVsbHkuCisgICAgICovCisgICAgZWRpdEl0ZW1T
YXZlKGlkLCB0aXRsZSl7CisgICAgICAgIHRpdGxlID0gdGl0bGUudHJpbSgpOworCisgICAgICAg
IGlmICh0aXRsZS5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgIHRoaXMubW9kZWwudXBkYXRl
KGlkLCB7dGl0bGV9LCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcign
ZWRpdEl0ZW1Eb25lJywge2lkLCB0aXRsZX0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaWQpOworICAgICAgICB9CisgICAg
fQorCisgICAgLyoKKyAgICAgKiBDYW5jZWxzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS4KKyAgICAg
Ki8KKyAgICBlZGl0SXRlbUNhbmNlbChpZCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZChpZCwg
ZGF0YSA9PiB7CisgICAgICAgICAgICBsZXQgdGl0bGUgPSBkYXRhWzBdLnRpdGxlOworICAgICAg
ICAgICAgdGhpcy52aWV3LnJlbmRlcignZWRpdEl0ZW1Eb25lJywge2lkLCB0aXRsZX0pOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBET00gZWxlbWVudCB3
aXRoIGdpdmVuIElELAorICAgICAqIFRoZW4gcmVtb3ZlIGl0IGZyb20gRE9NICYgU3RvcmFnZQor
ICAgICAqLworICAgIHJlbW92ZUl0ZW0oaWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlbW92ZShp
ZCwgKCkgPT4gdGhpcy52aWV3LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKSk7CisgICAgICAgIHRo
aXMuX2ZpbHRlcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdpbGwgcmVtb3ZlIGFsbCBj
b21wbGV0ZWQgaXRlbXMgZnJvbSB0aGUgRE9NIGFuZCBzdG9yYWdlLgorICAgICAqLworICAgIHJl
bW92ZUNvbXBsZXRlZEl0ZW1zKCl7CisgICAgICAgIHRoaXMubW9kZWwucmVhZCh7Y29tcGxldGVk
OiB0cnVlfSwgZGF0YSA9PiB7CisgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGRhdGEpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbS5pZCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuX2ZpbHRlcigpOworICAgIH0KKworICAgIC8q
KgorICAgICAqIEdpdmUgaXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQg
d2lsbCB1cGRhdGUgdGhlIGl0ZW0KKyAgICAgKiBpbiBzdG9yYWdlIGJhc2VkIG9uIHRoZSBjaGVj
a2JveCdzIHN0YXRlLgorICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBv
ZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1bmNvbXBsZXRlCisgICAgICogQHBhcmFtIHtv
YmplY3R9IGNoZWNrYm94IFRoZSBjaGVja2JveCB0byBjaGVjayB0aGUgc3RhdGUgb2YgY29tcGxl
dGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90CisgICAgICogQHBhcmFt
IHtib29sZWFufHVuZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVyaW5nIHRoZSB0b2Rv
IGl0ZW1zCisgICAgICovCisgICAgdG9nZ2xlQ29tcGxldGUoaWQsIGNvbXBsZXRlZCwgc2lsZW50
KXsKKyAgICAgICAgdGhpcy5tb2RlbC51cGRhdGUoaWQsIHtjb21wbGV0ZWR9LCAoKSA9PiB7Cisg
ICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCdlbGVtZW50Q29tcGxldGUnLCB7aWQsIGNvbXBs
ZXRlZH0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoIXNpbGVudCkgeworICAgICAgICAg
ICAgdGhpcy5fZmlsdGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBX
aWxsIHRvZ2dsZSBBTEwgY2hlY2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21wbGV0ZW5lc3Mg
b2YgbW9kZWxzLgorICAgICAqIEp1c3QgcGFzcyBpbiB0aGUgZXZlbnQgb2JqZWN0LgorICAgICAq
LworICAgIHRvZ2dsZUFsbChjb21wbGV0ZWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoe2Nv
bXBsZXRlZDogIWNvbXBsZXRlZH0sIGRhdGEgPT4geworICAgICAgICAgICAgZm9yIChsZXQgaXRl
bSBvZiBkYXRhKSB7CisgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDb21wbGV0ZShpdGVtLmlk
LCBjb21wbGV0ZWQsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAg
ICB0aGlzLl9maWx0ZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBw
aWVjZXMgb2YgdGhlIHBhZ2Ugd2hpY2ggY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgcmVtYWluaW5n
CisgICAgICogbnVtYmVyIG9mIHRvZG9zLgorICAgICAqLworICAgIF91cGRhdGVDb3VudCgpewor
ICAgICAgICB0aGlzLm1vZGVsLmdldENvdW50KHRvZG9zID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IGNvbXBsZXRlZCA9IHRvZG9zLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIGNvbnN0IHZpc2libGUg
PSBjb21wbGV0ZWQgPiAwOworICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGNvbXBsZXRlZCA9
PT0gdG9kb3MudG90YWw7CisKKyAgICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ3VwZGF0ZUVs
ZW1lbnRDb3VudCcsIHRvZG9zLmFjdGl2ZSk7CisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVy
KCdjbGVhckNvbXBsZXRlZEJ1dHRvbicsIHtjb21wbGV0ZWQsIHZpc2libGV9KTsKKworICAgICAg
ICAgICAgdGhpcy52aWV3LnJlbmRlcigndG9nZ2xlQWxsJywge2NoZWNrZWR9KTsKKyAgICAgICAg
ICAgIHRoaXMudmlldy5yZW5kZXIoJ2NvbnRlbnRCbG9ja1Zpc2liaWxpdHknLCB7dmlzaWJsZTog
dG9kb3MudG90YWwgPiAwfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAq
IFJlLWZpbHRlcnMgdGhlIHRvZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuCisg
ICAgICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50
aW5nIG9mIHRvZG8gaXRlbXMuCisgICAgICovCisgICAgX2ZpbHRlcihmb3JjZSl7CisgICAgICAg
IGxldCBhY3RpdmUgPSB0aGlzLl9hY3RpdmVSb3V0ZTsKKyAgICAgICAgY29uc3QgYWN0aXZlUm91
dGUgPSBhY3RpdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBhY3RpdmUuc3Vic3RyKDEpOwor
CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgZWxlbWVudHMgb24gdGhlIHBhZ2UsIHdoaWNoIGNoYW5n
ZSB3aXRoIGVhY2ggY29tcGxldGVkIHRvZG8KKyAgICAgICAgdGhpcy5fdXBkYXRlQ291bnQoKTsK
KworICAgICAgICAvLyBJZiB0aGUgbGFzdCBhY3RpdmUgcm91dGUgaXNuJ3QgIkFsbCIsIG9yIHdl
J3JlIHN3aXRjaGluZyByb3V0ZXMsIHdlCisgICAgICAgIC8vIHJlLWNyZWF0ZSB0aGUgdG9kbyBp
dGVtIGVsZW1lbnRzLCBjYWxsaW5nOgorICAgICAgICAvLyAgIHRoaXMuc2hvd1tBbGx8QWN0aXZl
fENvbXBsZXRlZF0oKQorICAgICAgICBpZiAoZm9yY2UgfHwgdGhpcy5fbGFzdEFjdGl2ZVJvdXRl
ICE9PSAnQWxsJyB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09IGFjdGl2ZVJvdXRlKSB7Cisg
ICAgICAgICAgICB0aGlzWydzaG93JyArIGFjdGl2ZVJvdXRlXSgpOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlID0gYWN0aXZlUm91dGU7CisgICAgfQorCisgICAg
LyoqCisgICAgICogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0
ZXMKKyAgICAgKi8KKyAgICBfdXBkYXRlRmlsdGVyKGN1cnJlbnRQYWdlKXsKKyAgICAgICAgLy8g
U3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxsb3dpbmcgdXMgdG8gcmUt
ZmlsdGVyIHRvZG8KKyAgICAgICAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2VkIGNvbXBsZXRl
IG9yIGluY29tcGxldGUuCisgICAgICAgIHRoaXMuX2FjdGl2ZVJvdXRlID0gY3VycmVudFBhZ2U7
CisKKyAgICAgICAgaWYgKGN1cnJlbnRQYWdlID09PSAnJykgeworICAgICAgICAgICAgdGhpcy5f
YWN0aXZlUm91dGUgPSAnQWxsJzsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2ZpbHRlcigp
OworCisgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ3NldEZpbHRlcicsIGN1cnJlbnRQYWdlKTsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9oZWxwZXJzLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS9zcmMvaGVscGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTRmYzQ4MzUxNWY4MTljNTQ0
MzM5OGI0MjlmZTRjMjVkYjU3ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9z
cmMvaGVscGVycy5qcwpAQCAtMCwwICsxLDUzIEBACisndXNlIHN0cmljdCc7CisKKworLy8gQWxs
b3cgZm9yIGxvb3Bpbmcgb24gbm9kZXMgYnkgY2hhaW5pbmc6CisvLyBxc2EoJy5mb28nKS5mb3JF
YWNoKGZ1bmN0aW9uICgpIHt9KQorTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBBcnJheS5w
cm90b3R5cGUuZm9yRWFjaDsKKworLy8gR2V0IGVsZW1lbnQocykgYnkgQ1NTIHNlbGVjdG9yOgor
ZnVuY3Rpb24gcXMoc2VsZWN0b3IsIHNjb3BlKSB7CisgICAgcmV0dXJuIChzY29wZSB8fCBkb2N1
bWVudCkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7Cit9CisKK2Z1bmN0aW9uIHFzYShzZWxlY3Rv
ciwgc2NvcGUpIHsKKyAgICByZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9y
QWxsKHNlbGVjdG9yKTsKK30KKworLy8gYWRkRXZlbnRMaXN0ZW5lciB3cmFwcGVyOgorZnVuY3Rp
b24gJG9uKHRhcmdldCwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHsKKyAgICB0YXJnZXQu
YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgISF1c2VDYXB0dXJlKTsKK30KKworLy8g
QXR0YWNoIGEgaGFuZGxlciB0byBldmVudCBmb3IgYWxsIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhl
IHNlbGVjdG9yLAorLy8gbm93IG9yIGluIHRoZSBmdXR1cmUsIGJhc2VkIG9uIGEgcm9vdCBlbGVt
ZW50CitmdW5jdGlvbiAkZGVsZWdhdGUodGFyZ2V0LCBzZWxlY3RvciwgdHlwZSwgaGFuZGxlcikg
eworICAgIGxldCBkaXNwYXRjaEV2ZW50ID0gZXZlbnQgPT4geworICAgICAgICBjb25zdCB0YXJn
ZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zdCBwb3RlbnRpYWxFbGVtZW50
cyA9IHFzYShzZWxlY3RvciwgdGFyZ2V0KTsKKyAgICAgICAgY29uc3QgaGFzTWF0Y2ggPSBBcnJh
eS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHBvdGVudGlhbEVsZW1lbnRzLCB0YXJnZXRFbGVtZW50
KSA+PSAwOworCisgICAgICAgIGlmIChoYXNNYXRjaCkgeworICAgICAgICAgICAgaGFuZGxlci5j
YWxsKHRhcmdldEVsZW1lbnQsIGV2ZW50KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBo
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvYmx1cgor
ICAgIGNvbnN0IHVzZUNhcHR1cmUgPSB0eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0gJ2ZvY3Vz
JzsKKworICAgICRvbih0YXJnZXQsIHR5cGUsIGRpc3BhdGNoRXZlbnQsIHVzZUNhcHR1cmUpOwor
fQorCisvLyBGaW5kIHRoZSBlbGVtZW50J3MgcGFyZW50IHdpdGggdGhlIGdpdmVuIHRhZyBuYW1l
OgorLy8gJHBhcmVudChxcygnYScpLCAnZGl2JykKK2Z1bmN0aW9uICRwYXJlbnQoZWxlbWVudCwg
dGFnTmFtZSkgeworICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNh
c2UoKSA9PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgIHJldHVybiBlbGVtZW50
LnBhcmVudE5vZGU7CisgICAgfQorCisgICAgcmV0dXJuICRwYXJlbnQoZWxlbWVudC5wYXJlbnRO
b2RlLCB0YWdOYW1lKTsKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL21vZGVsLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS9zcmMvbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y4ZDU4MTgxYmI1MjEz
M2YwY2Y2N2NkYmU2Mzc2Y2Y2YTdlYTc4NwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUvc3JjL21vZGVsLmpzCkBAIC0wLDAgKzEsMTE3IEBACisndXNlIHN0cmljdCc7CisKKworLyoq
CisgKiBDcmVhdGVzIGEgbmV3IE1vZGVsIGluc3RhbmNlIGFuZCBob29rcyB1cCB0aGUgc3RvcmFn
ZS4KKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtvYmplY3R9IHN0b3JhZ2UgQSByZWZlcmVu
Y2UgdG8gdGhlIGNsaWVudCBzaWRlIHN0b3JhZ2UgY2xhc3MKKyAqLworY2xhc3MgTW9kZWwgewor
ICAgIGNvbnN0cnVjdG9yKHN0b3JhZ2UpIHsKKyAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFn
ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHRvZG8gbW9kZWwKKyAg
ICAgKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGl0bGVdIFRoZSB0aXRsZSBvZiB0aGUgdGFz
aworICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIHRvIGZp
cmUgYWZ0ZXIgdGhlIG1vZGVsIGlzIGNyZWF0ZWQKKyAgICAgKi8KKyAgICBjcmVhdGUodGl0bGUs
IGNhbGxiYWNrKXsKKyAgICAgICAgdGl0bGUgPSB0aXRsZSB8fCAnJzsKKworICAgICAgICBsZXQg
bmV3SXRlbSA9IHsKKyAgICAgICAgICAgIHRpdGxlOiB0aXRsZS50cmltKCksCisgICAgICAgICAg
ICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5zdG9yYWdlLnNh
dmUobmV3SXRlbSwgY2FsbGJhY2spOworICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGFu
ZCByZXR1cm5zIGEgbW9kZWwgaW4gc3RvcmFnZS4gSWYgbm8gcXVlcnkgaXMgZ2l2ZW4gaXQnbGwg
c2ltcGx5CisgICAgICogcmV0dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNzIGluIGEgc3RyaW5n
IG9yIG51bWJlciBpdCdsbCBsb29rIHRoYXQgdXAgYXMKKyAgICAgKiB0aGUgSUQgb2YgdGhlIG1v
ZGVsIHRvIGZpbmQuIExhc3RseSwgeW91IGNhbiBwYXNzIGl0IGFuIG9iamVjdCB0byBtYXRjaAor
ICAgICAqIGFnYWluc3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8b2Jq
ZWN0fSBbcXVlcnldIEEgcXVlcnkgdG8gbWF0Y2ggbW9kZWxzIGFnYWluc3QKKyAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBt
b2RlbCBpcyBmb3VuZAorICAgICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiBtb2RlbC5yZWFk
KDEsIGZ1bmMpIC8vIFdpbGwgZmluZCB0aGUgbW9kZWwgd2l0aCBhbiBJRCBvZiAxCisgICAgICog
bW9kZWwucmVhZCgnMScpIC8vIFNhbWUgYXMgYWJvdmUKKyAgICAgKiAvL0JlbG93IHdpbGwgZmlu
ZCBhIG1vZGVsIHdpdGggZm9vIGVxdWFsbGluZyBiYXIgYW5kIGhlbGxvIGVxdWFsbGluZyB3b3Js
ZC4KKyAgICAgKiBtb2RlbC5yZWFkKHsgZm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCcgfSkKKyAg
ICAgKi8KKyAgICByZWFkKHF1ZXJ5LCBjYWxsYmFjayl7CisgICAgICAgIGNvbnN0IHF1ZXJ5VHlw
ZSA9IHR5cGVvZiBxdWVyeTsKKworICAgICAgICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24n
KSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IHF1ZXJ5OworICAgICAgICAgICAgdGhpcy5zdG9y
YWdlLmZpbmRBbGwoY2FsbGJhY2spOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0g
J3N0cmluZycgfHwgcXVlcnlUeXBlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgcXVlcnkg
PSBwYXJzZUludChxdWVyeSwgMTApOworICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmZpbmQoe2lk
OiBxdWVyeX0sIGNhbGxiYWNrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
c3RvcmFnZS5maW5kKHF1ZXJ5LCBjYWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBVcGRhdGVzIGEgbW9kZWwgYnkgZ2l2aW5nIGl0IGFuIElELCBkYXRhIHRvIHVw
ZGF0ZSwgYW5kIGEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuCisgICAgICogdGhlIHVwZGF0ZSBpcyBj
b21wbGV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgaWQgb2YgdGhl
IG1vZGVsIHRvIHVwZGF0ZQorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0
aWVzIHRvIHVwZGF0ZSBhbmQgdGhlaXIgbmV3IHZhbHVlCisgICAgICogQHBhcmFtIHtmdW5jdGlv
bn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBs
ZXRlLgorICAgICAqLworICAgIHVwZGF0ZShpZCwgZGF0YSwgY2FsbGJhY2speworICAgICAgICB0
aGlzLnN0b3JhZ2Uuc2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIFJlbW92ZXMgYSBtb2RlbCBmcm9tIHN0b3JhZ2UKKyAgICAgKgorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIG1vZGVsIHRvIHJlbW92ZQorICAgICAqIEBwYXJh
bSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHJlbW92
YWwgaXMgY29tcGxldGUuCisgICAgICovCisgICAgcmVtb3ZlKGlkLCBjYWxsYmFjayl7CisgICAg
ICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoaWQsIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBXQVJOSU5HOiBXaWxsIHJlbW92ZSBBTEwgZGF0YSBmcm9tIHN0b3JhZ2UuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmly
ZSB3aGVuIHRoZSBzdG9yYWdlIGlzIHdpcGVkLgorICAgICAqLworICAgIHJlbW92ZUFsbChjYWxs
YmFjayl7CisgICAgICAgIHRoaXMuc3RvcmFnZS5kcm9wKGNhbGxiYWNrKTsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY291bnQgb2YgYWxsIHRvZG9zCisgICAgICovCisgICAg
Z2V0Q291bnQoY2FsbGJhY2speworICAgICAgICBsZXQgdG9kb3MgPSB7CisgICAgICAgICAgICBh
Y3RpdmU6IDAsCisgICAgICAgICAgICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAgICB0b3RhbDog
MAorICAgICAgICB9OworCisgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kQWxsKGRhdGEgPT4gewor
ICAgICAgICAgICAgZm9yIChsZXQgdG9kbyBvZiBkYXRhKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRvZG8uY29tcGxldGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRvZG9zLmNvbXBsZXRlZCsr
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRvZG9zLmFj
dGl2ZSsrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRvZG9zLnRvdGFs
Kys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHRvZG9zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvc3RvcmUuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1L3NyYy9zdG9yZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmE5N2JkZGIzZmVhOGIxNmNjNTg5NTli
NWJkNzAyNDA2YjkxYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvc3Rv
cmUuanMKQEAgLTAsMCArMSwxNTAgQEAKKy8qanNoaW50IGVxZXFlcTpmYWxzZSAqLworJ3VzZSBz
dHJpY3QnOworCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmpl
Y3QgYW5kIHdpbGwgY3JlYXRlIGFuIGVtcHR5CisgKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rp
b24gYWxyZWFkeSBleGlzdHMuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUg
b2Ygb3VyIERCIHdlIHdhbnQgdG8gdXNlCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBP
dXIgZmFrZSBEQiB1c2VzIGNhbGxiYWNrcyBiZWNhdXNlIGluCisgKiByZWFsIGxpZmUgeW91IHBy
b2JhYmx5IHdvdWxkIGJlIG1ha2luZyBBSkFYIGNhbGxzCisgKi8KK2NsYXNzIFN0b3JlIHsKKyAg
ICBjb25zdHJ1Y3RvcihuYW1lLCBjYWxsYmFjaykgeworICAgICAgICB0aGlzLl9kYk5hbWUgPSBu
YW1lOworICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UgPSB0aGlzLm1lbW9yeVN0b3JhZ2UgfHwg
e307CisKKyAgICAgICAgaWYgKCF0aGlzLm1lbW9yeVN0b3JhZ2VbbmFtZV0pIHsKKyAgICAgICAg
ICAgIGxldCBkYXRhID0geworICAgICAgICAgICAgICAgIHRvZG9zOiBbXQorICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW25hbWVdID0gSlNPTi5zdHJpbmdp
ZnkoZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbbmFt
ZV0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEZpbmRzIGl0ZW1zIGJh
c2VkIG9uIGEgcXVlcnkgZ2l2ZW4gYXMgYSBKUyBvYmplY3QKKyAgICAgKgorICAgICAqIEBwYXJh
bSB7b2JqZWN0fSBxdWVyeSBUaGUgcXVlcnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAn
YmFyJ30pCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sg
dG8gZmlyZSB3aGVuIHRoZSBxdWVyeSBoYXMKKyAgICAgKiBjb21wbGV0ZWQgcnVubmluZworICAg
ICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiBkYi5maW5kKHtmb286ICdiYXInLCBoZWxsbzog
J3dvcmxkJ30sIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAqICAgLy8gZGF0YSB3aWxsIHJl
dHVybiBhbnkgaXRlbXMgdGhhdCBoYXZlIGZvbzogYmFyIGFuZAorICAgICAgICAgKiAgIC8vIGhl
bGxvOiB3b3JsZCBpbiB0aGVpciBwcm9wZXJ0aWVzCisgICAgICAgICAqIH0pCisgICAgICovCisg
ICAgZmluZChxdWVyeSwgY2FsbGJhY2speworICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsZXQgdG9kb3MgPSBKU09OLnBh
cnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvczsKKworICAgICAgICBj
YWxsYmFjay5jYWxsKHRoaXMsIHRvZG9zLmZpbHRlcih0b2RvID0+IHsKKyAgICAgICAgICAgIGZv
ciAobGV0IHEgaW4gcXVlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAocXVlcnlbcV0gIT09IHRv
ZG9bcV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9t
IHRoZSBjb2xsZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFj
ayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YQorICAgICAqLworICAg
IGZpbmRBbGwoY2FsbGJhY2speworICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbdGhpcy5f
ZGJOYW1lXSkudG9kb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2ls
bCBzYXZlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBEQi4gSWYgbm8gaXRlbSBleGlzdHMgaXQgd2ls
bCBjcmVhdGUgYSBuZXcKKyAgICAgKiBpdGVtLCBvdGhlcndpc2UgaXQnbGwgc2ltcGx5IHVwZGF0
ZSBhbiBleGlzdGluZyBpdGVtJ3MgcHJvcGVydGllcworICAgICAqCisgICAgICogQHBhcmFtIHtv
YmplY3R9IHVwZGF0ZURhdGEgVGhlIGRhdGEgdG8gc2F2ZSBiYWNrIGludG8gdGhlIERCCisgICAg
ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIg
c2F2aW5nCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIEFuIG9wdGlvbmFsIHBhcmFtIHRvIGVu
dGVyIGFuIElEIG9mIGFuIGl0ZW0gdG8gdXBkYXRlCisgICAgICovCisgICAgc2F2ZSh1cGRhdGVE
YXRhLCBjYWxsYmFjaywgaWQpeworICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0aGlz
Lm1lbW9yeVN0b3JhZ2VbdGhpcy5fZGJOYW1lXSk7CisgICAgICAgIGxldCB0b2RvcyA9IGRhdGEu
dG9kb3M7CisgICAgICAgIGNvbnN0IGxlbiA9IHRvZG9zLmxlbmd0aDsKKworICAgICAgICAvLyBJ
ZiBhbiBJRCB3YXMgYWN0dWFsbHkgZ2l2ZW4sIGZpbmQgdGhlIGl0ZW0gYW5kIHVwZGF0ZSBlYWNo
IHByb3BlcnR5CisgICAgICAgIGlmIChpZCkgeworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHVwZGF0ZURhdGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvZG9zW2ldW2tleV0gPSB1cGRhdGVEYXRhW2tleV07Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3Jh
Z2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworCisgICAgICAgICAgICBp
ZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04u
cGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIGFuIElECisg
ICAgICAgICAgICB1cGRhdGVEYXRhLmlkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisKKyAgICAg
ICAgICAgIHRvZG9zLnB1c2godXBkYXRlRGF0YSk7CisgICAgICAgICAgICB0aGlzLm1lbW9yeVN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworCisgICAgICAgICAg
ICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIFt1
cGRhdGVEYXRhXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBXaWxsIHJlbW92ZSBhbiBpdGVtIGZyb20gdGhlIFN0b3JlIGJhc2VkIG9uIGl0cyBJ
RAorICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRlbSB5
b3Ugd2FudCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUg
Y2FsbGJhY2sgdG8gZmlyZSBhZnRlciBzYXZpbmcKKyAgICAgKi8KKyAgICByZW1vdmUoaWQsIGNh
bGxiYWNrKXsKKyAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9y
YWdlW3RoaXMuX2RiTmFtZV0pOworICAgICAgICBsZXQgdG9kb3MgPSBkYXRhLnRvZG9zOworICAg
ICAgICBjb25zdCBsZW4gPSB0b2Rvcy5sZW5ndGg7CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCB0b2Rvcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHRvZG9zW2ldLmlkID09
IGlkKSB7CisgICAgICAgICAgICAgICAgdG9kb3Muc3BsaWNlKGksIDEpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tZW1v
cnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgICAg
ICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5w
YXJzZSh0aGlzLm1lbW9yeVN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpOworICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCBkcm9wIGFsbCBzdG9yYWdlIGFuZCBzdGFy
dCBmcmVzaAorICAgICAqCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGZpcmUgYWZ0ZXIgZHJvcHBpbmcgdGhlIGRhdGEKKyAgICAgKi8KKyAgICBkcm9w
KGNhbGxiYWNrKXsKKyAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0gPSBK
U09OLnN0cmluZ2lmeSh7dG9kb3M6IFtdfSk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7Cisg
ICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9y
YWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvdGVt
cGxhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdkNGRkNGM2MGJlMjY1Mzg4MWEyODBlOGRhN2RmOGQzZDYz
MTMwNgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzCkBA
IC0wLDAgKzEsOTUgQEAKKyd1c2Ugc3RyaWN0JzsKKworCitjb25zdCBodG1sRXNjYXBlcyA9IHsK
KyAgICAnJic6ICcmYW1wJywKKyAgICAnPCc6ICcmbHQnLAorICAgICc+JzogJyZndCcsCisgICAg
JyInOiAnJnF1b3QnLAorICAgICdcJyc6ICcmI3gyNycsCisgICAgJ2AnOiAnJiN4NjAnCit9Owor
Citjb25zdCByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PiInYF0vZzsKK2NvbnN0IHJlSGFzVW5lc2Nh
cGVkSHRtbCA9IG5ldyBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7CisKK2xldCBlc2Nh
cGUgPSBzdHIgPT4gKHN0ciAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHIpKSA/IHN0ci5y
ZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpIDogc3RyOworbGV0IGVzY2Fw
ZUh0bWxDaGFyID0gY2hyID0+IGh0bWxFc2NhcGVzW2Nocl07CisKK2NsYXNzIFRlbXBsYXRlIHsK
KyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGUgPSBgCisg
ICAgICAgICAgICA8bGkgZGF0YS1pZD0ie3tpZH19IiBjbGFzcz0ie3tjb21wbGV0ZWR9fSI+Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlldyI+CisgICAgICAgICAgICAgICAgICAgIDxp
bnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIge3tjaGVja2VkfX0+CisgICAgICAg
ICAgICAgICAgICAgIDxsYWJlbD57e3RpdGxlfX08L2xhYmVsPgorICAgICAgICAgICAgICAgICAg
ICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rp
dj4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIGA7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhbiA8bGk+IEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGZvciBwbGFjZW1l
bnQgaW4geW91ciBhcHAuCisgICAgICoKKyAgICAgKiBOT1RFOiBJbiByZWFsIGxpZmUgeW91IHNo
b3VsZCBiZSB1c2luZyBhIHRlbXBsYXRpbmcgZW5naW5lIHN1Y2ggYXMgTXVzdGFjaGUKKyAgICAg
KiBvciBIYW5kbGViYXJzLCBob3dldmVyLCB0aGlzIGlzIGEgdmFuaWxsYSBKUyBleGFtcGxlLgor
ICAgICAqCisgICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIG9iamVjdCBjb250YWluaW5n
IGtleXMgeW91IHdhbnQgdG8gZmluZCBpbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZSB0byByZXBsYWNlLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgU3Ry
aW5nIG9mIGFuIDxsaT4gZWxlbWVudAorICAgICAqCisgICAgICogQGV4YW1wbGUKKyAgICAgKiB2
aWV3LnNob3coeworICAgICAgICAgKiAgaWQ6IDEsCisgICAgICAgICAqICB0aXRsZTogIkhlbGxv
IFdvcmxkIiwKKyAgICAgICAgICogIGNvbXBsZXRlZDogMCwKKyAgICAgICAgICogfSkKKyAgICAg
Ki8KKyAgICBzaG93KGRhdGEpeworICAgICAgICBsZXQgaSA9IDA7CisgICAgICAgIGxldCB2aWV3
ID0gJyc7CisgICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoOworCisgICAgICAgIGZvciAo
aTsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBsZXQgY29tcGxldGVkID0gJyc7CisgICAg
ICAgICAgICBsZXQgY2hlY2tlZCA9ICcnOworICAgICAgICAgICAgbGV0IHRlbXBsYXRlID0gdGhp
cy5kZWZhdWx0VGVtcGxhdGU7CisKKyAgICAgICAgICAgIGlmIChkYXRhW2ldLmNvbXBsZXRlZCkg
eworICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnOworICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSAnY2hlY2tlZCc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRl
bXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tpZH19JywgZGF0YVtpXS5pZCk7CisgICAgICAg
ICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVzY2FwZShkYXRh
W2ldLnRpdGxlKSk7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7
Y29tcGxldGVkfX0nLCBjb21wbGV0ZWQpOworICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0
ZS5yZXBsYWNlKCd7e2NoZWNrZWR9fScsIGNoZWNrZWQpOworCisgICAgICAgICAgICB2aWV3ICs9
IHRlbXBsYXRlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZpZXc7CisgICAgfQorCisg
ICAgLyoqCisgICAgICogRGlzcGxheXMgYSBjb3VudGVyIG9mIGhvdyBtYW55IHRvIGRvcyBhcmUg
bGVmdCB0byBjb21wbGV0ZQorICAgICAqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGFjdGl2ZVRv
ZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9zLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9
IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudAorICAgICAqLworICAgIGl0ZW1Db3VudGVyKGFj
dGl2ZVRvZG9zKXsKKyAgICAgICAgbGV0IHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8gJycg
OiAncyc7CisgICAgICAgIHJldHVybiBgPHN0cm9uZz4ke2FjdGl2ZVRvZG9zfTwvc3Ryb25nPiBp
dGVtJHtwbHVyYWx9IGxlZnRgOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhl
IHRleHQgd2l0aGluIHRoZSAiQ2xlYXIgY29tcGxldGVkIiBidXR0b24KKyAgICAgKgorICAgICAq
IEBwYXJhbSAge1t0eXBlXX0gY29tcGxldGVkVG9kb3MgVGhlIG51bWJlciBvZiBjb21wbGV0ZWQg
dG9kb3MuCisgICAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNv
dW50CisgICAgICovCisgICAgY2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVkVG9kb3Mpewor
ICAgICAgICByZXR1cm4gKGNvbXBsZXRlZFRvZG9zID4gMCkgPyAnQ2xlYXIgY29tcGxldGVkJyA6
ICcnOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3ZpZXcuanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L3NyYy92aWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiYTM1ZDIxOWMyYTUyMGJiMTZl
ZWQ5ODIwOWIxODc1YjdmZjc5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3Ny
Yy92aWV3LmpzCkBAIC0wLDAgKzEsMTc4IEBACisndXNlIHN0cmljdCc7CisKKworLy8gaW1wb3J0
IHtxcywgcXNhLCAkb24sICRwYXJlbnQsICRkZWxlZ2F0ZX0gZnJvbSAnLi9oZWxwZXJzJzsKKwor
bGV0IF9pdGVtSWQgPSBlbGVtZW50ID0+IHBhcnNlSW50KCRwYXJlbnQoZWxlbWVudCwgJ2xpJyku
ZGF0YXNldC5pZCwgMTApOworCitsZXQgX3NldEZpbHRlciA9IGN1cnJlbnRQYWdlID0+IHsKKyAg
ICBxcygnLmZpbHRlcnMgLnNlbGVjdGVkJykuY2xhc3NOYW1lID0gJyc7CisgICAgcXMoYC5maWx0
ZXJzIFtocmVmPSIjLyR7Y3VycmVudFBhZ2V9Il1gKS5jbGFzc05hbWUgPSAnc2VsZWN0ZWQnOwor
fTsKKworbGV0IF9lbGVtZW50Q29tcGxldGUgPSAoaWQsIGNvbXBsZXRlZCkgPT4geworICAgIGxl
dCBsaXN0SXRlbSA9IHFzKGBbZGF0YS1pZD0iJHtpZH0iXWApOworCisgICAgaWYgKCFsaXN0SXRl
bSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGlzdEl0ZW0uY2xhc3NOYW1lID0g
Y29tcGxldGVkID8gJ2NvbXBsZXRlZCcgOiAnJzsKKworICAgIC8vIEluIGNhc2UgaXQgd2FzIHRv
Z2dsZWQgZnJvbSBhbiBldmVudCBhbmQgbm90IGJ5IGNsaWNraW5nIHRoZSBjaGVja2JveAorICAg
IHFzKCdpbnB1dCcsIGxpc3RJdGVtKS5jaGVja2VkID0gY29tcGxldGVkOworfTsKKworbGV0IF9l
ZGl0SXRlbSA9IChpZCwgdGl0bGUpID0+IHsKKyAgICBsZXQgbGlzdEl0ZW0gPSBxcyhgW2RhdGEt
aWQ9IiR7aWR9Il1gKTsKKworICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGxpc3RJdGVtLmNsYXNzTmFtZSArPSAnIGVkaXRpbmcnOworCisgICAgbGV0
IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBpbnB1dC5jbGFz
c05hbWUgPSAnZWRpdCc7CisKKyAgICBsaXN0SXRlbS5hcHBlbmRDaGlsZChpbnB1dCk7CisgICAg
aW5wdXQuZm9jdXMoKTsKKyAgICBpbnB1dC52YWx1ZSA9IHRpdGxlOworfTsKKworLyoqCisgKiBW
aWV3IHRoYXQgYWJzdHJhY3RzIGF3YXkgdGhlIGJyb3dzZXIncyBET00gY29tcGxldGVseS4KKyAq
IEl0IGhhcyB0d28gc2ltcGxlIGVudHJ5IHBvaW50czoKKyAqCisgKiAgIC0gYmluZChldmVudE5h
bWUsIGhhbmRsZXIpCisgKiAgICAgVGFrZXMgYSB0b2RvIGFwcGxpY2F0aW9uIGV2ZW50IGFuZCBy
ZWdpc3RlcnMgdGhlIGhhbmRsZXIKKyAqICAgLSByZW5kZXIoY29tbWFuZCwgcGFyYW1ldGVyT2Jq
ZWN0KQorICogICAgIFJlbmRlcnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9ucwor
ICovCitjbGFzcyBWaWV3IHsKKyAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZSkgeworICAgICAgICB0
aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisKKyAgICAgICAgdGhpcy5FTlRFUl9LRVkgPSAxMzsK
KyAgICAgICAgdGhpcy5FU0NBUEVfS0VZID0gMjc7CisKKyAgICAgICAgdGhpcy4kdG9kb0xpc3Qg
PSBxcygnLnRvZG8tbGlzdCcpOworICAgICAgICB0aGlzLiR0b2RvSXRlbUNvdW50ZXIgPSBxcygn
LnRvZG8tY291bnQnKTsKKyAgICAgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQgPSBxcygnLmNsZWFy
LWNvbXBsZXRlZCcpOworICAgICAgICB0aGlzLiRtYWluID0gcXMoJy5tYWluJyk7CisgICAgICAg
IHRoaXMuJGZvb3RlciA9IHFzKCcuZm9vdGVyJyk7CisgICAgICAgIHRoaXMuJHRvZ2dsZUFsbCA9
IHFzKCcudG9nZ2xlLWFsbCcpOworICAgICAgICB0aGlzLiRuZXdUb2RvID0gcXMoJy5uZXctdG9k
bycpOworCisgICAgICAgIHRoaXMudmlld0NvbW1hbmRzID0geworICAgICAgICAgICAgc2hvd0Vu
dHJpZXM6IHBhcmFtZXRlciA9PiB0aGlzLiR0b2RvTGlzdC5pbm5lckhUTUwgPSB0aGlzLnRlbXBs
YXRlLnNob3cocGFyYW1ldGVyKSwKKyAgICAgICAgICAgIHJlbW92ZUl0ZW06IHBhcmFtZXRlciA9
PiB0aGlzLl9yZW1vdmVJdGVtKHBhcmFtZXRlciksCisgICAgICAgICAgICB1cGRhdGVFbGVtZW50
Q291bnQ6IHBhcmFtZXRlciA9PiB0aGlzLiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0gdGhp
cy50ZW1wbGF0ZS5pdGVtQ291bnRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgY2xlYXJDb21w
bGV0ZWRCdXR0b246IHBhcmFtZXRlciA9PiB0aGlzLl9jbGVhckNvbXBsZXRlZEJ1dHRvbihwYXJh
bWV0ZXIuY29tcGxldGVkLCBwYXJhbWV0ZXIudmlzaWJsZSksCisgICAgICAgICAgICBjb250ZW50
QmxvY2tWaXNpYmlsaXR5OiBwYXJhbWV0ZXIgPT4gdGhpcy4kbWFpbi5zdHlsZS5kaXNwbGF5ID0g
dGhpcy4kZm9vdGVyLnN0eWxlLmRpc3BsYXkgPSBwYXJhbWV0ZXIudmlzaWJsZSA/ICdibG9jaycg
OiAnbm9uZScsCisgICAgICAgICAgICB0b2dnbGVBbGw6IHBhcmFtZXRlciA9PiB0aGlzLiR0b2dn
bGVBbGwuY2hlY2tlZCA9IHBhcmFtZXRlci5jaGVja2VkLAorICAgICAgICAgICAgc2V0RmlsdGVy
OiBwYXJhbWV0ZXIgPT4gX3NldEZpbHRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgY2xlYXJO
ZXdUb2RvOiBwYXJhbWV0ZXIgPT4gdGhpcy4kbmV3VG9kby52YWx1ZSA9ICcnLAorICAgICAgICAg
ICAgZWxlbWVudENvbXBsZXRlOiBwYXJhbWV0ZXIgPT4gX2VsZW1lbnRDb21wbGV0ZShwYXJhbWV0
ZXIuaWQsIHBhcmFtZXRlci5jb21wbGV0ZWQpLAorICAgICAgICAgICAgZWRpdEl0ZW06IHBhcmFt
ZXRlciA9PiBfZWRpdEl0ZW0ocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIudGl0bGUpLAorICAgICAg
ICAgICAgZWRpdEl0ZW1Eb25lOiBwYXJhbWV0ZXIgPT4gdGhpcy5fZWRpdEl0ZW1Eb25lKHBhcmFt
ZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBfcmVt
b3ZlSXRlbShpZCkgeworICAgICAgICBsZXQgZWxlbSA9IHFzKGBbZGF0YS1pZD0iJHtpZH0iXWAp
OworCisgICAgICAgIGlmIChlbGVtKSB7CisgICAgICAgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1v
dmVDaGlsZChlbGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9jbGVhckNvbXBsZXRlZEJ1
dHRvbihjb21wbGV0ZWRDb3VudCwgdmlzaWJsZSkgeworICAgICAgICB0aGlzLiRjbGVhckNvbXBs
ZXRlZC5pbm5lckhUTUwgPSB0aGlzLnRlbXBsYXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBs
ZXRlZENvdW50KTsKKyAgICAgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuc3R5bGUuZGlzcGxheSA9
IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnOworICAgIH0KKworICAgIF9lZGl0SXRlbURvbmUo
aWQsIHRpdGxlKSB7CisgICAgICAgIGxldCBsaXN0SXRlbSA9IHFzKGBbZGF0YS1pZD0iJHtpZH0i
XWApOworCisgICAgICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGxldCBpbnB1dCA9IHFzKCdpbnB1dC5lZGl0JywgbGlzdEl0ZW0p
OworICAgICAgICBsaXN0SXRlbS5yZW1vdmVDaGlsZChpbnB1dCk7CisKKyAgICAgICAgbGlzdEl0
ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoJyBlZGl0aW5nJywgJycp
OworCisgICAgICAgIHFzYSgnbGFiZWwnLCBsaXN0SXRlbSkuZm9yRWFjaChsYWJlbCA9PiBsYWJl
bC50ZXh0Q29udGVudCA9IHRpdGxlKTsKKyAgICB9CisKKyAgICByZW5kZXIodmlld0NtZCwgcGFy
YW1ldGVyKSB7CisgICAgICAgIHRoaXMudmlld0NvbW1hbmRzW3ZpZXdDbWRdKHBhcmFtZXRlcik7
CisgICAgfQorCisgICAgX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcikgeworICAgICAgICBsZXQg
c2VsZiA9IHRoaXM7CisKKyAgICAgICAgJGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkgLmVk
aXQnLCAnYmx1cicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5kYXRhc2V0
LmlzY2FuY2VsZWQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsKKyAgICAgICAgICAgICAg
ICAgICAgaWQ6IF9pdGVtSWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlz
LnZhbHVlCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
CisgICAgICAgIC8vIFJlbW92ZSB0aGUgY3Vyc29yIGZyb20gdGhlIGlucHV0IHdoZW4geW91IGhp
dCBlbnRlciBqdXN0IGxpa2UgaWYgaXQgd2VyZSBhIHJlYWwgZm9ybQorICAgICAgICAkZGVsZWdh
dGUoc2VsZi4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXlwcmVzcycsIGZ1bmN0aW9uIChldmVu
dCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHNlbGYuRU5URVJfS0VZKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0KKworICAgIF9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxlcikgeworICAgICAgICBs
ZXQgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgJGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0LCAnbGkg
LmVkaXQnLCAna2V5dXAnLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVu
dC5rZXlDb2RlID09PSBzZWxmLkVTQ0FQRV9LRVkpIHsKKyAgICAgICAgICAgICAgICBsZXQgaWQg
PSBfaXRlbUlkKHRoaXMpOworICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldC5pc2NhbmNlbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmJsdXIoKTsKKworICAgICAgICAgICAgICAg
IGhhbmRsZXIoeyBpZCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgYmluZChldmVudCwgaGFuZGxlcikgeworICAgICAgICBpZiAoZXZlbnQgPT09ICduZXdUb2Rv
JykgeworICAgICAgICAgICAgJG9uKHRoaXMuJG5ld1RvZG8sICdjaGFuZ2UnLCAoKSA9PiBoYW5k
bGVyKHRoaXMuJG5ld1RvZG8udmFsdWUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0g
J3JlbW92ZUNvbXBsZXRlZCcpIHsKKyAgICAgICAgICAgICRvbih0aGlzLiRjbGVhckNvbXBsZXRl
ZCwgJ2NsaWNrJywgaGFuZGxlcik7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICd0b2dn
bGVBbGwnKSB7CisgICAgICAgICAgICAkb24odGhpcy4kdG9nZ2xlQWxsLCAnY2xpY2snLCBmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgIGhhbmRsZXIoe2NvbXBsZXRlZDogdGhpcy5jaGVja2Vk
fSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1F
ZGl0JykgeworICAgICAgICAgICAgJGRlbGVnYXRlKHRoaXMuJHRvZG9MaXN0LCAnbGkgbGFiZWwn
LCAnZGJsY2xpY2snLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGhhbmRsZXIoe2lkOiBf
aXRlbUlkKHRoaXMpfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVu
dCA9PT0gJ2l0ZW1SZW1vdmUnKSB7CisgICAgICAgICAgICAkZGVsZWdhdGUodGhpcy4kdG9kb0xp
c3QsICcuZGVzdHJveScsICdjbGljaycsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgaGFu
ZGxlcih7aWQ6IF9pdGVtSWQodGhpcyl9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50ID09PSAnaXRlbVRvZ2dsZScpIHsKKyAgICAgICAgICAgICRkZWxlZ2F0ZSh0
aGlzLiR0b2RvTGlzdCwgJy50b2dnbGUnLCAnY2xpY2snLCBmdW5jdGlvbigpeworICAgICAgICAg
ICAgICAgIGhhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICBpZDogX2l0ZW1JZCh0aGlzKSwK
KyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkOiB0aGlzLmNoZWNrZWQKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAn
aXRlbUVkaXREb25lJykgeworICAgICAgICAgICAgdGhpcy5fYmluZEl0ZW1FZGl0RG9uZShoYW5k
bGVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0Q2FuY2VsJykgewor
ICAgICAgICAgICAgdGhpcy5fYmluZEl0ZW1FZGl0Q2FuY2VsKGhhbmRsZXIpOworICAgICAgICB9
CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309847</attachid>
            <date>2017-05-11 19:15:22 -0700</date>
            <delta_ts>2017-05-11 19:52:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171448-20170511191521.patch</filename>
            <type>text/plain</type>
            <size>60756</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYxCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjY0MzJhNWIxNTNmNjZlNTFiYjk1OWRkNWVm
ZjcxOWNhOWQ0NTc5MGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhbiBFUzIwMTUgVG9kb01WQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBFUzIwMTUgVG9kb01WQyBp
bXBsZW1lbnRhdGlvbiBmb3IgU3BlZWRvbWV0ZXIKKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L2luZGV4Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbjogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQ6IEFkZGVkLgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3BhY2th
Z2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5qc2hpbnRyYzogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3Jj
L2FwcC5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2NvbnRyb2xsZXIuanM6IEFkZGVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
L3NyYy9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvbW9kZWwuanM6IEFkZGVkLgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3NyYy9zdG9yZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9zcmMvdmlldy5qczogQWRkZWQuCisKIDIwMTctMDQtMjcgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgdGVzdHMgaW5hZHZlcnRl
bnRseSBkZWxldGVkIGluIHIyMDUwMzIuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L2luZGV4
Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGI1OTNhY2ExYTc0
NzAwZDk2YmYwYTdhMTA2NGRhYzFmOGJmZGVlOQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUvaW5kZXguaHRtbApAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPHRpdGxlPkVTNiDi
gKIgVG9kb01WQzwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2Rl
X21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICA8
L2hlYWQ+CisgIDxib2R5PgorICAgIDxzZWN0aW9uIGNsYXNzPSJ0b2RvYXBwIj4KKyAgICAgICAg
PGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAgICAgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAg
ICAgICAgICA8aW5wdXQgY2xhc3M9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0
byBiZSBkb25lPyIgYXV0b2ZvY3VzPgorICAgICAgICA8L2hlYWRlcj4KKworICAgICAgICA8c2Vj
dGlvbiBjbGFzcz0ibWFpbiI+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZS1hbGwi
IHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1h
cmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0idG9kby1s
aXN0Ij48L3VsPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPGZvb3RlciBjbGFzcz0i
Zm9vdGVyIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+Cisg
ICAgICAgICAgICA8dWwgY2xhc3M9ImZpbHRlcnMiPgorICAgICAgICAgICAgICAgIDxsaT48YSBo
cmVmPSIjLyIgY2xhc3M9InNlbGVjdGVkIj5BbGw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8
bGk+PGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxs
aT48YSBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPjwvbGk+CisgICAgICAgICAgICA8
L3VsPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBj
b21wbGV0ZWQ8L2J1dHRvbj4KKyAgICAgICAgPC9mb290ZXI+CisgICAgPC9zZWN0aW9uPgorCisg
ICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0
IGEgdG9kbzwvcD4KKyAgICAgICAgPGJyPgorICAgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0
dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgPC9mb290ZXI+CisgICAgPHNj
cmlwdCBzcmM9InNyYy9jb250cm9sbGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
c3JjL2hlbHBlcnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcmMvdGVtcGxhdGUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcmMvc3RvcmUuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJzcmMvbW9kZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJzcmMvdmlldy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNyYy9hcHAuanMiPjwv
c2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2Rl
X21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODE5YjQ3OWJl
NDE1OTE0ZjBkYjNlYTEzZGMwMzYwYTA2NjhlZGYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsx
LDM3NyBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOwor
fQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRl
cjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCitib2R5IHsKKyAg
ICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2Vy
aWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7Cisg
ICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6
IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6
IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAg
IGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXdlaWdodDogMzAwOworfQor
CitidXR0b24sCitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBvdXRsaW5lOiBub25lOwor
fQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kb2FwcCB7CisgICAg
YmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAs
IDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7
Cit9CisKKy50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBm
b250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2
ZTZlNjsKK30KKworLnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQt
c3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2
OworfQorCisudG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2Owor
fQorCisudG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1
NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13
ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1
LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVn
aWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cisg
ICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworLm5ldy10b2RvLAor
LmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0
OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAg
ICBib3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAg
ICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXpp
bmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworfQorCisubmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZw
eCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwg
MCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAs
MCwwLjAzKTsKK30KKworLm1haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWlu
ZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtm
b3I9J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnRvZ2dsZS1hbGwg
eworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0x
MnB4OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKy50
b2dnbGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAy
MnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3
cHg7Cit9CisKKy50b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3
MzsKK30KKworLnRvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7Cisg
ICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246
IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHgg
c29saWQgI2VkZWRlZDsKK30KKworLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3Jk
ZXItYm90dG9tOiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRl
ci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0
aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAg
cGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9
CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
d2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vz
bid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3Np
dGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRvZG8t
bGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3Zn
K3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0i
NDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAi
IGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRo
PSIzIi8+PC9zdmc+Jyk7Cit9CisKKy50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVy
IHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdC
b3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9
Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVk
YzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7
Cit9CisKKy50b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAg
d29yZC1icmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAxNXB4
OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUt
aGVpZ2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworLnRvZG8tbGlz
dCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVj
b3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAg
ICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7Cisg
ICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhl
aWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7Cisg
ICAgY29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0
aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQorCisudG9kby1saXN0IGxpIC5kZXN0cm95Omhv
dmVyIHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworLnRvZG8tbGlzdCBsaSAuZGVzdHJveTph
ZnRlciB7CisgICAgY29udGVudDogJ8OXJzsKK30KKworLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVz
dHJveSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKy50b2RvLWxpc3QgbGkgLmVkaXQgewor
ICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxk
IHsKKyAgICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisuZm9vdGVyIHsKKyAgICBjb2xvcjog
Izc3NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30K
KworLmZvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBo
ZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFw
eCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAj
ZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4y
KSwKKyAgICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAg
ICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30KKworLnRvZG8tY291bnQg
eworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy50b2RvLWNv
dW50IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworLmZpbHRlcnMgeworICAg
IG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKy5m
aWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKy5maWx0ZXJzIGxpIGEgewor
ICAgIGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3
cHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRy
YW5zcGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLmZpbHRlcnMgbGkgYS5z
ZWxlY3RlZCwKKy5maWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgx
NzUsIDQ3LCA0NywgMC4xKTsKK30KKworLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9y
ZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVk
LAoraHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRl
Y29yYXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxl
dGVkOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8g
eworICAgIG1hcmdpbjogNjVweCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9u
dC1zaXplOiAxMHB4OworICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1
NSwgMC41KTsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxp
bmUtaGVpZ2h0OiAxOworfQorCisuaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0
ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8g
YTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAg
SGFjayB0byByZW1vdmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3Qg
dXNlIGl0IGdsb2JhbGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAor
Ki8KK0BtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkg
eworICAgIC50b2dnbGUtYWxsLAorICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAg
IGJhY2tncm91bmQ6IG5vbmU7CisgICAgfQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsK
KyAgICAgICAgaGVpZ2h0OiA0MHB4OworICAgIH0KKworICAgIC50b2dnbGUtYWxsIHsKKyAgICAg
ICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTog
cm90YXRlKDkwZGVnKTsKKyAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAg
ICBhcHBlYXJhbmNlOiBub25lOworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4
KSB7CisgICAgLmZvb3RlciB7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAu
ZmlsdGVycyB7CisgICAgICAgIGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNTI0ZWJjMmQ5YzA1NTIxNGJkZjEyNTFjODY4MTI0MDlmOWJjOTgwCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3Nz
L3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDY5IEBACit7CisgICJuYW1lIjogInRvZG9tdmMtYXBw
LWNzcyIsCisgICJzdHlsZSI6ICJpbmRleC5jc3MiLAorICAidmVyc2lvbiI6ICIyLjAuMiIsCisg
ICJkZXNjcmlwdGlvbiI6ICJDU1MgZm9yIFRvZG9NVkMgYXBwcyIsCisgICJsaWNlbnNlIjogIkND
LUJZLTQuMCIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVy
bCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzLmdpdCIK
KyAgfSwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJTaW5kcmUgU29yaHVzIiwKKyAgICAi
ZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIsCisgICAgInVybCI6ICJzaW5kcmVzb3Jo
dXMuY29tIgorICB9LAorICAiZmlsZXMiOiBbCisgICAgImluZGV4LmNzcyIKKyAgXSwKKyAgImtl
eXdvcmRzIjogWworICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAgImFwcCIsCisg
ICAgInRvZG8iLAorICAgICJ0ZW1wbGF0ZSIsCisgICAgImNzcyIsCisgICAgInN0eWxlIiwKKyAg
ICAic3R5bGVzaGVldCIKKyAgXSwKKyAgImdpdEhlYWQiOiAiZmQxZTgzZjhmNTNhMGI4NTUzNzQx
NTM2NWYyYTYzMDFiYmI0MTk5ZiIsCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9n
aXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzL2lzc3VlcyIKKyAgfSwKKyAgImhvbWVw
YWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcyIsCisgICJf
aWQiOiAidG9kb212Yy1hcHAtY3NzQDIuMC4yIiwKKyAgInNjcmlwdHMiOiB7fSwKKyAgIl9zaGFz
dW0iOiAiMzFmZjY3OWRjM2E0MDliMjYwYmM3ZTBhNmVhY2E1Zjg3NTdhODlhMSIsCisgICJfZnJv
bSI6ICJ0b2RvbXZjLWFwcC1jc3NAPj0yLjAuMSA8My4wLjAiLAorICAiX25wbVZlcnNpb24iOiAi
Mi4xNC43IiwKKyAgIl9ub2RlVmVyc2lvbiI6ICI0LjIuMSIsCisgICJfbnBtVXNlciI6IHsKKyAg
ICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21h
aWwuY29tIgorICB9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogIjMxZmY2NzlkYzNhNDA5
YjI2MGJjN2UwYTZlYWNhNWY4NzU3YTg5YTEiLAorICAgICJ0YXJiYWxsIjogImh0dHA6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAtY3NzLTIuMC4yLnRn
eiIKKyAgfSwKKyAgIm1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogInNpbmRy
ZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlvc21hbmkiLAorICAgICAgImVtYWlsIjogImFk
ZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicGFzc3ki
LAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRyZWkubmV0IgorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwKKyAgICAgICJlbWFpbCI6ICJzYXdjaHVrQGdt
YWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJkaXJlY3RvcmllcyI6IHt9LAorICAiX3Jlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBwLWNzcy8tL3RvZG9tdmMt
YXBwLWNzcy0yLjAuMi50Z3oiLAorICAicmVhZG1lIjogIkVSUk9SOiBObyBSRUFETUUgZGF0YSBm
b3VuZCEiCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZj
LWFwcC1jc3MvcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGRiZWJmMDI0YzA0YWViNjAyMGNhZjEzMWEy
ZWQwMzE4OTA4MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVs
ZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5tZApAQCAtMCwwICsxLDI4IEBACisjIHRvZG9tdmMt
YXBwLWNzcworCis+IENTUyBmb3IgVG9kb01WQyBhcHBzCisKKyFbXShzY3JlZW5zaG90LnBuZykK
KworCisjIyBJbnN0YWxsCisKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0b2RvbXZjLWFw
cC1jc3MKK2BgYAorCisKKyMjIEdldHRpbmcgc3RhcnRlZAorCitgYGBodG1sCis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3Nz
Ij4KK2BgYAorCitTZWUgdGhlIFtUb2RvTVZDIGFwcCB0ZW1wbGF0ZV0oaHR0cHM6Ly9naXRodWIu
Y29tL3Rhc3RlanMvdG9kb212Yy1hcHAtdGVtcGxhdGUpLgorCisKKworIyMgTGljZW5zZQorCis8
YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2Vz
L2J5LzQuMC9kZWVkLmVuX1VTIj48aW1nIGFsdD0iQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIiBz
dHlsZT0iYm9yZGVyLXdpZHRoOjAiIHNyYz0iaHR0cDovL2kuY3JlYXRpdmVjb21tb25zLm9yZy9s
L2J5LzQuMC84MHgxNS5wbmciIC8+PC9hPjxiciAvPlRoaXMgPHNwYW4geG1sbnM6ZGN0PSJodHRw
Oi8vcHVybC5vcmcvZGMvdGVybXMvIiBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUv
SW50ZXJhY3RpdmVSZXNvdXJjZSIgcmVsPSJkY3Q6dHlwZSI+d29yazwvc3Bhbj4gYnkgPGEgeG1s
bnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIgaHJlZj0iaHR0cDovL3NpbmRy
ZXNvcmh1cy5jb20iIHByb3BlcnR5PSJjYzphdHRyaWJ1dGlvbk5hbWUiIHJlbD0iY2M6YXR0cmli
dXRpb25VUkwiPlNpbmRyZSBTb3JodXM8L2E+IGlzIGxpY2Vuc2VkIHVuZGVyIGEgPGEgcmVsPSJs
aWNlbnNlIiBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAv
ZGVlZC5lbl9VUyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25h
bCBMaWNlbnNlPC9hPi4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJi
YzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1
bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCkBAIC0wLDAgKzEsMTQxIEBACitociB7CisgICAg
bWFyZ2luOiAyMHB4IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJvcmRlci10b3A6IDFweCBkYXNo
ZWQgI2M1YzVjNTsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNmN2Y3Zjc7Cit9CisK
Ky5sZWFybiBhIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworICAgIHRleHQtZGVjb3JhdGlv
bjogbm9uZTsKKyAgICBjb2xvcjogI2I4M2Y0NTsKK30KKworLmxlYXJuIGE6aG92ZXIgeworICAg
IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAgIGNvbG9yOiAjNzg3ZTdlOworfQorCisu
bGVhcm4gaDMsCisubGVhcm4gaDQsCisubGVhcm4gaDUgeworICAgIG1hcmdpbjogMTBweCAwOwor
ICAgIGZvbnQtd2VpZ2h0OiA1MDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICBjb2xvcjog
IzAwMDsKK30KKworLmxlYXJuIGgzIHsKKyAgICBmb250LXNpemU6IDI0cHg7Cit9CisKKy5sZWFy
biBoNCB7CisgICAgZm9udC1zaXplOiAxOHB4OworfQorCisubGVhcm4gaDUgeworICAgIG1hcmdp
bi1ib3R0b206IDA7CisgICAgZm9udC1zaXplOiAxNHB4OworfQorCisubGVhcm4gdWwgeworICAg
IHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwIDAgMzBweCAyNXB4OworfQorCisubGVhcm4gbGkg
eworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworfQorCisubGVhcm4gcCB7CisgICAgZm9udC1zaXpl
OiAxNXB4OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAg
ICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKKyNpc3N1ZS1jb3Vu
dCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnF1b3RlIHsKKyAgICBib3JkZXI6IG5vbmU7
CisgICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOworfQorCisucXVvdGUgcCB7CisgICAgZm9udC1z
dHlsZTogaXRhbGljOworfQorCisucXVvdGUgcDpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICfigJwn
OworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHRvcDogLTIwcHg7CisgICAgbGVmdDogM3B4OworfQorCisucXVvdGUg
cDphZnRlciB7CisgICAgY29udGVudDogJ+KAnSc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAg
IG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDJw
eDsKKyAgICByaWdodDogM3B4OworfQorCisucXVvdGUgZm9vdGVyIHsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDBweDsKKyAgICByaWdodDogMDsKK30KKworLnF1b3Rl
IGZvb3RlciBpbWcgeworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworLnF1b3RlIGZvb3Rl
ciBhIHsKKyAgICBtYXJnaW4tbGVmdDogNXB4OworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7
Cit9CisKKy5zcGVlY2gtYnViYmxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgcGFk
ZGluZzogMTBweDsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7CisgICAgYm9y
ZGVyLXJhZGl1czogNXB4OworfQorCisuc3BlZWNoLWJ1YmJsZTphZnRlciB7CisgICAgY29udGVu
dDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMTAwJTsKKyAgICByaWdo
dDogMzBweDsKKyAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVy
LXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOworfQorCisubGVhcm4tYmFyID4gLmxlYXJu
IHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgd2lkdGg6IDI3MnB4OworICAgIHRvcDog
OHB4OworICAgIGxlZnQ6IC0zMDBweDsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJvcmRlci1y
YWRpdXM6IDVweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42
KTsKKyAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OworICAgIHRyYW5zaXRpb24tZHVyYXRp
b246IDUwMG1zOworfQorCitAbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKKyAgICAubGVhcm4t
YmFyIHsKKyAgICAgICAgd2lkdGg6IGF1dG87CisgICAgICAgIHBhZGRpbmctbGVmdDogMzAwcHg7
CisgICAgfQorCisgICAgLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgICAgIGxlZnQ6IDhweDsK
KyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdm
ODMwZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vYmFzZS5qcwpAQCAtMCwwICsxLDI0OSBAQAorLyogZ2xvYmFsIF8gKi8KKyhm
dW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLyoganNoaW50IGlnbm9yZTpz
dGFydCAqLworICAgIC8vIFVuZGVyc2NvcmUncyBUZW1wbGF0ZSBNb2R1bGUKKyAgICAvLyBDb3Vy
dGVzeSBvZiB1bmRlcnNjb3JlanMub3JnCisgICAgdmFyIF8gPSAoZnVuY3Rpb24gKF8pIHsKKyAg
ICAgICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3QpIHsKKyAgICAgICAgICAgIGlmICgh
b2JqZWN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1bWVu
dHMubGVuZ3RoOyBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgeworICAgICAg
ICAgICAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3VtZW50c1thcmdzSW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmIChpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkg
aW4gaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Rba2V5XSA9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSBpdGVy
YWJsZVtrZXldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUg
dXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQorICAgICAgICAv
LyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRl
cnMuCisgICAgICAgIF8udGVtcGxhdGVTZXR0aW5ncyA9IHsKKyAgICAgICAgICAgIGV2YWx1YXRl
ICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBpbnRlcnBvbGF0ZSA6IC88JT0o
W1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGVzY2FwZSAgICAgIDogLzwlLShbXHNcU10rPykl
Pi9nCisgICAgICAgIH07CisKKyAgICAgICAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVT
ZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgorICAgICAgICAvLyBpbnRl
cnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0
IGlzCisgICAgICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgorICAgICAgICB2YXIgbm9N
YXRjaCA9IC8oLileLzsKKworICAgICAgICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBi
ZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYQorICAgICAgICAvLyBzdHJp
bmcgbGl0ZXJhbC4KKyAgICAgICAgdmFyIGVzY2FwZXMgPSB7CisgICAgICAgICAgICAiJyI6ICAg
ICAgIiciLAorICAgICAgICAgICAgJ1xcJzogICAgICdcXCcsCisgICAgICAgICAgICAnXHInOiAg
ICAgJ3InLAorICAgICAgICAgICAgJ1xuJzogICAgICduJywKKyAgICAgICAgICAgICdcdCc6ICAg
ICAndCcsCisgICAgICAgICAgICAnXHUyMDI4JzogJ3UyMDI4JywKKyAgICAgICAgICAgICdcdTIw
MjknOiAndTIwMjknCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGVzY2FwZXIgPSAvXFx8J3xc
cnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBtaWNyby10
ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMs
IHByZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgICAgICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMg
cXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KKyAgICAgICAgXy50ZW1wbGF0ZSA9IGZ1
bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7CisgICAgICAgICAgICB2YXIgcmVuZGVyOwor
ICAgICAgICAgICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0
ZVNldHRpbmdzKTsKKworICAgICAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25l
IHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisgICAgICAgICAgICB2YXIgbWF0
Y2hlciA9IG5ldyBSZWdFeHAoWworICAgICAgICAgICAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwg
bm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8
fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8
IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICAgICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpOwor
CisgICAgICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0
cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsK
KyAgICAgICAgICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKKyAgICAgICAgICAgIHRleHQucmVw
bGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVh
dGUsIG9mZnNldCkgeworICAgICAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4
LCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0aW9u
KG1hdGNoKSB7IHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pOworCisgICAgICAgICAg
ICAgICAgaWYgKGVzY2FwZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4o
KF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIp
KT09bnVsbD8nJzpfX3QpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChldmFsdWF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsg
ZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2g7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiI7CisK
KyAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0
YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgICAgICBpZiAoIXNldHRpbmdzLnZhcmlh
YmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKKworICAg
ICAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9p
biwiICsKKyAgICAgICAgICAgICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFy
Z3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAgICAgICAgIHNvdXJjZSArICJyZXR1cm4gX19w
O1xuIjsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZW5kZXIgPSBuZXcg
RnVuY3Rpb24oc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTsKKyAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBlLnNvdXJjZSA9IHNvdXJjZTsK
KyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKKyAgICAgICAgICAgIHZhciB0ZW1wbGF0
ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyLmNhbGwo
dGhpcywgZGF0YSwgXyk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvLyBQcm92aWRl
IHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29t
cGlsYXRpb24uCisgICAgICAgICAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChz
ZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7CisKKyAg
ICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4g
XzsKKyAgICB9KSh7fSk7CisKKyAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0b2RvbXZj
LmNvbScpIHsKKyAgICAgICAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2dsZUFuYWx5
dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpeworICAgICAgICAoaVtyXS5xPWlb
cl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMuY3JlYXRl
RWxlbWVudChvKSwKKyAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5
bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQorICAgICAgICB9KSh3
aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29t
L2FuYWx5dGljcy5qcycsJ2dhJyk7CisgICAgICAgIGdhKCdjcmVhdGUnLCAnVUEtMzEwODEwNjIt
MScsICdhdXRvJyk7CisgICAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CisgICAgfQorICAg
IC8qIGpzaGludCBpZ25vcmU6ZW5kICovCisKKyAgICBmdW5jdGlvbiByZWRpcmVjdCgpIHsKKyAg
ICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVqcy5naXRodWIuaW8nKSB7Cisg
ICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCd0YXN0ZWpz
LmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMuY29tJyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKKyAgICAgICAgdmFyIGJhc2UgPSBsb2NhdGlvbi5o
cmVmLmluZGV4T2YoJ2V4YW1wbGVzLycpOworICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5z
dWJzdHIoMCwgYmFzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxs
YmFjaykgeworICAgICAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKKyAgICAgICAgICAgIHJldHVy
biBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9tIGEgc2Vy
dmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisgICAgICAgIHhoci5vcGVuKCdH
RVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7CisgICAgICAgIHhoci5zZW5kKCk7CisKKyAg
ICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh4aHIuc3Rh
dHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayh4aHIu
cmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgeworICAgICAgICBpZiAoISh0aGlzIGlu
c3RhbmNlb2YgTGVhcm4pKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IExlYXJuKGxlYXJuSlNP
TiwgY29uZmlnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3b3Jr
OworCisgICAgICAgIGlmICh0eXBlb2YgbGVhcm5KU09OICE9PSAnb2JqZWN0JykgeworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJu
SlNPTik7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZpZykgeworICAg
ICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7CisgICAgICAgICAgICBmcmFtZXdv
cmsgPSBjb25maWcuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0ZW1wbGF0
ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxlYXJu
SlNPTi50ZW1wbGF0ZXMudG9kb212YzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnJhbWV3
b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkgeworICAg
ICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3
b3JrXScpLmRhdGFzZXQuZnJhbWV3b3JrOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy50ZW1w
bGF0ZSA9IHRlbXBsYXRlOworCisgICAgICAgIGlmIChsZWFybkpTT04uYmFja2VuZCkgeworICAg
ICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OLmJhY2tlbmQ7CisgICAgICAg
ICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsKKyAgICAgICAg
ICAgIHRoaXMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICBiYWNrZW5kOiB0cnVlCisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWFybkpTT05bZnJhbWV3b3JrXSkgeworICAg
ICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OID0gbGVhcm5KU09OW2ZyYW1ld29ya107CisgICAg
ICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04uaXNzdWVMYWJlbCA9IGZyYW1ld29yazsKKyAgICAg
ICAgICAgIHRoaXMuYXBwZW5kKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmZldGNoSXNz
dWVDb3VudCgpOworICAgIH0KKworICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlv
biAob3B0cykgeworICAgICAgICB2YXIgYXNpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdh
c2lkZScpOworICAgICAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRlbXBsYXRlKHRoaXMudGVtcGxh
dGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7CisgICAgICAgIGFzaWRlLmNsYXNzTmFtZSA9ICdsZWFy
bic7CisKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5iYWNrZW5kKSB7CisgICAgICAgICAgICAv
LyBSZW1vdmUgZGVtbyBsaW5rCisgICAgICAgICAgICB2YXIgc291cmNlTGlua3MgPSBhc2lkZS5x
dWVyeVNlbGVjdG9yKCcuc291cmNlLWxpbmtzJyk7CisgICAgICAgICAgICB2YXIgaGVhZGluZyA9
IHNvdXJjZUxpbmtzLmZpcnN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgdmFyIHNvdXJjZUxp
bmsgPSBzb3VyY2VMaW5rcy5sYXN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgLy8gQ29ycmVj
dCBsaW5rIHBhdGgKKyAgICAgICAgICAgIHZhciBocmVmID0gc291cmNlTGluay5nZXRBdHRyaWJ1
dGUoJ2hyZWYnKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywg
aHJlZi5zdWJzdHIoaHJlZi5sYXN0SW5kZXhPZignaHR0cCcpKSk7CisgICAgICAgICAgICBzb3Vy
Y2VMaW5rcy5pbm5lckhUTUwgPSBoZWFkaW5nLm91dGVySFRNTCArIHNvdXJjZUxpbmsub3V0ZXJI
VE1MOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTG9jYWxpemUgZGVtbyBsaW5r
cworICAgICAgICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5k
ZW1vLWxpbmsnKTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVt
b0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVtb0xp
bmsuZ2V0QXR0cmlidXRlKCdocmVmJykuc3Vic3RyKDAsIDQpICE9PSAnaHR0cCcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgZmluZFJvb3QoKSAr
IGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1l
ID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1iYXInKS50cmltKCk7CisgICAg
ICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgYXNpZGUu
b3V0ZXJIVE1MKTsKKyAgICB9OworCisgICAgTGVhcm4ucHJvdG90eXBlLmZldGNoSXNzdWVDb3Vu
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGlzc3VlTGluayA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpc3N1ZS1jb3VudC1saW5rJyk7CisgICAgICAgIGlmIChpc3N1ZUxpbmspIHsK
KyAgICAgICAgICAgIHZhciB1cmwgPSBpc3N1ZUxpbmsuaHJlZi5yZXBsYWNlKCdodHRwczovL2dp
dGh1Yi5jb20nLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcycpOworICAgICAgICAgICAg
dmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9wZW4oJ0dF
VCcsIHVybCwgdHJ1ZSk7CisgICAgICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgcGFyc2VkUmVzcG9uc2UgPSBKU09OLnBhcnNlKGUudGFyZ2V0
LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlc3BvbnNlIGluc3Rh
bmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gcGFyc2VkUmVz
cG9uc2UubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlzc3VlTGluay5pbm5lckhUTUwgPSAnVGhpcyBhcHAgaGFz
ICcgKyBjb3VudCArICcgb3BlbiBpc3N1ZXMnOworICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxp
bmUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
cmVkaXJlY3QoKTsKKyAgICBnZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOworfSkoKTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2th
Z2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2th
Z2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MDU2YzRiZjA3ODc4MDkyOTNjMWQzMWU1YjJmM2ZkODQzYzEx
MmZhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNjQgQEAKK3sKKyAgIm5hbWUiOiAidG9k
b212Yy1jb21tb24iLAorICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICJkZXNjcmlwdGlvbiI6ICJD
b21tb24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcyIsCisgICJsaWNlbnNlIjog
Ik1JVCIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVybCI6
ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24uZ2l0IgorICB9
LAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlRhc3RlSlMiCisgIH0sCisgICJtYWluIjog
ImJhc2UuanMiLAorICAiZmlsZXMiOiBbCisgICAgImJhc2UuanMiLAorICAgICJiYXNlLmNzcyIK
KyAgXSwKKyAgImtleXdvcmRzIjogWworICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisg
ICAgInV0aWwiLAorICAgICJ1dGlsaXRpZXMiCisgIF0sCisgICJnaXRIZWFkIjogImU4MmQwYzc5
ZTAxNjg3Y2U3NDA3ZGY3ODZjYzc4NGFkODIxNjZjYjMiLAorICAiYnVncyI6IHsKKyAgICAidXJs
IjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtY29tbW9uL2lzc3VlcyIKKyAg
fSwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtY29t
bW9uIiwKKyAgIl9pZCI6ICJ0b2RvbXZjLWNvbW1vbkAxLjAuMiIsCisgICJzY3JpcHRzIjoge30s
CisgICJfc2hhc3VtIjogImViM2FiNjEyODFhYzc0ODA5ZjU4NjljOTE3YzdiMDhiYzg0MjM0ZTAi
LAorICAiX2Zyb20iOiAidG9kb212Yy1jb21tb25APj0xLjAuMiA8Mi4wLjAiLAorICAiX25wbVZl
cnNpb24iOiAiMi43LjQiLAorICAiX25vZGVWZXJzaW9uIjogIjAuMTIuMiIsCisgICJfbnBtVXNl
ciI6IHsKKyAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVz
b3JodXNAZ21haWwuY29tIgorICB9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogImViM2Fi
NjEyODFhYzc0ODA5ZjU4NjljOTE3YzdiMDhiYzg0MjM0ZTAiLAorICAgICJ0YXJiYWxsIjogImh0
dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0x
LjAuMi50Z3oiCisgIH0sCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6
ICJzaW5kcmVzb3JodXMiLAorICAgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20i
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJhZGR5b3NtYW5pIiwKKyAgICAgICJlbWFp
bCI6ICJhZGR5b3NtYW5pQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
InBhc3N5IiwKKyAgICAgICJlbWFpbCI6ICJwaGFydGlnQHJkcmVpLm5ldCIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInN0ZXBoZW5wbHVzcGx1cyIsCisgICAgICAiZW1haWwiOiAic2F3
Y2h1a0BnbWFpbC5jb20iCisgICAgfQorICBdLAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgIl9y
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8tL3Rv
ZG9tdmMtY29tbW9uLTEuMC4yLnRneiIsCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBk
YXRhIGZvdW5kISIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTVkZTUxMThmM2ZjNzc1OGU4ZGRjMGE2
ODY4NzQ5Y2VlOWNhZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9ub2RlX21v
ZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kCkBAIC0wLDAgKzEsMTUgQEAKKyMgdG9kb212
Yy1jb21tb24KKworPiBDb21tb24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcwor
CisKKyMjIEluc3RhbGwKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0b2RvbXZjLWNvbW1v
bgorYGBgCisKKworIyMgTGljZW5zZQorCitNSVQgwqkgW1Rhc3RlSlNdKGh0dHA6Ly90YXN0ZWpz
LmNvbSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI2YmM5MmZjYTcxNjVlYWE4N2EwNzRlY2U1
M2ZiZmFhMmQ4ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvcGFja2FnZS5q
c29uCkBAIC0wLDAgKzEsNyBAQAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgInRvZG9tdmMtYXBwLWNzcyI6ICJeMi4wLjEiLAorICAgICJ0b2RvbXZjLWNv
bW1vbiI6ICJeMS4wLjIiCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5q
c2hpbnRyYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjLy5qc2hpbnRyYwpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZmQ0OGVi
MjkxYTNmYzRkZDVjMjlhNzJlZWRmOGM3NWUzOTg3ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS9zcmMvLmpzaGludHJjCkBAIC0wLDAgKzEsMyBAQAoreworCSJlc25leHQiOiB0
cnVlCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9hcHAuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3NyYy9hcHAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY1ZDljNTZkMWIzOGE5OWI3ZWYxN2I4MDI0Y2Jh
MjA3OTgzZTg4OQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2FwcC5qcwpA
QCAtMCwwICsxLDI3IEBACisndXNlIHN0cmljdCc7CisKK2xldCB0b2RvOworY29uc3Qgc2V0Vmll
dyA9ICgpID0+IHRvZG8uY29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50LmxvY2F0aW9uLmhhc2gp
OworCitjbGFzcyBUb2RvIHsKKyAgICAvKioKKyAgICAgKiBJbml0IG5ldyBUb2RvIExpc3QKKyAg
ICAgKiBAcGFyYW0gIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHlvdXIgbGlzdAorICAgICAqLworICAg
IGNvbnN0cnVjdG9yKG5hbWUpIHsKKyAgICAgICAgdGhpcy5zdG9yYWdlID0gbmV3IFN0b3JlKG5h
bWUpOworICAgICAgICB0aGlzLm1vZGVsID0gbmV3IE1vZGVsKHRoaXMuc3RvcmFnZSk7CisKKyAg
ICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSgpOworICAgICAgICB0aGlzLnZpZXcg
PSBuZXcgVmlldyh0aGlzLnRlbXBsYXRlKTsKKworICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBu
ZXcgQ29udHJvbGxlcih0aGlzLm1vZGVsLCB0aGlzLnZpZXcpOworICAgIH0KK30KKworJG9uKHdp
bmRvdywgJ2xvYWQnLCAoKSA9PiB7CisgICAgdG9kbyA9IG5ldyBUb2RvKCd0b2Rvcy12YW5pbGxh
anMnKTsKKyAgICBzZXRWaWV3KCk7Cit9KTsKKworJG9uKHdpbmRvdywgJ2hhc2hjaGFuZ2UnLCBz
ZXRWaWV3KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2NvbnRyb2xsZXIuanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1L3NyYy9jb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyNjkzZWMyMGVlMTI1
YmY4MWVmZmU3YTcyYjgzNzRlMTYyOGQ5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1L3NyYy9jb250cm9sbGVyLmpzCkBAIC0wLDAgKzEsMjE0IEBACisndXNlIHN0cmljdCc7CisK
K2NsYXNzIENvbnRyb2xsZXIgeworICAgIC8qKgorICAgICAqIFRha2UgYSBtb2RlbCAmIHZpZXcs
IHRoZW4gYWN0IGFzIGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtCisgICAgICogQHBhcmFtICB7b2Jq
ZWN0fSBtb2RlbCBUaGUgbW9kZWwgaW5zdGFuY2UKKyAgICAgKiBAcGFyYW0gIHtvYmplY3R9IHZp
ZXcgIFRoZSB2aWV3IGluc3RhbmNlCisgICAgICovCisgICAgY29uc3RydWN0b3IobW9kZWwsIHZp
ZXcpIHsKKyAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsOworICAgICAgICB0aGlzLnZpZXcgPSB2
aWV3OworCisgICAgICAgIHRoaXMudmlldy5iaW5kKCduZXdUb2RvJywgdGl0bGUgPT4gdGhpcy5h
ZGRJdGVtKHRpdGxlKSk7CisgICAgICAgIHRoaXMudmlldy5iaW5kKCdpdGVtRWRpdCcsIGl0ZW0g
PT4gdGhpcy5lZGl0SXRlbShpdGVtLmlkKSk7CisgICAgICAgIHRoaXMudmlldy5iaW5kKCdpdGVt
RWRpdERvbmUnLCBpdGVtID0+IHRoaXMuZWRpdEl0ZW1TYXZlKGl0ZW0uaWQsIGl0ZW0udGl0bGUp
KTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ2l0ZW1FZGl0Q2FuY2VsJywgaXRlbSA9PiB0aGlz
LmVkaXRJdGVtQ2FuY2VsKGl0ZW0uaWQpKTsKKyAgICAgICAgdGhpcy52aWV3LmJpbmQoJ2l0ZW1S
ZW1vdmUnLCBpdGVtID0+IHRoaXMucmVtb3ZlSXRlbShpdGVtLmlkKSk7CisgICAgICAgIHRoaXMu
dmlldy5iaW5kKCdpdGVtVG9nZ2xlJywgaXRlbSA9PiB0aGlzLnRvZ2dsZUNvbXBsZXRlKGl0ZW0u
aWQsIGl0ZW0uY29tcGxldGVkKSk7CisgICAgICAgIHRoaXMudmlldy5iaW5kKCdyZW1vdmVDb21w
bGV0ZWQnLCAoKSA9PiB0aGlzLnJlbW92ZUNvbXBsZXRlZEl0ZW1zKCkpOworICAgICAgICB0aGlz
LnZpZXcuYmluZCgndG9nZ2xlQWxsJywgc3RhdHVzID0+IHRoaXMudG9nZ2xlQWxsKHN0YXR1cy5j
b21wbGV0ZWQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb2FkICYgSW5pdGlhbGl6ZSB0
aGUgdmlldworICAgICAqIEBwYXJhbSB7c3RyaW5nfSAgJycgfCAnYWN0aXZlJyB8ICdjb21wbGV0
ZWQnCisgICAgICovCisgICAgc2V0VmlldyhoYXNoKXsKKyAgICAgICAgbGV0IHJvdXRlID0gaGFz
aC5zcGxpdCgnLycpWzFdOworICAgICAgICBsZXQgcGFnZSA9IHJvdXRlIHx8ICcnOworICAgICAg
ICB0aGlzLl91cGRhdGVGaWx0ZXIocGFnZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRXZl
bnQgZmlyZXMgb24gbG9hZC4gR2V0cyBhbGwgaXRlbXMgJiBkaXNwbGF5cyB0aGVtCisgICAgICov
CisgICAgc2hvd0FsbCgpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoZGF0YSA9PiB0aGlzLnZp
ZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBSZW5kZXJzIGFsbCBhY3RpdmUgdGFza3MKKyAgICAgKi8KKyAgICBzaG93QWN0aXZlKCl7Cisg
ICAgICAgIHRoaXMubW9kZWwucmVhZCh7Y29tcGxldGVkOiBmYWxzZX0sIGRhdGEgPT4gdGhpcy52
aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKSk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogUmVuZGVycyBhbGwgY29tcGxldGVkIHRhc2tzCisgICAgICovCisgICAgc2hvd0NvbXBsZXRl
ZCgpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoe2NvbXBsZXRlZDogdHJ1ZX0sIGRhdGEgPT4g
dGhpcy52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKSk7CisgICAgfQorCisgICAgLyoq
CisgICAgICogQW4gZXZlbnQgdG8gZmlyZSB3aGVuZXZlciB5b3Ugd2FudCB0byBhZGQgYW4gaXRl
bS4gU2ltcGx5IHBhc3MgaW4gdGhlIGV2ZW50CisgICAgICogb2JqZWN0IGFuZCBpdCdsbCBoYW5k
bGUgdGhlIERPTSBpbnNlcnRpb24gYW5kIHNhdmluZyBvZiB0aGUgbmV3IGl0ZW0uCisgICAgICov
CisgICAgYWRkSXRlbSh0aXRsZSl7CisgICAgICAgIGlmICh0aXRsZS50cmltKCkgPT09ICcnKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm1vZGVsLmNy
ZWF0ZSh0aXRsZSwgKCkgPT4geworICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcignY2xlYXJO
ZXdUb2RvJyk7CisgICAgICAgICAgICB0aGlzLl9maWx0ZXIodHJ1ZSk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIC8qCisgICAgICogVHJpZ2dlcnMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLgor
ICAgICAqLworICAgIGVkaXRJdGVtKGlkKXsKKyAgICAgICAgdGhpcy5tb2RlbC5yZWFkKGlkLCBk
YXRhID0+IHsKKyAgICAgICAgICAgIGxldCB0aXRsZSA9IGRhdGFbMF0udGl0bGU7CisgICAgICAg
ICAgICB0aGlzLnZpZXcucmVuZGVyKCdlZGl0SXRlbScsIHtpZCwgdGl0bGV9KTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGaW5pc2hlcyB0aGUgaXRlbSBlZGl0aW5nIG1v
ZGUgc3VjY2Vzc2Z1bGx5LgorICAgICAqLworICAgIGVkaXRJdGVtU2F2ZShpZCwgdGl0bGUpewor
ICAgICAgICB0aXRsZSA9IHRpdGxlLnRyaW0oKTsKKworICAgICAgICBpZiAodGl0bGUubGVuZ3Ro
ICE9PSAwKSB7CisgICAgICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZShpZCwge3RpdGxlfSwgKCkg
PT4geworICAgICAgICAgICAgICAgIHRoaXMudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtp
ZCwgdGl0bGV9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5yZW1vdmVJdGVtKGlkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAg
ICogQ2FuY2VscyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisgICAgICovCisgICAgZWRpdEl0ZW1D
YW5jZWwoaWQpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoaWQsIGRhdGEgPT4geworICAgICAg
ICAgICAgbGV0IHRpdGxlID0gZGF0YVswXS50aXRsZTsKKyAgICAgICAgICAgIHRoaXMudmlldy5y
ZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGV9KTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogRmluZCB0aGUgRE9NIGVsZW1lbnQgd2l0aCBnaXZlbiBJRCwKKyAg
ICAgKiBUaGVuIHJlbW92ZSBpdCBmcm9tIERPTSAmIFN0b3JhZ2UKKyAgICAgKi8KKyAgICByZW1v
dmVJdGVtKGlkKXsKKyAgICAgICAgdGhpcy5tb2RlbC5yZW1vdmUoaWQsICgpID0+IHRoaXMudmll
dy5yZW5kZXIoJ3JlbW92ZUl0ZW0nLCBpZCkpOworICAgICAgICB0aGlzLl9maWx0ZXIoKTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0ZW1zIGZy
b20gdGhlIERPTSBhbmQgc3RvcmFnZS4KKyAgICAgKi8KKyAgICByZW1vdmVDb21wbGV0ZWRJdGVt
cygpeworICAgICAgICB0aGlzLm1vZGVsLnJlYWQoe2NvbXBsZXRlZDogdHJ1ZX0sIGRhdGEgPT4g
eworICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBkYXRhKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5yZW1vdmVJdGVtKGl0ZW0uaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwor
ICAgICAgICB0aGlzLl9maWx0ZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHaXZlIGl0
IGFuIElEIG9mIGEgbW9kZWwgYW5kIGEgY2hlY2tib3ggYW5kIGl0IHdpbGwgdXBkYXRlIHRoZSBp
dGVtCisgICAgICogaW4gc3RvcmFnZSBiYXNlZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS4KKyAg
ICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGVsZW1lbnQgdG8g
Y29tcGxldGUgb3IgdW5jb21wbGV0ZQorICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVja2JveCBU
aGUgY2hlY2tib3ggdG8gY2hlY2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRlCisgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgIG9yIG5vdAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmlu
ZWR9IHNpbGVudCBQcmV2ZW50IHJlLWZpbHRlcmluZyB0aGUgdG9kbyBpdGVtcworICAgICAqLwor
ICAgIHRvZ2dsZUNvbXBsZXRlKGlkLCBjb21wbGV0ZWQsIHNpbGVudCl7CisgICAgICAgIHRoaXMu
bW9kZWwudXBkYXRlKGlkLCB7Y29tcGxldGVkfSwgKCkgPT4geworICAgICAgICAgICAgdGhpcy52
aWV3LnJlbmRlcignZWxlbWVudENvbXBsZXRlJywge2lkLCBjb21wbGV0ZWR9KTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgaWYgKCFzaWxlbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZpbHRlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCB0b2dnbGUgQUxMIGNo
ZWNrYm94ZXMnIG9uL29mZiBzdGF0ZSBhbmQgY29tcGxldGVuZXNzIG9mIG1vZGVscy4KKyAgICAg
KiBKdXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9iamVjdC4KKyAgICAgKi8KKyAgICB0b2dnbGVBbGwo
Y29tcGxldGVkKXsKKyAgICAgICAgdGhpcy5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6ICFjb21wbGV0
ZWR9LCBkYXRhID0+IHsKKyAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZGF0YSkgeworICAg
ICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgY29tcGxldGVkLCB0cnVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fZmlsdGVyKCk7
CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgcGllY2VzIG9mIHRoZSBwYWdl
IHdoaWNoIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIHJlbWFpbmluZworICAgICAqIG51bWJlciBv
ZiB0b2Rvcy4KKyAgICAgKi8KKyAgICBfdXBkYXRlQ291bnQoKXsKKyAgICAgICAgdGhpcy5tb2Rl
bC5nZXRDb3VudCh0b2RvcyA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWQgPSB0b2Rv
cy5jb21wbGV0ZWQ7CisgICAgICAgICAgICBjb25zdCB2aXNpYmxlID0gY29tcGxldGVkID4gMDsK
KyAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBjb21wbGV0ZWQgPT09IHRvZG9zLnRvdGFsOwor
CisgICAgICAgICAgICB0aGlzLnZpZXcucmVuZGVyKCd1cGRhdGVFbGVtZW50Q291bnQnLCB0b2Rv
cy5hY3RpdmUpOworICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlcignY2xlYXJDb21wbGV0ZWRC
dXR0b24nLCB7Y29tcGxldGVkLCB2aXNpYmxlfSk7CisKKyAgICAgICAgICAgIHRoaXMudmlldy5y
ZW5kZXIoJ3RvZ2dsZUFsbCcsIHtjaGVja2VkfSk7CisgICAgICAgICAgICB0aGlzLnZpZXcucmVu
ZGVyKCdjb250ZW50QmxvY2tWaXNpYmlsaXR5Jywge3Zpc2libGU6IHRvZG9zLnRvdGFsID4gMH0p
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZS1maWx0ZXJzIHRoZSB0
b2RvIGl0ZW1zLCBiYXNlZCBvbiB0aGUgYWN0aXZlIHJvdXRlLgorICAgICAqIEBwYXJhbSB7Ym9v
bGVhbnx1bmRlZmluZWR9IGZvcmNlICBmb3JjZXMgYSByZS1wYWludGluZyBvZiB0b2RvIGl0ZW1z
LgorICAgICAqLworICAgIF9maWx0ZXIoZm9yY2UpeworICAgICAgICBsZXQgYWN0aXZlID0gdGhp
cy5fYWN0aXZlUm91dGU7CisgICAgICAgIGNvbnN0IGFjdGl2ZVJvdXRlID0gYWN0aXZlLmNoYXJB
dCgwKS50b1VwcGVyQ2FzZSgpICsgYWN0aXZlLnN1YnN0cigxKTsKKworICAgICAgICAvLyBVcGRh
dGUgdGhlIGVsZW1lbnRzIG9uIHRoZSBwYWdlLCB3aGljaCBjaGFuZ2Ugd2l0aCBlYWNoIGNvbXBs
ZXRlZCB0b2RvCisgICAgICAgIHRoaXMuX3VwZGF0ZUNvdW50KCk7CisKKyAgICAgICAgLy8gSWYg
dGhlIGxhc3QgYWN0aXZlIHJvdXRlIGlzbid0ICJBbGwiLCBvciB3ZSdyZSBzd2l0Y2hpbmcgcm91
dGVzLCB3ZQorICAgICAgICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRlbSBlbGVtZW50cywgY2Fs
bGluZzoKKyAgICAgICAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0ZWRdKCkKKyAg
ICAgICAgaWYgKGZvcmNlIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gJ0FsbCcgfHwgdGhp
cy5fbGFzdEFjdGl2ZVJvdXRlICE9PSBhY3RpdmVSb3V0ZSkgeworICAgICAgICAgICAgdGhpc1sn
c2hvdycgKyBhY3RpdmVSb3V0ZV0oKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2xhc3RB
Y3RpdmVSb3V0ZSA9IGFjdGl2ZVJvdXRlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNpbXBs
eSB1cGRhdGVzIHRoZSBmaWx0ZXIgbmF2J3Mgc2VsZWN0ZWQgc3RhdGVzCisgICAgICovCisgICAg
X3VwZGF0ZUZpbHRlcihjdXJyZW50UGFnZSl7CisgICAgICAgIC8vIFN0b3JlIGEgcmVmZXJlbmNl
IHRvIHRoZSBhY3RpdmUgcm91dGUsIGFsbG93aW5nIHVzIHRvIHJlLWZpbHRlciB0b2RvCisgICAg
ICAgIC8vIGl0ZW1zIGFzIHRoZXkgYXJlIG1hcmtlZCBjb21wbGV0ZSBvciBpbmNvbXBsZXRlLgor
ICAgICAgICB0aGlzLl9hY3RpdmVSb3V0ZSA9IGN1cnJlbnRQYWdlOworCisgICAgICAgIGlmIChj
dXJyZW50UGFnZSA9PT0gJycpIHsKKyAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVJvdXRlID0gJ0Fs
bCc7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9maWx0ZXIoKTsKKworICAgICAgICB0aGlz
LnZpZXcucmVuZGVyKCdzZXRGaWx0ZXInLCBjdXJyZW50UGFnZSk7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvaGVscGVycy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2hl
bHBlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0ZmM0ODM1MTVmODE5YzU0NDMzOThiNDI5ZmU0YzI1ZGI1
N2VjOAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL2hlbHBlcnMuanMKQEAg
LTAsMCArMSw1MyBAQAorJ3VzZSBzdHJpY3QnOworCisKKy8vIEFsbG93IGZvciBsb29waW5nIG9u
IG5vZGVzIGJ5IGNoYWluaW5nOgorLy8gcXNhKCcuZm9vJykuZm9yRWFjaChmdW5jdGlvbiAoKSB7
fSkKK05vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7
CisKKy8vIEdldCBlbGVtZW50KHMpIGJ5IENTUyBzZWxlY3RvcjoKK2Z1bmN0aW9uIHFzKHNlbGVj
dG9yLCBzY29wZSkgeworICAgIHJldHVybiAoc2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0
b3Ioc2VsZWN0b3IpOworfQorCitmdW5jdGlvbiBxc2Eoc2VsZWN0b3IsIHNjb3BlKSB7CisgICAg
cmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7Cit9
CisKKy8vIGFkZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjoKK2Z1bmN0aW9uICRvbih0YXJnZXQsIHR5
cGUsIGNhbGxiYWNrLCB1c2VDYXB0dXJlKSB7CisgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIo
dHlwZSwgY2FsbGJhY2ssICEhdXNlQ2FwdHVyZSk7Cit9CisKKy8vIEF0dGFjaCBhIGhhbmRsZXIg
dG8gZXZlbnQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciwKKy8vIG5v
dyBvciBpbiB0aGUgZnV0dXJlLCBiYXNlZCBvbiBhIHJvb3QgZWxlbWVudAorZnVuY3Rpb24gJGRl
bGVnYXRlKHRhcmdldCwgc2VsZWN0b3IsIHR5cGUsIGhhbmRsZXIpIHsKKyAgICBsZXQgZGlzcGF0
Y2hFdmVudCA9IGV2ZW50ID0+IHsKKyAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGV2ZW50
LnRhcmdldDsKKyAgICAgICAgY29uc3QgcG90ZW50aWFsRWxlbWVudHMgPSBxc2Eoc2VsZWN0b3Is
IHRhcmdldCk7CisgICAgICAgIGNvbnN0IGhhc01hdGNoID0gQXJyYXkucHJvdG90eXBlLmluZGV4
T2YuY2FsbChwb3RlbnRpYWxFbGVtZW50cywgdGFyZ2V0RWxlbWVudCkgPj0gMDsKKworICAgICAg
ICBpZiAoaGFzTWF0Y2gpIHsKKyAgICAgICAgICAgIGhhbmRsZXIuY2FsbCh0YXJnZXRFbGVtZW50
LCBldmVudCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2JsdXIKKyAgICBjb25zdCB1c2VDYXB0
dXJlID0gdHlwZSA9PT0gJ2JsdXInIHx8IHR5cGUgPT09ICdmb2N1cyc7CisKKyAgICAkb24odGFy
Z2V0LCB0eXBlLCBkaXNwYXRjaEV2ZW50LCB1c2VDYXB0dXJlKTsKK30KKworLy8gRmluZCB0aGUg
ZWxlbWVudCdzIHBhcmVudCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZToKKy8vICRwYXJlbnQocXMo
J2EnKSwgJ2RpdicpCitmdW5jdGlvbiAkcGFyZW50KGVsZW1lbnQsIHRhZ05hbWUpIHsKKyAgICBp
ZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGVsZW1lbnQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUu
dG9Mb3dlckNhc2UoKSkgeworICAgICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlOworICAg
IH0KKworICAgIHJldHVybiAkcGFyZW50KGVsZW1lbnQucGFyZW50Tm9kZSwgdGFnTmFtZSk7Cit9
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9tb2RlbC5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUv
c3JjL21vZGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOGQ1ODE4MWJiNTIxMzNmMGNmNjdjZGJlNjM3NmNm
NmE3ZWE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy9tb2RlbC5qcwpA
QCAtMCwwICsxLDExNyBAQAorJ3VzZSBzdHJpY3QnOworCisKKy8qKgorICogQ3JlYXRlcyBhIG5l
dyBNb2RlbCBpbnN0YW5jZSBhbmQgaG9va3MgdXAgdGhlIHN0b3JhZ2UuCisgKiBAY29uc3RydWN0
b3IKKyAqIEBwYXJhbSB7b2JqZWN0fSBzdG9yYWdlIEEgcmVmZXJlbmNlIHRvIHRoZSBjbGllbnQg
c2lkZSBzdG9yYWdlIGNsYXNzCisgKi8KK2NsYXNzIE1vZGVsIHsKKyAgICBjb25zdHJ1Y3Rvcihz
dG9yYWdlKSB7CisgICAgICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2U7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB0b2RvIG1vZGVsCisgICAgICoKKyAgICAgKiBAcGFy
YW0ge3N0cmluZ30gW3RpdGxlXSBUaGUgdGl0bGUgb2YgdGhlIHRhc2sKKyAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2Rl
bCBpcyBjcmVhdGVkCisgICAgICovCisgICAgY3JlYXRlKHRpdGxlLCBjYWxsYmFjayl7CisgICAg
ICAgIHRpdGxlID0gdGl0bGUgfHwgJyc7CisKKyAgICAgICAgbGV0IG5ld0l0ZW0gPSB7CisgICAg
ICAgICAgICB0aXRsZTogdGl0bGUudHJpbSgpLAorICAgICAgICAgICAgY29tcGxldGVkOiBmYWxz
ZQorICAgICAgICB9OworCisgICAgICAgIHRoaXMuc3RvcmFnZS5zYXZlKG5ld0l0ZW0sIGNhbGxi
YWNrKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyBhbmQgcmV0dXJucyBhIG1vZGVs
IGluIHN0b3JhZ2UuIElmIG5vIHF1ZXJ5IGlzIGdpdmVuIGl0J2xsIHNpbXBseQorICAgICAqIHJl
dHVybiBldmVyeXRoaW5nLiBJZiB5b3UgcGFzcyBpbiBhIHN0cmluZyBvciBudW1iZXIgaXQnbGwg
bG9vayB0aGF0IHVwIGFzCisgICAgICogdGhlIElEIG9mIHRoZSBtb2RlbCB0byBmaW5kLiBMYXN0
bHksIHlvdSBjYW4gcGFzcyBpdCBhbiBvYmplY3QgdG8gbWF0Y2gKKyAgICAgKiBhZ2FpbnN0Lgor
ICAgICAqCisgICAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG9iamVjdH0gW3F1ZXJ5XSBBIHF1
ZXJ5IHRvIG1hdGNoIG1vZGVscyBhZ2FpbnN0CisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2Nh
bGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9kZWwgaXMgZm91bmQKKyAg
ICAgKgorICAgICAqIEBleGFtcGxlCisgICAgICogbW9kZWwucmVhZCgxLCBmdW5jKSAvLyBXaWxs
IGZpbmQgdGhlIG1vZGVsIHdpdGggYW4gSUQgb2YgMQorICAgICAqIG1vZGVsLnJlYWQoJzEnKSAv
LyBTYW1lIGFzIGFib3ZlCisgICAgICogLy9CZWxvdyB3aWxsIGZpbmQgYSBtb2RlbCB3aXRoIGZv
byBlcXVhbGxpbmcgYmFyIGFuZCBoZWxsbyBlcXVhbGxpbmcgd29ybGQuCisgICAgICogbW9kZWwu
cmVhZCh7IGZvbzogJ2JhcicsIGhlbGxvOiAnd29ybGQnIH0pCisgICAgICovCisgICAgcmVhZChx
dWVyeSwgY2FsbGJhY2speworICAgICAgICBjb25zdCBxdWVyeVR5cGUgPSB0eXBlb2YgcXVlcnk7
CisKKyAgICAgICAgaWYgKHF1ZXJ5VHlwZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAg
Y2FsbGJhY2sgPSBxdWVyeTsKKyAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kQWxsKGNhbGxi
YWNrKTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWVyeVR5cGUgPT09ICdzdHJpbmcnIHx8IHF1ZXJ5
VHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnks
IDEwKTsKKyAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5maW5kKHtpZDogcXVlcnl9LCBjYWxsYmFj
ayk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZmluZChxdWVy
eSwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRl
cyBhIG1vZGVsIGJ5IGdpdmluZyBpdCBhbiBJRCwgZGF0YSB0byB1cGRhdGUsIGFuZCBhIGNhbGxi
YWNrIHRvIGZpcmUgd2hlbgorICAgICAqIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCisgICAgICoK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIGlkIG9mIHRoZSBtb2RlbCB0byB1cGRhdGUK
KyAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgcHJvcGVydGllcyB0byB1cGRhdGUgYW5k
IHRoZWlyIG5ldyB2YWx1ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBj
YWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICAgKi8KKyAg
ICB1cGRhdGUoaWQsIGRhdGEsIGNhbGxiYWNrKXsKKyAgICAgICAgdGhpcy5zdG9yYWdlLnNhdmUo
ZGF0YSwgY2FsbGJhY2ssIGlkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGEg
bW9kZWwgZnJvbSBzdG9yYWdlCisgICAgICoKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gaWQgVGhl
IElEIG9mIHRoZSBtb2RlbCB0byByZW1vdmUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxs
YmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSByZW1vdmFsIGlzIGNvbXBsZXRlLgor
ICAgICAqLworICAgIHJlbW92ZShpZCwgY2FsbGJhY2speworICAgICAgICB0aGlzLnN0b3JhZ2Uu
cmVtb3ZlKGlkLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV0FSTklORzog
V2lsbCByZW1vdmUgQUxMIGRhdGEgZnJvbSBzdG9yYWdlLgorICAgICAqCisgICAgICogQHBhcmFt
IHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgc3RvcmFn
ZSBpcyB3aXBlZC4KKyAgICAgKi8KKyAgICByZW1vdmVBbGwoY2FsbGJhY2speworICAgICAgICB0
aGlzLnN0b3JhZ2UuZHJvcChjYWxsYmFjayk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0
dXJucyBhIGNvdW50IG9mIGFsbCB0b2RvcworICAgICAqLworICAgIGdldENvdW50KGNhbGxiYWNr
KXsKKyAgICAgICAgbGV0IHRvZG9zID0geworICAgICAgICAgICAgYWN0aXZlOiAwLAorICAgICAg
ICAgICAgY29tcGxldGVkOiAwLAorICAgICAgICAgICAgdG90YWw6IDAKKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLnN0b3JhZ2UuZmluZEFsbChkYXRhID0+IHsKKyAgICAgICAgICAgIGZvciAo
bGV0IHRvZG8gb2YgZGF0YSkgeworICAgICAgICAgICAgICAgIGlmICh0b2RvLmNvbXBsZXRlZCkg
eworICAgICAgICAgICAgICAgICAgICB0b2Rvcy5jb21wbGV0ZWQrKzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0b2Rvcy5hY3RpdmUrKzsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b2Rvcy50b3RhbCsrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayh0b2Rvcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KK30KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUvc3JjL3N0b3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvc3RvcmUu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmJhOTdiZGRiM2ZlYThiMTZjYzU4OTU5YjViZDcwMjQwNmI5MWJmNwot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3N0b3JlLmpzCkBAIC0wLDAgKzEs
MTUwIEBACisvKmpzaGludCBlcWVxZXE6ZmFsc2UgKi8KKyd1c2Ugc3RyaWN0JzsKKworLyoqCisg
KiBDcmVhdGVzIGEgbmV3IGNsaWVudCBzaWRlIHN0b3JhZ2Ugb2JqZWN0IGFuZCB3aWxsIGNyZWF0
ZSBhbiBlbXB0eQorICogY29sbGVjdGlvbiBpZiBubyBjb2xsZWN0aW9uIGFscmVhZHkgZXhpc3Rz
LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIG91ciBEQiB3ZSB3YW50
IHRvIHVzZQorICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3VyIGZha2UgREIgdXNlcyBj
YWxsYmFja3MgYmVjYXVzZSBpbgorICogcmVhbCBsaWZlIHlvdSBwcm9iYWJseSB3b3VsZCBiZSBt
YWtpbmcgQUpBWCBjYWxscworICovCitjbGFzcyBTdG9yZSB7CisgICAgY29uc3RydWN0b3IobmFt
ZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fZGJOYW1lID0gbmFtZTsKKyAgICAgICAgdGhp
cy5tZW1vcnlTdG9yYWdlID0gdGhpcy5tZW1vcnlTdG9yYWdlIHx8IHt9OworCisgICAgICAgIGlm
ICghdGhpcy5tZW1vcnlTdG9yYWdlW25hbWVdKSB7CisgICAgICAgICAgICBsZXQgZGF0YSA9IHsK
KyAgICAgICAgICAgICAgICB0b2RvczogW10KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IHRoaXMubWVtb3J5U3RvcmFnZVtuYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxsYmFjay5jYWxs
KHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW25hbWVdKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kcyBpdGVtcyBiYXNlZCBvbiBhIHF1ZXJ5IGdp
dmVuIGFzIGEgSlMgb2JqZWN0CisgICAgICoKKyAgICAgKiBAcGFyYW0ge29iamVjdH0gcXVlcnkg
VGhlIHF1ZXJ5IHRvIG1hdGNoIGFnYWluc3QgKGkuZS4ge2ZvbzogJ2Jhcid9KQorICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUg
cXVlcnkgaGFzCisgICAgICogY29tcGxldGVkIHJ1bm5pbmcKKyAgICAgKgorICAgICAqIEBleGFt
cGxlCisgICAgICogZGIuZmluZCh7Zm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCd9LCBmdW5jdGlv
biAoZGF0YSkgeworICAgICAgICAgKiAgIC8vIGRhdGEgd2lsbCByZXR1cm4gYW55IGl0ZW1zIHRo
YXQgaGF2ZSBmb286IGJhciBhbmQKKyAgICAgICAgICogICAvLyBoZWxsbzogd29ybGQgaW4gdGhl
aXIgcHJvcGVydGllcworICAgICAgICAgKiB9KQorICAgICAqLworICAgIGZpbmQocXVlcnksIGNh
bGxiYWNrKXsKKyAgICAgICAgaWYgKCFjYWxsYmFjaykgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbGV0IHRvZG9zID0gSlNPTi5wYXJzZSh0aGlzLm1lbW9yeVN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3M7CisKKyAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlz
LCB0b2Rvcy5maWx0ZXIodG9kbyA9PiB7CisgICAgICAgICAgICBmb3IgKGxldCBxIGluIHF1ZXJ5
KSB7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5W3FdICE9PSB0b2RvW3FdKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFdpbGwgcmV0cmlldmUgYWxsIGRhdGEgZnJvbSB0aGUgY29sbGVjdGlvbgor
ICAgICAqCisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRv
IGZpcmUgdXBvbiByZXRyaWV2aW5nIGRhdGEKKyAgICAgKi8KKyAgICBmaW5kQWxsKGNhbGxiYWNr
KXsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRo
aXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdpbGwgc2F2ZSB0aGUgZ2l2ZW4g
ZGF0YSB0byB0aGUgREIuIElmIG5vIGl0ZW0gZXhpc3RzIGl0IHdpbGwgY3JlYXRlIGEgbmV3Cisg
ICAgICogaXRlbSwgb3RoZXJ3aXNlIGl0J2xsIHNpbXBseSB1cGRhdGUgYW4gZXhpc3RpbmcgaXRl
bSdzIHByb3BlcnRpZXMKKyAgICAgKgorICAgICAqIEBwYXJhbSB7b2JqZWN0fSB1cGRhdGVEYXRh
IFRoZSBkYXRhIHRvIHNhdmUgYmFjayBpbnRvIHRoZSBEQgorICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZworICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBpZCBBbiBvcHRpb25hbCBwYXJhbSB0byBlbnRlciBhbiBJRCBvZiBhbiBp
dGVtIHRvIHVwZGF0ZQorICAgICAqLworICAgIHNhdmUodXBkYXRlRGF0YSwgY2FsbGJhY2ssIGlk
KXsKKyAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5tZW1vcnlTdG9yYWdlW3Ro
aXMuX2RiTmFtZV0pOworICAgICAgICBsZXQgdG9kb3MgPSBkYXRhLnRvZG9zOworICAgICAgICBj
b25zdCBsZW4gPSB0b2Rvcy5sZW5ndGg7CisKKyAgICAgICAgLy8gSWYgYW4gSUQgd2FzIGFjdHVh
bGx5IGdpdmVuLCBmaW5kIHRoZSBpdGVtIGFuZCB1cGRhdGUgZWFjaCBwcm9wZXJ0eQorICAgICAg
ICBpZiAoaWQpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAobGV0IGtleSBpbiB1cGRhdGVEYXRhKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0b2Rvc1tpXVtrZXldID0gdXBkYXRlRGF0YVtrZXldOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFtZV0g
PSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKHRoaXMubWVtb3J5
U3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2Rvcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhbiBJRAorICAgICAgICAgICAgdXBkYXRl
RGF0YS5pZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCisgICAgICAgICAgICB0b2Rvcy5wdXNo
KHVwZGF0ZURhdGEpOworICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlW3RoaXMuX2RiTmFt
ZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBbdXBkYXRlRGF0YV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogV2lsbCByZW1v
dmUgYW4gaXRlbSBmcm9tIHRoZSBTdG9yZSBiYXNlZCBvbiBpdHMgSUQKKyAgICAgKgorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQgdG8gcmVtb3Zl
CisgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUg
YWZ0ZXIgc2F2aW5nCisgICAgICovCisgICAgcmVtb3ZlKGlkLCBjYWxsYmFjayl7CisgICAgICAg
IGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVd
KTsKKyAgICAgICAgbGV0IHRvZG9zID0gZGF0YS50b2RvczsKKyAgICAgICAgY29uc3QgbGVuID0g
dG9kb3MubGVuZ3RoOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9kb3MubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PSBpZCkgeworICAgICAgICAg
ICAgICAgIHRvZG9zLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9k
Yk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CisKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7
CisgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UodGhpcy5tZW1vcnlT
dG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q
KgorICAgICAqIFdpbGwgZHJvcCBhbGwgc3RvcmFnZSBhbmQgc3RhcnQgZnJlc2gKKyAgICAgKgor
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFm
dGVyIGRyb3BwaW5nIHRoZSBkYXRhCisgICAgICovCisgICAgZHJvcChjYWxsYmFjayl7CisgICAg
ICAgIHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoe3Rv
ZG9zOiBbXX0pOworCisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgY2FsbGJh
Y2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKHRoaXMubWVtb3J5U3RvcmFnZVt0aGlzLl9kYk5hbWVd
KS50b2Rvcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
L3NyYy90ZW1wbGF0ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUvc3JjL3RlbXBsYXRlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc3ZDRkZDRjNjBiZTI2NTM4ODFhMjgwZThkYTdkZjhkM2Q2MzEzMDYKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy90ZW1wbGF0ZS5qcwpAQCAtMCwwICsxLDk1IEBACisn
dXNlIHN0cmljdCc7CisKKworY29uc3QgaHRtbEVzY2FwZXMgPSB7CisgICAgJyYnOiAnJmFtcCcs
CisgICAgJzwnOiAnJmx0JywKKyAgICAnPic6ICcmZ3QnLAorICAgICciJzogJyZxdW90JywKKyAg
ICAnXCcnOiAnJiN4MjcnLAorICAgICdgJzogJyYjeDYwJworfTsKKworY29uc3QgcmVVbmVzY2Fw
ZWRIdG1sID0gL1smPD4iJ2BdL2c7Citjb25zdCByZUhhc1VuZXNjYXBlZEh0bWwgPSBuZXcgUmVn
RXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpOworCitsZXQgZXNjYXBlID0gc3RyID0+IChzdHIg
JiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyKSkgPyBzdHIucmVwbGFjZShyZVVuZXNjYXBl
ZEh0bWwsIGVzY2FwZUh0bWxDaGFyKSA6IHN0cjsKK2xldCBlc2NhcGVIdG1sQ2hhciA9IGNociA9
PiBodG1sRXNjYXBlc1tjaHJdOworCitjbGFzcyBUZW1wbGF0ZSB7CisgICAgY29uc3RydWN0b3Io
KSB7CisgICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gYAorICAgICAgICAgICAgPGxpIGRh
dGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVkfX0iPgorICAgICAgICAgICAgICAgIDxk
aXYgY2xhc3M9InZpZXciPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2ds
ZSIgdHlwZT0iY2hlY2tib3giIHt7Y2hlY2tlZH19PgorICAgICAgICAgICAgICAgICAgICA8bGFi
ZWw+e3t0aXRsZX19PC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0i
ZGVzdHJveSI+PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8
L2xpPgorICAgICAgICBgOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gPGxp
PiBIVE1MIHN0cmluZyBhbmQgcmV0dXJucyBpdCBmb3IgcGxhY2VtZW50IGluIHlvdXIgYXBwLgor
ICAgICAqCisgICAgICogTk9URTogSW4gcmVhbCBsaWZlIHlvdSBzaG91bGQgYmUgdXNpbmcgYSB0
ZW1wbGF0aW5nIGVuZ2luZSBzdWNoIGFzIE11c3RhY2hlCisgICAgICogb3IgSGFuZGxlYmFycywg
aG93ZXZlciwgdGhpcyBpcyBhIHZhbmlsbGEgSlMgZXhhbXBsZS4KKyAgICAgKgorICAgICAqIEBw
YXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBvYmplY3QgY29udGFpbmluZyBrZXlzIHlvdSB3YW50IHRv
IGZpbmQgaW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgdG8gcmVw
bGFjZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIFN0cmluZyBvZiBhbiA8bGk+IGVs
ZW1lbnQKKyAgICAgKgorICAgICAqIEBleGFtcGxlCisgICAgICogdmlldy5zaG93KHsKKyAgICAg
ICAgICogIGlkOiAxLAorICAgICAgICAgKiAgdGl0bGU6ICJIZWxsbyBXb3JsZCIsCisgICAgICAg
ICAqICBjb21wbGV0ZWQ6IDAsCisgICAgICAgICAqIH0pCisgICAgICovCisgICAgc2hvdyhkYXRh
KXsKKyAgICAgICAgbGV0IGkgPSAwOworICAgICAgICBsZXQgdmlldyA9ICcnOworICAgICAgICBj
b25zdCBsZW4gPSBkYXRhLmxlbmd0aDsKKworICAgICAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykg
eworICAgICAgICAgICAgbGV0IGNvbXBsZXRlZCA9ICcnOworICAgICAgICAgICAgbGV0IGNoZWNr
ZWQgPSAnJzsKKyAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFRlbXBsYXRl
OworCisgICAgICAgICAgICBpZiAoZGF0YVtpXS5jb21wbGV0ZWQpIHsKKyAgICAgICAgICAgICAg
ICBjb21wbGV0ZWQgPSAnY29tcGxldGVkJzsKKyAgICAgICAgICAgICAgICBjaGVja2VkID0gJ2No
ZWNrZWQnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRl
LnJlcGxhY2UoJ3t7aWR9fScsIGRhdGFbaV0uaWQpOworICAgICAgICAgICAgdGVtcGxhdGUgPSB0
ZW1wbGF0ZS5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlc2NhcGUoZGF0YVtpXS50aXRsZSkpOworICAg
ICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NvbXBsZXRlZH19JywgY29t
cGxldGVkKTsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tjaGVj
a2VkfX0nLCBjaGVja2VkKTsKKworICAgICAgICAgICAgdmlldyArPSB0ZW1wbGF0ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB2aWV3OworICAgIH0KKworICAgIC8qKgorICAgICAqIERp
c3BsYXlzIGEgY291bnRlciBvZiBob3cgbWFueSB0byBkb3MgYXJlIGxlZnQgdG8gY29tcGxldGUK
KyAgICAgKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhY3RpdmVUb2RvcyBUaGUgbnVtYmVyIG9m
IGFjdGl2ZSB0b2Rvcy4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmlu
ZyB0aGUgY291bnQKKyAgICAgKi8KKyAgICBpdGVtQ291bnRlcihhY3RpdmVUb2Rvcyl7CisgICAg
ICAgIGxldCBwbHVyYWwgPSBhY3RpdmVUb2RvcyA9PT0gMSA/ICcnIDogJ3MnOworICAgICAgICBy
ZXR1cm4gYDxzdHJvbmc+JHthY3RpdmVUb2Rvc308L3N0cm9uZz4gaXRlbSR7cGx1cmFsfSBsZWZ0
YDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSB0ZXh0IHdpdGhpbiB0aGUg
IkNsZWFyIGNvbXBsZXRlZCIgYnV0dG9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gIHtbdHlwZV19
IGNvbXBsZXRlZFRvZG9zIFRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRvZG9zLgorICAgICAqIEBy
ZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudAorICAgICAqLworICAg
IGNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZFRvZG9zKXsKKyAgICAgICAgcmV0dXJuIChj
b21wbGV0ZWRUb2RvcyA+IDApID8gJ0NsZWFyIGNvbXBsZXRlZCcgOiAnJzsKKyAgICB9Cit9CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1L3NyYy92aWV3LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMv
dmlldy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40YmEzNWQyMTljMmE1MjBiYjE2ZWVkOTgyMDliMTg3NWI3ZmY3
OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS9zcmMvdmlldy5qcwpAQCAtMCww
ICsxLDE3OCBAQAorJ3VzZSBzdHJpY3QnOworCisKKy8vIGltcG9ydCB7cXMsIHFzYSwgJG9uLCAk
cGFyZW50LCAkZGVsZWdhdGV9IGZyb20gJy4vaGVscGVycyc7CisKK2xldCBfaXRlbUlkID0gZWxl
bWVudCA9PiBwYXJzZUludCgkcGFyZW50KGVsZW1lbnQsICdsaScpLmRhdGFzZXQuaWQsIDEwKTsK
KworbGV0IF9zZXRGaWx0ZXIgPSBjdXJyZW50UGFnZSA9PiB7CisgICAgcXMoJy5maWx0ZXJzIC5z
ZWxlY3RlZCcpLmNsYXNzTmFtZSA9ICcnOworICAgIHFzKGAuZmlsdGVycyBbaHJlZj0iIy8ke2N1
cnJlbnRQYWdlfSJdYCkuY2xhc3NOYW1lID0gJ3NlbGVjdGVkJzsKK307CisKK2xldCBfZWxlbWVu
dENvbXBsZXRlID0gKGlkLCBjb21wbGV0ZWQpID0+IHsKKyAgICBsZXQgbGlzdEl0ZW0gPSBxcyhg
W2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21w
bGV0ZWQnIDogJyc7CisKKyAgICAvLyBJbiBjYXNlIGl0IHdhcyB0b2dnbGVkIGZyb20gYW4gZXZl
bnQgYW5kIG5vdCBieSBjbGlja2luZyB0aGUgY2hlY2tib3gKKyAgICBxcygnaW5wdXQnLCBsaXN0
SXRlbSkuY2hlY2tlZCA9IGNvbXBsZXRlZDsKK307CisKK2xldCBfZWRpdEl0ZW0gPSAoaWQsIHRp
dGxlKSA9PiB7CisgICAgbGV0IGxpc3RJdGVtID0gcXMoYFtkYXRhLWlkPSIke2lkfSJdYCk7CisK
KyAgICBpZiAoIWxpc3RJdGVtKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaXN0
SXRlbS5jbGFzc05hbWUgKz0gJyBlZGl0aW5nJzsKKworICAgIGxldCBpbnB1dCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQnOwor
CisgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoaW5wdXQpOworICAgIGlucHV0LmZvY3VzKCk7Cisg
ICAgaW5wdXQudmFsdWUgPSB0aXRsZTsKK307CisKKy8qKgorICogVmlldyB0aGF0IGFic3RyYWN0
cyBhd2F5IHRoZSBicm93c2VyJ3MgRE9NIGNvbXBsZXRlbHkuCisgKiBJdCBoYXMgdHdvIHNpbXBs
ZSBlbnRyeSBwb2ludHM6CisgKgorICogICAtIGJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKQorICog
ICAgIFRha2VzIGEgdG9kbyBhcHBsaWNhdGlvbiBldmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBoYW5k
bGVyCisgKiAgIC0gcmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdCkKKyAqICAgICBSZW5k
ZXJzIHRoZSBnaXZlbiBjb21tYW5kIHdpdGggdGhlIG9wdGlvbnMKKyAqLworY2xhc3MgVmlldyB7
CisgICAgY29uc3RydWN0b3IodGVtcGxhdGUpIHsKKyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRl
bXBsYXRlOworCisgICAgICAgIHRoaXMuRU5URVJfS0VZID0gMTM7CisgICAgICAgIHRoaXMuRVND
QVBFX0tFWSA9IDI3OworCisgICAgICAgIHRoaXMuJHRvZG9MaXN0ID0gcXMoJy50b2RvLWxpc3Qn
KTsKKyAgICAgICAgdGhpcy4kdG9kb0l0ZW1Db3VudGVyID0gcXMoJy50b2RvLWNvdW50Jyk7Cisg
ICAgICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkID0gcXMoJy5jbGVhci1jb21wbGV0ZWQnKTsKKyAg
ICAgICAgdGhpcy4kbWFpbiA9IHFzKCcubWFpbicpOworICAgICAgICB0aGlzLiRmb290ZXIgPSBx
cygnLmZvb3RlcicpOworICAgICAgICB0aGlzLiR0b2dnbGVBbGwgPSBxcygnLnRvZ2dsZS1hbGwn
KTsKKyAgICAgICAgdGhpcy4kbmV3VG9kbyA9IHFzKCcubmV3LXRvZG8nKTsKKworICAgICAgICB0
aGlzLnZpZXdDb21tYW5kcyA9IHsKKyAgICAgICAgICAgIHNob3dFbnRyaWVzOiBwYXJhbWV0ZXIg
PT4gdGhpcy4kdG9kb0xpc3QuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5zaG93KHBhcmFtZXRl
ciksCisgICAgICAgICAgICByZW1vdmVJdGVtOiBwYXJhbWV0ZXIgPT4gdGhpcy5fcmVtb3ZlSXRl
bShwYXJhbWV0ZXIpLAorICAgICAgICAgICAgdXBkYXRlRWxlbWVudENvdW50OiBwYXJhbWV0ZXIg
PT4gdGhpcy4kdG9kb0l0ZW1Db3VudGVyLmlubmVySFRNTCA9IHRoaXMudGVtcGxhdGUuaXRlbUNv
dW50ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVkQnV0dG9uOiBwYXJh
bWV0ZXIgPT4gdGhpcy5fY2xlYXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwg
cGFyYW1ldGVyLnZpc2libGUpLAorICAgICAgICAgICAgY29udGVudEJsb2NrVmlzaWJpbGl0eTog
cGFyYW1ldGVyID0+IHRoaXMuJG1haW4uc3R5bGUuZGlzcGxheSA9IHRoaXMuJGZvb3Rlci5zdHls
ZS5kaXNwbGF5ID0gcGFyYW1ldGVyLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnLAorICAgICAg
ICAgICAgdG9nZ2xlQWxsOiBwYXJhbWV0ZXIgPT4gdGhpcy4kdG9nZ2xlQWxsLmNoZWNrZWQgPSBw
YXJhbWV0ZXIuY2hlY2tlZCwKKyAgICAgICAgICAgIHNldEZpbHRlcjogcGFyYW1ldGVyID0+IF9z
ZXRGaWx0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgIGNsZWFyTmV3VG9kbzogcGFyYW1ldGVy
ID0+IHRoaXMuJG5ld1RvZG8udmFsdWUgPSAnJywKKyAgICAgICAgICAgIGVsZW1lbnRDb21wbGV0
ZTogcGFyYW1ldGVyID0+IF9lbGVtZW50Q29tcGxldGUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIu
Y29tcGxldGVkKSwKKyAgICAgICAgICAgIGVkaXRJdGVtOiBwYXJhbWV0ZXIgPT4gX2VkaXRJdGVt
KHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKSwKKyAgICAgICAgICAgIGVkaXRJdGVtRG9u
ZTogcGFyYW1ldGVyID0+IHRoaXMuX2VkaXRJdGVtRG9uZShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRl
ci50aXRsZSksCisgICAgICAgIH07CisgICAgfQorCisgICAgX3JlbW92ZUl0ZW0oaWQpIHsKKyAg
ICAgICAgbGV0IGVsZW0gPSBxcyhgW2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgICAgICBpZiAo
ZWxlbSkgeworICAgICAgICAgICAgdGhpcy4kdG9kb0xpc3QucmVtb3ZlQ2hpbGQoZWxlbSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBfY2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVkQ291
bnQsIHZpc2libGUpIHsKKyAgICAgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5uZXJIVE1MID0g
dGhpcy50ZW1wbGF0ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCk7CisgICAg
ICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Jsb2Nr
JyA6ICdub25lJzsKKyAgICB9CisKKyAgICBfZWRpdEl0ZW1Eb25lKGlkLCB0aXRsZSkgeworICAg
ICAgICBsZXQgbGlzdEl0ZW0gPSBxcyhgW2RhdGEtaWQ9IiR7aWR9Il1gKTsKKworICAgICAgICBp
ZiAoIWxpc3RJdGVtKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBsZXQgaW5wdXQgPSBxcygnaW5wdXQuZWRpdCcsIGxpc3RJdGVtKTsKKyAgICAgICAgbGlzdEl0
ZW0ucmVtb3ZlQ2hpbGQoaW5wdXQpOworCisgICAgICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxp
c3RJdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCcgZWRpdGluZycsICcnKTsKKworICAgICAgICBxc2Eo
J2xhYmVsJywgbGlzdEl0ZW0pLmZvckVhY2gobGFiZWwgPT4gbGFiZWwudGV4dENvbnRlbnQgPSB0
aXRsZSk7CisgICAgfQorCisgICAgcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRlcikgeworICAgICAg
ICB0aGlzLnZpZXdDb21tYW5kc1t2aWV3Q21kXShwYXJhbWV0ZXIpOworICAgIH0KKworICAgIF9i
aW5kSXRlbUVkaXREb25lKGhhbmRsZXIpIHsKKyAgICAgICAgbGV0IHNlbGYgPSB0aGlzOworCisg
ICAgICAgICRkZWxlZ2F0ZShzZWxmLiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2JsdXInLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNlbGVkKSB7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgIGlkOiBfaXRlbUlk
KHRoaXMpLAorICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy52YWx1ZQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBSZW1v
dmUgdGhlIGN1cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQgZW50ZXIganVzdCBsaWtl
IGlmIGl0IHdlcmUgYSByZWFsIGZvcm0KKyAgICAgICAgJGRlbGVnYXRlKHNlbGYuJHRvZG9MaXN0
LCAnbGkgLmVkaXQnLCAna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAg
IGlmIChldmVudC5rZXlDb2RlID09PSBzZWxmLkVOVEVSX0tFWSkgeworICAgICAgICAgICAgICAg
IHRoaXMuYmx1cigpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBf
YmluZEl0ZW1FZGl0Q2FuY2VsKGhhbmRsZXIpIHsKKyAgICAgICAgbGV0IHNlbGYgPSB0aGlzOwor
CisgICAgICAgICRkZWxlZ2F0ZShzZWxmLiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2tleXVwJywg
ZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gc2Vs
Zi5FU0NBUEVfS0VZKSB7CisgICAgICAgICAgICAgICAgbGV0IGlkID0gX2l0ZW1JZCh0aGlzKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgdGhpcy5ibHVyKCk7CisKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsgaWQgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGJpbmQoZXZlbnQsIGhh
bmRsZXIpIHsKKyAgICAgICAgaWYgKGV2ZW50ID09PSAnbmV3VG9kbycpIHsKKyAgICAgICAgICAg
ICRvbih0aGlzLiRuZXdUb2RvLCAnY2hhbmdlJywgKCkgPT4gaGFuZGxlcih0aGlzLiRuZXdUb2Rv
LnZhbHVlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdyZW1vdmVDb21wbGV0ZWQn
KSB7CisgICAgICAgICAgICAkb24odGhpcy4kY2xlYXJDb21wbGV0ZWQsICdjbGljaycsIGhhbmRs
ZXIpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAndG9nZ2xlQWxsJykgeworICAgICAg
ICAgICAgJG9uKHRoaXMuJHRvZ2dsZUFsbCwgJ2NsaWNrJywgZnVuY3Rpb24oKXsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVyKHtjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZH0pOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdCcpIHsKKyAgICAgICAg
ICAgICRkZWxlZ2F0ZSh0aGlzLiR0b2RvTGlzdCwgJ2xpIGxhYmVsJywgJ2RibGNsaWNrJywgZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtUmVtb3Zl
JykgeworICAgICAgICAgICAgJGRlbGVnYXRlKHRoaXMuJHRvZG9MaXN0LCAnLmRlc3Ryb3knLCAn
Y2xpY2snLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlk
KHRoaXMpfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0g
J2l0ZW1Ub2dnbGUnKSB7CisgICAgICAgICAgICAkZGVsZWdhdGUodGhpcy4kdG9kb0xpc3QsICcu
dG9nZ2xlJywgJ2NsaWNrJywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBoYW5kbGVyKHsK
KyAgICAgICAgICAgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksCisgICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXRlZDogdGhpcy5jaGVja2VkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0RG9uZScpIHsK
KyAgICAgICAgICAgIHRoaXMuX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcik7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdENhbmNlbCcpIHsKKyAgICAgICAgICAgIHRoaXMu
X2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKTsKKyAgICAgICAgfQorICAgIH0KK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>