Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#85 2016-04-21 22:02:21

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

My exact code for the nested form that doesn’t display the results

<!--=== Checking to see If Book Cover Image Exists ===-->

<txp:adi_if_content>

<div class="col-md-4 col-sm-4 col-xs-9">
<div class="product-img product-img-brd">

<txp:permlink><txp:article_image class="full-width img-responsive" escape="" /></txp:permlink>

<!--=== If Book Cover Image Exists Do This ===-->
<txp:adi_if_content_insert>

<!--=== This Code Displays Nothing  ===-->
<txp:variable name="search_results" value='<txp:etc_search_results id="8" form="book_title_only" limit="1" query=''<txp:article_url_title />'' />' />
<txp:if_search_results>
<txp:variable name="search_results" />
</txp:if_search_results>

</txp:adi_if_content_insert>

</div>
</div>

</txp:adi_if_content>

Change to <txp:if_search> and the search results are displayed.

<!--=== Checking to see If Book Cover Image Exists ===-->

<txp:adi_if_content>

<div class="col-md-4 col-sm-4 col-xs-9">
<div class="product-img product-img-brd">

<txp:permlink><txp:article_image class="full-width img-responsive" escape="" /></txp:permlink>

<!--=== If Book Cover Image Exists Do This ===-->
<txp:adi_if_content_insert>

<!--=== This Code Displays The Search Results  ===-->
<txp:variable name="search_results" value='<txp:etc_search_results id="8" form="book_title_only" limit="1" query=''<txp:article_url_title />'' />' />
<txp:if_search>
<txp:variable name="search_results" />
</txp:if_search>

</txp:adi_if_content_insert>

</div>
</div>

</txp:adi_if_content>

Could the code calling this form be causing the problem or the <txp:article_image /> tag?

Offline

#86 2016-04-22 07:58:41

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

Ah, if you use it in an article form, this will not work, because if_search_results is set only once, by the first etc_search_results call or even before, by some other tag. Try

<txp:variable name="search_results" value='<txp:etc_search_results id="8" form="book_title_only" limit="1" query=''<txp:article_url_title />'' />' />
<txp:if_variable name="search_results" value='<txp:text item="no_search_matches" />'>
<!-- no match -->
<txp:else />
<txp:variable name="search_results" />
</txp:if_variable>

But actually you should be able to replace this block with (less ugly)

<txp:etc_search_results id="8" form="book_title_only" limit="1" query='<txp:article_url_title />'>
<txp:else />
<!-- no match -->
</txp:etc_search_results>

Offline

#87 2016-04-22 18:43:35

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

etc wrote #298767:

But actually you should be able to replace this block with (less ugly)

<txp:etc_search_results id="8" form="book_title_only" limit="1" query='<txp:article_url_title />'>...

HUZZAH! That works perfectly, and expands my knowledge of <txp:else /> without an actual <txp:if.../>.

Offline

#88 2016-04-23 20:39:05

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

An attribute could probably be handier than <txp:else />. How would you call it: no_results? no_matches?

Offline

#89 2016-04-25 01:14:55

lazlo
Member
Registered: 2004-02-24
Posts: 110

Re: etc_search: when the default search is not enough

no_matches works for me.

Offline

#90 2016-04-25 10:29:38

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

lazlo wrote #298801:

no_matches works for me.

Then let it be so in the next (4.6) version.

Offline

#91 2016-11-02 22:19:43

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

This plugin looks amazing, but I’ve spent hours trying to get it to return a result, with no luck. This morning I set up a fresh install of textpattern with a new domain, directory, and database. I did nothing but post a few dummy articles, install etc_search and add <txp:etc_search /> into the default page. No luck.

Every time I type into the field, I only see “sorry, no results found matching your search request”.

I believe the problem is with my hosting setup. I’m using 1and1, and I know they can be tricky with textpattern. In debug mode, I see the following message when I begin typing into the search box:

General error 2048: strftime(): We selected ‘America/New_York’ for ‘EDT/-4.0/DST’ instead on line 264

and then:

textpattern/lib/txplib_misc.php(1782) : eval()’d code:264 strftime()
textpattern/lib/txplib_misc.php(1782) : eval()’d code:483 etc_search_get_results()
textpattern/lib/txplib_misc.php(1782) : eval()’d code:403 etc_search_results()
textpattern/lib/txplib_misc.php:1895 etc_search_callback()
textpattern/publish/log.php:48 callback_event()
textpattern/publish.php:221 log_hit()
index.php:104 include()

You’re welcome to view this for yourself on the test install, I’ve left it in debug mode.

Any ideas what’s wrong with my setup? I really want to use this plugin!

Offline

#92 2016-11-02 23:15:45

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

Hello, welcome to the forum.

I don’t think this error is related to etc_search. Please check this page, it issues the same error.

You can try to remove all <txp:posted /> tags from etc_search_results article form and see if it helps. If yes, try to fix the timezone error as proposed here. And I will update the plugin for 4.6 tomorrow.

Offline

#93 2016-11-03 06:34:27

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

Thanks for the quick reply! I went ahead and made that change to config.php, and it seems to have fixed the timezone problem. Those errors have disappeared. However, I still don’t get any results when typing into the search field. Again, you’re welcome to visit the test site and have a look. I’m completely baffled.

The only other thing I can think of that’s unique to this install is the modified .htaccess file required to make things work with 1and1 (the only edit is RewriteBase /). Here it is in full:

# BEGIN Textpattern
#DirectoryIndex index.php index.html

#Options +FollowSymLinks
#Options -Indexes
#ErrorDocument 403 default

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.+) - [PT,L]

    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*) index.php

    RewriteCond %{HTTP:Authorization}  !^$
    RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

#php_value register_globals 0

<IfModule mod_mime.c>
    AddType image/svg+xml  svg svgz
    AddEncoding gzip       svgz
</IfModule>
# END Textpattern

Last edited by subcosm (2016-11-03 08:00:26)

Offline

#94 2016-11-03 08:34:46

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

The response comes from etc_search, so the redirection should be ok. Could you test the modified version, please?

# Name: etc_search v0.9.5 
# Type: Admin/Public plugin
# Search in any table(s)
# Author: Oleg Loukianov
# URL: http://www.iut-fbleau.fr/projet/etc/
# Recommended load order: 7

# .....................................................................
# This is a plugin for Textpattern CMS - http://textpattern.com/
# To install: textpattern > admin > plugins
# Paste the following text into the 'Install plugin' box:
# .....................................................................

YToxMTp7czo0OiJuYW1lIjtzOjEwOiJldGNfc2VhcmNoIjtzOjY6ImF1dGhvciI7czoxNDoi
T2xlZyBMb3VraWFub3YiO3M6MTA6ImF1dGhvcl91cmkiO3M6MzY6Imh0dHA6Ly93d3cuaXV0
LWZibGVhdS5mci9wcm9qZXQvZXRjLyI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuOS41IjtzOjEx
OiJkZXNjcmlwdGlvbiI7czoyMjoiU2VhcmNoIGluIGFueSB0YWJsZShzKSI7czo0OiJjb2Rl
IjtzOjI0OTE4OiIvLyBUWFAgNC42IHRhZyByZWdpc3RyYXRpb24NCmlmIChjbGFzc19leGlz
dHMoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSkgew0KCVR4cDo6Z2V0KCdcVGV4dHBh
dHRlcm5cVGFnXFJlZ2lzdHJ5JykNCgkJLT5yZWdpc3RlcignZXRjX3NlYXJjaCcpDQoJCS0+
cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0cycpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFy
Y2hfcmVzdWx0X2V4Y2VycHQnKQ0KCQktPnJlZ2lzdGVyKCdldGNfc2VhcmNoX3Jlc3VsdF9j
b3VudCcpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0X2NvdW50JywgJ3NlYXJj
aF9yZXN1bHRfY291bnQnKQ0KCTsNCn0NCg0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4n
KSB7DQoJYWRkX3ByaXZzKCdldGNfc2VhcmNoJywgJzEsMicpOw0KCXJlZ2lzdGVyX3RhYigi
ZXh0ZW5zaW9ucyIsICJldGNfc2VhcmNoIiwgIlNlYXJjaCBzZXR0aW5ncyIpOw0KCXJlZ2lz
dGVyX2NhbGxiYWNrKCJldGNfc2VhcmNoX3RhYiIsICJldGNfc2VhcmNoIik7DQoJYWRkX3By
aXZzKCdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcsJzEsMicpOw0KCXJlZ2lzdGVyX2NhbGxi
YWNrKCdldGNfc2VhcmNoX3RhYicsICdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcpOw0KCXJl
Z2lzdGVyX2NhbGxiYWNrKCdldGNfc2VhcmNoX2luc3RhbGwnLCAncGx1Z2luX2xpZmVjeWNs
ZS5ldGNfc2VhcmNoJyk7DQp9DQplbHNlaWYoZ3BzKCdldGNfc2VhcmNoJykgIT09ICcnKSB7
DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2V0Y19zZWFyY2hfdGVybScsICdwcmV0ZXh0X2VuZCcp
Ow0KCWlmKHBzKCdldGNfc2VhcmNoJykgIT09ICcnKSByZWdpc3Rlcl9jYWxsYmFjaygnZXRj
X3NlYXJjaF9jYWxsYmFjaycsICdsb2dfaGl0Jyk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy
Y2hfaW5zdGFsbCgkZXZlbnQ9JycsICRzdGVwPScnKQ0Kew0KCWlmKCRzdGVwID09ICdkZWxl
dGVkJykgew0KCQlzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgIm5hbWUgTElLRSAnZXRjXF9z
ZWFyY2hcXyUnIik7DQoJCXNhZmVfZGVsZXRlKCJ0eHBfZm9ybSIsICJuYW1lID0gJ2V0Y19z
ZWFyY2hfcmVzdWx0cyciKTsNCgkJc2FmZV9xdWVyeSgnRFJPUCBUQUJMRSBJRiBFWElTVFMg
Jy5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpKTsNCgkJcmV0dXJuOw0KCX0NCglpZigkc3RlcCA9
PSAnZW5hYmxlZCcpIHsNCgkJaWYoIWdldF9wcmVmKCdldGNfc2VhcmNoX2hhc2gnKSkgDQoJ
CQlzZXRfcHJlZignZXRjX3NlYXJjaF9oYXNoJywgdW5pcWlkKCcnLCB0cnVlKSwgJ2V0Y19z
ZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFnZXRfcHJlZignZXRjX3NlYXJjaF9vcHMn
KSkgDQoJCQlzZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnLCAneyJOT1QiOiItIiwiQU5EIjoi
ICIsIk9SIjoiLCJ9JywgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFzYWZl
X2NvdW50KCd0eHBfZm9ybScsICJuYW1lID0gJ2V0Y19zZWFyY2hfcmVzdWx0cycgQU5EIHR5
cGUgPSAnYXJ0aWNsZSciKSkNCgkJCXNhZmVfaW5zZXJ0KCJ0eHBfZm9ybSIsICJuYW1lID0g
J2V0Y19zZWFyY2hfcmVzdWx0cycsIHR5cGUgPSAnYXJ0aWNsZScsIEZvcm0gPSAnPHR4cDpw
ZXJtbGluaz48dHhwOnRpdGxlIC8+PC90eHA6cGVybWxpbms+JyIpOw0KDQoJCSRxYz0iQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgIi5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpLiIgKCI7
DQoJCSRxYy49IDw8PEVPRg0KCQkJYGlkYCBpbnQoNCkgTk9UIE5VTEwgQVVUT19JTkNSRU1F
TlQsDQoJCQlgcXVlcnlgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwNCgkJCWBmb3JtMWAgdmFy
Y2hhcig2NCkgTk9UIE5VTEwsDQoJCQlgZm9ybTJgIHZhcmNoYXIoNjQpIE5PVCBOVUxMLA0K
CQkJYHRoaW5nMWAgdGV4dCBOT1QgTlVMTCwNCgkJCWB0aGluZzJgIHRleHQgTk9UIE5VTEws
DQoJCQlgdHlwZWAgZW51bSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnLCdjYXRl
Z29yeScsJ3NlY3Rpb24nKSBOT1QgTlVMTCwNCgkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkJ
KSBFTkdJTkU9TXlJU0FNIENIQVJBQ1RFUiBTRVQ9dXRmOCA7DQpFT0Y7DQoJCXNhZmVfcXVl
cnkoJHFjKTsNCgkJc2FmZV9hbHRlcignZXRjX3NlYXJjaCcsICJNT0RJRlkgYHR5cGVgIGVu
dW0oJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJywnY2F0ZWdvcnknLCdzZWN0aW9u
JykgTk9UIE5VTEwiKTsNCgkJcmV0dXJuOw0KCX0NCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJj
aF90YWIoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkcHJlZnM7DQoJJGlkID0gaW50dmFs
KGdwcygnaWQnKSk7DQoJaWYoJHN0ZXAgJiYgYm91bmNlcigkc3RlcCwgYXJyYXkoJ3NhdmUn
PT50cnVlLCAnb3BzJz0+dHJ1ZSkpKSBpZigkc3RlcCA9PSAnc2F2ZScpIHN3aXRjaChncHMo
J3NhdmUnKSkgew0KCQljYXNlICdTYXZlJyA6IHNhZmVfdXBzZXJ0KCdldGNfc2VhcmNoJywN
CgkJCSJxdWVyeT0nIi5kb1NsYXNoKGdwcygncXVlcnknKSkuIicsDQoJCQlmb3JtMT0nIi5k
b1NsYXNoKGdwcygnZm9ybTEnKSkuIicsDQoJCQlmb3JtMj0nIi5kb1NsYXNoKGdwcygnZm9y
bTInKSkuIicsDQoJCQl0aGluZzE9JyIuZG9TbGFzaChncHMoJ3RoaW5nMScpKS4iJywNCgkJ
CXRoaW5nMj0nIi5kb1NsYXNoKGdwcygndGhpbmcyJykpLiInLA0KCQkJdHlwZT0nIi5kb1Ns
YXNoKGdwcygndHlwZScpKS4iJyIsDQoJCQkiaWQ9Ii4kaWQpOw0KCQkJJG9wcyA9IGdwcygn
ZXRjX29wc18nLiRpZCk7DQoJCQlpZighJGlkKSAkaWQgPSBpbnR2YWwoZ2V0VGhpbmcoJ1NF
TEVDVCBMQVNUX0lOU0VSVF9JRCgpJykpOw0KCQkJaWYoJG9wcyA9PT0gJycpIHtzYWZlX2Rl
bGV0ZSgndHhwX3ByZWZzJywgIm5hbWU9J2V0Y19zZWFyY2hfb3BzXyRpZCciKTsgJHByZWZz
WydldGNfc2VhcmNoX29wc18nLiRpZF0gPSAnJzt9DQoJCQllbHNlIHNldF9wcmVmKCdldGNf
c2VhcmNoX29wc18nLiRpZCwgJHByZWZzWydldGNfc2VhcmNoX29wc18nLiRpZF0gPSBncHMo
J2V0Y19vcHNfJy4kaWQpLCAnZXRjX3NlYXJjaCcsIFBSRUZfSElEREVOKTsNCgkJYnJlYWs7
DQoJCWNhc2UgJ0RlbGV0ZScgOiBzYWZlX2RlbGV0ZSgnZXRjX3NlYXJjaCcsICJpZD0kaWQi
KTsgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1lPSdldGNfc2VhcmNoX29wc18kaWQn
Iik7DQoJCWJyZWFrOw0KCX0gZWxzZWlmKCRzdGVwID09ICdvcHMnKSB7DQoJCQlzZXRfcHJl
ZignZXRjX3NlYXJjaF9vcHMnLCAkcHJlZnNbJ2V0Y19zZWFyY2hfb3BzJ10gPSBncHMoJ2V0
Y19vcHMnKSwgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCX0NCg0KCSRvcHMgPSBn
ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCSRycyA9IHNhZmVfcm93cygnKicsICdl
dGNfc2VhcmNoJywgJzEnKTsNCglwYWdldG9wKCJldGNfc2VhcmNoIiwgIjxzdHJvbmc+ZXRj
X3NlYXJjaDwvc3Ryb25nPiBwcmVmZXJlbmNlcyIpOw0KDQoJZWNobyAnPHN0eWxlPi5ldGMt
c2VhcmNoLWZvcm0gaW5wdXRbdHlwZT0idGV4dCJde3dpZHRoOjEwMCV9DQoJCS5ldGMtdHdv
LWNvbHVtbnt3aWR0aDoxMDAlO2JvcmRlci1zcGFjaW5nOjFlbSAwO2JvcmRlci1jb2xsYXBz
ZTpzZXBhcmF0ZTt9DQoJCS5ldGMtc2VhcmNoLWZvcm17cGFkZGluZzowIDFlbTt9DQoJPC9z
dHlsZT4nOw0KCWVjaG8gJzxoMT5ldGNfc2VhcmNoIHNldHVwPC9oMT4nLm47DQoNCgllY2hv
ICc8aDI+U2VhcmNoIHNldHRpbmdzPC9oMj4nLm47DQoJZWNobyAnPGRpdiBjbGFzcz0ic3Vt
bWFyeS1kZXRhaWxzIj48aDMgY2xhc3M9ImxldmVyIHR4cC1zdW1tYXJ5Ij48YSBocmVmPSIj
ZXRjLWxvZ2ljIj5Mb2dpY2FsIG9wZXJhdG9yczwvYT48L2gzPicubjsNCgllY2hvICc8Zm9y
bSBpZD0iZXRjLWxvZ2ljIiBjbGFzcz0iZXRjLXNlYXJjaC1mb3JtIiBhY3Rpb249Ij9ldmVu
dD1ldGNfc2VhcmNoJnN0ZXA9b3BzIiBtZXRob2Q9InBvc3QiPicsIG4sICc8cD48bGFiZWwg
Zm9yPSJvcHMiPkpTT04tZW5jb2RlZCBvYmplY3QgKGhhbmRsZSB3aXRoIGNhcmUpPC9sYWJl
bD48YnIgLz4nLCBmSW5wdXQoJ3RleHQnLCAnZXRjX29wcycsICRvcHMpLCB0SW5wdXQoKSwg
c0lucHV0KCdvcHMnKSwgJzwvcD48cD4nLCBmSW5wdXQoJ3N1Ym1pdCcsICdzYXZlJywgJ1Nh
dmUnLCAncHVibGlzaCcpLCBuLCAnPC9wPjwvZm9ybT48L2Rpdj4nLCBuOw0KDQoJZWNobyAn
PGgyPlNlYXJjaCBmb3JtczwvaDI+Jy5uLic8ZGl2IGNsYXNzPSJzdW1tYXJ5LWRldGFpbHMi
PicubjsNCglmb3JlYWNoKCRycyBhcyAkcm93KSBlY2hvIGV0Y19zZWFyY2hfZm9ybShkb1Nw
ZWNpYWwoJHJvdykpOw0KCWVjaG8gZXRjX3NlYXJjaF9mb3JtKGFycmF5KCdpZCc9PjAsICdx
dWVyeSc9PicnLCAnZm9ybTEnPT4nJywgJ2Zvcm0yJz0+JycsICd0aGluZzEnPT4nJywgJ3Ro
aW5nMic9PicnLCAndHlwZSc9PicnKSkubi4nPC9kaXY+JzsNCg0KCWVjaG8gJzxzY3JpcHQ+
JChmdW5jdGlvbiAoKSB7DQoJCSQoIi5sZXZlciBhW2hyZWYhPScsIicjZXRjLWZvcm0tIi5p
bnR2YWwoZ3BzKCdpZCcpKS4iJyIsICddIikudHJpZ2dlcigiY2xpY2siKTsNCgl9KTs8L3Nj
cmlwdD4nOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX2Zvcm0oJHJvdykgew0KCWdsb2Jh
bCAkcHJlZnM7DQoJaWYoISgkc2VhcmNoX2ZpZWxkcyA9ICRwcmVmc1snc2VhcmNoYWJsZV9h
cnRpY2xlX2ZpZWxkcyddKSkgJHNlYXJjaF9maWVsZHMgPSAnVGl0bGUsQm9keSc7DQoJJGNv
bnRleHQgPSBhcnJheSgpOw0KCWVjaG8gJzxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnki
PjxhIGhyZWY9IiNldGMtZm9ybS0nLiRyb3dbJ2lkJ10uJyI+JywgKCRyb3dbJ2lkJ10gPyAn
U2VhcmNoIGZvcm0gJy4kcm93WydpZCddIDogJ05ldyBzZWFyY2ggZm9ybScpLCAnPC9hPjwv
aDM+JywgbjsNCgllY2hvICc8Zm9ybSBpZD0iZXRjLWZvcm0tJy4kcm93WydpZCddLiciIGNs
YXNzPSJldGMtc2VhcmNoLWZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9ZXRj
X3NlYXJjaCInLCAoJHJvd1snaWQnXSA/ICcgZGF0YS1pZD0iJy4kcm93WydpZCddLiciJyA6
ICcnKSwgJz4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5jb250ZXh0PC9sYWJlbD48YnIgLz4n
LCAvKmltcGxvZGUoJyZuYnNwOyZuYnNwOyAnLCAkY29udGV4dCkqLyANCglyYWRpb1NldChh
cnJheSgnYXJ0aWNsZSc9PmdUeHQoJ2FydGljbGVfY29udGV4dCcpLCAnaW1hZ2UnPT5nVHh0
KCdpbWFnZV9jb250ZXh0JyksICdmaWxlJz0+Z1R4dCgnZmlsZV9jb250ZXh0JyksICdsaW5r
Jz0+Z1R4dCgnbGlua19jb250ZXh0JyksICdjYXRlZ29yeSc9PmdUeHQoJ2NhdGVnb3J5Jyks
ICdzZWN0aW9uJz0+Z1R4dCgnc2VjdGlvbicpLCAnJz0+J2N1c3RvbScpLCAndHlwZScsICRy
b3dbJ3R5cGUnXSwgJycsICdldGMtJy4kcm93WydpZCddKSwgJzwvcD4nLCBuOw0KCWVjaG8g
JzxwPjxsYWJlbD5xdWVyeTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9
InF1ZXJ5IiB2YWx1ZT0iJywgJHJvd1sncXVlcnknXSwgJyIgcGxhY2Vob2xkZXI9InsnLCAk
c2VhcmNoX2ZpZWxkcywgJ30iIC8+PC9wPicsIG47DQoJZWNobyAnPHA+PGxhYmVsPmxvZ2lj
YWwgb3BlcmF0b3JzIChKU09OLWVuY29kZWQpPC9sYWJlbD48YnIgLz48aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0iZXRjX29wc18nLCRyb3dbJ2lkJ10sJyIgdmFsdWU9IicsICRyb3dbJ2lk
J10gPyBkb1NwZWNpYWwoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzXycuJHJvd1snaWQnXSkp
IDogJycsICciIHBsYWNlaG9sZGVyPSInLGRvU3BlY2lhbChnZXRfcHJlZignZXRjX3NlYXJj
aF9vcHMnKSksJyIgLz48L3A+JywgbjsNCgllY2hvICc8dGFibGUgY2xhc3M9ImV0Yy10d28t
Y29sdW1uIj48dHI+JywgbjsNCgllY2hvICc8dGQ+PGZpZWxkc2V0PjxsZWdlbmQ+TGl2ZSBz
ZWFyY2g8L2xlZ2VuZD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5mb3JtPC9sYWJlbD48YnIg
Lz48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZm9ybTEiIHZhbHVlPSInLCAkcm93Wydmb3Jt
MSddLCAnIiBwbGFjZWhvbGRlcj0iZXRjX3NlYXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0K
CWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFt
ZT0idGhpbmcxIiBzcGVsbGNoZWNrPSJmYWxzZSI+JywgJHJvd1sndGhpbmcxJ10sICc8L3Rl
eHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwvZmllbGRzZXQ+PC90ZD4nLCBuOw0KCWVjaG8g
Jzx0ZD48ZmllbGRzZXQ+PGxlZ2VuZD5TdGF0aWMgc2VhcmNoPC9sZWdlbmQ+JywgbjsNCgll
Y2hvICc8cD48bGFiZWw+Zm9ybTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5h
bWU9ImZvcm0yIiB2YWx1ZT0iJywgJHJvd1snZm9ybTInXSwgJyIgcGxhY2Vob2xkZXI9InNl
YXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50
PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFtZT0idGhpbmcyIiBzcGVsbGNoZWNrPSJmYWxz
ZSI+JywgJHJvd1sndGhpbmcyJ10sICc8L3RleHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwv
ZmllbGRzZXQ+PC90ZD4nLCBuLCAnPC90cj48L3RhYmxlPicsIG47DQoJZWNobyAnPHA+Jywg
c0lucHV0KCdzYXZlJyksIGhJbnB1dCgnaWQnLCAkcm93WydpZCddKSwgdElucHV0KCksIGZJ
bnB1dCgnc3VibWl0JywgJ3NhdmUnLCAnU2F2ZScsICdwdWJsaXNoJyksICgkcm93WydpZCdd
ID8gZklucHV0KCdzdWJtaXQnLCAnc2F2ZScsICdEZWxldGUnLCAncHVibGlzaCcpIDogJycp
LCAnPC9wPicsIG47DQoJZWNobyAnPC9mb3JtPic7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy
Y2hfcGFyc2UoJHN0cmluZywgJHBhdHRlcm4sICYkbWF0Y2hlcywgJG9wZW4gPSAnJywgJGNs
b3NlID0gJycsICRyZXBsYWNlID0gYXJyYXkoKSkNCnsNCglpZighJHN0cmluZyB8fCAhJHBh
dHRlcm4pIHJldHVybiAkc3RyaW5nOw0KCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkkc3RyaW5n
ID0gcHJlZ19zcGxpdCgkcGF0dGVybiwgJHN0cmluZywgbnVsbCwgUFJFR19TUExJVF9ERUxJ
TV9DQVBUVVJFKTsNCglpZigoJGNvdW50ID0gY291bnQoJHN0cmluZykpID4gMSkgZm9yKCRp
ID0gMTsgJGkgPCAkY291bnQ7ICRpICs9IDIpIHsNCgkJJG1hdGNoZXNbJG9wZW4uJGkuJGNs
b3NlXSA9ICRyZXBsYWNlID8gc3RydHIoJHN0cmluZ1skaV0sICRyZXBsYWNlKSA6ICRzdHJp
bmdbJGldOw0KCQkkc3RyaW5nWyRpXSA9ICRvcGVuLiRpLiRjbG9zZTsNCgl9DQoJcmV0dXJu
IGltcGxvZGUoJycsICRzdHJpbmcpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3F1ZXJ5
KCRzdHJpbmcsICRmaWVsZHMsICRvcHM9bnVsbCkNCnsNCglpZighJGZpZWxkcyB8fCAkc3Ry
aW5nID09PSAnJykgcmV0dXJuICcxJzsNCglnbG9iYWwgJGV0Y19zZWFyY2hfb3BzLCAkZXRj
X3NlYXJjaF9uZWcsICRldGNfc2VhcmNoX21hdGNoX3F1ZXJ5Ow0KCSR3aGVyZSA9IGFycmF5
KCk7DQoJaWYoISRvcHMgfHwgIWlzX2FycmF5KCRvcHMpKSB7DQoJCSRwYXR0ZXJucyA9IGRv
X2xpc3QoJGZpZWxkcywgJzsnKTsNCgkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCSRub3QgPSBm
YWxzZTsNCgkJd2hpbGUoJHN0cmluZyAmJiAkc3RyaW5nWzBdPT0kZXRjX3NlYXJjaF9uZWcp
IHskbm90ID0gISRub3Q7ICRzdHJpbmc9c3Vic3RyKCRzdHJpbmcsIDEpO30NCgkJaWYocHJl
Z19tYXRjaCgnL15cW1wiXGQqXCJcXSQvJywgJHN0cmluZykpIHJldHVybiAkbm90ID8gIigg
Tk9UICRzdHJpbmcgKSIgOiAkc3RyaW5nOw0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJ3sq
fScsICd7eyp9fScsICRzdHJpbmcpOw0KCQlpZigkc3RyaW5nID4gJycpIGZvcmVhY2goJHBh
dHRlcm5zIGFzICRwYXR0ZXJuKSB7DQoJCQl1bnNldCgkZmxkcywgJHBhdCwgJGNvbmQpOw0K
CQkJJGl0ZW1zID0gZXhwbG9kZSgnOjonLCAkcGF0dGVybik7IC8vKyBhcnJheShudWxsLCBu
dWxsLCBudWxsKQ0KCQkJaWYoY291bnQoJGl0ZW1zKSA9PSAzKSBsaXN0KCRmbGRzLCAkcGF0
LCAkY29uZCkgPSAkaXRlbXM7DQoJCQllbHNlIGZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKSB7
DQoJCQkJaWYoJGl0ZW0gJiYgJGl0ZW1bMF0gPT09ICcvJykgJHBhdCA9ICRpdGVtOw0KCQkJ
CWVsc2VpZihwcmVnX21hdGNoKCcvXlxzKltcd1wuXStccyooPzosXHMqW1x3XC5dK1xzKikq
JC8nLCAkaXRlbSkpICRmbGRzID0gJGl0ZW07DQoJCQkJZWxzZSAkY29uZCA9ICRpdGVtOw0K
CQkJfQ0KCQkJaWYoZW1wdHkoJHBhdCkpICRwYXQgPSAnL14uKyQvcyc7DQoJCQlpZihwcmVn
X21hdGNoKCRwYXQsICRzdHJpbmcsICRtYXRjaCkpIHsNCgkJCQlpZihlbXB0eSgkZmxkcykg
JiYgIWlzc2V0KCRjb25kKSkgcmV0dXJuICRzdHJpbmc7DQoJCQkJaWYoIWlzc2V0KCRjb25k
KSkgJGZpZWxkc1tdID0gYXJyYXkoJGZsZHMsICJ7Kn0gTElLRSAnJSRzdHJpbmclJyIpOw0K
CQkJCWVsc2UgJGZpZWxkc1tdID0gYXJyYXkoZW1wdHkoJGZsZHMpID8gJ05VTEwnIDogJGZs
ZHMsIHByZWdfcmVwbGFjZSgkcGF0LCAkY29uZCwgJG1hdGNoWzBdKSk7DQoJCQl9DQoJCX0N
CgkJaWYoISRmaWVsZHMpIHJldHVybiAnMCc7DQoJCWVsc2UgJGV0Y19zZWFyY2hfbWF0Y2hf
cXVlcnkgPSB0cnVlOyANCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmbGlzdCkgew0KCQkJJHdo
ciA9IGFycmF5KCk7DQoJCQkkZmxkcyA9IHN0cnBvcygkZmxpc3RbMF0sICcoJykgIT09IGZh
bHNlID8gcHJlZ19zcGxpdCgnLyhbXlwoXClcLF0qKD86XCgoPzpbXlwoXCldfCg/MSkpKlwp
KT8pKD86XCx8JCkvJywgJGZsaXN0WzBdLCBudWxsLCBQUkVHX1NQTElUX0RFTElNX0NBUFRV
UkUgfCBQUkVHX1NQTElUX05PX0VNUFRZKSA6IGRvX2xpc3QoJGZsaXN0WzBdKTsNCgkJCWZv
cmVhY2goJGZsZHMgYXMgJGZpZWxkKSAkd2hyW10gPSAnKCcuc3RydHIoJGZsaXN0WzFdLCBh
cnJheSgne3sqfX0nID0+ICd7Kn0nLCAneyp9JyA9PiAkZmllbGQpICkuJyknOw0KCQkJJHdo
ZXJlW10gPSBpbXBsb2RlKCIgT1IgIiwgJHdocik7DQoJCX0NCgkJJHdoZXJlID0gJyggJy5p
bXBsb2RlKCcgT1IgJywgJHdoZXJlKS4nICknOw0KCQlyZXR1cm4gKCRub3QgPyAiKCBOT1Qg
JHdoZXJlICkiIDogJHdoZXJlKTsNCgl9DQoNCglAbGlzdCgkc2VwLCAkb3ApID0gYXJyYXko
ZW5kKCRvcHMpLCBrZXkoJG9wcykpOw0KCXVuc2V0KCRvcHNbJG9wXSk7DQoNCgkkcXVvdGVz
ID0gJGJyYWNlcyA9IGFycmF5KCk7DQoJaWYoc3RycG9zKCRzdHJpbmcsICdcIicpICE9PSBm
YWxzZSkgJHN0cmluZyA9IGV0Y19zZWFyY2hfcGFyc2UoJHN0cmluZywgJy9cXFwiKC4qKVxc
XCIvVXMnLCAkcXVvdGVzLCAnfCInLCAnInwnKTsNCglpZihzdHJwb3MoJHN0cmluZywgJygn
KSAhPT0gZmFsc2UpICRzdHJpbmcgPSBldGNfc2VhcmNoX3BhcnNlKCRzdHJpbmcsICcvXCgo
KD86W14oKV18KD8wKSkqKVwpL1UnLCAkYnJhY2VzLCAnWyInLCAnIl0nKTsNCglmb3JlYWNo
KGRvX2xpc3QoJHN0cmluZywgJHNlcCkgYXMgJHZhbHVlKSBpZihzdHJsZW4oJHZhbHVlKSA+
IDApDQoJCSR3aGVyZVtdID0gZXRjX3NlYXJjaF9xdWVyeSgkdmFsdWUsICRmaWVsZHMsICRv
cHMpOw0KCWZvcmVhY2goJGJyYWNlcyBhcyAmJHZhbHVlKSAkdmFsdWUgPSBldGNfc2VhcmNo
X3F1ZXJ5KCR2YWx1ZSwgJGZpZWxkcywgJGV0Y19zZWFyY2hfb3BzKTsNCgl1bnNldCgkdmFs
dWUpOw0KDQoJc3dpdGNoIChjb3VudCgkd2hlcmUpKSB7DQoJCWNhc2UgMDogcmV0dXJuICcw
JzsNCgkJY2FzZSAxOiByZXR1cm4gc3RydHIoc3RydHIoJHdoZXJlWzBdLCAkYnJhY2VzKSwg
JHF1b3Rlcyk7DQoJCWRlZmF1bHQ6IHJldHVybiAnKCAnLnN0cnRyKHN0cnRyKGltcGxvZGUo
IiAkb3AgIiwgJHdoZXJlKSwgJGJyYWNlcyksICRxdW90ZXMpLicgKSc7DQoJfQ0KfQ0KDQpm
dW5jdGlvbiBldGNfc2VhcmNoX2dldF9yZXN1bHRzKCRwYXJhbXMsICRsaXZlPXRydWUpDQp7
DQoJZ2xvYmFsICRwcmVmcywgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJHRoaXNwYWdlLCAk
dGhpc2ltYWdlLCAkdGhpc2xpbmssICR0aGlzZmlsZSwgJHRoaXNjYXRlZ29yeSwgJHRoaXNz
ZWN0aW9uLCAkZXRjX3BhZ2VfY291bnRlciwgJGV0Y19zZWFyY2hfbmVnLCAkZXRjX3NlYXJj
aF9vcHMsICRldGNfc2VhcmNoX2Zvcm1zLCAkZXRjX3NlYXJjaF9tYXRjaCwgJGV0Y19zZWFy
Y2hfbWF0Y2hfcXVlcnk7DQoNCglpZighKCRzZWFyY2hfZmllbGRzID0gJHByZWZzWydzZWFy
Y2hhYmxlX2FydGljbGVfZmllbGRzJ10pKSAkc2VhcmNoX2ZpZWxkcyA9ICdUaXRsZSxCb2R5
JzsNCgkkc2FmZV9zZWFyY2hfZmllbGRzID0gJ2AnLmltcGxvZGUoJ2AsYCcsIGRvX2xpc3Qo
JHNlYXJjaF9maWVsZHMpKS4nYCc7DQoNCgkkcHJldGV4dF9xID0gJHByZXRleHRbJ3EnXTsN
CgkkcSA9ICRwcmV0ZXh0WydxJ10gPSAkcGFyYW1zWydxJ107DQoJJG1heCA9ICRuZXdtYXgg
PSBtYXgoaW50dmFsKCRwYXJhbXNbJ2V0Y19saW1pdCddKSwgMCk7DQoJJHBnID0gbWF4KGlu
dHZhbCgkcHJldGV4dFsncGcnXSksIDEpOw0KCSRvZmZzZXQgPSAoJHBnIC0gMSkqJG1heDsN
CgkkbyA9IGFycmF5KCk7DQoJJG1hdGNoZWQgPSBmYWxzZTsNCgkkcmMgPSAkbGltX2l0ID0g
MDsNCgkkZXRjX3NlYXJjaF9vcHMgPSBncHMoJ20nKSA9PT0gJ2V4YWN0JyA/IG51bGwgOiBn
ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCWZvcmVhY2goJHBhcmFtc1snZXRjX3Nl
YXJjaCddIGFzICRpZCkgew0KCQlpZihpc3NldCgkZXRjX3NlYXJjaF9vcHMpKSB7DQoJCQlp
ZigkaWQpICRldGNfc2VhcmNoX29wcyA9IGdldF9wcmVmKCdldGNfc2VhcmNoX29wc18nLiRp
ZCk7DQoJCQkkZXRjX3NlYXJjaF9vcHMgPSBqc29uX2RlY29kZSgkZXRjX3NlYXJjaF9vcHMg
PT09ICcnID8gZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJykgOiAkZXRjX3NlYXJjaF9vcHMs
IHRydWUpOw0KCQl9DQoJCWlmKGlzc2V0KCRldGNfc2VhcmNoX29wc1snTk9UJ10pKSB7JGV0
Y19zZWFyY2hfbmVnID0gJGV0Y19zZWFyY2hfb3BzWydOT1QnXTsgdW5zZXQoJGV0Y19zZWFy
Y2hfb3BzWydOT1QnXSk7fQ0KCQllbHNlICRldGNfc2VhcmNoX25lZyA9ICcnOw0KDQoJCXVu
c2V0KCR0aGlzX2FydGljbGUsICR0aGlzX2ltYWdlLCAkdGhpc19maWxlLCAkdGhpc19saW5r
KTsNCgkJaWYoJGlkKSB7DQoJCQkJaWYoaXNzZXQoJGV0Y19zZWFyY2hfZm9ybXNbJGlkXSkp
ICRyb3cgPSAkZXRjX3NlYXJjaF9mb3Jtc1skaWRdOw0KCQkJCWVsc2UgJHJvdyA9ICRldGNf
c2VhcmNoX2Zvcm1zWyRpZF0gPSBzYWZlX3JvdygncXVlcnksIGZvcm0xLCBmb3JtMiwgdGhp
bmcxLCB0aGluZzIsIHR5cGUnLCAnZXRjX3NlYXJjaCcsICJpZD0kaWQiKTsNCgkJCQlpZihl
bXB0eSgkcm93KSkgY29udGludWU7DQoJCX0NCgkJZWxzZSAkcm93ID0gYXJyYXkoJ3F1ZXJ5
Jz0+JycsICdmb3JtMSc9PicnLCAnZm9ybTInPT4nJywgJ3RoaW5nMSc9PicnLCAndGhpbmcy
Jz0+JycsICd0eXBlJz0+J2FydGljbGUnKTsNCgkJZXh0cmFjdCgkcm93KTsNCgkJDQoJCWlm
KCFlbXB0eSgkcGFyYW1zWydldGNfZiddKSkgJGZvcm0gPSAkcGFyYW1zWydldGNfZiddOw0K
CQllbHNlICRmb3JtID0gJGxpdmUgPyAoJGZvcm0xID8gJGZvcm0xIDogJ2V0Y19zZWFyY2hf
cmVzdWx0cycpIDogKCRmb3JtMiA/ICRmb3JtMiA6ICdzZWFyY2hfcmVzdWx0cycpOw0KCQlp
ZighZW1wdHkoJHBhcmFtc1snZXRjX3QnXSkpICR0aGluZyA9ICRwYXJhbXNbJ2V0Y190J107
DQoJCWVsc2UgJHRoaW5nID0gJGxpdmUgPyAoJHRoaW5nMSA/ICR0aGluZzEgOiBmZXRjaF9m
b3JtKCRmb3JtKSkgOiAoJHRoaW5nMiA/ICR0aGluZzIgOiBmZXRjaF9mb3JtKCRmb3JtKSk7
DQoNCgkJaWYoISRxdWVyeSkgeyRxdWVyeSA9ICd7Jy4kc2VhcmNoX2ZpZWxkcy4nfSc7ICR0
eXBlID0gJ2FydGljbGUnO30NCgkJZWxzZSAkcXVlcnkgPSB0cmltKHBhcnNlKCRxdWVyeSkp
Ow0KDQoJCWlmKHByZWdfbWF0Y2goJy9eKC4rKVxiKExJTUlUXHMrKFxkKylcYlxzKiw/XHMq
KFxkKilcYi4qKSQvaScsICRxdWVyeSwgJG1hdGNoZXMpKSB7DQoJCQkkcXVlcnkgPSAkbWF0
Y2hlc1sxXTsgJGxpbWl0ID0gJG1hdGNoZXNbMl07DQoJCQlpZigkbWF0Y2hlc1s0XSkgeyRv
ZmYgPSAkbWF0Y2hlc1szXTsgJGxpbSA9ICRtYXRjaGVzWzRdO30NCgkJCWVsc2UgeyRvZmYg
PSAwOyAkbGltID0gJG1hdGNoZXNbM107fQ0KCQl9DQoJCWVsc2UgJGxpbWl0ID0gJyc7DQoN
CgkJaWYoJG5ld21heCA+IDApICRsaW1faXQgPSAkbGltaXQgPyAiIExJTUlUICIuKCRvZmZz
ZXQgKyAkb2ZmKS4iLCAiLm1pbigkbGltIC0gJG9mZnNldCwgJG5ld21heCkgOiAiIExJTUlU
ICRvZmZzZXQsICRuZXdtYXgiOw0KCQllbHNlICRsaW1faXQgPSAnJzsNCg0KCQlpZihwcmVn
X21hdGNoKCcvXiguKylcYihPUkRFUlxzK0JZXGIuKykkL1VpJywgJHF1ZXJ5LCAkbWF0Y2hl
cykpIHsNCgkJCSRxdWVyeSA9ICRtYXRjaGVzWzFdOyAkb3JkZXIgPSAkbWF0Y2hlc1syXTsN
CgkJfSBlbHNlICRvcmRlciA9ICcnOw0KCQkNCgkJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVl
Ow0KCQkkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSA9IGZhbHNlOw0KCQkkcXVlcnkgPSBwcmVn
X3JlcGxhY2VfY2FsbGJhY2soJy9ceygoPzpbXnt9XXwoPzApKSspXH0vVScsICdldGNfc2Vh
cmNoX2dwcycsICRvbGRxdWVyeSA9ICRxdWVyeSk7DQoJCWlmKCEkZXRjX3NlYXJjaF9tYXRj
aCB8fCBlbXB0eSgkcXVlcnkpIHx8ICEkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSAmJiAoJG9s
ZHF1ZXJ5ICE9PSAkcXVlcnkpKSBjb250aW51ZTsNCgkJZWxzZSAkbWF0Y2hlZCA9IHRydWU7
DQoNCgkJaWYoISgkY3VzdG9tID0gcHJlZ19tYXRjaCgnL15TRUxFQ1RcYi9pJywgJHF1ZXJ5
KSkpIHN3aXRjaCgkdHlwZSkgey8vZGVmYXVsdCBzZWFyY2gNCgkJCWNhc2UgJ2ltYWdlJyA6
IGNhc2UgJ2ZpbGUnIDogY2FzZSAnbGluaycgOiBjYXNlICdjYXRlZ29yeScgOiBjYXNlICdz
ZWN0aW9uJyA6DQoJCQkkdGFibGUgPSBzYWZlX3BmeCgndHhwXycuJHR5cGUpOw0KCQkJJGNv
dW50ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUg
PT0gJ2ZpbGUnID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCSRxdWVy
eSA9ICdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUgPT0gJ2ZpbGUn
ID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCWJyZWFrOw0KDQoJCQlk
ZWZhdWx0IDoNCgkJCSRzX2ZpbHRlciA9ICcnOw0KCQkJJHJzID0gc2FmZV9jb2x1bW4oIm5h
bWUiLCAidHhwX3NlY3Rpb24iLCAic2VhcmNoYWJsZSAhPSAnMSciKTsNCgkJCWlmICgkcnMp
IHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkbmFtZSkgJHNfZmlsdGVyIC49ICIgQU5EIFNlY3Rp
b24gIT0gJyIuZG9TbGFzaCgkbmFtZSkuIiciOw0KCQkJfQ0KCQkJJHRhYmxlID0gc2FmZV9w
ZngoJ3RleHRwYXR0ZXJuJyk7DQoJCQkkdHMgPSBzdHJmdGltZSgnJVktJW0tJWQgJUg6JU06
JVMnKTsNCgkJCSRjb3VudCA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUg
U3RhdHVzID49IDQgQU5EIFBvc3RlZCA8PSAnJHRzJyBBTkQgKEV4cGlyZXMgSVMgTlVMTCBP
UiBFeHBpcmVzPj0nJHRzJykgJHNfZmlsdGVyIEFORCAkcXVlcnkiOw0KCQkJJHF1ZXJ5ID0g
IlNFTEVDVCAqIi4oJG9yZGVyID8gJycgOiAiLCBNQVRDSCAoJHNhZmVfc2VhcmNoX2ZpZWxk
cykgQUdBSU5TVCAoJyRxJykgQVMgc2NvcmUiKS4iIEZST00gJHRhYmxlIFdIRVJFIFN0YXR1
cyA+PSA0IEFORCBQb3N0ZWQgPD0gJyR0cycgQU5EIChFeHBpcmVzIElTIE5VTEwgT1IgRXhw
aXJlcz49JyR0cycpICRzX2ZpbHRlciBBTkQgJHF1ZXJ5IjsNCgkJCWlmKCEkb3JkZXIpICRv
cmRlciA9ICcgT1JERVIgQlkgc2NvcmUgREVTQyc7DQoJCX0NCg0KCQkkY291bnQgPSAhJGN1
c3RvbSA/ICRjb3VudCA6ICgNCgkJCSRsaW1pdCA/ICJTRUxFQ1QgY291bnQoKikgRlJPTSAo
Ii5wcmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1Vp
IiwgJ1NFTEVDVCAxIEZST00nLCAkcXVlcnkuJGxpbWl0KS4iKSBjb3VudCIgDQoJCQkJOiBw
cmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1VpIiwg
J1NFTEVDVCBjb3VudCgqKSBGUk9NJywgJHF1ZXJ5KQ0KCQkpOw0KDQovLwkJaWYoISRsaXZl
KSAkb1tdPSc8IS0tJy4kcXVlcnkuJy0tPic7DQoNCgkJJGNvdW50ID0gaW50dmFsKGdldFRo
aW5nKCRjb3VudCkpOw0KCQkkcmMgKz0gJGNvdW50Ow0KCQlpZigkY291bnQgPD0gJG9mZnNl
dCkgeyRvZmZzZXQgLT0gJGNvdW50OyBjb250aW51ZTt9IGVsc2UgJG9mZnNldCA9IDA7DQoJ
CSRycyA9ICgkbWF4IDw9IDAgfHwgJG5ld21heCA+IDAgPyBnZXRSb3dzKCRxdWVyeS4kb3Jk
ZXIuKCRsaW1faXQgPyAkbGltX2l0IDogJGxpbWl0KSkgOiBhcnJheSgpKTsNCgkJJHJlcGxh
Y2VtZW50cyA9IGFycmF5KCk7DQoJCXByZWdfbWF0Y2hfYWxsKCIvXHsoLispXH0vVSIsICR0
aGluZywgJG1hdGNoZXMsIFBSRUdfU0VUX09SREVSKTsNCg0KCQlpZigkdHlwZSAmJiBpc3Nl
dCgkeyd0aGlzJy4kdHlwZX0pKSAkeyd0aGlzXycuJHR5cGV9ID0gJHsndGhpcycuJHR5cGV9
Ow0KCQkkY291bnQgPSBjb3VudCgkcnMpIC0gMTsNCgkJaWYoIWVtcHR5KCRycykpIGZvcmVh
Y2goJHJzIGFzICRpID0+ICRhKSB7DQoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtYXRjaCkg
ew0KCQkJCWlmKCRtYXRjaFsxXVswXSA9PT0gJyonKSB7JG1hdGNoWzFdID0gc3Vic3RyKCRt
YXRjaFsxXSwgMSk7ICRlc2NhcGUgPSBmYWxzZTt9DQoJCQkJZWxzZSAkZXNjYXBlID0gdHJ1
ZTsNCgkJCQlpZihpc3NldCgkYVskbWF0Y2hbMV1dKSkgJHJlcGxhY2VtZW50c1skbWF0Y2hb
MF1dID0gJGVzY2FwZSA/IGh0bWxzcGVjaWFsY2hhcnMoJGFbJG1hdGNoWzFdXSwgRU5UX1FV
T1RFUykgOiAkYVskbWF0Y2hbMV1dOw0KCQkJfQ0KCQkJaWYoJHR5cGUpIHsNCgkJCQkkdmFs
ID0gJHR5cGUuKCR0eXBlID09PSAnZmlsZScgPyAnX2Rvd25sb2FkJyA6ICcnKS4nX2Zvcm1h
dF9pbmZvJzsNCgkJCQlpZigkdHlwZSA9PSAnYXJ0aWNsZScpIGFydGljbGVfZm9ybWF0X2lu
Zm8oJGEpOw0KCQkJCWVsc2VpZigkdHlwZSA9PSAnZmlsZScgfHwgJHR5cGUgPT0gJ2ltYWdl
JyB8fCAkdHlwZSA9PSAnbGluaycpICR7J3RoaXMnLiR0eXBlfSA9ICR2YWwoJGEpOw0KCQkJ
CWVsc2UgJHsndGhpcycuJHR5cGV9ID0gJGE7DQoJCQkJJHsndGhpcycuJHR5cGV9Wydpc19m
aXJzdCddID0gJGkgPT0gMDsNCgkJCQkkeyd0aGlzJy4kdHlwZX1bJ2lzX2xhc3QnXSA9ICRp
ID09ICRjb3VudDsNCgkJCX0NCgkJCSRvW10gPSBwYXJzZShzdHJ0cigkdGhpbmcsICRyZXBs
YWNlbWVudHMpKTsNCgkJfQ0KCQlpZigkdHlwZSAmJiBpc3NldCgkeyd0aGlzXycuJHR5cGV9
KSkgJHsndGhpcycuJHR5cGV9ID0gJHsndGhpc18nLiR0eXBlfTsNCgkJaWYoJG1heCA+IDAp
ICRuZXdtYXggPSAkbWF4IC0gY291bnQoJG8pOw0KCX0NCg0KCWlmKGVtcHR5KCR0aGlzcGFn
ZSkpIHsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ2Zyb20nXSA9ICgkcGcgLSAxKSokbWF4ICsg
MTsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ3RvJ10gPSAkbWF4ID4gMCA/IG1pbigkZXRjX3Bh
Z2VfY291bnRlclsnZnJvbSddICsgJG1heCAtIDEsICRyYykgOiAkcmM7DQoJCSR0aGlzcGFn
ZVsncGcnXSAgICAgICAgICA9ICRwZzsNCgkJJHRoaXNwYWdlWydudW1QYWdlcyddICAgID0g
JG1heCA+IDAgPyBjZWlsKCRyYy8kbWF4KSA6IDE7DQoJCSR0aGlzcGFnZVsncyddICAgICAg
ICAgICA9ICRwcmV0ZXh0WydzJ107DQoJCSR0aGlzcGFnZVsnYyddICAgICAgICAgICA9ICRw
cmV0ZXh0WydjJ107DQoJCSR0aGlzcGFnZVsnY29udGV4dCddICAgICA9ICdhcnRpY2xlJzsN
CgkJJHRoaXNwYWdlWydncmFuZF90b3RhbCddID0gJHJjOw0KCQkkdGhpc3BhZ2VbJ3RvdGFs
J10gICAgICAgPSAkcmMgLSAkZXRjX3BhZ2VfY291bnRlclsnZnJvbSddICsgMTsNCgl9DQoJ
aWYoJGxpdmUgJiYgJGxpbV9pdCAmJiAkdGhpc3BhZ2VbJ251bVBhZ2VzJ10gPiAkcGcpICRv
W10gPSBnVHh0KCdtb3JlJykuJyZoZWxsaXA7JzsNCg0KCSRwcmV0ZXh0WydxJ10gPSAkcHJl
dGV4dF9xOw0KLyogIGVjaG8oJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ3V0
Zi04XCcgPz4nKTsqLw0KCXJldHVybiAkbWF0Y2hlZCA/ICRvIDogbnVsbDsNCn0NCg0KZnVu
Y3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRfY291bnQoJGF0dHMpDQp7DQoJZ2xvYmFsICR0aGlz
cGFnZSwgJGV0Y19wYWdlX2NvdW50ZXI7DQoJaWYoZW1wdHkoJHRoaXNwYWdlKSB8fCBlbXB0
eSgkZXRjX3BhZ2VfY291bnRlcikpIHJldHVybjsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko
DQoJCSd0ZXh0JyAgID0+IGdUeHQoJ3Nob3dpbmdfc2VhcmNoX3Jlc3VsdHMnKQ0KCSksICRh
dHRzKSk7DQoNCglyZXR1cm4oc3RydHIoJHRleHQsIGFycmF5KCd7ZnJvbX0nID0+ICRldGNf
cGFnZV9jb3VudGVyWydmcm9tJ10sICd7dG99JyA9PiAkZXRjX3BhZ2VfY291bnRlclsndG8n
XSwgJ3t0b3RhbH0nID0+ICR0aGlzcGFnZVsnZ3JhbmRfdG90YWwnXSwgJ3twYWdlfScgPT4g
JHRoaXNwYWdlWydwZyddLCAne3BhZ2VzfScgPT4gJHRoaXNwYWdlWydudW1QYWdlcyddKSkp
Ow0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3Jlc3VsdF9leGNlcnB0KCRhdHRzKQ0Kew0K
DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2JyZWFrJyAgID0+ICcgJiM4MjMwOycsDQoJ
CSdoaWxpZ2h0JyA9PiAnc3Ryb25nJywNCgkJJ2xpbWl0JyAgID0+IDUsDQoJCSdzaXplJyAg
ID0+IDUwLA0KCQknc2hvd2Fsd2F5cycgICA9PiAiMCIsDQoJCSd0eXBlJyAgID0+ICdhcnRp
Y2xlJywNCgkJJ2ZpZWxkJyAgID0+ICdib2R5Jw0KCSksICRhdHRzKSk7DQoNCglnbG9iYWwg
JHsndGhpcycuJHR5cGV9LCAkcHJldGV4dDsNCglpZihlbXB0eSgkeyd0aGlzJy4kdHlwZX0p
IHx8IGVtcHR5KCR7J3RoaXMnLiR0eXBlfVskZmllbGRdKSkgcmV0dXJuICcnOw0KCSRtID0g
JHByZXRleHRbJ20nXTsNCglpZigoJHEgPSB0cmltKGdwcygncScpKSkgPT09ICcnKSByZXR1
cm47DQoNCgkkcmVzdWx0ID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgc3RyaXBfdGFn
cyhzdHJfcmVwbGFjZSgnPjwnLCAnPiA8JywgJHsndGhpcycuJHR5cGV9WyRmaWVsZF0pKSk7
DQoNCgkkb3BzID0ganNvbl9kZWNvZGUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJyksIHRy
dWUpOw0KCWZvcmVhY2goJG9wcyBhcyAmJHZhbCkgJHZhbCA9IHByZWdfcXVvdGUoJHZhbCwg
Jy8nKTsNCgkkb3BzID0gaW1wbG9kZSgnfCcsICRvcHMpOw0KDQoJJHEgPSBwcmVnX3F1b3Rl
KHN0cl9yZXBsYWNlKGFycmF5KCcoJywgJyknKSwgJycsICRxKSwgJy8nKTsNCgkkcXVvdGVz
ID0gYXJyYXkoKTsNCglpZigkbSAhPT0gJ2V4YWN0JyAmJiBzdHJwb3MoJHEsICciJykgIT09
IGZhbHNlKSAkcSA9IGV0Y19zZWFyY2hfcGFyc2UoJHEsICcvKCIuKiIpL1VzJywgJHF1b3Rl
cywgJygnLCAnKScsIGFycmF5KCciJyA9PiAnJykpOw0KCSRxID0gaHRtbHNwZWNpYWxjaGFy
cygkcSwgRU5UX1FVT1RFUyk7DQoNCglpZiAoJG0gPT09ICdleGFjdCcpDQoJew0KCQkkcmVn
ZXhfc2VhcmNoID0gJy8oPzpcR3xccykuezAsJy4kc2l6ZS4nfScuJHEuJy57MCwnLiRzaXpl
Lid9KD86XHN8JCkvaXUnOw0KCQkkcmVnZXhfaGlsaXRlID0gJHE7DQoJfQ0KCWVsc2UNCgl7
DQoJCSRyZWdleF9oaWxpdGUgPSBzdHJ0cihwcmVnX3JlcGxhY2UoIi8oPzokb3BzKSsvIiwg
J3wnLCAkcSksIGRvU3BlY2lhbCgkcXVvdGVzKSk7DQoJCSRyZWdleF9zZWFyY2ggPSAnLyg/
OlxHfFxzKS57MCwnLiRzaXplLid9KCcuJHJlZ2V4X2hpbGl0ZS4nKS57MCwnLiRzaXplLid9
KD86XHN8JCkvaXUnOw0KCX0NCg0KCXByZWdfbWF0Y2hfYWxsKCRyZWdleF9zZWFyY2gsICRy
ZXN1bHQsICRjb25jYXQpOw0KCSRjb25jYXQgPSAkY29uY2F0WzBdOw0KDQoJJG1pbiA9IG1p
bigkbGltaXQsIGNvdW50KCRjb25jYXQpKTsNCglmb3IgKCRpID0gMCwgJHIgPSBhcnJheSgp
OyAkaSA8ICRtaW47ICRpKyspDQoJew0KCQkkcltdID0gdHJpbSgkY29uY2F0WyRpXSk7DQoJ
fQ0KDQoJJGNvbmNhdCA9IGpvaW4oJGJyZWFrLm4sICRyKTsNCgkkY29uY2F0ID0gcHJlZ19y
ZXBsYWNlKCcvXltePl0rPi9VJywgJycsICRjb25jYXQpOw0KDQoJJGNvbmNhdCA9IHByZWdf
cmVwbGFjZSgnLygnLiRyZWdleF9oaWxpdGUuJykvaScsICI8JGhpbGlnaHQ+JDE8LyRoaWxp
Z2h0PiIsICRjb25jYXQpOw0KDQoJaWYoJGNvbmNhdCkgcmV0dXJuIChzdHJsZW4oJHJlc3Vs
dCkgPiAkc2l6ZSA/ICRicmVhay4kY29uY2F0LiRicmVhayA6IHRyaW0oJGNvbmNhdCkpOw0K
CWVsc2VpZighJHNob3dhbHdheXMpIHJldHVybiAnJzsNCg0KCSRyZXN1bHQgPSBleHBsb2Rl
KCc8Y3V0IC8+Jywgd29yZHdyYXAoJHJlc3VsdCwgMiokc2l6ZSwgJzxjdXQgLz4nLCB0cnVl
KSwgMik7DQoJcmV0dXJuICRyZXN1bHRbMF0uKGNvdW50KCRyZXN1bHQpID4gMSA/ICRicmVh
ayA6ICcnKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9jYWxsYmFjaygkZXZlbnQsICRz
dGVwKQ0Kew0KCWdsb2JhbCAkbm9sb2c7DQoJJG5vbG9nID0gdHJ1ZTsNCg0KLy8JaGVhZGVy
KCdDb250ZW50LVR5cGU6IHRleHQvaHRtbCcpOw0KCWV4aXQoZXRjX3NlYXJjaF9yZXN1bHRz
KGFycmF5KCksIG51bGwsIHRydWUpKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9ncHMo
JG1hdGNoZXMpIHsNCglnbG9iYWwgJHByZXRleHQsICRldGNfc2VhcmNoX29wcywgJGV0Y19z
ZWFyY2hfbWF0Y2gsICRldGNfc2VhcmNoX25lZzsNCgkkc2xhc2ggPSBpc3NldCgkZXRjX3Nl
YXJjaF9uZWcpOy8vcXVlcnkgZGINCgkkY3VzdG9tID0gJG1hdGNoZXNbMV1bMF0gPT09ICc/
JzsNCglpZighJGN1c3RvbSAmJiAkc2xhc2gpIHskcSA9ICRwcmV0ZXh0WydxJ107ICRmaWVs
ZHMgPSAkbWF0Y2hlc1sxXTt9DQoJZWxzZSB7DQoJCWlmKCRjdXN0b20pICRtYXRjaGVzWzFd
ID0gc3Vic3RyKCRtYXRjaGVzWzFdLCAxKTsNCgkJaWYoJHNsYXNoKSBsaXN0KCRxLCAkZmll
bGRzKSA9IGV4cGxvZGUoJzo6JywgJG1hdGNoZXNbMV0sIDIpICsgYXJyYXkobnVsbCwgbnVs
bCk7DQoJCWVsc2UgJHEgPSAkbWF0Y2hlc1sxXTsNCgkJbGlzdCgkcSwgJHNlcCkgPSBleHBs
b2RlKCcmJywgJHEsIDIpICsgYXJyYXkobnVsbCwgJywnKTsNCgkJbGlzdCgkcSwgJGRlZikg
PSBleHBsb2RlKCd8JywgJHEsIDIpICsgYXJyYXkobnVsbCwgbnVsbCk7DQovLwkJJHEgPSBz
dHJfcmVwbGFjZSgnICcsICdfJywgJHEpOw0KLyoJCWlmKCFpc3NldCgkX1JFUVVFU1RbJHFd
KSkgaWYoaXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSB7JHEgPSAnJzsgJGV0Y19zZWFy
Y2hfbWF0Y2ggPSBmYWxzZTt9DQoJCWVsc2UqLyAkcSA9IChpc19hcnJheSgkcSA9IGdwcygk
cSkpID8gaW1wbG9kZSgkc2VwLCAkcSkgOiAkcSk7DQoNCgkJaWYoJHEgPT09ICcnKSB7aWYo
aXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSAkZXRjX3NlYXJjaF9tYXRjaCA9IGZhbHNl
O30NCgkJZWxzZWlmKCRzbGFzaCkgJHEgPSBhZGRjc2xhc2hlcyhkb1NsYXNoKCRxKSwgJyVf
Jyk7DQoJfQ0KCXJldHVybiAhZW1wdHkoJGZpZWxkcykgPyBldGNfc2VhcmNoX3F1ZXJ5KCRx
LCAkZmllbGRzLCAkZXRjX3NlYXJjaF9vcHMpIDogJHE7DQp9DQoNCmZ1bmN0aW9uIGV0Y19z
ZWFyY2hfdGVybSgkZXZlbnQsICRzdGVwKQ0Kew0KCWdsb2JhbCAkcHJldGV4dCwgJGV0Y19z
ZWFyY2hfbWF0Y2g7DQoJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVlOw0KCWlmKCRwcmV0ZXh0
WydxJ10gPT09ICcnKSAkcHJldGV4dFsncSddID0gZ3BzKCdldGNfc2VhcmNoJyk7DQoJJGV0
Y19mb3JtYXQgPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZShncHMoJ2V0Y19xJykpOw0KCWlm
KCRldGNfZm9ybWF0ID09PSAnJykgcmV0dXJuOw0KCSRwcmV0ZXh0WydxJ10gPSBwcmVnX3Jl
cGxhY2VfY2FsbGJhY2soIi9ceyguKylcfS9VcyIsICdldGNfc2VhcmNoX2dwcycsICRldGNf
Zm9ybWF0KTsNCglpZighJGV0Y19zZWFyY2hfbWF0Y2gpICRwcmV0ZXh0WydxJ10gPSAnJzsN
Cn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRzKCRhdHRzLCAkdGhpbmc9bnVsbCwg
JGxpdmU9ZmFsc2UpDQp7DQoJZ2xvYmFsICRoYXNfYXJ0aWNsZV90YWcsICRwcmVmcywgJHBy
ZXRleHQ7DQoJJGhhc19hcnRpY2xlX3RhZyA9IHRydWU7DQoNCglleHRyYWN0KGxBdHRzKGFy
cmF5KA0KCQknaWQnICAgICAgICAgPT4gJycsDQovLwkJJ2Zvcm1hdCcgICAgICAgICA9PiAn
e3F9JywNCgkJJ3F1ZXJ5JyAgICAgICAgID0+IG51bGwsDQovLwkJJ2h0bWxfaWQnICAgICAg
ICAgPT4gJycsDQoJCSdmb3JtJyAgICAgICAgID0+ICcnLA0KCQknbGltaXQnICAgICA9PiAx
MCwNCgkJJ3dyYXB0YWcnICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAn
JywNCgkJJ2JyZWFrJyAgID0+ICcnDQoJKSwgJGF0dHMpKTsNCg0KCWlmKGlzc2V0KCRxdWVy
eSkpICRwYXJhbXMgPSBhcnJheSgnZXRjX3NlYXJjaCcgPT4gZG9fbGlzdCgkaWQpLCAncScg
PT4gJHF1ZXJ5KTsNCgllbHNlIHsNCgkJZXh0cmFjdCgkcGFyYW1zID0gZ3BzYShhcnJheSgn
ZXRjX3NlYXJjaCcsICdldGNfbGltaXQnLCAnZXRjX3EnLCAnZXRjX2YnLCAnZXRjX3cnLCAn
ZXRjX2InKSkpOw0KCQkkcGFyYW1zWydxJ10gPSB0cmltKCRwcmV0ZXh0WydxJ10pOw0KCQlp
ZigkcGFyYW1zWydxJ10gPT09ICcnKSByZXR1cm4gJyc7DQoNCgkJaWYoJGV0Y19zZWFyY2gp
IHsNCgkJCUBsaXN0KCRoYXNoLCAkc2VhcmNoKSA9IGV4cGxvZGUoJy4nLCAkZXRjX3NlYXJj
aCwgMik7DQoJCQlpZihtZDUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfaGFzaCcpLigkbGl2ZSA/
ICRldGNfZi4kZXRjX3cuJGV0Y19iLmludHZhbCgkZXRjX2xpbWl0KTogJycpLiRldGNfcS4k
c2VhcmNoKSAhPT0gJGhhc2gpIHJldHVybiAnJzsNCgkJCSRwYXJhbXNbJ2V0Y19zZWFyY2gn
XSA9ICRzZWFyY2g7DQoJCX0NCgkJJHBhcmFtc1snZXRjX3NlYXJjaCddID0gYXJyYXlfbWFw
KCdpbnR2YWwnLCBkb19saXN0KCRwYXJhbXNbJ2V0Y19zZWFyY2gnXSwgJy4nKSk7DQoJCWlm
KCRpZCAhPT0gJycpICRwYXJhbXNbJ2V0Y19zZWFyY2gnXSA9ICRpZFswXSA9PT0gJy0nID8g
YXJyYXlfZGlmZigkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qoc3Vic3RyKCRpZCwg
MSkpKSA6IGFycmF5X2ludGVyc2VjdCgkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qo
JGlkKSk7DQoJfQ0KCWlmKCRwYXJhbXNbJ3EnXSA9PT0gJycgfHwgZW1wdHkoJHBhcmFtc1sn
ZXRjX3NlYXJjaCddKSkgcmV0dXJuICcnOw0KCWlmKCRsaXZlKSB7JHdyYXB0YWcgPSAkcGFy
YW1zWydldGNfdyddOyAkYnJlYWsgPSAkcGFyYW1zWydldGNfYiddOyAkZm9ybSA9ICRwYXJh
bXNbJ2V0Y19mJ107ICRsaW1pdCA9ICRwYXJhbXNbJ2V0Y19saW1pdCddO30NCg0KCSRmYWxz
ZVBhcnQgPSBpc3NldCgkdGhpbmcpID8gRXZhbEVsc2UoJHRoaW5nLCAwKSA6IGdUeHQoJ25v
X3NlYXJjaF9tYXRjaGVzJyk7DQoJaWYoJGZvcm0pICR0aGluZyA9IGZldGNoX2Zvcm0oJGZv
cm0pOw0KCSR0aGluZyA9IGlzc2V0KCR0aGluZykgPyBFdmFsRWxzZSgkdGhpbmcsIDEpIDog
Jyc7DQoNCglpZigkbGltaXQpICRwYXJhbXNbJ2V0Y19saW1pdCddID0gJGxpbWl0Ow0KCWlm
KCRmb3JtKSAkcGFyYW1zWydldGNfZiddID0gJGZvcm07DQoJaWYoJHRoaW5nKSAkcGFyYW1z
WydldGNfdCddID0gJHRoaW5nOw0KDQoJJHBhcmFtc1sncSddID0gZG9TbGFzaCgkcGFyYW1z
WydxJ10pOw0KCWlmKCFpc3NldCgkcXVlcnkpKSAkcGFyYW1zWydxJ10gPSBhZGRjc2xhc2hl
cygkcGFyYW1zWydxJ10sICclXycpOw0KDQoJJG8gPSBldGNfc2VhcmNoX2dldF9yZXN1bHRz
KCRwYXJhbXMsICRsaXZlKTsNCglyZXR1cm4gKCRvID8gZG9XcmFwKCRvLCAkd3JhcHRhZywg
JGJyZWFrLCAkY2xhc3MpIDogKCRvID09PSBudWxsID8gJycgOiBwYXJzZSgkZmFsc2VQYXJ0
KSkpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoKCRhdHRzLCAkdGhpbmcgPSAnJykNCnsN
CglnbG9iYWwgJHByZWZzOw0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdpZCcgICAgICAg
ICA9PiAnMCcsDQoJCSd0YXJnZXQnICAgICAgICAgPT4gJycsDQoJCSdsaXZlJyAgICAgICAg
ID0+ICc2MDAnLA0KCQknbWF0Y2gnICAgICAgICAgPT4gJycsDQoJCSdhY3Rpb24nICAgICAg
ICAgPT4gbnVsbCwNCgkJJ2Zvcm1hdCcgICAgICAgICA9PiAnJywNCgkJJ21pbmxlbmd0aCcg
ICAgICAgICAgICA9PiAxLA0KCQknaHRtbF9pZCcgICAgICAgICA9PiBzdHJfcmVwbGFjZSgn
LicsICcnLCB1bmlxaWQoImxpdmVfc2VhcmNoXyIsIHRydWUpKSwNCgkJJ2xhYmVsJyAgICAg
ICAgICAgPT4gZ1R4dCgnc2VhcmNoJyksDQoJCSdzaXplJyAgICAgICAgICAgID0+IDAsDQoJ
CSdwbGFjZWhvbGRlcicgICA9PiAnJywNCgkJJ2xpbWl0JyAgICAgPT4gMCwNCgkJJ2Zvcm0n
ICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAnJywNCgkJJ3dyYXB0YWcn
ICAgICAgICAgPT4gJycsDQoJCSdicmVhaycgICA9PiAnYnInDQoJKSwgJGF0dHMpKTsNCg0K
CSRpZCA9IGltcGxvZGUoJy4nLCBkb19saXN0KCRpZCkpOw0KCSRsaXZlID0gLyokdGhpbmcg
PyAwIDoqLyBpbnR2YWwoJGxpdmUpOw0KCSRsaW1pdCA9IGludHZhbCgkbGltaXQpOw0KCSRt
aW5sZW5ndGggPSBpbnR2YWwoJG1pbmxlbmd0aCk7DQoJJHFzID0gYXJyYXkoKTsNCglpZigk
YWN0aW9uID09PSBudWxsKSAkYWN0aW9uID0gcmh1Ow0KCWVsc2UgcGFyc2Vfc3RyKHBhcnNl
X3VybCgkYWN0aW9uLCBQSFBfVVJMX1FVRVJZKSwgJHFzKTsNCgl1bnNldCgkcXNbJ3EnXSwg
JHFzWydtJ10sICRxc1sncGcnXSwgJHFzWydldGNfc2VhcmNoJ10sICRxc1snZXRjX2xpbWl0
J10sICRxc1snZXRjX3EnXSk7DQovLwkkaGFzaCA9ICRpZCB8fCAkbGltaXQgPyBtZDUoJHBy
ZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kbGltaXQuJGlkKS4nLicuJGlkIDogJyc7DQoJJGhh
c2ggPSAkaWQgPyBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybWF0LiRpZCku
Jy4nLiRpZCA6ICcnOw0KCSRxID0gKCEkaWQgfHwgZ3BzKCdldGNfc2VhcmNoJykgPT0gJGhh
c2ggPyBodG1sc3BlY2lhbGNoYXJzKGdwcygncScpKSA6ICcnKTsNCg0KCSRpbnB1dHMgPSAn
JzsNCglpZigkaGFzaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l
dGM9InNlYXJjaCIgbmFtZT0iZXRjX3NlYXJjaCIgdmFsdWU9IicuJGhhc2guJyIgLz4nLm47
DQoJaWYoJGZvcm1hdCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l
dGM9InNlYXJjaCIgbmFtZT0iZXRjX3EiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZv
cm1hdCkuJyIgLz4nLm47DQovLwlpZigkbGltaXQpICRpbnB1dHMgLj0gJzxpbnB1dCB0eXBl
PSJoaWRkZW4iIGRhdGEtZXRjPSJzZWFyY2giIG5hbWU9ImV0Y19saW1pdCIgdmFsdWU9Iicu
JGxpbWl0LiciIC8+Jy5uOw0KCWlmKCRtYXRjaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9
ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0ibSIgdmFsdWU9IicuJG1hdGNoLici
IC8+Jy5uOw0KCWZvcmVhY2goJHFzIGFzICRrZXkgPT4gJHZhbCkgJGlucHV0cyAuPSAnPGlu
cHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0iJy5odG1sc3BlY2lh
bGNoYXJzKCRrZXkpLiciIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHZhbCkuJyIgLz4n
Lm47DQoJJGlucHV0cyAuPSAkdGhpbmcgPyBwYXJzZSgkdGhpbmcpIDogJzxpbnB1dCB0eXBl
PSJzZWFyY2giIG5hbWU9InEiJy4oJHNpemUgPyAnIHNpemU9IicuaW50dmFsKCRzaXplKS4n
IicgOiAnJykuJyB2YWx1ZT0iJy4kcS4nIiBwbGFjZWhvbGRlcj0iJy4kcGxhY2Vob2xkZXIu
JyIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+Jy5uOw0KDQoJJG91dCA9ICc8Zm9ybSBpZD0iJy4k
aHRtbF9pZC4nIiBjbGFzcz0iJy4kY2xhc3MuJyIgbWV0aG9kPSJnZXQiIGFjdGlvbj0iJy4k
YWN0aW9uLiciPicubg0KCS4oJGxhYmVsID8gJzxsYWJlbD4nLiRsYWJlbC4nPGJyIC8+PC9s
YWJlbD4nIDogJycpLiRpbnB1dHMNCgkuJzwvZm9ybT4nOw0KDQoJaWYoJGxpdmUpIHsNCgkJ
JGhhc2ggPSBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybS4kd3JhcHRhZy4k
YnJlYWsuJGxpbWl0LiRmb3JtYXQuJGlkKS4nLicuJGlkOw0KCQkkcmVzdWx0c19vcHRzID0g
YXJyYXkoKTsNCgkJJHJlc3VsdHNfb3B0c1tdID0nZXRjX3NlYXJjaDoiJy4kaGFzaC4nIic7
DQoJCWlmKCRmb3JtKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX2Y6IicuJGZvcm0uJyInOw0K
CQlpZigkYnJlYWspICRyZXN1bHRzX29wdHNbXSA9J2V0Y19iOiInLiRicmVhay4nIic7DQoJ
CWlmKCR3cmFwdGFnKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX3c6IicuJHdyYXB0YWcuJyIn
Ow0KCQlpZigkbGltaXQpICRyZXN1bHRzX29wdHNbXSA9ICdldGNfbGltaXQ6IicuJGxpbWl0
LiciJzsNCg0KCQkkb3V0IC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88
IVtDREFUQVsnLm4uJyQoZnVuY3Rpb24gKCkgeycubg0KCQkuJ2V0Y19saXZlX3NlYXJjaCgn
LiRsaXZlLicsJy4kbWlubGVuZ3RoLicsIicuJGh0bWxfaWQuJyIsIicuJHRhcmdldC4nIix7
Jy5pbXBsb2RlKCcsJywgJHJlc3VsdHNfb3B0cykuJ30pOycubg0KCQkuJ30pOycubi4nLy9d
XT48L3NjcmlwdD4nOw0KCX0NCglyZXR1cm4gJG91dDsNCn0iO3M6NDoidHlwZSI7czoxOiIx
IjtzOjU6Im9yZGVyIjtzOjE6IjciO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtz
OjEzMTM2OiI8aDM+RGVzY3JpcHRpb248L2gzPgoKCTxwPlRoaXMgcGx1Z2luIGRpc3BsYXlz
IGEgc2VhcmNoIGZvcm0gc2ltaWxhcmx5IHRvIDxjb2RlPiZsdDt0eHA6c2VhcmNoX2lucHV0
IC8mZ3Q7PC9jb2RlPi4gSWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkLCBhIHJlc3VsdHMgbGlz
dCB3aWxsIGZhZGUgaW4gYW5kIHJlc2l6ZSBpbiByZWFsIHRpbWUgYmVsb3cgdGhlIHNlYXJj
aCBib3ggd2l0aCBhIG5pY2UgYW5pbWF0aW9uIGVmZmVjdCBhcyB0aGUgdXNlciB0eXBlcyBo
aXMgcXVlcnkuIFdoZW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIHRoZSByZXN1bHRzIGxp
c3Qgc2hyaW5rcyBhbmQgZmFkZXMgb3V0LjwvcD4KCgk8cD5UaGUgc2VhcmNoIGlzIGFkdmFu
Y2VkLCBpLmUuICJqYWd1YXIgc3BlZWQgLWNhciIgd2lsbCBkaXNwbGF5IHRoZSByZXN1bHRz
IGNvbnRhaW5pbmcgdGhlIHN0cmluZ3MgImphZ3VhciIgYW5kICJzcGVlZCIsIGJ1dCBub3Qg
ImNhciIuIFRoZSBzeW50YXggaXMgY3VzdG9taXphYmxlIGJ5IG1vZGlmeWluZyA8Y29kZT5T
ZWFyY2ggc2V0dGluZ3M8L2NvZGU+IEpTT04gZW5jb2RlZCBwcmVmZXJlbmNlLiBNb3Jlb3Zl
ciwgeW91IGNhbiBpbnN0cnVjdCB0aGUgcGx1Z2luIHRvIGRvIGZhY2V0ZWQgc2VhcmNoZXMg
YW5kIHF1ZXJ5IGFueSBmaWVsZHMgaW4geW91ciB0eHAgZGF0YWJhc2UuPC9wPgoKCTxwPldo
ZW4gdGhlIHVzZXIgaGl0cyB0aGUgRW50ZXIga2V5IGhlIGdldHMgcmVkaXJlY3RlZCB0byBh
IHRyYWRpdGlvbmFsIHNlYXJjaCByZXN1bHRzIHBhZ2UsIHNvIHRoZSBwbHVnaW4gYWxzbyBk
ZWdyYWRlcyBuaWNlbHkgaW4gbm9uLUphdmFzY3JpcHQgYnJvd3NlcnMuPC9wPgoKCTxwPk5l
YXJseSBldmVyeXRoaW5nIChpbnB1dCBmb3JtLCBvdXRwdXQgZm9ybSwgYW5pbWF0aW9uLCBz
ZWFyY2ggcXVlcnkpIGlzIGN1c3RvbWl6YWJsZS4gTW9yZW92ZXIsIHlvdSBjYW4gdXNlIDxj
b2RlPmV0Y19zZWFyY2g8L2NvZGU+IHRvIHF1ZXJ5IHlvdXIgdHhwIGRhdGFiYXNlIHdpdGhv
dXQgdXNlciBpbnRlcmFjdGlvbiwgZXh0ZW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgPGNv
ZGU+YXJ0aWNsZV9jdXN0b208L2NvZGU+IGFuZCBvdGhlciBsaXN0IHRhZ3MuLjwvcD4KCgk8
aDM+UmVxdWlyZW1lbnRzPC9oMz4KCjxwPlRoZSBwbHVnaW4gaXMgY29tcG9zZWQgb2YgdHdv
IGZpbGVzOiA8Y29kZT5ldGNfc2VhcmNoLnR4dDwvY29kZT4gYW5kIDxjb2RlPmxpdmVzZWFy
Y2guanF1ZXJ5LmpzPC9jb2RlPi4gVGhlIGZpcnN0IG9uZSBpcyBjb21wcmVzc2VkIDxjb2Rl
PnBocDwvY29kZT4gZmlsZSB0byBiZSBpbnN0YWxsZWQgYXMgdXN1YWwgaW4gPGNvZGU+UGx1
Z2luczwvY29kZT4gdGFiLiBPbiBpbnN0YWxsIGl0IHdpbGwgY3JlYXRlIGEgPGNvZGU+ZXRj
X3NlYXJjaDwvY29kZT4gdGFibGUgYW5kIHR3byBwcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUg
cmVtb3ZlZCBvbiB1bmluc3RhbGwuIEl0IHdpbGwgYWxzbyBjcmVhdGUgYW4gYXJ0aWNsZSBm
b3JtICh0aGF0IHlvdSBjYW4gbW9kaWZ5KSBuYW1lZCA8Y29kZT5ldGNfc2VhcmNoX3Jlc3Vs
dHM8L2NvZGU+IHRoYXQgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgbGl2ZSBzZWFyY2ggb3V0
cHV0LjwvcD4KCgk8aDQ+SmF2YXNjcmlwdDwvaDQ+CgoJPHA+alF1ZXJ5IDxzdHJvbmc+MS4y
PC9zdHJvbmc+IG9yIG1vcmUgcmVjZW50IGlzIHJlcXVpcmVkLjwvcD4KCgk8cD5Zb3UgY2Fu
IHVzZSB0aGUgPGNvZGU+anF1ZXJ5LmpzPC9jb2RlPiBqYXZhc2NyaXB0IGZpbGUgd2hpY2gg
aXMgYnVuZGxlZCB3aXRoIFRleHRwYXR0ZXJuIGFuZCB5b3UgbmVlZCB0byB1cGxvYWQgdGhl
IHByb3ZpZGVkIDxjb2RlPmxpdmVzZWFyY2guanF1ZXJ5LmpzPC9jb2RlPiBmaWxlIHRvIHlv
dXIgd2ViIHNlcnZlciAoZm9yIGV4YW1wbGUgaW4gYSBmb2xkZXIgY2FsbGVkICYjODIyMDsv
anMvJiM4MjIxOykgYW5kIGluY2x1ZGUgYm90aCBvZiB0aGVzZSBmaWxlcyBpbiB0aGUgaGVh
ZGVyIG9mIHRoZSB3ZWIgcGFnZXMgd2hlcmUgeW91IHdhbnQgdG8gdXNlIHRoZSBwbHVnaW46
PC9wPgoKPHByZT48Y29kZT4mbHQ7c2NyaXB0IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0
JnF1b3Q7IHNyYz0mcXVvdDt0ZXh0cGF0dGVybi9qcXVlcnkuanMmcXVvdDsmZ3Q7Jmx0Oy9z
Y3JpcHQmZ3Q7CiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsg
c3JjPSZxdW90O2pzL2xpdmVzZWFyY2guanF1ZXJ5LmpzJnF1b3Q7Jmd0OyZsdDsvc2NyaXB0
Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzPlN5bnRheDwvaDM+Cgo8aDQ+SW5wdXQgZm9ybS9s
aXZlIHNlYXJjaDwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIC8mZ3Q7Cjwv
Y29kZT48L3ByZT4KPHA+b3IgYXMgY29udGFpbmVyOjwvcD4KPHByZT48Y29kZT4mbHQ7dHhw
OmV0Y19zZWFyY2gmZ3Q7CiAgJmx0O2lucHV0IG5hbWU9ImEiIC8mZ3Q7CiAgJmx0O2lucHV0
IG5hbWU9ImIiIC8mZ3Q7CiAgLi4uCiZsdDsvdHhwOmV0Y19zZWFyY2gmZ3Q7CjwvY29kZT48
L3ByZT4KCjxoND5PdXRwdXQgcmVzdWx0czwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNf
c2VhcmNoX3Jlc3VsdHMgLyZndDsKPC9jb2RlPjwvcHJlPgo8cD5vciBhcyBjb250YWluZXI6
PC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0OwogIG91dHB1
dCBwYXR0ZXJuCiZsdDt0eHA6ZWxzZSAvJmd0OwogICZsdDt0eHA6dGV4dCBpdGVtPSJub19z
ZWFyY2hfbWF0Y2hlcyIgLyZndDsKJmx0Oy90eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0Owo8
L2NvZGU+PC9wcmU+CgoJPGgzPkF0dHJpYnV0ZXMgb2YgPGNvZGU+ZXRjX3NlYXJjaDwvY29k
ZT4gdGFnPC9oMz4KCgk8aDQ+UmVxdWlyZWQ8L2g0PgoKCTxwPm5vbmUuPC9wPgoKCTxoND5P
cHRpb25hbDwvaDQ+CgoJPHVsPgoJCTxsaT48c3Ryb25nPmlkPC9zdHJvbmc+OiBDb21tYS1z
ZXBhcmF0ZWQgbGlzdCBvZiBxdWVyeSBpZGVudGlmaWVycyAoc2VlIGJlbG93KSwgZGVmYXVs
dCBpcyA8Y29kZT4wPC9jb2RlPiAoZGVmYXVsdCBzZWFyY2gpLjwvbGk+CgkJPGxpPjxzdHJv
bmc+bGl2ZTwvc3Ryb25nPjogTWlsbGlzZWNvbmRzIG9mIHVzZXIgaW5hY3Rpdml0eSBiZWZv
cmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT42MDA8L2NvZGU+IGJ5IGRlZmF1bHQuIFNl
dCBpdCB0byA8Y29kZT4wPC9jb2RlPiB0byBkaXNhYmxlIHRoZSBsaXZlIHNlYXJjaCwgb3Ig
dG8gPGNvZGU+LTYwMDwvY29kZT4gdG8gbWFrZSB0aGUgcmVzdWx0cyBwZXJzaXN0IG9uIHRo
ZSBzY3JlZW4gZXZlbiBhZnRlciBsb29zaW5nIHRoZSBmb2N1cy48L2xpPgoJCTxsaT48c3Ry
b25nPm1pbmxlbmd0aDwvc3Ryb25nPjogTWluaW1hbCBsZW5ndGggb2YgdXNlciBpbnB1dCBi
ZWZvcmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT4xPC9jb2RlPiBieSBkZWZhdWx0Ljwv
bGk+CgkJPGxpPjxzdHJvbmc+bWF0Y2g8L3N0cm9uZz46IFNlYXJjaCBtb2RlLCBzZXQgaXQg
dG8gPGNvZGU+ZXhhY3Q8L2NvZGU+IGlmIG5lY2Vzc2FyeS48L2xpPgoJCTxsaT48c3Ryb25n
PmZvcm1hdDwvc3Ryb25nPjogQWxsb3dzIHRvIGdsdWUgbXVsdGlwbGUgVVJMIDxjb2RlPnt2
YXJpYWJsZXN9PC9jb2RlPiAoZ2VuZXJhbGx5IHByb2R1Y2VkIGJ5IDxjb2RlPiZsdDt0eHA6
ZXRjX3NlYXJjaCAvJmd0OzwvY29kZT4gdXNlZCBhcyBjb250YWluZXIpIGludG8gb25lIHNl
YXJjaCBzdHJpbmcuIEZvciBleGFtcGxlLCA8Y29kZT5mb3JtYXQ9IntxfSBAe2N9IjwvY29k
ZT4gd2lsbCBwYXNzIHRoZSBzdHJpbmcgPGNvZGU+P2M9dGlwcyZxPXBhZyYuLi48L2NvZGU+
IGFzICJwYWcgQHRpcHMiIHNlYXJjaCBxdWVyeSB0byA8Y29kZT5ldGNfc2VhcmNoPC9jb2Rl
Pi4gRGVmYXVsdCBpcyA8Y29kZT57cX08L2NvZGU+LCB0aGUgdmFsdWUgb2YgdHhwIHNlYXJj
aCBzdHJpbmcgcGFyYW1ldGVyLjwvbGk+CgkJPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+
OiBVUkwgb2YgdGhlIHBhZ2UgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gd2hlbiBoZSBoaXRz
IHRoZSBFbnRlciBrZXksIGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHN0YW5kYXJkIHNlYXJj
aCByZXN1bHRzIHBhZ2UuIERlZmF1bHQgaXMgdGhlIGhvbWUgcGFnZS48L2xpPgoJCTxsaT48
c3Ryb25nPmh0bWxfaWQ8L3N0cm9uZz46IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu
PiA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRo
ZSBzZWFyY2ggZm9ybS4gRGVmYXVsdCBpcyA8Y29kZT5saXZlX3NlYXJjaF9bc29tZV9yYW5k
b21faWRdPC9jb2RlPi48L2xpPgoJCTxsaT48c3Ryb25nPmNsYXNzPC9zdHJvbmc+OiA8c3Bh
biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJpYnV0
ZSBvZiB0aGUgc2VhcmNoIGZvcm0sIDxjb2RlPmxzX3NlYXJjaDwvY29kZT4gYnkgZGVmYXVs
dC48L2xpPgoJCTxsaT48c3Ryb25nPnRhcmdldDwvc3Ryb25nPjogalF1ZXJ5IHNlbGVjdG9y
LCBzZXQgaXQgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBsaXZlIHNlYXJjaCByZXN1bHRzIGVs
c2V3aGVyZS48L2xpPgoJCTxsaT48c3Ryb25nPmZvcm08L3N0cm9uZz46IE9wdGlvbmFsIFRl
eHRwYXR0ZXJuIGZvcm0gZm9yIGxpdmUgc2VhcmNoIHJlc3VsdHMgb3V0cHV0LjwvbGk+CgkJ
PGxpPjxzdHJvbmc+bGFiZWw8L3N0cm9uZz46IERpc3BsYXlzIGEgbGFiZWwgYWJvdmUgdGhl
IHNlYXJjaCBib3ggd2l0aCB0aGUgc3BlY2lmaWVkIHRleHQuIERlZmF1bHQgaXMgJiM4MjIw
O3NlYXJjaCYjODIyMTsgc3RyaW5nIGxvY2FsaXplZCBpbiB0aGUgbGFuZ3VhZ2Ugb2YgeW91
ciBUZXh0cGF0dGVybiBpbnN0YWxsYXRpb24uPC9saT4KCQk8bGk+PHN0cm9uZz5zaXplPC9z
dHJvbmc+OiBTaXplIG9mIHRoZSBzZWFyY2ggYm94IChudW1iZXIgb2YgY2hhcmFjdGVycyku
PC9saT4KCQk8bGk+PHN0cm9uZz5wbGFjZWhvbGRlcjwvc3Ryb25nPjogSW52aXRhdGlvbiB0
ZXh0IHRoYXQgd2lsbCBkZSBkaXNwbGF5ZWQgaW4gdGhlIGJveC4gVGhpcyB0ZXh0IGRpc2Fw
cGVhcnMgd2hlbiB1c2VyIGhhcyB0eXBlZCBzb21ldGhpbmcgaW50byBpdC4gRGVmYXVsdCBp
cyBlbXB0eS48L2xpPgoJCTxsaT48c3Ryb25nPmxpbWl0PC9zdHJvbmc+OiBNYXhpbXVtIG51
bWJlciBvZiByZXN1bHRzIGluIHRoZSBsaXZlIHJlc3VsdHMgbGlzdC4gRGVmYXVsdCBpcyA8
Y29kZT4wPC9jb2RlPiAobm8gbGltaXQpLjwvbGk+CgkJPGxpPjxzdHJvbmc+d3JhcHRhZzwv
c3Ryb25nPjogPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyB0byB3cmFwIHRo
ZSBzZWFyY2ggcmVzdWx0cyB3aXRoLCBpbnNpZGUgdGhlIGZvcm0uIERlZmF1bHQgaXMgZW1w
dHkuPC9saT4KCQk8bGk+PHN0cm9uZz5icmVhazwvc3Ryb25nPjogPHNwYW4gY2xhc3M9ImNh
cHMiPkhUTUw8L3NwYW4+IHRhZyB0byBiZSB1c2VkIGZvciBsaW5lIGJyZWFrcyBpbiB0aGUg
Y29udGVudCBpbnNpZGUgdGhlIGxpdmUgcmVzdWx0cyBsaXN0LCB3aXRob3V0IGJyYWNrZXRz
LiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPi48L2xpPgoJPC91bD4KCjxoMz5BZG1pbi1z
aWRlIHNldHRpbmdzPC9oMz4KCjxwPkdvIHRvIDxjb2RlPkV4dGVuc2lvbnMvZXRjX3NlYXJj
aDwvY29kZT4gdG8gY2hhbmdlIHRoZW0uPC9wPgoKPGg0PlNlYXJjaCBzZXR0aW5nczwvaDQ+
Cjx1bD4KPGxpPjxzdHJvbmc+TG9naWNhbCBvcGVyYXRpb25zPC9zdHJvbmc+OiBKU09OLWVu
Y29kZWQgb2JqZWN0IGNvbnRhaW5pbmcgTXlTUUwgb3BlcmF0b3JzIHRvIGJlIHVzZWQgaW4g
c2VhcmNoIHF1ZXJpZXMuPC9saT4KPC91bD4KCjxoND5TZWFyY2ggZm9ybXM8L2g0Pgo8dWw+
CjxsaT48c3Ryb25nPmNvbnRleHQ8L3N0cm9uZz46IE9uZSBvZiA8Y29kZT5hcnRpY2xlIHwg
ZmlsZSB8IGltYWdlIHwgbGluazwvY29kZT4sIHJlcHJlc2VudGluZyB0aGUgdGFibGUgdG8g
c2VhcmNoIGluLCBvciA8Y29kZT5jdXN0b208L2NvZGU+LiBJZiBub3QgY3VzdG9tLCB5b3Ug
Y2FuIHVzZSAoc29tZSBvZikgY29udGV4dCB0YWdzIGluIGZvcm1zLCBzZWUgYmVsb3cuPC9s
aT4KCQk8bGk+PHN0cm9uZz5xdWVyeTwvc3Ryb25nPjogQSBzdHJpbmcgcGF0dGVybnMgcmVw
cmVzZW50aW5nIGEgdmFsaWQgTXlTUUwgU0VMRUNUIHF1ZXJ5LCB3aXRoIHNwZWNpYWxseSBj
cmFmdGVkIFdIRVJFIGNsYXVzZS4gSXQgaXMgb2YgdGhlIGZvcm0gPGNvZGU+U0VMRUNUIC4u
LiBXSEVSRSB7Wz9wYXJhbTo6XW1hdGNoMTttYXRjaDI7Li4ufSBBTkQvT1Igb3RoZXJfY3Jp
dGVyaWEgLi4uPC9jb2RlPi4gVGhlIDxjb2RlPnttYXRjaH08L2NvZGU+IHRva2VuIHdpbGwg
YmUgcmVwbGFjZWQgYnkgdGhlIHBsdWdpbiB3aXRoIGFwcHJvcHJpYXRlIHN0cmluZy4gQSBx
dWVyeSBwYXR0ZXJuIGNhbiBiZSByZWR1Y2VkIHRvIDxjb2RlPnttYXRjaDE7bWF0Y2gyOy4u
Ln0gLi4uPC9jb2RlPiBpZiBzb21lIG5vbi1jdXN0b20gY29udGV4dCBpcyBzZXQuPGJyIC8+
CkhlcmUgPGNvZGU+cGFyYW08L2NvZGU+IGlzIGEgdXJsIHZhcmlhYmxlIHRvIGJlIHVzZWQg
aW4gdGhlIGl0ZW0uIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXJhbWV0ZXIg
PGNvZGU+cTwvY29kZT4gd2lsbCBiZSB1c2VkLjxiciAvPgpFYWNoIDxjb2RlPm1hdGNoPC9j
b2RlPiBpdGVtIGlzIGEgc3RyaW5nIDxjb2RlPmZpZWxkczo6cGF0dGVybjo6Y29uZGl0aW9u
PC9jb2RlPiwgd2hlcmUKPHVsPgo8bGk+PGNvZGU+ZmllbGRzPC9jb2RlPiBpcyBhIGNvbW1h
LXNlcGFyYXRlZCBsaXN0IG9mIGRiIGZpZWxkczs8L2xpPgo8bGk+PGNvZGU+cGF0dGVybjwv
Y29kZT4gaXMgYSByZWdleHAgdG8gbWF0Y2ggc2VhcmNoIHF1ZXJ5IGFnYWluc3QsIDxjb2Rl
Pi9eLiskL3M8L2NvZGU+IChhbnkgcXVlcnkpIGJ5IGRlZmF1bHQ7PC9saT4KPGxpPjxjb2Rl
PmNvbmRpdGlvbjwvY29kZT4gaXMgYSBNeVNRTCBXSEVSRSBjbGF1c2UgKGl0cyBkZWZhdWx0
IHZhbHVlIGlzIDxjb2RlPnsqfSBMSUtFICVzZWFyY2hfdGVybSU8L2NvZGU+KSB0byBmaWx0
ZXIgPGNvZGU+ZmllbGRzPC9jb2RlPiB3aXRoLiBIZXJlLCAgdGhlIDxjb2RlPnsqfTwvY29k
ZT4gdG9rZW4gd2lsbCBiZSByZXBsYWNlZCBieSA8Y29kZT5maWVsZHM8L2NvZGU+IG5hbWVz
LCBhbmQgPGNvZGU+JG48L2NvZGU+IHRva2VucyB3aWxsIGJlIHRha2VuIGZyb20gc2VhcmNo
IHF1ZXJpZXMgbWF0Y2hpbmcgPGNvZGU+cGF0dGVybjwvY29kZT4uPC9saT4KPC91bD4KCQk8
bGk+PHN0cm9uZz5mb3JtPC9zdHJvbmc+OiBUd28gb3V0cHV0IGZvcm1zIHRvIHVzZSBmb3Ig
ZGlzcGxheWluZyB0aGUgcmVzdWx0cywgaW4gbGl2ZSBhbmQgc3RhbmRhcmQgbW9kZS4gSWYg
ZW1wdHksIHdpbGwgYmUgYXNzaWduZWQgdGhlIHZhbHVlIG9mIDxjb2RlPmV0Y19zZWFyY2hf
cmVzdWx0cywgc2VhcmNoX3Jlc3VsdHM8L2NvZGU+LjwvbGk+CjxsaT5GaW5hbGx5LCA8c3Ry
b25nPmNvbnRlbnQ8L3N0cm9uZz4gY29uc2lzdHMgb2YgdHdvIG91dHB1dCBwYXR0ZXJucyB3
aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+e2ZpZWxkfTwvY29kZT4gd2lsbCBiZSBy
ZXBsYWNlZCBieSB0aGUgY29ycmVzcG9uZGluZyAoZXNjYXBlZCkgZmllbGQgdmFsdWUuIFRo
ZSBmaXJzdCBwYXR0ZXJuIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGxpdmUgc2VhcmNoLCB0aGUg
c2Vjb25kIG9uZSBmb3IgdGhlIHN0YW5kYXJkIHNlYXJjaC48L2xpPjwvdWw+CjwvbGk+Cjwv
dWw+CgoJPGgzPkV4YW1wbGVzPC9oMz4KPHA+QnkgZGVmYXVsdCwgPGNvZGU+ZXRjX3NlYXJj
aDwvY29kZT4gYWN0cyBsaWtlIHRoZSBidWlsdC1pbiBUZXh0cGF0dGVybiBzZWFyY2gsIHF1
ZXJ5aW5nIGFydGljbGVzIDxjb2RlPlRpdGxlPC9jb2RlPiBhbmQgPGNvZGU+Qm9keTwvY29k
ZT4uIElmIHlvdSB3YW50IHRvIG1ha2Ugc2VhcmNoYWJsZSBhbHNvIDxjb2RlPktleXdvcmRz
PC9jb2RlPiBhbmQgPGNvZGU+RXhjZXJwdDwvY29kZT4sIGNyZWF0ZSBhbiBhcnRpY2xlIHF1
ZXJ5IDxjb2RlPntUaXRsZSxCb2R5LEtleXdvcmRzLEV4Y2VycHR9PC9jb2RlPiAoc2F5LCBu
dW1iZXIgMSksIGFuZCBjYWxsPC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaCBp
ZD0iMSIgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5TdXBwb3NlIG5vdyB0aGF0IHlvdSB3aXNo
IHRvIGV4dGVuZCB0aGUgZGVmYXVsdCBUZXh0cGF0dGVybiBzZWFyY2ggd2l0aCBmYWNldGVk
IHNlYXJjaCBmb3Igc29tZSB0ZXh0IGluIGltYWdlcyA8Y29kZT5jYXB0aW9uPC9jb2RlPiBh
dHRyaWJ1dGUsIGFuZCBkaXNwbGF5IHRoZSB0aXRsZXMgb2YgdGhlIGFydGljbGVzIHdoaWNo
IGFyZSBhc3NvY2lhdGVkICh2aWEgQXJ0aWNsZSBpbWFnZSkgd2l0aCB0aGUgbWF0Y2hpbmcg
aW1hZ2VzLiBUbyBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgc2VhcmNoaW5nIGluIGNhcHRpb25z
LCB5b3UgZGVjaWRlIHRvIHByZWZpeCB0ZXJtcyBieSA8Y29kZT5jYXA6PC9jb2RlPi4gVGhl
biB5b3UgY2FuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIGFydGljbGUgY29udGV4dCBxdWVyeSAo
c2F5LCBudW1iZXIgMikgYW5kIGZvcm1zOjwvcD4KCjxwcmU+PGNvZGU+cXVlcnk6IFNFTEVD
VCB0eHAuKixpbWcuY2FwdGlvbiBGUk9NIHRleHRwYXR0ZXJuIHR4cCBKT0lOIHR4cF9pbWFn
ZSBpbWcgT04gRklORF9JTl9TRVQoaW1nLmlkLHR4cC5JbWFnZSkgV0hFUkUge2ltZy5jYXB0
aW9uOjovXmNhcDooLispJC86OnsqfSBMSUtFICclJDElJ30KbGl2ZSBmb3JtOiAmbHQ7YSBo
cmVmPScmbHQ7dHhwOnBlcm1saW5rIC8mZ3Q7JyB0aXRsZT0ne2NhcHRpb259JyZndDsmbHQ7
dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy9hJmd0OwpzdGF0aWMgZm9ybTogJmx0O2gzJmd0OyZsdDt0
eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0
OyZsdDsvaDMmZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7CjwvY29kZT48L3ByZT4KIDxwPmFu
ZCB1c2UgPGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIGlkPSIwLDIiIC8mZ3Q7PC9jb2RlPi48
L3A+Cgo8aDM+VGhlIDxjb2RlPmV0Y19zZWFyY2hfcmVzdWx0czwvY29kZT4gdGFnPC9oMz4K
CjxwPllvdSBjYW4gcmVwbGFjZSB0aGUgZGVmYXVsdCAobm9uLWxpdmUpIFRYUCBzZWFyY2gg
d2l0aCA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gYnkg
cGxhY2luZyB0aGlzIHRhZyBpbnN0ZWFkIG9mIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0
OzwvY29kZT4gaW4gPGNvZGU+aWZfc2VhcmNoPC9jb2RlPiBzZWN0aW9uIG9mIHlvdXIgcGFn
ZXMuIFRoZSB0YWcgY3VycmVudGx5IGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxjb2RlPmh0bWxf
aWQ8L2NvZGU+LCA8Y29kZT5mb3JtPC9jb2RlPiwgPGNvZGU+d3JhcHRhZzwvY29kZT4sIDxj
b2RlPmJyZWFrPC9jb2RlPiBhbmQgPGNvZGU+bGltaXQ8L2NvZGU+IGF0dHJpYnV0ZXMuIElm
IDxjb2RlPmZvcm08L2NvZGU+IG9yIDxjb2RlPmNvbnRlbnQ8L2NvZGU+IGFyZSBzZXQsIHRo
ZXkgd2lsbCBiZSBjb21tb24gdG8gYWxsIHNlYXJjaCBxdWVyaWVzLCBvdmVyd3JpdGluZyB0
aGVpciBvd24gZm9ybXMuPC9wPgoKPHA+VGhlIDxjb2RlPmlkPC9jb2RlPiBhdHRyaWJ1dGUg
YWxsb3dzIHRvIHJlc3RyaWN0IHNlYXJjaCB0byBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVk
IHNlYXJjaCBmb3JtIGlkcy4gSWYgdGhpcyBsaXN0IGlzIHByZWNlZGVkIGJ5IDxjb2RlPi08
L2NvZGU+LCB0aGUgY29ycmVzcG9uZGluZyBmb3JtcyB3aWxsIGJlIGV4Y2x1ZGVkLiBZb3Ug
Y2FuIHBsYWNlIHR3byBvciBtb3JlIG11dHVhbGx5IGV4Y2x1c2l2ZSA8Y29kZT4mbHQ7dHhw
OmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gdGFncyBvbiB0aGUgcGFnZTo8L3A+
CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoX3Jlc3VsdHMgaWQ9IjEsMiIgZm9ybT0i
Zm9ybTEiIC8mZ3Q7CiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIGlkPSIzIiBmb3JtPSJm
b3JtMiIgLyZndDsKPC9jb2RlPjwvcHJlPgoKPHA+VGhlIDxjb2RlPnF1ZXJ5PC9jb2RlPiBh
dHRyaWJ1dGUgYWxsb3dzIHRvIHBhc3MgYSBzZWFyY2ggc3RyaW5nIGRpcmVjdGx5IHRvIDxj
b2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIC8mZ3Q7PC9jb2RlPi4gRm9yIGV4YW1w
bGUsIDxjb2RlPnF1ZXJ5PSJyZWQgYmx1ZSI8L2NvZGU+IHdpbGwgYmUgdHJlYXRlZCBhcyA8
Y29kZT4/cT1yZWQrYmx1ZTwvY29kZT4gYW5kIG91dHB1dCAod2l0aCB0aGUgZGVmYXVsdCBz
ZWFyY2gpIGFsbCB0aGUgYXJ0aWNsZXMgY29udGFpbmluZyBib3RoICJyZWQiIGFuZCAiYmx1
ZSIuIFRoaXMgYWxsb3dzIHRvIHVzZSA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0
cyAvJmd0OzwvY29kZT4gYXMgPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0Ozwv
Y29kZT4gd2l0aCB2ZXJ5IGN1c3RvbWl6YWJsZSA8Y29kZT53aGVyZTwvY29kZT4gYXR0cmli
dXRlLjwvcD4KCjxoMz5UaGUgPGNvZGU+ZXRjX3NlYXJjaF9yZXN1bHRfZXhjZXJwdDwvY29k
ZT4gdGFnPC9oMz4KCjxwPllvdSBjYW4gYWxzbyByZXBsYWNlIDxjb2RlPiZsdDt0eHA6c2Vh
cmNoX3Jlc3VsdF9leGNlcnB0IC8mZ3Q7PC9jb2RlPiB3aXRoIDxjb2RlPiZsdDt0eHA6ZXRj
X3NlYXJjaF9yZXN1bHRfZXhjZXJwdCAvJmd0OzwvY29kZT4gd2hlcmUgYXBwcm9wcmlhdGUu
IEl0IGFjY2VwdHMgc29tZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXM6PC9wPgo8dWw+CjxsaT48
Y29kZT50eXBlPSJhcnRpY2xlIjwvY29kZT47PC9saT4KPGxpPjxjb2RlPmZpZWxkPSJib2R5
IjwvY29kZT47PC9saT4KPGxpPjxjb2RlPnNpemU9IjUwIjwvY29kZT46IHRoZSBtYXhpbXVt
IG51bWJlciBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzOzwvbGk+CjxsaT48Y29kZT5zaG93
YWx3YXlzPSIwIjwvY29kZT46IHNob3cgYW4gZXhjZXJwdCBldmVuIGlmIHRoZXJlIGlzIG5v
IG1hdGNoLjwvbGk+CjwvdWw+CgoKPGgzPlRoZSA8Y29kZT5ldGNfc2VhcmNoX3Jlc3VsdF9j
b3VudDwvY29kZT4gdGFnPC9oMz4KPHA+QWNjZXB0cyBvbmx5IDxjb2RlPnRleHQ8L2NvZGU+
IGF0dHJpYnV0ZS4gVGhlIHRva2VucyA8Y29kZT57ZnJvbX0sIHt0b30sIHt0b3RhbH0sIHtw
YWdlfSwge3BhZ2VzfTwvY29kZT4gdGhlcmVpbiB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNvcnJl
c3BvbmRpbmcgdmFsdWVzLCB0byBkaXNwbGF5IGEgc3RyaW5nIGxpa2UgPGNvZGU+UmVzdWx0
cyA2IHRvIDEwIG9mIDI3PC9jb2RlPi48L3A+CgoJPGgzPjxzcGFuIGNsYXNzPSJjYXBzIj5D
U1M8L3NwYW4+U3R5bGluZzwvaDM+CgoJPHA+VGhlIGxpdmUgc2VhcmNoIGNvbnNpc3RzIG9m
IGEgZm9ybSB3aXRoIHRoZSA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHZhbHVlIHNldCBi
eSB0aGUgJiM4MjIwO2h0bWxfaWQmIzgyMjE7IHBhcmFtZXRlci4gVGhpcyBmb3JtIGNvbnRh
aW5zIHR3byB6b25lcy4gWW91IGNhbiBzdHlsZSBhbnkgZWxlbWVudCBieSByZWZlcmVuY2lu
ZyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBmb3JtIGFuZCB0aGUgPHNwYW4gY2xhc3M9ImNh
cHMiPkNTUzwvc3Bhbj4gY2xhc3Mgb2YgdGhlIGVsZW1lbnQgKG9yIGl0cyB0YWcpIGluIHlv
dXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4uPC9wPgoKCTxoND5UaGUgc2VhcmNo
IHpvbmU8L2g0PgoKCTxwPlRoZSBmaXJzdCB6b25lIGlzIGEgYmxvY2sgd2l0aCB0aGUgYXBw
bGllZCBjbGFzcyAmIzgyMjA7bHNfc2VhcmNoJiM4MjIxOyB3aGljaCBjb250YWluczogdGhl
IG9wdGlvbmFsIGxhYmVsIChmb2xsb3dlZCBieSBhIGxpbmUgYnJlYWsgaWYgZGVmaW5lZCkg
YW5kIHRoZSB0ZXh0IGlucHV0IGJveC4gVGhlIHRhZyBvZiB0aGlzIGJsb2NrIGlzIGRlZmlu
ZWQgYnkgdGhlICYjODIyMDt3cmFwdGFnJiM4MjIxOyBwYXJhbWV0ZXIgKGRlZmF1bHQgaXMg
PGNvZGU+ZGl2PC9jb2RlPikuPC9wPgoKCTxwPlRoZSBkZWZhdWx0IHNlYXJjaCBib3ggaXMg
YW4gaW5wdXQgdGFnLiBJZiB5b3Ugd2FudCwgeW91IGNhbiBzdHlsZSBpdCB1c2luZyBhIDxz
cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHJ1bGUgbGlrZSB0aGlzIG9uZTo8L3A+Cgo8
cHJlPjxjb2RlPiNsaXZlX3NlYXJjaCBpbnB1dCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAg
ICBjb2xvcjogIzAwMDsKfQo8L2NvZGU+PC9wcmU+CgoJPGg0PlRoZSByZXN1bHRzIHpvbmU8
L2g0PgoKCTxwPlRoZSByZXN1bHRzIHpvbmUgaXMgYSA8Y29kZT5kaXY8L2NvZGU+IGJsb2Nr
IHdpdGggdGhlIGNsYXNzICYjODIyMDtsc19zZWFyY2gmIzgyMjE7LCBjb250YWluaW5nIHRo
ZSByZXN1bHRzIGxpc3QuIFlvdSBjYW4gY2hvb3NlIHRvIHBvc2l0aW9uIHRoaXMgYmxvY2sg
YWJzb2x1dGVseSwgb3IgZXZlbiByZXBsYWNlIGl0IHdpdGggYW55IGJsb2NrLCBzZXR0aW5n
IDxjb2RlPnRhcmdldDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5JZiB5b3UgYXJlIG5v
dCBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFuaW1hdGlvbiwgdW5iaW5kIDxjb2RlPnVwZGF0
ZS5odG1sX2lkPC9jb2RlPiBldmVudCBvZiB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPiBhbmQg
cmVwbGFjZSB0aGVtIHdpdGggeW91ciBvd24galF1ZXJ5IGFuaW1hdGlvbnMuIFlvdSBjYW4g
YWxzbyBzZXQgPGNvZGU+c3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5zdG9wPC9jb2RlPiBldmVu
dHMsIGZpcmVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgbGl2ZSBBSkFYIHJl
cXVlc3RzLjwvcD4KCgk8cD5UaGUgY29udGVudCBvZiB0aGUgcmVzdWx0cyBibG9jayB3aWxs
IGJlIGVpdGhlcjo8L3A+CgoJPG9sPgoJCTxsaT48ZW0+QXQgbGVhc3Qgb25lIHJlc3VsdCBp
cyBmb3VuZDo8L2VtPiBBIGxpc3Qgd2l0aCB3cmFwIGFuZCBicmVhayB0YWdzIGFjY29yZGlu
ZyB0byB5b3VyICYjODIyMDt3cmFwdGFnJiM4MjIxOyBhbmQgJiM4MjIwO2JyZWFrJiM4MjIx
OyBwYXJhbWV0ZXJzIChzZWUgYWJvdmUpLjwvbGk+CgkJPGxpPjxlbT5ObyByZXN1bHRzIGZv
dW5kOjwvZW0+IFRoZSBsb2NhbGl6ZWQgJiM4MjIwO25vX3NlYXJjaF9tYXRjaGVzJiM4MjIx
OyBtZXNzYWdlLjwvbGk+Cgk8L29sPiI7czozOiJtZDUiO3M6MzI6IjdlMjk0MDkyMWNmZjZl
NDliN2EwZmM4NGQzY2E1NWNhIjt9

Offline

#95 2016-11-03 10:24:54

subcosm
New Member
Registered: 2016-11-02
Posts: 3

Re: etc_search: when the default search is not enough

The modified version works. :)

This plugin makes a major difference for my project, I really appreciate the assistance!

Offline

#96 2016-11-03 10:51:45

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: etc_search: when the default search is not enough

Thanks for testing, I have lamely forgotten to update it for 4.6. The upcoming 0.9.6 will be 4.6-optimized and worth upgrading, follow the announcements.

Offline

Board footer

Powered by FluxBB