Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#349 2020-01-24 14:43:50

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Karsten wrote #321327:

I now use the rah_replace plugin a lot to manipulate/style contents, or make things uniform. This is particularly handy if you have multiple people posting content.

You might want to do it on article save, via a plugin, to avoid content manipulation on each site access.

Offline

#350 2020-01-24 15:52:08

Karsten
Member
From: Leiden, Netherlands
Registered: 2011-04-24
Posts: 47
Website

Re: etc_query: all things Textpattern

Didn’t know there was a plugin that could do that, but it wouldn’t change the hundreds of articles already in the website. But also, we use different formats of our content for different purposes, depending on what I need I use the rah_replace tool to re-format it to fit the specific need on that particular page.

Also I use it for some other things, for example, in Dutch we use a comma for decimals instead of full stop. So on the page I want it to say €20,00 but I use a bit of PHP to dynamically recalculate the price. This allows me for example to set a 25% discount on a group of products, the Rah_replace tool switches the comma for a . enabling me to re-calculate the price [20.00 × 0.75 = answer] > Get it 25% off, for only [echo answer].

There’s probably better ways to do it, but as I said, I’m not a coder, and this works, so I happy :)

Offline

#351 2020-01-24 17:54:23

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Karsten wrote #321328:

It would also be really cool to be able to use reg. expressions in conditional tags.

Actually, you can also abuse match="pattern" attribute of <txp:if_custom_field /> tag:

<txp:if_custom_field name="body" value="\d" match="pattern" />

Offline

#352 2020-08-09 07:12:40

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 8,774
Website GitHub Twitter

Re: etc_query: all things Textpattern

Hi Oleg, It appears that EvalElse is here to haunt us. When I posted that thread I was not certain if it was the etc_query plugin, but it appears that it might need a slight update.


Yiannis
——————————
neme.org | hblack.net | State Machines | NeMe @ github
I do my best editing after I click on the submit button.

Offline

#353 2020-08-09 07:45:05

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Hi Yiannis, it’s txp that needs to be updated, we can not patch every plugin. And the patch would be a little more complex in etc_query case. I hope 4.8.3 will be released very shortly, sorry for the trouble.

Offline

#354 2020-08-09 08:11:20

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 8,774
Website GitHub Twitter

Re: etc_query: all things Textpattern

Hi Oleg, no worries, I reverted the plugin to the latest version I had stored 1.3.3.


Yiannis
——————————
neme.org | hblack.net | State Machines | NeMe @ github
I do my best editing after I click on the submit button.

Offline

#355 2020-08-09 08:19:11

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Here is a version that should work in 4.8.2:

# Name: etc_query v1.3.5 
# Type: Public plugin
# Query data with XPath
# Author: Oleg Loukianov
# URL: http://www.iut-fbleau.fr/projet/etc/
# Recommended load order: 5

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

YToxMTp7czo0OiJuYW1lIjtzOjk6ImV0Y19xdWVyeSI7czo2OiJhdXRob3IiO3M6MTQ6Ik9s
ZWcgTG91a2lhbm92IjtzOjEwOiJhdXRob3JfdXJpIjtzOjM2OiJodHRwOi8vd3d3Lml1dC1m
YmxlYXUuZnIvcHJvamV0L2V0Yy8iO3M6NzoidmVyc2lvbiI7czo1OiIxLjMuNSI7czoxMToi
ZGVzY3JpcHRpb24iO3M6MjE6IlF1ZXJ5IGRhdGEgd2l0aCBYUGF0aCI7czo0OiJjb2RlIjtz
OjM4NjIyOiIvLyBUWFAgNC43IHRhZyByZWdpc3RyYXRpb24NCmlmIChjbGFzc19leGlzdHMo
J1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSkgew0KCVR4cDo6Z2V0KCdcVGV4dHBhdHRl
cm5cVGFnXFJlZ2lzdHJ5JyktPnJlZ2lzdGVyKCdldGNfcXVlcnknKTsNCglpZihtZXRob2Rf
ZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JywgJ3JlZ2lzdGVyQXR0cicpKQ0K
CQlUeHA6OmdldCgnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpLT5yZWdpc3RlckF0dHIo
J2V0Y19yZXBsYWNlJywgJ2V0Yy1xdWVyeSwgZXRjLXJlcGxhY2UnKS0+cmVnaXN0ZXJBdHRy
KGZhbHNlLCAnZXRjLWJyZWFrJyk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19yZXBsYWNlKCRhdHRz
LCAkdGhpbmcgPSAnJykNCnsNCgkkYXR0cyA9IGxBdHRzKGFycmF5KA0KCQknZXRjLXF1ZXJ5
JyA9PiAnLicsDQoJCSdldGMtcmVwbGFjZScgPT4gJycsDQoJCSdldGMtYnJlYWsnID0+ICcn
LA0KCSksICRhdHRzLCBmYWxzZSk7DQoNCgkkb3V0ID0gdHJpbSgkdGhpbmcpICE9PSAnJyA/
IGV0Y19xdWVyeShhcnJheSgnZGF0YScgPT4gJHRoaW5nLCAncXVlcnknID0+ICRhdHRzWydl
dGMtcXVlcnknXSwgJ3JlcGxhY2UnID0+ICRhdHRzWydldGMtcmVwbGFjZSddLCAnYnJlYWsn
ID0+ICRhdHRzWydldGMtYnJlYWsnXSwgJ21hcmt1cCcgPT4gJ2h0bWwnLCAnZ2xvYmFscycg
PT4gJycsICdzcGVjaWFscycgPT4gJycsICdwYXJzZScgPT4gJycpKSA6ICR0aGluZzsNCgly
ZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gZXRjX3F1ZXJ5KCRhdHRzLCAkdGhpbmc9Jycp
IHsNCgkkcGhwID0gcGhwKG51bGwsICdlY2hvIDE7JykgPT09ICcxJzsNCg0KCWdsb2JhbCAk
ZXRjX3F1ZXJ5LCAkZXRjX3F1ZXJ5X2NvbnRleHQsICRldGNfcXVlcnlfZ2xvYmFscywgJGV0
Y19xdWVyeV9zYW5pdGl6ZSwgJGV0Y19xdWVyeV9zcGVjaWFsczsNCgkkc2FmZV9jb250ZXh0
ID0gaXNzZXQoJGV0Y19xdWVyeV9jb250ZXh0KSA/ICRldGNfcXVlcnlfY29udGV4dCA6IG51
bGw7DQoJJHNhZmVfZ2xvYmFscyA9IGlzc2V0KCRldGNfcXVlcnlfZ2xvYmFscykgPyAkZXRj
X3F1ZXJ5X2dsb2JhbHMgOiBudWxsOw0KCSRzYWZlX3Nhbml0aXplID0gaXNzZXQoJGV0Y19x
dWVyeV9zYW5pdGl6ZSkgPyAkZXRjX3F1ZXJ5X3Nhbml0aXplIDogbnVsbDsNCgkkc2FmZV9z
cGVjaWFscyA9IGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHMpID8gJGV0Y19xdWVyeV9zcGVj
aWFscyA6IG51bGw7DQoJc3RhdGljICRzYWZlX2RlZmF1bHRzID0gYXJyYXkoDQoJCSd1cmwn
ID0+ICcnLA0KCQknY29udGV4dCcgPT4gbnVsbCwNCgkJJ2dsb2JhbHMnID0+ICd2YXJpYWJs
ZSxwcmV0ZXh0LHRoaXNhcnRpY2xlLHRoaXNpbWFnZSx0aGlzZmlsZSx0aGlzbGluaycsDQoJ
CSdzYW5pdGl6ZScgPT4gJycsDQoJCSdmdW5jdGlvbnMnID0+ICcnDQoJKSwNCgkkYXR0c19k
ZWZhdWx0cyA9IGFycmF5KA0KCQknbmFtZScgPT4gbnVsbCwNCgkJJ3NhdmUnID0+IG51bGws
DQoJCSdkYXRhJyA9PiBudWxsLA0KCQkndXJsJyA9PiAnJywNCgkJJ2NvbnRleHQnID0+IG51
bGwsDQoJCSdtYXJrdXAnID0+ICcnLA0KCQknZW5jb2RpbmcnID0+ICdVVEYtOCcsDQovLwkJ
J3N0YXJ0JyA9PiAnJywNCgkJJ3F1ZXJ5JyA9PiBudWxsLA0KCQknZm9ybScgPT4gJycsDQoJ
CSdwb3B1bGF0ZScgPT4gJycsDQovLwkJJ3Rob3JvdWdoJyA9PiAnJywNCgkJJ3JlcGxhY2Un
ID0+ICcnLA0KCQknc2VwYXJhdG9yJyA9PiAnOycsDQoJCSdhcmdzZXAnID0+ICd8JywNCgkJ
J2dsb2JhbHMnID0+ICd2YXJpYWJsZSxwcmV0ZXh0LHRoaXNhcnRpY2xlLHRoaXNpbWFnZSx0
aGlzZmlsZSx0aGlzbGluaycsDQoJCSdzcGVjaWFscycgPT4gJ2RhdGEscXVlcnknLA0KCQkn
c2FuaXRpemUnID0+ICcnLA0KCQkncGFyc2UnID0+ICdhdXRvJywNCgkJJ2Z1bmN0aW9ucycg
PT4gJycsDQoJCSdsaW1pdCcgPT4gbnVsbCwNCgkJJ29mZnNldCcgPT4gJzAnLA0KCQknbGFi
ZWwnID0+ICcnLA0KCQknbGFiZWx0YWcnID0+ICcnLA0KCQknd3JhcHRhZycgPT4gJycsDQoJ
CSdicmVhaycgPT4gJycsDQoJCSdjbGFzcycgPT4gJycsDQoJCSdodG1sX2lkJyA9PiAnJywN
CgkJJ2RlYnVnJyA9PiAnJw0KCSk7DQoNCglleHRyYWN0KGxBdHRzKCRhdHRzX2RlZmF1bHRz
LCAkcGhwID8gJGF0dHMgOiAkc2FmZV9kZWZhdWx0cyArICRhdHRzKSk7DQoNCglpZigkZGVi
dWcpIHsNCgkJJGRlYnVnID0gZG9fbGlzdCgkZGVidWcpOw0KCQkkc3RhcnR0aW1lID0gbWlj
cm90aW1lKFRSVUUpOw0KCX0NCg0KCS8vIEdyYWIgdGhlIGZvcm0gb3IgZW1iZWRkZWQgJHRo
aW5nDQoJJG9sZFRoaW5nID0gJHRoaW5nOw0KCWlmKCRmb3JtICYmICRmb3JtID0gZmV0Y2hf
Zm9ybSgkZm9ybSkpICR0aGluZyA9ICRjb250ZW50ID0gJGZvcm07DQoJZWxzZSAkY29udGVu
dCA9IGlzc2V0KCR0aGluZykgPyAoc3RyaW5nKUV2YWxFbHNlKCR0aGluZywgMSkgOiAnJzsN
Cg0KCSRub2RhdGEgPSAhJHVybCAmJiAoJGRhdGEgPT09IG51bGwpOw0KCUBsaXN0KCRlbmNv
ZGluZywgJGVuY19mcm9tKSA9IGV4cGxvZGUoJzonLCAkZW5jb2RpbmcpOw0KDQoJJGV0Y19x
dWVyeV9jb250ZXh0ID0gYXJyYXkoJ2FyZ3NlcCc9PiRhcmdzZXAsICdlbmNvZGluZyc9PiRl
bmNvZGluZywgJ2Z1bmN0aW9ucyc9PicnLCAnc3RyaXAnPT5hcnJheSgnX0NPT0tJRScsICdf
R0VUJywgJ19QT1NUJywgJ19SRVFVRVNUJyksICdwaHAnPT4kcGhwKTsNCg0KCSRldGNfcXVl
cnlfZ2xvYmFscyA9ICRnbG9iYWxzID8gZG9fbGlzdCgkZ2xvYmFscykgOiBmYWxzZTsNCgkk
c3BlY2lhbGNoYXJzID0gaXNfY2FsbGFibGUoJ3R4cHNwZWNpYWxjaGFycycpID8gJ3R4cHNw
ZWNpYWxjaGFycycgOiAnaHRtbHNwZWNpYWxjaGFycyc7DQoJJGV0Y19xdWVyeV9zYW5pdGl6
ZSA9IGFycmF5X2ZpbGxfa2V5cygkZXRjX3F1ZXJ5X2NvbnRleHRbJ3N0cmlwJ10sICRzcGVj
aWFsY2hhcnMpOw0KCWlmKCRzYW5pdGl6ZSkgZm9yZWFjaChkb19saXN0KCRzYW5pdGl6ZSkg
YXMgJGl0ZW0pIHsNCgkJQGxpc3QoJGtleSwgJHZhbCkgPSBleHBsb2RlKCc6JywgJGl0ZW0s
IDIpOw0KCQlpZighaXNzZXQoJHZhbCkpICRldGNfcXVlcnlfc2FuaXRpemVbJGtleV0gPSAk
c3BlY2lhbGNoYXJzOw0KCQllbHNlaWYoISR2YWwgfHwgaXNfY2FsbGFibGUoJHZhbCkpICRl
dGNfcXVlcnlfc2FuaXRpemVbJGtleV0gPSAkdmFsOw0KCX0NCi8vCSRldGNfcXVlcnlfc2Fu
aXRpemUgPSAkc2FuaXRpemUgPyBhcnJheV9maWxsX2tleXMoZG9fbGlzdCgkc2FuaXRpemUp
LCB0cnVlKSA6IG51bGw7DQoNCglpZigkc3BlY2lhbHMpIGZvcmVhY2goZG9fbGlzdCgkc3Bl
Y2lhbHMpIGFzICRzcGVjaWFsKSBpZighZW1wdHkoJCRzcGVjaWFsKSkgew0KCQkkJHNwZWNp
YWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soRVRDX1BSRUdfU1BFQywgJ2V0Y19wYXJzZV92
YXJpYWJsZScsICQkc3BlY2lhbCk7DQoJfQ0KDQoJaWYoJGZ1bmN0aW9ucykgew0KCQkkZnVu
Y3Rpb25zID0gZG9fbGlzdCgkZnVuY3Rpb25zKTsNCgkJJGZ1bmMgPSBpbXBsb2RlKCd8Jywg
JGZ1bmN0aW9ucyk7DQoJCWlmKCRxdWVyeSkgJHF1ZXJ5ID0gcHJlZ19yZXBsYWNlKCcvXGIo
Jy4kZnVuYy4nKVxzKlwoLycsICJwaHA6ZnVuY3Rpb24oJyQxJywiLCAkcXVlcnkpOw0KCX0N
CgkkZXRjX3F1ZXJ5X2NvbnRleHRbJ2Z1bmN0aW9ucyddID0gJGZ1bmN0aW9ucyA/ICRmdW5j
IDogJyc7DQoNCglpZigkbWFya3VwICE9PSAnZGF0YScpICRsb2FkZWQgPSBmYWxzZTsNCgll
bHNlaWYoJGRhdGEgJiYgaXNzZXQoJGV0Y19xdWVyeVskZGF0YV0pKSB7DQoJCSRtYXJrdXAg
PSAkZXRjX3F1ZXJ5WyRkYXRhXS0+bWFya3VwOw0KCQlpZihpc3NldCgkZXRjX3F1ZXJ5WyRk
YXRhXS0+ZG9tKSkgJGRvbSA9ICYkZXRjX3F1ZXJ5WyRkYXRhXS0+ZG9tOw0KCQlpZihpc3Nl
dCgkZXRjX3F1ZXJ5WyRkYXRhXS0+ZGF0YSkpICRkYXRhID0gJiRldGNfcXVlcnlbJGRhdGFd
LT5kYXRhOw0KCQkkbG9hZGVkID0gdHJ1ZTsNCgl9IGVsc2UgJGRhdGEgPSAnJzsNCg0KCWlm
KCRkYXRhID09PSAnJyB8fCAkcXVlcnkgPT09ICcnKSByZXR1cm4gZXRjX2NsZWFudXAocGFy
c2UoJG9sZFRoaW5nLCBmYWxzZSksICRzYWZlX2NvbnRleHQsICRzYWZlX2dsb2JhbHMsICRz
YWZlX3Nhbml0aXplLCAkc2FmZV9zcGVjaWFscyk7DQoNCglpZihlbXB0eSgkbWFya3VwKSkg
aWYoJGRhdGEgPT09IG51bGwpICRtYXJrdXAgPSAkdXJsID8gJycgOiAoJHF1ZXJ5ICE9PSBu
dWxsICYmICRxdWVyeVswXSAhPT0gJyQnID8gJ3htbCcgOiAncmF3Jyk7DQoJCWVsc2UgJG1h
cmt1cCA9IChzdHJ0b2xvd2VyKHN1YnN0cigkZGF0YSwgMCwgNykpID09PSAnc2VsZWN0ICcg
PyAnZGInIDogKCRkYXRhWzBdID09PSAnWycgfHwgJGRhdGFbMF0gPT09ICd7JyAmJiAoJGRh
dGFbMV0gPT09ICciJyB8fCAkZGF0YVsxXSA9PT0gJyAnKSA/ICdqc29uJyA6ICgkdXJsIHx8
ICRyZXBsYWNlIHx8IHN0cnBvcygkZGF0YSwgJzwnKSAhPT0gZmFsc2UgPyAnaHRtbCcgOiAn
cmF3JykpKTsNCgllbHNlIHsNCgkJQGxpc3QoJG1hcmt1cCwgJHBmeCkgPSBleHBsb2RlKCc6
JywgJG1hcmt1cCwgMik7DQoJCWlmKHN1YnN0cigkbWFya3VwLCAtMSkgPT09ICcqJykgeyRj
ZGF0YSA9IHRydWU7ICRtYXJrdXAgPSBzdWJzdHIoJG1hcmt1cCwgMCwgLTEpO30NCgkJaWYo
JG1hcmt1cCA9PT0gJ2RiJyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkZGF0YSwgMCwgNykpICE9
PSAnc2VsZWN0ICcpIHsNCgkJCXN3aXRjaCgkcG9wdWxhdGUpIHsNCgkJCQljYXNlICdmaWxl
JyA6ICRmaWVsZHMgPSAnKic7ICRmaWx0ZXIgPSBzYWZlX3BmeCgkcG9wdWxhdGUpLiIgV0hF
UkUgc3RhdHVzID49IDQgQU5EICRkYXRhIjsgYnJlYWs7DQoJCQkJY2FzZSAnaW1hZ2UnIDog
Y2FzZSAnbGluaycgOiAkZmllbGRzID0gJyonOyAkZmlsdGVyID0gc2FmZV9wZngoJHBvcHVs
YXRlKS4nIFdIRVJFICcuJGRhdGE7IGJyZWFrOw0KCQkJCWRlZmF1bHQgOiAkZmllbGRzID0g
JyosIHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAo
RXhwaXJlcykgYXMgdUV4cGlyZXMsIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0
TW9kJzsNCgkJCQlpZiAoaXNfY2FsbGFibGUoJ25vdycpKSB7JG5vd19wb3N0ZWQgPSBub3co
J3Bvc3RlZCcpOyAkbm93X2V4cGlyZXMgPSBub3coJ2V4cGlyZXMnKTt9IGVsc2UgeyRub3df
cG9zdGVkID0gJG5vd19leHBpcmVzID0gJ05PVygpJzt9DQoJCQkJJGZpbHRlciA9IHNhZmVf
cGZ4KCd0ZXh0cGF0dGVybicpLiIgV0hFUkUgU3RhdHVzID49IDQgQU5EIFBvc3RlZCA8PSAk
bm93X3Bvc3RlZCBBTkQgKEV4cGlyZXMgSVMgTlVMTCBPUiBFeHBpcmVzID49ICRub3dfZXhw
aXJlcykgQU5EICRkYXRhIjsNCgkJCQkvL2lmKGVtcHR5KCRwZngpKSAkcGZ4ID0gJ2FydGlj
bGUnOw0KCQkJfQ0KCQkJJGRhdGEgPSAiU0VMRUNUICRmaWVsZHMgRlJPTSAkZmlsdGVyIjsN
CgkJfQ0KCX0NCg0KCWlmKCEkcGhwICYmICRtYXJrdXAgPT09ICdkYicpIHJldHVybiBldGNf
Y2xlYW51cChwYXJzZSgkb2xkVGhpbmcsIGZhbHNlKSwgJHNhZmVfY29udGV4dCwgJHNhZmVf
Z2xvYmFscywgJHNhZmVfc2FuaXRpemUsICRzYWZlX3NwZWNpYWxzKTsNCg0KCWlmKCFlbXB0
eSgkcG9wdWxhdGUpKSB7DQoJCWdsb2JhbCAkeyd0aGlzJy4kcG9wdWxhdGV9Ow0KCQkkdGhp
c3BvcHVsYXRlID0gaXNzZXQoJHsndGhpcycuJHBvcHVsYXRlfSkgPyAkeyd0aGlzJy4kcG9w
dWxhdGV9IDogbnVsbDsNCgkJJGZvcm1hdF9pbmZvID0gJHBvcHVsYXRlLigkcG9wdWxhdGUg
PT09ICdmaWxlJyA/ICdfZG93bmxvYWQnIDogJycpLidfZm9ybWF0X2luZm8nOw0KCQlpZigk
cG9wdWxhdGUgPT09ICdhcnRpY2xlJykgJGNvbHVtbl9tYXAgPSBhcnRpY2xlX2NvbHVtbl9t
YXAoKTsNCgl9DQoNCglpZigkY29udGVudCAhPT0gJycpIHsNCgkJaWYoJHBhcnNlID09PSAn
YXV0bycpICRwYXJzZSA9IChzdHJwb3MoJGNvbnRlbnQsICc8dHhwOicpICE9PSBmYWxzZSA/
ICdhZnRlcicgOiAnJyk7DQoJCWVsc2VpZigkcGFyc2UgPT09ICdiZWZvcmUnIHx8ICRwYXJz
ZSA9PT0gJ2JvdGgnKSAkY29udGVudCA9IHBhcnNlKCRjb250ZW50KTsNCgkJaWYoc3RycG9z
KCRjb250ZW50LCAnPHhzbDonKSAhPT0gZmFsc2UpIHskeGNvbnRlbnQgPSAkY29udGVudDsg
JGNvbnRlbnQgPSAnJzt9DQoJfQ0KCSRwYXJzZSA9ICgkcGFyc2UgPT09ICdhZnRlcicgfHwg
JHBhcnNlID09PSAnYm90aCcpOw0KDQoJJGZsYXQgPSAoJG1hcmt1cCAhPT0gJ2h0bWwnICYm
ICRtYXJrdXAgIT09ICd4bWwnICYmICEkcmVwbGFjZSAmJiAhaXNzZXQoJHhjb250ZW50KSk7
Ly9hcnJheSBtb2RlDQoJJHF1ZXJ5X2FycmF5ID0gbnVsbDsvL2FycmF5KCk7DQoJaWYoJGZs
YXQpIGlmKCRxdWVyeSAhPT0gbnVsbCkgDQoJew0KCQlpZigkcXVlcnlbMF0gPT09ICckJykg
ew0KCQkJaWYoJG5vZGF0YSkgJGRhdGEgPSAkY29udGVudDsNCgkJCSRjb250ZW50ID0gJ3sn
LiRxdWVyeS4nfSc7DQoJCQkkcXVlcnkgPSAnLic7ICRxdWVyeV9hcnJheSA9IGFycmF5KCk7
DQoJCX0gZWxzZSB7DQoJCQkkcXVlcnlfYXJyYXkgPSBldGNfcGFyc2VfeHBhdGgoJHF1ZXJ5
Lic/JywgJGZsYXQpOw0KCQkJaWYoaXNzZXQoJHF1ZXJ5X2FycmF5WydhcnJheSddKSkgJHF1
ZXJ5X2FycmF5ID0gJHF1ZXJ5X2FycmF5WydhcnJheSddOw0KCQl9DQoJfQ0KCWVsc2VpZigk
bWFya3VwID09PSAnZGInKQ0KCQlpZigkY29udGVudCA9PT0gJycpIHskcXVlcnkgPSAnKi8q
JzsgJHF1ZXJ5X2FycmF5ID0gYXJyYXkoJyonLCAnKicpO30NCg0KCWlmKCRldGNfcXVlcnlf
Z2xvYmFscyAmJiBzdHJwb3MoJGNvbnRlbnQuJHJlcGxhY2UsICd7PycpID09PSBmYWxzZSAm
JiBzdHJwb3MoJGNvbnRlbnQuJHJlcGxhY2UsICd7IScpID09PSBmYWxzZSkgJGV0Y19xdWVy
eV9nbG9iYWxzID0gZmFsc2U7DQoJaWYoJGNvbnRlbnQgIT09ICcnKSAkY29udGVudHMgPSBl
dGNfcGFyc2Vfc3RyaW5nKCRjb250ZW50LCAkZmxhdCk7DQoJZWxzZWlmKCR0aGluZykgJGNv
bnRlbnRzID0gYXJyYXkoJ3RleHQnID0+ICcnKTsNCgllbHNlICRjb250ZW50cyA9IGFycmF5
KCk7DQoNCglpZigkcmVwbGFjZSkgaWYoc3RycG9zKCRyZXBsYWNlLCAnPHhzbDonKSAhPT0g
ZmFsc2UpIHskeHJlcGxhY2UgPSAkcmVwbGFjZTsgJHJlcGxhY2UgPSAnJzt9DQoJZWxzZSB7
DQoJCSRyZXBsYWNlX2FycmF5ID0gYXJyYXkoKTsNCgkJZm9yZWFjaChkb19saXN0KCRyZXBs
YWNlLCAkc2VwYXJhdG9yKSBhcyAkcGF0KSBpZigkcGF0ICE9PSAnJykgew0KCQkJJHJlcGxh
Y2VfYXJyYXlbXSA9IGV0Y19wYXJzZV94cGF0aCgkcGF0LCAkZmxhdCk7DQoJCX0NCgkJaWYo
JGRlYnVnICYmIGluX2FycmF5KCdyJywgJGRlYnVnKSkge2VjaG8gJ1JFUExBQ0UnOyBkbXAo
JHJlcGxhY2VfYXJyYXkpO30NCgl9DQoNCglpZighJGxvYWRlZCkgew0KCQlpZigkdXJsKSBp
ZigkbWFya3VwID09PSAnZGInKQ0KCQkJew0KCQkJCWdsb2JhbCAkREI7DQoJCQkJJG15c3Fs
aSA9IGlzX29iamVjdCgkREItPmxpbmspOw0KCQkJCSRyZXN1bHQgPSAkbXlzcWxpID8gbXlz
cWxpX3NlbGVjdF9kYigkREItPmxpbmssICR1cmwpIDogbXlzcWxfc2VsZWN0X2RiKCR1cmwp
Ow0KCQkJCSRkYXRhID0gJHJlc3VsdCA/IGdldFJvd3MoJGRhdGEpIDogbnVsbDsNCgkJCQlp
ZigkbXlzcWxpKSBteXNxbGlfc2VsZWN0X2RiKCREQi0+bGluaywgJERCLT5kYik7IGVsc2Ug
bXlzcWxfc2VsZWN0X2RiKCREQi0+ZGIpOw0KCQkJfSBlbHNlaWYoJG1hcmt1cCA9PT0gJ2xk
YXAnKSB7DQoJCQkJJGxkYXBjb25uID0gbGRhcF9jb25uZWN0KCR1cmwpOw0KLy8JCQkJbGRh
cF9zZXRfb3B0aW9uKCRsZGFwY29ubiwgTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgMyk7
DQoJCQkJaWYoJGxkYXBjb25uKQ0KCQkJCXsNCgkJCQkJQGxpc3QoJGxkYXByZG4sICRsZGFw
ZmlsdGVyLCAkbGRhcG9ubHkpID0gZG9fbGlzdCgkZGF0YSwgJzsnKTsNCgkJCQkJaWYoIWlz
c2V0KCRsZGFwZmlsdGVyKSkgJGxkYXBmaWx0ZXIgPSAnb2JqZWN0Q2xhc3M9Kic7DQoJCQkJ
CSRsZGFwb25seSA9ICghZW1wdHkoJGxkYXBvbmx5KSA/IGRvX2xpc3QoJGxkYXBvbmx5KSA6
IGFycmF5KCkpOw0KCQkJCQkkZGF0YSA9IGxkYXBfc2VhcmNoKCRsZGFwY29ubiwgJGxkYXBy
ZG4sICRsZGFwZmlsdGVyLCAkbGRhcG9ubHkpOw0KCQkJCQkkZGF0YSA9IGxkYXBfZ2V0X2Vu
dHJpZXMoJGxkYXBjb25uLCAkZGF0YSk7DQoJCQkJCWxkYXBfY2xvc2UoJGxkYXBjb25uKTsN
CgkJCQl9DQoJCQkJZWxzZSAkZGF0YSA9IG51bGw7DQoJCQl9IGVsc2Ugew0KCQkJCSRjb250
ZXh0ID0gJGNvbnRleHQgPyBzdHJlYW1fY29udGV4dF9jcmVhdGUoanNvbl9kZWNvZGUoJGNv
bnRleHQsIHRydWUpKSA6IG51bGw7DQoJCQkJJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygk
dXJsLCBmYWxzZSwgJGNvbnRleHQpOw0KCQkJCWlmKCFlbXB0eSgkaHR0cF9yZXNwb25zZV9o
ZWFkZXIpKSBmb3JlYWNoKCRodHRwX3Jlc3BvbnNlX2hlYWRlciBhcyAkaGVhZGVyKSBpZihw
cmVnX21hdGNoKCcvXkNvbnRlbnRcLVR5cGVcOiguKikvaScsICRoZWFkZXIsICRtYXRjaGVz
KSkgew0KCQkJCQlsaXN0KCRtaW1lLCAkb3B0KSA9IGV4cGxvZGUoJzsnLCAkbWF0Y2hlc1sx
XSk7DQoJCQkJCWxpc3QoJHR5cGUsICRzdWJ0eXBlKSA9IGV4cGxvZGUoJy8nLCBzdHJ0b2xv
d2VyKHRyaW0oJG1pbWUpKSk7DQoJCQkJCWlmKCEkbWFya3VwICYmIGluX2FycmF5KCRzdWJ0
eXBlLCBhcnJheSgnanNvbicsICdodG1sJywgJ3htbCcpKSkgJG1hcmt1cCA9ICRzdWJ0eXBl
Ow0KCQkJCQlpZihwcmVnX21hdGNoKCcvXGJjaGFyc2V0PShbXHdcLSNdKykvaScsICRvcHQs
ICRtYXRjaGVzKSkgJGVuYyA9IHN0cnRvdXBwZXIoJG1hdGNoZXNbMV0pOw0KCQkJCQlicmVh
azsNCgkJCQl9DQoJCQkJaWYoJGVuY29kaW5nICYmICRkYXRhKSB7DQoJCQkJCSRlbmNvZGlu
ZyA9IHN0cnRvdXBwZXIoJGVuY29kaW5nKTsNCgkJCQkJaWYoaXNzZXQoJGVuY19mcm9tKSAm
JiAkZW5jX2Zyb20gIT09ICcqJykgJGVuYyA9IHN0cnRvdXBwZXIoJGVuY19mcm9tKTsNCgkJ
CQkJZWxzZWlmKCFpc3NldCgkZW5jKSAmJiBwcmVnX21hdGNoKCcvPG1ldGFcYltePl0rXGJj
aGFyc2V0PSI/KFtcd1wtI10rKSI/W14+XSo+L2knLCAkZGF0YSwgJG1hdGNoZXMpKSAkZW5j
ID0gc3RydG91cHBlcigkbWF0Y2hlc1sxXSk7DQoJCQkJCWlmKGlzX2NhbGxhYmxlKCdtYl9k
ZXRlY3RfZW5jb2RpbmcnKSkgew0KCQkJCQkJaWYoIWlzc2V0KCRlbmMpKSAkZW5jID0gc3Ry
dG91cHBlcihtYl9kZXRlY3RfZW5jb2RpbmcoJGRhdGEpKTsgLy9lbHNlIGRtcCgkZW5jKTsN
CgkJCQkJCSRtYl9lbmNvZGluZ3MgPSAkZW5jID8gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywg
bWJfbGlzdF9lbmNvZGluZ3MoKSkgOiBhcnJheSgpOw0KCQkJCQkJJG1iX2VuY29kaW5ncyA9
IGluX2FycmF5KCRlbmNvZGluZywgJG1iX2VuY29kaW5ncykgJiYgaW5fYXJyYXkoJGVuYywg
JG1iX2VuY29kaW5ncyk7DQoJCQkJCX0NCgkJCQkJZWxzZSAkbWJfZW5jb2RpbmdzID0gZmFs
c2U7DQoJCQkJCWlmKCRlbmMgJiYgKCRlbmMgIT09ICRlbmNvZGluZyB8fCBpc3NldCgkZW5j
X2Zyb20pKSkNCgkJCQkJCWlmKCRtYl9lbmNvZGluZ3MpICRkYXRhID0gbWJfY29udmVydF9l
bmNvZGluZygkZGF0YSwgJGVuY29kaW5nLCAkZW5jKTsNCgkJCQkJCWVsc2VpZihpc19jYWxs
YWJsZSgnaWNvbnYnKSkgJGRhdGEgPSBpY29udigkZW5jLCAkZW5jb2RpbmcuJy8vSUdOT1JF
JywgJGRhdGEpOw0KCQkJCX0NCgkJCX0NCg0KCQlpZigkbWFya3VwID09PSAnanNvbicpIGlm
KHByZWdfbWF0Y2goJy9eXFsoXC0/XHcrKVwuXC4oXC0/XHcrKTo/KFtcK1wtXT8pKFxkKilc
XSQvJywgJGRhdGEsICRtYXRjaGVzKSkgc3dpdGNoKCRtYXRjaGVzWzNdKSB7DQoJCQkJY2Fz
ZSAnKycgOiBpZigkbWF0Y2hlc1sxXSA8PSAkbWF0Y2hlc1syXSkgJGRhdGEgPSByYW5nZSgk
bWF0Y2hlc1sxXSwgJG1hdGNoZXNbMl0sICRtYXRjaGVzWzRdID8gJG1hdGNoZXNbNF0gOiAx
KTsgZWxzZSAkZGF0YSA9IG51bGw7IGJyZWFrOw0KCQkJCWNhc2UgJy0nIDogaWYoJG1hdGNo
ZXNbMV0gPj0gJG1hdGNoZXNbMl0pICRkYXRhID0gcmFuZ2UoJG1hdGNoZXNbMV0sICRtYXRj
aGVzWzJdLCAkbWF0Y2hlc1s0XSA/ICRtYXRjaGVzWzRdIDogMSk7IGVsc2UgJGRhdGEgPSBu
dWxsOyBicmVhazsNCgkJCQlkZWZhdWx0IDogJGRhdGEgPSByYW5nZSgkbWF0Y2hlc1sxXSwg
JG1hdGNoZXNbMl0sICRtYXRjaGVzWzRdID8gJG1hdGNoZXNbNF0gOiAxKTsNCgkJCX0gZWxz
ZSAkZGF0YSA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsgLy9hcnJheQ0KCQllbHNlaWYo
JG1hcmt1cCA9PT0gJ2FycmF5JykgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkZGF0YSk7DQoJCWVs
c2VpZigkbWFya3VwID09PSAnbGlzdCcpIHsNCgkJCSRkYXRhID0gYXJyYXlfZmlsdGVyKGRv
X2xpc3QoJGRhdGEsIGlzc2V0KCRwZngpID8gJHBmeCA6ICcsJyksIGZ1bmN0aW9uKCRhKSB7
cmV0dXJuIChzdHJpbmcpJGEgIT09ICcnO30pOw0KCQkJaWYoaXNzZXQoJHBmeCkpIHVuc2V0
KCRwZngpOw0KCQl9IGVsc2VpZigkbWFya3VwID09PSAnZGInICYmICEkdXJsIC8qJiYgJGRh
dGEqLykgew0KCQkJJGRhdGEgPSBnZXRSb3dzKCRkYXRhKTsNCgkJfSBlbHNlaWYoISRtYXJr
dXApICRtYXJrdXAgPSAnaHRtbCc7DQoJfQ0KCWVsc2VpZighJGZsYXQgJiYgIWlzc2V0KCRk
b20pKSB7JGxvYWRlZCA9IGZhbHNlO30NCg0KCSRpc19odG1sID0gJG1hcmt1cCA9PT0gJ2h0
bWwnOw0KCSRpc194bWwgPSAkbWFya3VwID09PSAneG1sJzsNCgkkZmxhdCA9ICRmbGF0ICYm
ICEkaXNfaHRtbCAmJiAhJGlzX3htbDsNCg0KCWlmKCRkZWJ1Zykgew0KCQkkZW5kdGltZSA9
IG1pY3JvdGltZShUUlVFKTsNCgkJZG1wKCJQcmVsb2FkZWQgaW4gIiAuICgkZW5kdGltZSAt
ICRzdGFydHRpbWUpIC4gIiBzZWNvbmRzLlxuIik7DQoJCSRzdGFydHRpbWUgPSBtaWNyb3Rp
bWUoVFJVRSk7DQoJfQ0KDQoJaWYoISRub2RhdGEgJiYgZW1wdHkoJGRhdGEpKSAkcm9vdHMg
PSBudWxsOw0KCWVsc2VpZigkZmxhdCkgeyRyb290cyA9IGFycmF5KCRkYXRhID8gJGRhdGEg
OiAnJyk7ICR4cGF0aCA9IG51bGw7fQ0KCWVsc2Ugew0KCQlpZighJGxvYWRlZCkgew0KCQkJ
LyoqKiBsb2FkIHRoZSBkYXRhIGludG8gYSBuZXcgZG9tIG9iamVjdCAqKiovDQoJCQkkZG9t
ID0gbmV3IERPTURvY3VtZW50Ow0KCQkJJGRvbS0+cHJlc2VydmVXaGl0ZVNwYWNlID0gZmFs
c2U7DQoJCQkkZG9tLT5zdHJpY3RFcnJvckNoZWNraW5nID0gZmFsc2U7DQoJCQkkZG9tLT5l
bmNvZGluZyA9ICRlbmNvZGluZzsNCgkJCWlmKCEkZGVidWcpIGxpYnhtbF91c2VfaW50ZXJu
YWxfZXJyb3JzKHRydWUpOw0KDQoJCQlpZihpc3NldCgkY2RhdGEpICYmICRkYXRhKSAkZGF0
YSA9IHN0cl9pcmVwbGFjZShhcnJheSgnPCFbQ0RBVEFbJywgJ11dPicpLCAnPCEtLS0tPics
ICRkYXRhKTsNCgkJCWlmKGlzc2V0KCRwZngpICYmICRwZnggPT09ICcnKSAkZGF0YSA9IHN0
cl9yZXBsYWNlKCcgeG1sbnM9JywgJyBldGNucz0nLCAkZGF0YSk7DQoNCgkJCWlmKCRpc19o
dG1sKSB7DQovLwkJCQlpZigkdXJsKSAkZG9tLT5sb2FkSFRNTChwcmVnX3JlcGxhY2UoJy88
aGVhZC4qPi9Vc2knLCAnXFwwPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250
ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JyAuICRlbmNvZGluZyAuICciPicsICRkYXRhKSk7
DQoJCQkJaWYoJHVybCkgJGRvbS0+bG9hZEhUTUwoJzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRl
bnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PScgLiAkZW5jb2RpbmcgLiAn
Ij4nIC4gJGRhdGEpOw0KCQkJCWVsc2UgJGRvbS0+bG9hZEhUTUwoJzw/eG1sIGVuY29kaW5n
PSInLiRlbmNvZGluZy4nIj4nLiRkYXRhKTsNCgkJCX0NCgkJCWVsc2VpZigkaXNfeG1sKSB7
aWYoISRub2RhdGEpICRkb20tPmxvYWRYTUwoJGRhdGEsIExJQlhNTF9DT01QQUNUKTt9DQoJ
CQllbHNlaWYoJGRhdGEpIGlmKCFpc19hcnJheSgkZGF0YSkgJiYgIWlzX29iamVjdCgkZGF0
YSkpICRkb20tPmFwcGVuZENoaWxkKCRkb20tPmNyZWF0ZUVsZW1lbnQoJ3Jvb3QnLCAoc3Ry
aW5nKSRkYXRhKSk7IGVsc2Ugew0KCQkJCWZvcmVhY2ggKCRkYXRhIGFzICRrZXkgPT4gJHZh
bCkgJGRvbS0+YXBwZW5kQ2hpbGQoZXRjX2NyZWF0ZV9lbGVtZW50KCRrZXksICR2YWwsICRk
b20pKTsNCgkJCQkkaXNfeG1sID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KDQoJCWlmKChpc3NldCgk
eGNvbnRlbnQpIHx8IGlzc2V0KCR4cmVwbGFjZSkpICYmIGNsYXNzX2V4aXN0cygnWFNMVFBy
b2Nlc3NvcicpKSB7DQoJCQkkeHNsdCA9IG5ldyBET01Eb2N1bWVudDsNCgkJCSRwcm9jID0g
bmV3IFhTTFRQcm9jZXNzb3I7DQoJCQlpZigkZnVuY3Rpb25zKSAkcHJvYy0+cmVnaXN0ZXJQ
SFBGdW5jdGlvbnMoJGZ1bmN0aW9ucyk7DQoJCQlpZihpc3NldCgkeHJlcGxhY2UpKSB7DQoJ
CQkJJHhzbHQtPmxvYWRYTUwoJHhyZXBsYWNlKTsNCgkJCQkkcHJvYy0+aW1wb3J0U3R5bGVT
aGVldCgkeHNsdCk7DQoJCQkJJGRvbSA9ICRwcm9jLT50cmFuc2Zvcm1Ub0RvYygkZG9tKTsN
CgkJCX0NCgkJCWlmKGlzc2V0KCR4Y29udGVudCkpIHsNCgkJCQkkeHNsdC0+bG9hZFhNTCgk
eGNvbnRlbnQpOw0KCQkJCSRwcm9jLT5pbXBvcnRTdHlsZVNoZWV0KCR4c2x0KTsNCgkJCQly
ZXR1cm4gZXRjX2NsZWFudXAoJHByb2MtPnRyYW5zZm9ybVRvWE1MKCRkb20pLCAkc2FmZV9j
b250ZXh0LCAkc2FmZV9nbG9iYWxzLCAkc2FmZV9zYW5pdGl6ZSwgJHNhZmVfc3BlY2lhbHMp
Ow0KCQkJfQ0KCQl9DQoNCgkJJHhwYXRoID0gbmV3IERPTVhwYXRoKCRkb20pOw0KCQlpZigk
ZnVuY3Rpb25zKSB7DQoJCQkkeHBhdGgtPnJlZ2lzdGVyTmFtZXNwYWNlKCdwaHAnLCAnaHR0
cDovL3BocC5uZXQveHBhdGgnKTsNCgkJCSR4cGF0aC0+cmVnaXN0ZXJQSFBGdW5jdGlvbnMo
JGZ1bmN0aW9ucyk7DQoJCX0NCgkJaWYoIWVtcHR5KCRwZngpKSB7DQoJCQkkeHBhdGgtPnJl
Z2lzdGVyTmFtZXNwYWNlKCRwZngsICRkb20tPmxvb2t1cE5hbWVzcGFjZVVyaSgkZG9tLT5u
YW1lc3BhY2VVUkkpKTsNCgkJfQ0KDQoJCWlmKGVtcHR5KCRzdGFydCkpICRzdGFydCA9ICgk
aXNfaHRtbCA/ICcvaHRtbC9ib2R5JyA6ICcvJyk7DQoJCSRyb290cyA9ICR4cGF0aC0+cXVl
cnkoJHN0YXJ0KTsNCg0KCQlpZigkZGVidWcpIHtpZihpbl9hcnJheSgnaCcsICRkZWJ1Zykp
IHtlY2hvICRtYXJrdXA7IGRtcCgkaXNfeG1sPyAkZG9tLT5zYXZlWE1MKCkgOiAkZG9tLT5z
YXZlSFRNTCgpKTt9fQ0KCQllbHNlIGxpYnhtbF9jbGVhcl9lcnJvcnMoKTsNCgl9Ly9kb20N
Cg0KCWlmKGVtcHR5KCRjb250ZW50cykpIHsvLyR0aGluZyA9PT0gbnVsbA0KCQkkcGF0aCA9
ICRmbGF0IHx8ICRxdWVyeSAhPT0gbnVsbCB8fCAkaXNfeG1sID8gJy4nIDogJ25vZGUoKSc7
DQoJCSRjb250ZW50ID0gJHBhdGggIT09ICcuJzsNCgkJJGNvbnRlbnRzID0gYXJyYXkoYXJy
YXkoJ3R5cGUnID0+ICd4cGF0aCcsICd0ZXh0JyA9PiAnJywgJ3ZhbHVlJyA9PiBhcnJheSgn
cGF0aCcgPT4gJHBhdGgsICdtb2RlJyA9PiAkZmxhdCA/ICc/JyA6ICcuJywgJ3ZhbHVlJyA9
PiBhcnJheSgpLCAnYXJyYXknID0+IGFycmF5KCkpKSk7DQoJfSBlbHNlICRjb250ZW50ID0g
dHJ1ZTsNCglpZigkcXVlcnkgPT09IG51bGwpICRxdWVyeSA9ICgkaXNfeG1sICYmICEkbm9k
YXRhID8gJ25vZGUoKScgOiAnLicpOw0KCSRvdXQgPSBhcnJheSgpOw0KCSRldGNfcXVlcnlf
Y29udGV4dFsneHBhdGgnXSA9ICYkeHBhdGg7DQoJJGV0Y19xdWVyeV9jb250ZXh0Wyd4bWwn
XSA9ICRpc194bWw7DQoNCglpZigkZGVidWcpIHsNCgkJJGVuZHRpbWUgPSBtaWNyb3RpbWUo
VFJVRSk7DQoJCWRtcCgiTG9hZGVkIGluICIgLiAoJGVuZHRpbWUgLSAkc3RhcnR0aW1lKSAu
ICIgc2Vjb25kcy4gJGZsYXRcbiIpOw0KCQlpZihpbl9hcnJheSgnZCcsICRkZWJ1ZykpIHtl
Y2hvICdEQVRBICcsICRtYXJrdXA7IGRtcCgkZGF0YSk7fQ0KCQlpZihpbl9hcnJheSgncScs
ICRkZWJ1ZykpIHtlY2hvICdRVUVSWSc7IGRtcCgkcXVlcnkpOyBkbXAoJHF1ZXJ5X2FycmF5
KTt9DQoJCWlmKGluX2FycmF5KCdjJywgJGRlYnVnKSkge2VjaG8gJ0NPTlRFTlRTJzsgZG1w
KCRjb250ZW50cyk7fQ0KCQkkc3RhcnR0aW1lID0gbWljcm90aW1lKFRSVUUpOw0KCX0NCg0K
CWlmKCFlbXB0eSgkcm9vdHMpKSB7DQoJCWZvcmVhY2goJHJvb3RzIGFzICRyb290KSAvKmlm
KCEkdGhvcm91Z2ggfHwgJHhwYXRoLT5xdWVyeSgkcm9vdC0+Z2V0Tm9kZVBhdGgoKSktPmxl
bmd0aCkqLyB7DQoJCQkvLyBVZ2x5IGhhY2sgdG8gZGV0ZWN0IGlmIHRoZSBub2RlIGlzIHJl
bW92ZWQNCgkJCSRlbGVtZW50cyA9ICRpbnRlcm5hbHMgPSBhcnJheSgpOw0KDQoJCQlpZigh
JGZsYXQpIHsNCgkJCQkkbm9kZXMgPSAkeHBhdGgtPmV2YWx1YXRlKCRxdWVyeSwgJHJvb3Qp
Ow0KCQkJCWlmICghKCRub2RlcyBpbnN0YW5jZW9mIERPTU5vZGVMaXN0KSkgew0KCQkJCQkk
aW50ZXJuYWxzWyd7P30nXSA9ICRub2RlczsNCgkJCQkJaWYoJG5vZGVzKSB7DQoJCQkJCQkk
bmV3b3V0ID0gISRjb250ZW50ID8gJG5vZGVzIDogKGlzc2V0KCRjb250ZW50c1sndGV4dCdd
KSA/ICRjb250ZW50c1sndGV4dCddIDogZXRjX2V2YWx1YXRlX3N0cmluZygkY29udGVudHMs
ICRyb290LCAkaW50ZXJuYWxzLCAkZmxhdCkpOw0KCQkJCQkJJG91dFtdID0gJHBhcnNlID8g
cGFyc2UoJG5ld291dCkgOiAkbmV3b3V0Ow0KCQkJCQl9DQoJCQkJCWNvbnRpbnVlOw0KCQkJ
CX0NCgkJCQlmb3JlYWNoKCRub2RlcyBhcyAkZWxlbWVudCkgJGVsZW1lbnRzW10gPSAkZWxl
bWVudDsNCgkJCX0vLyBvciAkcm9vdCA9ICRkYXRhDQoJCQllbHNlaWYoJHF1ZXJ5ID09PSAn
KicgfHwgJHF1ZXJ5X2FycmF5ID09PSBudWxsKSAkZWxlbWVudHMgPSBpc19hcnJheSgkcm9v
dCkgPyAkcm9vdCA6IChhcnJheSkgJHJvb3Q7DQoJCQllbHNlaWYoZW1wdHkoJHF1ZXJ5X2Fy
cmF5KSkgJGVsZW1lbnRzID0gYXJyYXkoJHJvb3QpOy8vcXVlcnkgPSAiLiIgb3IgIi8iDQoJ
CQllbHNlIHsNCgkJCQkkcXVlcnlfYXJyYXkgPSBhcnJheShhcnJheSgndHlwZScgPT4gJ3hw
YXRoJywgJ3RleHQnID0+ICcnLCAndmFsdWUnID0+IGFycmF5KCdwYXRoJyA9PiAnLicsICdt
b2RlJyA9PiAnPycsICdhcnJheScgPT4gJHF1ZXJ5X2FycmF5LCAndmFsdWUnID0+IGFycmF5
KCkpKSk7DQoJCQkJJGVsZW1lbnRzID0gZXRjX2V2YWx1YXRlX3N0cmluZygkcXVlcnlfYXJy
YXksICRyb290LCAkaW50ZXJuYWxzLCAyKTsNCgkJCX0NCg0KCQkJJG51bXMgPSAkbnVtX3Jv
d3MgPSBjb3VudCgkZWxlbWVudHMpOw0KCQkJJG9mZm51bSA9ICgkb2Zmc2V0IDwgMCA/ICRu
dW1zICsgJG9mZnNldCA6ICRvZmZzZXQpOw0KCQkJaWYoJG9mZnNldCB8fCAkbGltaXQpIHsN
CgkJCQkkZWxlbWVudHMgPSBhcnJheV9zbGljZSgkZWxlbWVudHMsICRvZmZzZXQsICRsaW1p
dCwgdHJ1ZSk7DQoJCQkJJG51bV9yb3dzID0gY291bnQoJGVsZW1lbnRzKTsNCgkJCX0NCg0K
CQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFsc1sneyNyb3dzfSddKSkgJGludGVybmFs
c1sneyNyb3dzfSddID0gJG51bV9yb3dzOw0KCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVj
aWFsc1sneyN0b3RhbH0nXSkpICRpbnRlcm5hbHNbJ3sjdG90YWx9J10gPSAkbnVtczsNCgkJ
CSRudW0gPSAwOw0KDQoJCQlpZighZW1wdHkoJGVsZW1lbnRzKSkgZm9yZWFjaCgkZWxlbWVu
dHMgYXMgJHJvdyA9PiAmJGVsZW1lbnQpIHsNCgkJCQlpZighZW1wdHkoJGZvcm1hdF9pbmZv
KSkgew0KCQkJCQlnbG9iYWwgJHsndGhpcycuJHBvcHVsYXRlfTsvL2RhbW4gZG9BcnRpY2xl
cygpIQ0KCQkJCQlpZigkZmxhdCkgew0KCQkJCQkJaWYoJHBvcHVsYXRlID09PSAnYXJ0aWNs
ZScpIGZvcmVhY2ggKCRjb2x1bW5fbWFwIGFzICRrZXkgPT4gJGNvbHVtbikNCgkJCQkJCQkk
dGhpc2FydGljbGVbJGtleV0gPSBpc3NldCgkZWxlbWVudFskY29sdW1uXSkgPyAkZWxlbWVu
dFskY29sdW1uXSA6ICcnOy8vYXJ0aWNsZV9mb3JtYXRfaW5mbygkZWxlbWVudCk7DQoJCQkJ
CQllbHNlICR7J3RoaXMnLiRwb3B1bGF0ZX0gPSAkZm9ybWF0X2luZm8oJGVsZW1lbnQpOw0K
CQkJCQl9IGVsc2VpZigkcG9wdWxhdGUgPT09ICdhcnRpY2xlJykgew0KCQkJCQkJZm9yZWFj
aCAoJGNvbHVtbl9tYXAgYXMgJGtleSA9PiAkY29sdW1uKSB7DQoJCQkJCQkJJG5vZGVzID0g
JHhwYXRoLT5xdWVyeSgkaXNfeG1sID8gJGNvbHVtbiA6IHN0cnRvbG93ZXIoJGNvbHVtbiks
ICRlbGVtZW50KTsNCgkJCQkJCQkkdGhpc2FydGljbGVbJGtleV0gPSAkbm9kZXMtPmxlbmd0
aCA/ICRub2Rlcy0+aXRlbSgwKS0+bm9kZVZhbHVlIDogJyc7DQoJCQkJCQl9DQoJCQkJCX0N
CgkJCQkJJHsndGhpcycuJHBvcHVsYXRlfVsnaXNfZmlyc3QnXSA9ICgkbnVtID09IDApOw0K
CQkJCQkkeyd0aGlzJy4kcG9wdWxhdGV9Wydpc19sYXN0J10gPSAoJG51bSsxID09ICRudW1f
cm93cyk7DQoJCQkJfQ0KDQoJCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFsc1sneyNy
b3d9J10pKSAkaW50ZXJuYWxzWyd7I3Jvd30nXSA9ICRudW0rMTsNCgkJCQlpZihpc3NldCgk
ZXRjX3F1ZXJ5X3NwZWNpYWxzWyd7I2luZH0nXSkpICRpbnRlcm5hbHNbJ3sjaW5kfSddID0g
JG51bSskb2ZmbnVtOw0KCQkJCWlmKGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3s/fSdd
KSkgJGludGVybmFsc1snez99J10gPSAoJGZsYXQgPyAkZWxlbWVudCA6ICRlbGVtZW50LT5u
b2RlVmFsdWUpOw0KCQkJCWlmKGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3sjfSddKSkg
JGludGVybmFsc1sneyN9J10gPSAoJGZsYXQgPyAkcm93IDogJGVsZW1lbnQtPm5vZGVOYW1l
KTsNCg0KCQkJCS8vIFJlcGxhY2UvcmVtb3ZlIHZhbHVlcw0KCQkJCWlmKCRyZXBsYWNlKSBm
b3JlYWNoKCRyZXBsYWNlX2FycmF5IGFzICR2YWwpIHsNCgkJCQkJJG5vZGVzID0gKCR2YWxb
J3BhdGgnXSA9PT0gJy4nID8gYXJyYXkoJGVsZW1lbnQpIDogJHhwYXRoLT5xdWVyeSgkaW50
ZXJuYWxzID8gc3RydHIoJHZhbFsncGF0aCddLCAkaW50ZXJuYWxzKSA6ICR2YWxbJ3BhdGgn
XSwgJGVsZW1lbnQpKTsNCgkJCQkJJGluZCA9IGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNb
J3sjI30nXSkgPyAxIDogMDsNCgkJCQkJaWYoJG5vZGVzKSBmb3JlYWNoKCRub2RlcyBhcyAk
bm9kZSkgLyppZighJHRob3JvdWdoIHx8ICR4cGF0aC0+cXVlcnkoJG5vZGUtPmdldE5vZGVQ
YXRoKCkpLT5sZW5ndGgpKi8gdHJ5DQoJCQkJCXsNCgkJCQkJCWlmKCRpbmQpICRpbnRlcm5h
bHNbJ3sjI30nXSA9ICRpbmQrKzsNCgkJCQkJCWV0Y19wcm9jZXNzX25vZGUoJHZhbFsndmFs
dWUnXSwgJG5vZGUsICRpbnRlcm5hbHMsIGZhbHNlLCB0cnVlKTsNCgkJCQkJfSBjYXRjaChE
T01FeGNlcHRpb24gJGUpIHtpZigkZGVidWcpIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTt9DQoJ
CQkJfQ0KDQoJCQkJLy8gQ29uc3RydWN0IHRoZSByZXBsYWNlbWVudCBhcnJheXMNCgkJCQlp
Zihpc3NldCgkZXRjX3F1ZXJ5X3NwZWNpYWxzWyd7IyN9J10pKSAkaW50ZXJuYWxzWyd7IyN9
J10gPSAkbnVtKzE7DQoNCgkJCQkkbmV3b3V0ID0gISRjb250ZW50ICYmICEkc2FuaXRpemUN
CgkJCQkJPyAoJGZsYXQgPyAkZWxlbWVudCA6ICgkaXNfaHRtbCA/ICRkb20tPnNhdmVIVE1M
KCRlbGVtZW50KSA6ICRkb20tPnNhdmVYTUwoJGVsZW1lbnQpKSkNCgkJCQkJOiAoaXNzZXQo
JGNvbnRlbnRzWyd0ZXh0J10pID8gJGNvbnRlbnRzWyd0ZXh0J10gOiBldGNfZXZhbHVhdGVf
c3RyaW5nKCRjb250ZW50cywgJGVsZW1lbnQsICRpbnRlcm5hbHMsICRmbGF0KSk7DQoNCgkJ
CQkkb3V0W10gPSAkcGFyc2UgPyBwYXJzZSgkbmV3b3V0KSA6ICRuZXdvdXQ7DQoJCQkJJG51
bSsrOw0KCQkJfQ0KCQkJdW5zZXQoJGVsZW1lbnQsICRlbGVtZW50cyk7DQoJCX0NCgl9DQoN
CglpZighZW1wdHkoJHBvcHVsYXRlKSkgJHsndGhpcycuJHBvcHVsYXRlfSA9ICR0aGlzcG9w
dWxhdGU7DQoJaWYoJHNhdmUpIHsNCgkJaWYoISRmbGF0KSAkZXRjX3F1ZXJ5WyRzYXZlXS0+
ZG9tID0gJiRkb207IGVsc2UgJGV0Y19xdWVyeVskc2F2ZV0tPmRhdGEgPSAmJGRhdGE7DQoJ
CSRldGNfcXVlcnlbJHNhdmVdLT5tYXJrdXAgPSAoJGlzX3htbCA/ICd4bWwnIDogJG1hcmt1
cCk7DQoJfQ0KCWlmICgkb3V0KSBpZighJHNhdmUgfHwgJG5hbWUgIT09IG51bGwpIHsNCgkJ
Ly8gTWFrZSB1cCB0aGUgZmluYWwgb3V0cHV0DQoJCSRmaW5hbG91dCA9ICgkbGFiZWwgPyBk
b0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKSA6ICcnKS4oJHdyYXB0YWcgfHwgJGJyZWFrID8g
ZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFzcywgJycsICcnLCAnJywgJGh0
bWxfaWQpIDogaW1wbG9kZSgkb3V0KSk7DQoJfSBlbHNlICRmaW5hbG91dCA9ICcnOw0KCWVs
c2UgJGZpbmFsb3V0ID0gcGFyc2UoJG9sZFRoaW5nLCBmYWxzZSk7Ly9ub3RoaW5nIGZvdW5k
DQoNCglldGNfY2xlYW51cChudWxsLCAkc2FmZV9jb250ZXh0LCAkc2FmZV9nbG9iYWxzLCAk
c2FmZV9zYW5pdGl6ZSwgJHNhZmVfc3BlY2lhbHMpOw0KCSRlbmR0aW1lID0gbWljcm90aW1l
KFRSVUUpOw0KCWlmKCRkZWJ1ZykgZG1wKCJQcm9jZXNzZWQgaW4gIiAuICgkZW5kdGltZSAt
ICRzdGFydHRpbWUpIC4gIiBzZWNvbmRzLlxuIik7DQoJaWYoJGRlYnVnICYmIGluX2FycmF5
KCdvJywgJGRlYnVnKSkgZG1wKCRmaW5hbG91dCk7DQoJaWYoJG5hbWUpIHtnbG9iYWwgJHZh
cmlhYmxlOyAkdmFyaWFibGVbJG5hbWVdID0gJiRmaW5hbG91dDt9DQoJcmV0dXJuICRuYW1l
ID8gJycgOiAkZmluYWxvdXQ7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiBQ
QVJTRSAqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpmdW5jdGlvbiBldGNfcGFyc2Vf
c3RyaW5nKCRjb250ZW50LCAmJGZsYXQpIHsNCglpZihzdHJwb3MoJGNvbnRlbnQsICd7Jykg
PT09IGZhbHNlKSByZXR1cm4gYXJyYXkoJ3RleHQnID0+ICRjb250ZW50KTsNCglnbG9iYWwg
JGV0Y19xdWVyeV9zcGVjaWFscywgJGV0Y19xdWVyeV9jb250ZXh0Ow0KLy8JJHByZWdfc3Ry
aW5nID0gJy8oXHsoPyFbXHMiXSkoPzpbXnt9XXwoPzEpKStcfSkvVSc7DQoNCgkkY29udGVu
dHMgPSBhcnJheSgpOw0KCSRjb250ZW50c19hcnJheSA9IHByZWdfc3BsaXQoJy8oXHsoPz5b
Xnt9XXwoPzEpKStcfSkvVScsICRjb250ZW50LCBudWxsLCBQUkVHX1NQTElUX0RFTElNX0NB
UFRVUkUpOw0KCSRudW0gPSBjb3VudCgkY29udGVudHNfYXJyYXkpOy8vMm4rMQ0KCSR0ZXh0
ID0gJGNvbnRlbnRzX2FycmF5WzBdOw0KCWZvcigkaSA9IDE7ICRpIDwgJG51bTsgJGkrPTIp
IHsNCgkJJHN0cmluZyA9IHN1YnN0cigkY29udGVudHNfYXJyYXlbJGldLCAxLCAtMSk7DQoJ
CWlmKHN0cnBvcygneyAiJywgJHN0cmluZ1swXSkgIT09IGZhbHNlKSB7DQoJCQkkbCA9IDA7
IHdoaWxlKCRzdHJpbmdbJGxdID09PSAneycpICRsKys7DQoJCQkkY3N0cmluZyA9IGV0Y19w
YXJzZV9zdHJpbmcoJGwgPyBzdWJzdHIoJHN0cmluZywgJGwsIC0kbCkgOiAkc3RyaW5nLCAk
ZmxhdCk7DQoJCQkkbCA9IG1heCgxLCAkbCk7DQoJCQlpZihpc3NldCgkY3N0cmluZ1sndGV4
dCddKSkgJHRleHQgLj0gc3RyX3JlcGVhdCgneycsICRsKS4kY3N0cmluZ1sndGV4dCddLnN0
cl9yZXBlYXQoJ30nLCAkbCk7DQoJCQllbHNlIHskY29udGVudHNbXSA9IGFycmF5KCd0eXBl
JyA9PiAnc3RyaW5nJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICRjc3RyaW5nLCAn
bGV2ZWwnID0+ICRsKTsgJHRleHQgPSAnJzt9DQoJCX0NCgkJZWxzZWlmKCRzdHJpbmdbMF0g
PT09ICc/JyAmJiBzdHJsZW4oJHN0cmluZykgPiAxKSAkdGV4dCAuPSBldGNfcGFyc2VfdmFy
aWFibGUoYXJyYXkoJGNvbnRlbnRzX2FycmF5WyRpXSkpOw0KCQllbHNlIHsNCgkJCXN3aXRj
aCgkc3RyaW5nWzBdKSB7DQoJCQkJY2FzZSAnJCcgOiAkdmFsdWUgPSBldGNfcGFyc2VfZnVu
Y3Rpb24oc3Vic3RyKCRzdHJpbmcsIDEpLCAkZmxhdCk7DQoJCQkJaWYoJHZhbHVlICYmICR2
YWx1ZVswXVsnZnVuYyddID09PSAnQCcpIHsNCgkJCQkJJGNvbnRlbnRzW10gPSBhcnJheSgn
dHlwZScgPT4gJ2RlZmluZScsICd0ZXh0JyA9PiAnJywgJ3ZhbHVlJyA9PiAkdmFsdWVbMF1b
J2FyZ3MnXVswXVswXVsndmFsdWUnXSk7DQoJCQkJCSR2YWx1ZSA9IGFycmF5X3NsaWNlKCR2
YWx1ZSwgMSk7DQoJCQkJfQ0KCQkJCSRjb250ZW50c1tdID0gYXJyYXkoJ3R5cGUnID0+ICdm
dW5jJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICR2YWx1ZSk7ICR0ZXh0ID0gJyc7
IGJyZWFrOw0KCQkJCWNhc2UgJyMnIDogY2FzZSAnPycgOiAkY29udGVudHNbXSA9ICRldGNf
cXVlcnlfc3BlY2lhbHNbJGNvbnRlbnRzX2FycmF5WyRpXV0gPSBhcnJheSgndHlwZScgPT4g
J2ludGVybmFsJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICRzdHJpbmcpOyAkdGV4
dCA9ICcnOyBicmVhazsNCgkJCQljYXNlICclJyA6ICR0ZXh0IC49IHN1YnN0cigkc3RyaW5n
LCAxKTsgYnJlYWs7DQoJCQkJY2FzZSAnIScgOiAkcGFydHMgPSBleHBsb2RlKCd8JywgJHN0
cmluZywgMyk7DQoJCQkJaWYoY291bnQoJHBhcnRzKSA+IDIpIHskc3RyaW5nID0gJHBhcnRz
WzBdLid8Jy4kcGFydHNbMV07ICRmdW5jID0gZXRjX3BhcnNlX2Z1bmN0aW9uKCRwYXJ0c1sy
XSwgJGZsYXQpO30NCgkJCQllbHNlICRmdW5jID0gbnVsbDsNCgkJCQkkY29udGVudHNbXSA9
ICRmdW5jID8gYXJyYXkoJ3R5cGUnID0+ICdmdW5jJywgJ3RleHQnID0+ICR0ZXh0LCAndmFs
dWUnID0+ICRmdW5jLCAndmFyJyA9PiBhcnJheSgneycuJHN0cmluZy4nfScpKSA6IGFycmF5
KCd0eXBlJyA9PiAndmFyJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+IGFycmF5KCRj
b250ZW50c19hcnJheVskaV0pKSA7ICR0ZXh0ID0gJyc7IGJyZWFrOw0KCQkJCWRlZmF1bHQg
OiAkY29udGVudHNbXSA9IGFycmF5KCd0eXBlJyA9PiAneHBhdGgnLCAndGV4dCcgPT4gJHRl
eHQsICd2YWx1ZScgPT4gZXRjX3BhcnNlX3hwYXRoKCRzdHJpbmcsICRmbGF0KSk7ICR0ZXh0
ID0gJyc7DQoJCQl9DQoJCX0NCgkJJHRleHQgLj0gJGNvbnRlbnRzX2FycmF5WyRpKzFdOw0K
CX0NCglpZigkdGV4dCA+ICcnKSAkY29udGVudHNbXSA9IGFycmF5KCd0eXBlJyA9PiAndGV4
dCcsICd0ZXh0JyA9PiAkdGV4dCk7DQoJaWYoY291bnQoJGNvbnRlbnRzKSA9PT0gMSAmJiAk
Y29udGVudHNbMF1bJ3R5cGUnXSA9PT0gJ3RleHQnKSAkY29udGVudHMgPSBhcnJheSgndGV4
dCcgPT4gJGNvbnRlbnRzWzBdWyd0ZXh0J10pOw0KCXJldHVybiAkY29udGVudHM7DQp9DQoN
CmZ1bmN0aW9uIGV0Y19wYXJzZV92YXJpYWJsZSgkdmFsKSB7DQoJZ2xvYmFsICRldGNfcXVl
cnlfY29udGV4dCwgJGV0Y19xdWVyeV9nbG9iYWxzLCAkZXRjX3F1ZXJ5X3Nhbml0aXplLCAk
ZXRjX3F1ZXJ5X3NwZWNpYWxzOw0KCSRwYXQgPSAkdmFsWzBdOw0KCWlmKGlzc2V0KCRldGNf
cXVlcnlfc3BlY2lhbHNbJHBhdF0pKSByZXR1cm4gJGV0Y19xdWVyeV9zcGVjaWFsc1skcGF0
XTsNCglAbGlzdCgkdmFycywgJGRlZiwgJGZvcm1hdCkgPSBleHBsb2RlKCd8Jywgc3Vic3Ry
KCRwYXQsIDIsIC0xKSwgMyk7DQoJaWYoJHZhcnMgPT09ICcnIHx8ICFlbXB0eSgkZXRjX3F1
ZXJ5X2dsb2JhbHMpKSBmb3JlYWNoKGV4cGxvZGUoJywnLCAkdmFycykgYXMgJHZhcikNCgkJ
aWYoJHZhciAhPT0gJycpIHtmb3JlYWNoKCRldGNfcXVlcnlfZ2xvYmFscyBhcyAkZ2xvYmFs
KSBpZihpc3NldCgkR0xPQkFMU1skZ2xvYmFsXVskdmFyXSkgJiYgJEdMT0JBTFNbJGdsb2Jh
bF1bJHZhcl0gIT09ICcnKQ0KCQkJeyR2YWx1ZSA9ICRHTE9CQUxTWyRnbG9iYWxdWyR2YXJd
OyBicmVhayAyO319DQoJCWVsc2UgeyR2YWx1ZSA9IChpc3NldCgkZGVmKSA/ICRkZWYgOiAn
Jyk7ICRnbG9iYWwgPSBudWxsO30NCglpZighaXNzZXQoJHZhbHVlKSkgJHZhbHVlID0gKGlz
c2V0KCRkZWYpID8gJGRlZiA6ICcnKTsNCgllbHNlIHsNCgkJaWYoTUFHSUNfUVVPVEVTX0dQ
QyAmJiAkZ2xvYmFsICYmIGluX2FycmF5KCRnbG9iYWwsICRldGNfcXVlcnlfY29udGV4dFsn
c3RyaXAnXSkpICR2YWx1ZSA9IGRvU3RyaXAoJHZhbHVlKTsNCgkJaWYoIWVtcHR5KCRmb3Jt
YXQpKSB7DQoJCQkkZmxhdCA9IHRydWU7IC8vJGludGVybmFscyA9IG51bGw7DQoJCQlpZiAo
JGZvcm1hdFswXSA9PT0gJyMnKSB7DQoJCQkJJGZvcm1hdCA9IGx0cmltKCRmb3JtYXQsICcj
LicpOyAkdmFsdWUgPSBpc3NldCgkdmFyKSA/ICR2YXIgOiAkdmFsdWU7DQoJCQl9DQoJCQkk
Zm9ybWF0ID0gYXJyYXkoYXJyYXkoJ3R5cGUnID0+ICdmdW5jJywgJ3RleHQnID0+ICcnLCAn
dmFsdWUnID0+IGV0Y19wYXJzZV9mdW5jdGlvbigkZm9ybWF0LCAkZmxhdCkpKTsNCgkJCSR2
YWx1ZSA9IGV0Y19ldmFsdWF0ZV9zdHJpbmcoJGZvcm1hdCwgJHZhbHVlLCBudWxsKTsNCgkJ
fQ0KCQllbHNlaWYoIWVtcHR5KCRldGNfcXVlcnlfc2FuaXRpemVbJGdsb2JhbF0pKSAkdmFs
dWUgPSAkZXRjX3F1ZXJ5X3Nhbml0aXplWyRnbG9iYWxdKCR2YWx1ZSk7DQoJCWVsc2VpZigh
aXNzZXQoJGV0Y19xdWVyeV9zYW5pdGl6ZVskZ2xvYmFsXSkgJiYgIWVtcHR5KCRldGNfcXVl
cnlfc2FuaXRpemVbJyonXSkpICR2YWx1ZSA9ICRldGNfcXVlcnlfc2FuaXRpemVbJyonXSgk
dmFsdWUpOw0KCX0NCglpZigkcGF0WzFdID09PSAnPycpICRldGNfcXVlcnlfc3BlY2lhbHNb
JHBhdF0gPSAkdmFsdWU7DQoJcmV0dXJuICR2YWx1ZTsNCn0NCg0KZnVuY3Rpb24gZXRjX3Bh
cnNlX2Z1bmN0aW9uKCRmb3JtYXQsICYkZmxhdCkgew0KCWdsb2JhbCAkZXRjX3F1ZXJ5X2Nv
bnRleHQ7DQoNCgkkcGlwZSA9ICRldGNfcXVlcnlfY29udGV4dFsnYXJnc2VwJ107DQoJJHJl
cyA9ICRyZXAgPSBhcnJheSgpOw0KCWlmKHN0cnBvcygkZm9ybWF0LCAneycpICE9PSBmYWxz
ZSkgew0KCQkkZm9ybWF0ID0gcHJlZ19zcGxpdCgnLyhceyg/Pltee31dfCg/MSkpKlx9KS9V
JywgJGZvcm1hdCwgbnVsbCwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsvLzJuKzENCgkJ
JGNvdW50ID0gY291bnQoJGZvcm1hdCk7DQoJCWZvcigkaT0xOyAkaTwkY291bnQ7ICRpKz0y
KSB7JHJlcFsneycuJGkuJ30nXSA9ICRmb3JtYXRbJGldOyAkZm9ybWF0WyRpXSA9ICd7Jy4k
aS4nfSc7IH0NCgkJJGZvcm1hdCA9IGltcGxvZGUoJGZvcm1hdCk7DQoJfQ0KLy8nLyhbXlwo
XClcLl0qKD86XChbXlwoXCldKlwpKT8pKD86XC58JCkvVScNCglpZigkZm9ybWF0WzBdID09
PSAnLicpICRmb3JtYXQgPSAnficuJGZvcm1hdDsNCgkkZm9ybWF0ID0gcHJlZ19zcGxpdCgn
LyhbXlwoXClcLl0qKShcKCg/PlteXChcKV18KD8yKSkqXCkpPyg/OlwufCQpLycsICRmb3Jt
YXQsIG51bGwsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSB8IFBSRUdfU1BMSVRfTk9fRU1Q
VFkpOw0KDQoJZm9yZWFjaCgkZm9ybWF0IGFzICRpID0+ICRmb3JtKSB7DQoJCWlmKCRmb3Jt
WzBdICE9PSAnKCcpIHsvL2Z1bmMNCgkJCWlmKGlzc2V0KCRmdW5jKSkgJHJlc1tdID0gYXJy
YXkoJ2Z1bmMnPT4kZnVuYywgJ3JlZic9PiRyZWYsICdhcmdzJz0+JGFyZ3MpOw0KCQkJJGZ1
bmMgPSBsdHJpbSgkZm9ybSk7DQoJCQkkcmVmID0gJGZ1bmNbMF0gPT09ICdAJzsNCgkJCWlm
KCRyZWYpICRmdW5jID0gc3Vic3RyKCRmdW5jLCAxKTsNCgkJCSRhcmdzID0gYXJyYXkoYXJy
YXkoJ3RleHQnID0+ICckJykpOw0KCQkJaWYoJGZ1bmMgIT09ICcnKSBzd2l0Y2goJGZ1bmNb
MF0pIHsNCgkJCQljYXNlICcrJyA6IGNhc2UgJyonIDogY2FzZSAnLScgOiBjYXNlICcvJyA6
IGNhc2UgJyUnIDogY2FzZSAnXicgOg0KCQkJCWlmKHN0cmxlbigkZnVuYykgPiAxKSAkYXJn
c1tdID0gYXJyYXkoJ3RleHQnID0+IGZsb2F0dmFsKHN1YnN0cigkZnVuYywgMSkpKTsgJGZ1
bmMgPSAkZnVuY1swXTsgYnJlYWs7DQoJCQkJY2FzZSAnficgOiBpZihzdHJsZW4oJGZ1bmMp
ID4gMSkgJGFyZ3NbXSA9IGFycmF5KCd0ZXh0JyA9PiBzdWJzdHIoJGZ1bmMsIDEpKTsgJGZ1
bmMgPSAkZnVuY1swXTsgYnJlYWs7DQoJCQkJY2FzZSAnPScgOiBjYXNlICc+JyA6IGNhc2Ug
JzwnIDogY2FzZSAnPycgOiBpZihzdHJsZW4oJGZ1bmMpID4gMSkgJGFyZ3NbXSA9IGFycmF5
KCd0ZXh0JyA9PiBsdHJpbShzdWJzdHIoJGZ1bmMsIDEpKSk7ICRmdW5jID0gJGZ1bmNbMF07
IGJyZWFrOw0KCQkJCWNhc2UgJyQnIDogaWYoJGkpIHskYXJnc1tdID0gYXJyYXkoJ3RleHQn
ID0+ICRmdW5jID09PSAnJCcgPyAnJyA6ICRmdW5jKTsgJGZ1bmMgPSAnJCc7fQ0KCQkJCWVs
c2UgeyRhcmdzID0gYXJyYXkoYXJyYXkoJ3RleHQnID0+ICcnKSwgYXJyYXkoJ3RleHQnID0+
ICRmdW5jKSk7ICRmdW5jID0gJ34nO30NCgkJCQlicmVhazsNCgkJCQlkZWZhdWx0IDogJGZ1
bmMgPSB0cmltKCRmdW5jKTsNCgkJCQlpZighJGV0Y19xdWVyeV9jb250ZXh0WydwaHAnXSAm
JiAhaW5fYXJyYXkoJGZ1bmMsIGFycmF5KCdkYXRlJywgJ3RleHRpbGUnKSkpICRmdW5jID0g
Jyc7DQoJCQkJaWYoJGZ1bmMgPT09ICd0ZXh0aWxlJykgew0KCQkJCQkkZnVuYyA9ICdUZXh0
aWxlLT5UZXh0aWxlVGhpcyc7DQoJCQkJfQ0KCQkJCWlmIChzdHJwb3MoJGZ1bmMsICc6Oicp
KSAkZnVuYyA9IGV4cGxvZGUoJzo6JywgJGZ1bmMpOw0KCQkJCWVsc2VpZihzdHJwb3MoJGZ1
bmMsICctPicpKSB7DQoJCQkJCSRmdW5jID0gZXhwbG9kZSgnLT4nLCAkZnVuYyk7DQoJCQkJ
CWlmKHN0cnRvbG93ZXIoJGZ1bmNbMF0pID09PSAndGV4dGlsZScpIGluY2x1ZGVfb25jZSh0
eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCcpOw0KCQkJCQlpZiAoY2xhc3NfZXhpc3Rz
KCRmdW5jWzBdKSkgJGZ1bmNbMF0gPSBuZXcgJGZ1bmNbMF07DQoJCQkJfQ0KCQkJCWlmKCFp
c19jYWxsYWJsZSgkZnVuYykpIHVuc2V0KCRmdW5jLCAkcmVmKTsNCgkJCX0gZWxzZSB1bnNl
dCgkZnVuYywgJHJlZik7DQoJCX0gZWxzZSB7Ly9hcmdzDQoJCQkkYXJnc19saXN0ID0gc3Vi
c3RyKCRmb3JtLCAxLCAtMSk7DQoJCQlpZighaXNzZXQoJGZ1bmMpKSB7DQoJCQkJaWYoISRp
KSB7DQoJCQkJCSRmdW5jID0gJ0AnOyAkcmVmID0gZmFsc2U7DQoJCQkJCSRhcmdzID0gYXJy
YXkoYXJyYXkoYXJyYXkoJ3R5cGUnID0+ICd4cGF0aCcsICd0ZXh0JyA9PiAnJywgJ3ZhbHVl
JyA9PiBldGNfcGFyc2VfeHBhdGgoJGFyZ3NfbGlzdCwgJGZsYXQpKSkpOw0KCQkJCX0NCgkJ
CQljb250aW51ZTsNCgkJCX0NCgkJCWlmKCRmdW5jICE9PSAnPycgJiYgY291bnQoJGFyZ3Mp
IDwgMikgJGFyZ3MgPSBhcnJheSgpOw0KCQkJaWYoJGFyZ3NfbGlzdCAhPT0gJycpIGZvcmVh
Y2goZXhwbG9kZSgkcGlwZSwgJGFyZ3NfbGlzdCkgYXMgJGFyZykgJGFyZ3NbXSA9ICRyZXAg
PyBldGNfcGFyc2Vfc3RyaW5nKHN0cnRyKCRhcmcsICRyZXApLCAkZmxhdCkgOiBhcnJheSgn
dGV4dCcgPT4gJGFyZyk7DQoJCQlpZigkZnVuYyA9PT0gJz8nKSAkYXJncyA9IGFycmF5X3Ns
aWNlKCRhcmdzLCAtMyk7DQoJCX0NCgl9DQoJaWYoaXNzZXQoJGZ1bmMpKSAkcmVzW10gPSBh
cnJheSgnZnVuYyc9PiRmdW5jLCAncmVmJz0+JHJlZiwgJ2FyZ3MnPT4kYXJncyk7DQoJcmV0
dXJuICRyZXM7DQp9DQoNCmZ1bmN0aW9uIGV0Y19wYXJzZV94cGF0aCgkcGF0dGVybiwgJiRm
bGF0KSB7DQoJZ2xvYmFsICRldGNfcXVlcnlfY29udGV4dCwgJGV0Y19xdWVyeV9nbG9iYWxz
Ow0KDQoJJGZ1bmMgPSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ2Z1bmN0aW9ucyddOw0KDQoJQGxp
c3QoJHBhdGgsICR2YWwpID0gZXhwbG9kZSgnQEAnLCAkcGF0dGVybiwgMik7DQoNCglpZihp
c3NldCgkdmFsKSkgew0KCQkkcGFpcnMgPSBwcmVnX3NwbGl0KCcvKCg/PlteXFtcXSgpe31d
fFtcW1woXHtdKD8xKSpbXF1cKVx9XSkrKUAvVScsICR2YWwsIG51bGwsIFBSRUdfU1BMSVRf
Tk9fRU1QVFkgfCBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkkZmxhdCA9IGZhbHNl
Ow0KCQkkdmFsID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkcGFpcnMgYXMgJHBhaXIpIHsNCgkJ
CUBsaXN0KCRuYW1lLCAkYXZhbCkgPSBleHBsb2RlKCc9JywgJHBhaXIsIDIpOw0KCQkJaWYo
JG5hbWUgPiAnJykgJHZhbFskbmFtZV0gPSAkYXZhbDsNCgkJfQ0KCX0gZWxzZSB7DQoJCUBs
aXN0KCRwYXRoLCAkdmFsKSA9IHByZWdfc3BsaXQoJy9eKCg/PlteXFtcXSgpe31dfFtcW1wo
XHtdKD8xKSpbXF1cKVx9XSkrKT0oLiopJC9zRFUnLCAkcGF0dGVybiwgMiwgUFJFR19TUExJ
VF9ERUxJTV9DQVBUVVJFIHwgUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWlmKCFpc3NldCgk
dmFsKSAmJiBzdHJsZW4oJHBhdGgpIDwgc3RybGVuKCRwYXR0ZXJuKSkgJHZhbCA9ICcnOw0K
CX0NCg0KCWlmKCRwYXRoICE9PSAnJyAmJiBzdHJwb3MoJzo/IyteJH4mLycsIHN1YnN0cigk
cGF0aCwgLTEpKSAhPT0gZmFsc2UpIHsNCgkJJG1vZGUgPSBzdWJzdHIoJHBhdGgsIC0xKTsg
JHBhdGggPSBzdWJzdHIoJHBhdGgsIDAsIC0xKTsNCgl9IGVsc2UgJG1vZGUgPSAnLic7DQoJ
aWYoJG1vZGUgIT09ICc/JykgJGZsYXQgPSBmYWxzZTsNCglpZigkcGF0aCA9PT0gJycpICRw
YXRoID0gJy4nOw0KCWVsc2VpZigkZXRjX3F1ZXJ5X2dsb2JhbHMpICRwYXRoID0gcHJlZ19y
ZXBsYWNlX2NhbGxiYWNrKEVUQ19QUkVHX1NQRUMsICdldGNfcGFyc2VfdmFyaWFibGUnLCAk
cGF0aCk7DQoJaWYoaXNzZXQoJHZhbCkgJiYgIWlzX2FycmF5KCR2YWwpKSAkdmFsID0gYXJy
YXkoJG1vZGUgPT4gJHZhbCk7DQoNCgkkYXR0cl9hcnJheSA9IGFycmF5KCk7DQoNCglpZigh
ZW1wdHkoJHZhbCkpIGZvcmVhY2goJHZhbCBhcyAkYXR0cj0+JHZhbHVlKSBpZigkYXR0ciAh
PT0gJyYnKSB7DQoJCSRyZXBbJ2F0dHInXSA9ICRldGNfcXVlcnlfZ2xvYmFscyA/IHByZWdf
cmVwbGFjZV9jYWxsYmFjayhFVENfUFJFR19TUEVDLCAnZXRjX3BhcnNlX3ZhcmlhYmxlJywg
JGF0dHIpIDogJGF0dHI7DQoJCSRyZXBbJ3ZhbHVlJ10gPSAkdmFsdWUgPT09IG51bGwgPyBu
dWxsIDogZXRjX3BhcnNlX3N0cmluZygkdmFsdWUsICRmbGF0KTsNCgkJJGF0dHJfYXJyYXlb
XSA9ICRyZXA7DQovLwkJdW5zZXQoJHJlcCk7DQoJfSBlbHNlaWYoJHZhbHVlICE9PSBudWxs
KSB7JGxhc3RbJ2F0dHInXSA9ICcmJzsgJGxhc3RbJ3ZhbHVlJ10gPSBldGNfcGFyc2Vfc3Ry
aW5nKCR2YWx1ZSwgJGZsYXQpO30NCglpZihpc3NldCgkbGFzdCkpICRhdHRyX2FycmF5W10g
PSAkbGFzdDsNCgl1bnNldCgkcGF0dGVybik7DQoJJHBhdHRlcm5bJ3BhdGgnXSA9ICRmdW5j
ID8gcHJlZ19yZXBsYWNlKCcvXGIoJy4kZnVuYy4nKVxzKlwoLycsICJwaHA6ZnVuY3Rpb24o
JyQxJywiLCAkcGF0aCkgOiAkcGF0aDsNCgkkcGF0dGVyblsnbW9kZSddID0gJG1vZGU7DQoJ
JHBhdHRlcm5bJ3ZhbHVlJ10gPSAkYXR0cl9hcnJheTsNCg0KCWlmKCRmbGF0ICYmICRwYXRo
ICE9PSAnLycpIGlmKHN0cnBvcygkcGF0aCwgJy8vJykgIT09IGZhbHNlKSAkZmxhdCA9IGZh
bHNlOyBlbHNlIHsNCgkJJG1hdGNoZXMgPSBleHBsb2RlKCcvJywgJHBhdGgpOw0KCQlmb3Jl
YWNoKCRtYXRjaGVzIGFzICRtYXRjaCkgaWYoJG1hdGNoICE9PSAnKicgJiYgJG1hdGNoICE9
PSAnLicgJiYgcHJlZ19tYXRjaCgnL1tcKFwpXFtcXVwuOkBdLycsICRtYXRjaCkpIHsNCgkJ
CSRmbGF0ID0gZmFsc2U7IGJyZWFrOw0KCQl9DQoJCWlmKCRmbGF0KSAkcGF0dGVyblsnYXJy
YXknXSA9IGFycmF5X2RpZmYoJG1hdGNoZXMsIGFycmF5KCcuJykpOw0KCX0NCglyZXR1cm4g
JHBhdHRlcm47DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFVkFMVUFURSAq
KioqKioqKioqKioqKioqKioqKioqKioqLw0KDQpmdW5jdGlvbiBldGNfZXZhbHVhdGVfc3Ry
aW5nKCYkY29udGVudHMsICYkZWxlbWVudCwgJGludGVybmFscywgJGZsYXQ9dHJ1ZSkgew0K
CWlmKGlzc2V0KCRjb250ZW50c1sndGV4dCddKSkgcmV0dXJuICRjb250ZW50c1sndGV4dCdd
Ow0KCWdsb2JhbCAkZXRjX3F1ZXJ5X2NvbnRleHQsICRldGNfcXVlcnlfc2FuaXRpemUsICRl
dGNfcXVlcnlfc3BlY2lhbHM7DQoNCgkkd3JhcCA9ICRmbGF0ID09PSAyOw0KCSRyZXMgPSAk
d3JhcCA/IGFycmF5KCkgOiAnJzsNCgkkZGVmaW5lcyA9IGFycmF5KCk7DQoJaWYoISRmbGF0
KSB7DQoJCSRpc194bWwgPSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ3htbCddOw0KCQkkZG9tID0g
JGVsZW1lbnQtPm93bmVyRG9jdW1lbnQ7DQoJfQ0KDQoJZm9yZWFjaCgkY29udGVudHMgYXMg
JGNvbnRlbnQpIHsNCgkJaWYoISR3cmFwKSAkcmVzIC49ICRjb250ZW50Wyd0ZXh0J107DQoJ
CXN3aXRjaCgkY29udGVudFsndHlwZSddKSB7DQoJCQljYXNlICd0ZXh0JyA6IGJyZWFrOw0K
DQoJCQljYXNlICdpbnRlcm5hbCcgOiAkcmVzIC49IChpc3NldCgkaW50ZXJuYWxzWyd7Jy4k
Y29udGVudFsndmFsdWUnXS4nfSddKSA/ICRpbnRlcm5hbHNbJ3snLiRjb250ZW50Wyd2YWx1
ZSddLid9J10gOiAkY29udGVudFsndmFsdWUnXSk7IGJyZWFrOw0KDQoJCQljYXNlICd2YXIn
IDogJHJlcyAuPSBldGNfcGFyc2VfdmFyaWFibGUoJGNvbnRlbnRbJ3ZhbHVlJ10pOyBicmVh
azsNCg0KCQkJY2FzZSAnc3RyaW5nJyA6ICRsID0gIWVtcHR5KCRjb250ZW50WydsZXZlbCdd
KSA/ICRjb250ZW50WydsZXZlbCddIDogMDsNCgkJCSRyZXMgLj0gc3RyX3JlcGVhdCgneycs
ICRsKS5ldGNfZXZhbHVhdGVfc3RyaW5nKCRjb250ZW50Wyd2YWx1ZSddLCAkZWxlbWVudCwg
JGludGVybmFscywgJGZsYXQpLnN0cl9yZXBlYXQoJ30nLCAkbCk7IGJyZWFrOw0KDQoJCQlj
YXNlICdmdW5jJyA6IGlmKCFlbXB0eSgkdW5kZWZpbmVkKSkge3Vuc2V0KCR1bmRlZmluZWQp
OyBicmVhazt9DQoJCQkkdmFsID0gaXNzZXQoJGNvbnRlbnRbJ3ZhciddKSA/IGV0Y19wYXJz
ZV92YXJpYWJsZSgkY29udGVudFsndmFyJ10pIDogKGlzc2V0KCRkZWZpbmUpID8gJGRlZmlu
ZSA6ICgkZmxhdCA/ICRlbGVtZW50IDogJGVsZW1lbnQtPm5vZGVWYWx1ZSkpOw0KCQkJdW5z
ZXQoJGRlZmluZSk7DQoJCQlpZihlbXB0eSgkY29udGVudFsndmFsdWUnXSkpIHskcmVzIC49
ICR2YWw7IGJyZWFrO30NCgkJCWZvcmVhY2goJGNvbnRlbnRbJ3ZhbHVlJ10gYXMgJGZvcm0p
IHsNCgkJCQkkZnVuYyA9ICRmb3JtWydmdW5jJ107DQoJCQkJJHJlZiA9ICRmb3JtWydyZWYn
XTsNCgkJCQkkYXJncyA9IGFycmF5KCk7DQoJCQkJaWYoJGhhc19hcmdzID0gY291bnQoJGZv
cm1bJ2FyZ3MnXSkpIHsNCgkJCQkJZm9yZWFjaCgkZm9ybVsnYXJncyddIGFzICRrZXkgPT4g
JGFyZykgew0KCQkJCQkJaWYoISRrZXkgfHwgJGZ1bmMgIT09ICc/JyB8fCAka2V5ID09PSAo
JGFyZ3NbMF0gPyAxIDogMikpDQoJCQkJCQkJJGFyZyA9IGlzc2V0KCRhcmdbJ3RleHQnXSkg
PyAkYXJnWyd0ZXh0J10gOiBldGNfZXZhbHVhdGVfc3RyaW5nKCRhcmcsICRlbGVtZW50LCAk
aW50ZXJuYWxzLCAkZmxhdCk7DQoJCQkJCQllbHNlICRhcmcgPSAnJzsNCgkJCQkJCWlmKCRh
cmcgPT09ICckJykgJGFyZ3NbXSA9JiAkdmFsOw0KCQkJCQkJZWxzZWlmKCRhcmcgJiYgJGFy
Z1swXSA9PT0gJyQnICYmIGlzc2V0KCRkZWZpbmVzWyRhcmddKSkgJGFyZ3NbXSA9JiAkZGVm
aW5lc1skYXJnXTsNCgkJCQkJCWVsc2UgJGFyZ3NbXSA9ICRhcmc7DQoJCQkJCX0NCgkJCQl9
DQoJCQkJc3dpdGNoKCRmdW5jKSB7DQoJCQkJCWNhc2UgJyQnIDogaWYoJGFyZ3NbMV0gIT09
ICcnKSAkZGVmaW5lc1skYXJnc1sxXV0gPSAkdmFsOyBlbHNlICR2YWwgPSAnJzsgYnJlYWs7
IC8vJGFyZ3NbMF09JyQnDQoJCQkJCWNhc2UgJ34nIDogJHZhbCA9IGlzX2FycmF5KCRhcmdz
WzBdKSA/IGltcGxvZGUoJGhhc19hcmdzID4gMSA/ICRhcmdzWzFdIDogJycsICRhcmdzWzBd
KSA6IGltcGxvZGUoJGFyZ3MpOyBicmVhazsNCgkJCQkJY2FzZSAnKycgOiAkdmFsID0gYXJy
YXlfc3VtKCRhcmdzKTsgYnJlYWs7DQoJCQkJCWNhc2UgJyonIDogJHZhbCA9IGFycmF5X3By
b2R1Y3QoJGFyZ3MpOyBicmVhazsNCgkJCQkJY2FzZSAnLScgOiAkdmFsID0gMiokYXJnc1sw
XSAtIGFycmF5X3N1bSgkYXJncyk7IGJyZWFrOw0KCQkJCQljYXNlICcvJyA6ICR2YWwgPSAk
YXJnc1swXSA/ICRhcmdzWzBdKiRhcmdzWzBdIC8gYXJyYXlfcHJvZHVjdCgkYXJncykgOiAw
OyBicmVhazsNCgkJCQkJY2FzZSAnJScgOiAkdmFsID0gJGFyZ3NbMF0gJSAkYXJnc1sxXTsg
YnJlYWs7DQoJCQkJCWNhc2UgJ14nIDogJHZhbCA9IHBvdygkYXJnc1swXSwgJGFyZ3NbMV0p
OyBicmVhazsNCgkJCQkJY2FzZSAnPycgOiBzd2l0Y2goJGhhc19hcmdzKSB7DQoJCQkJCQlj
YXNlIDAgOiBicmVhazsNCgkJCQkJCWNhc2UgMSA6ICR2YWwgPSAoJGFyZ3NbMF0gPyAnMScg
OiAnMCcpOyBicmVhazsNCgkJCQkJCWRlZmF1bHQgOiAkdmFsID0gIWVtcHR5KCRhcmdzWzBd
KSA/ICRhcmdzWzFdIDogKGlzc2V0KCRhcmdzWzJdKSA/ICRhcmdzWzJdIDogJycpOw0KCQkJ
CQl9IGJyZWFrOw0KCQkJCQljYXNlICc9JyA6IHN3aXRjaCgkaGFzX2FyZ3MpIHsNCgkJCQkJ
CWNhc2UgMCA6IGNhc2UgMSA6IGJyZWFrOw0KCQkJCQkJY2FzZSAyIDogJHZhbCA9ICgkYXJn
c1swXSA9PSAkYXJnc1sxXSA/ICcxJyA6ICcwJyk7IGJyZWFrOw0KCQkJCQkJZGVmYXVsdCA6
ICR2YWwgPSBjb3VudChhcnJheV91bmlxdWUoJGFyZ3MpKTw9MSA/ICcxJyA6ICcwJzsNCgkJ
CQkJfSBicmVhazsNCgkJCQkJY2FzZSAnPCcgOiBjYXNlICc+JyA6IGlmKCRoYXNfYXJncyA+
IDEpIHsNCgkJCQkJCSR2YWwgPSAoJGZ1bmMgPT09ICc8JyA/ICgkYXJnc1swXSA8ICRhcmdz
WzFdID8gJzEnIDogJzAnKSA6ICgkYXJnc1swXSA+ICRhcmdzWzFdID8gJzEnIDogJzAnKSk7
DQoJCQkJCX0gYnJlYWs7DQoJCQkJCWNhc2UgJ2RhdGUnIDogaWYoJGhhc19hcmdzKSAkdmFs
ID0gZGF0ZSgkYXJnc1swXSwgc3RydG90aW1lKGlzc2V0KCRhcmdzWzFdKSA/ICRhcmdzWzFd
IDogJHZhbCkpOyBicmVhazsNCi8vCQkJCQljYXNlICdlc2NhcGUnIDogJHZhbCA9IGRvU2xh
c2goJHZhbCk7IGJyZWFrOw0KCQkJCQlkZWZhdWx0IDogJG5ld3ZhbCA9IGNhbGxfdXNlcl9m
dW5jX2FycmF5KCRmdW5jLCAkYXJncyk7DQoJCQkJCWlmKCEkcmVmKSAkdmFsID0gJG5ld3Zh
bDsNCgkJCQl9DQoJCQl9DQoJCQkkcmVzIC49ICR2YWw7IGJyZWFrOw0KDQoJCQlkZWZhdWx0
IDogaWYoISRmbGF0KSB7DQoJCQkJJHZhbHVlID0gJyc7DQoJCQkJJGluZCA9IGlzc2V0KCRl
dGNfcXVlcnlfc3BlY2lhbHNbJ3sjI30nXSkgPyAxIDogMDsNCgkJCQkkbm9kZXMgPSAkZXRj
X3F1ZXJ5X2NvbnRleHRbJ3hwYXRoJ10tPmV2YWx1YXRlKCRpbnRlcm5hbHMgPyBzdHJ0cigk
Y29udGVudFsndmFsdWUnXVsncGF0aCddLCAkaW50ZXJuYWxzKSA6ICRjb250ZW50Wyd2YWx1
ZSddWydwYXRoJ10sICRlbGVtZW50KTsNCgkJCQlpZiAoISgkbm9kZXMgaW5zdGFuY2VvZiBE
T01Ob2RlTGlzdCkpICR2YWx1ZSA9ICRub2RlczsNCgkJCQllbHNlIGZvcmVhY2goJG5vZGVz
IGFzICRub2RlKQ0KCQkJCXsNCgkJCQkJaWYoJGluZCkgJGludGVybmFsc1sneyMjfSddID0g
JGluZCsrOw0KCQkJCQkkb3V0ID0gZW1wdHkoJGNvbnRlbnRbJ3ZhbHVlJ11bJ3ZhbHVlJ10p
ID8gZmFsc2UgOiBldGNfcHJvY2Vzc19ub2RlKCRjb250ZW50Wyd2YWx1ZSddWyd2YWx1ZSdd
LCAkbm9kZSwgJGludGVybmFscywgZmFsc2UpOw0KCQkJCQkkdmFsdWUgLj0gJG91dCA/ICRv
dXQgOiAoJGNvbnRlbnRbJ3ZhbHVlJ11bJ21vZGUnXSA9PT0gJz8nID8gJG5vZGUtPm5vZGVW
YWx1ZSA6ICgkY29udGVudFsndmFsdWUnXVsnbW9kZSddID09PSAnIycgPyAkbm9kZS0+bm9k
ZU5hbWUgOiAoISRpc194bWwgPyAkZG9tLT5zYXZlSFRNTCgkbm9kZSkgOiAkZG9tLT5zYXZl
WE1MKCRub2RlKSkpKTsNCgkJCQl9DQoJCQkJaWYoJGNvbnRlbnRbJ3R5cGUnXSAhPT0gJ2Rl
ZmluZScpICRyZXMgLj0gJHZhbHVlOyBlbHNlICRkZWZpbmUgPSAkdmFsdWU7DQoJCQl9IGVs
c2Ugey8vZmxhdA0KCQkJCSR2YWx1ZSA9ICRlbGVtZW50OyAkY2h1bms9Jyc7DQoJCQkJaWYo
IWVtcHR5KCRjb250ZW50Wyd2YWx1ZSddWydhcnJheSddKSkgZm9yZWFjaCgkY29udGVudFsn
dmFsdWUnXVsnYXJyYXknXSBhcyAka2V5ID0+ICRjaHVuaykNCgkJCQl7DQoJCQkJCWlmKCRj
aHVuayAhPT0gJyonKQ0KCQkJCQkJaWYoaXNzZXQoJHZhbHVlWyRjaHVua10pKSAkdmFsdWUg
PSAkdmFsdWVbJGNodW5rXTsNCgkJCQkJCWVsc2Uge3Vuc2V0KCR2YWx1ZSk7IGJyZWFrO30N
CgkJCQkJZWxzZSB7DQoJCQkJCQkkcXVlcnkgPSBhcnJheShhcnJheSgndHlwZScgPT4gJ3hw
YXRoJywgJ3RleHQnID0+ICcnLCAndmFsdWUnID0+IGFycmF5KCdwYXRoJyA9PiAnLicsICdt
b2RlJyA9PiAnPycsICdhcnJheScgPT4gYXJyYXlfc2xpY2UoJGNvbnRlbnRbJ3ZhbHVlJ11b
J2FycmF5J10sICRrZXkgKyAxKSwgJ3ZhbHVlJyA9PiAkY29udGVudFsndmFsdWUnXVsndmFs
dWUnXSkpKTsNCgkJCQkJCSRpbmQgPSBpc3NldCgkZXRjX3F1ZXJ5X3NwZWNpYWxzWyd7IyN9
J10pID8gMSA6IDA7DQoJCQkJCQlmb3JlYWNoKCR2YWx1ZSBhcyAkayA9PiAkdmFsKSB7DQoJ
CQkJCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFsc1sneyN9J10pKSAkaW50ZXJuYWxz
Wyd7I30nXSA9ICRrOw0KCQkJCQkJCWlmKCRpbmQpICRpbnRlcm5hbHNbJ3sjI30nXSA9ICRp
bmQrKzsNCgkJCQkJCQkkbmV3cmVzID0gZXRjX2V2YWx1YXRlX3N0cmluZygkcXVlcnksICR2
YWwsICRpbnRlcm5hbHMsICRmbGF0KTsNCgkJCQkJCQlpZigkd3JhcCkgZm9yZWFjaCgkbmV3
cmVzIGFzICRyb3cpICRyZXNbXSA9ICRyb3c7DQoJCQkJCQkJZWxzZSAkcmVzIC49ICRuZXdy
ZXM7DQoJCQkJCQl9DQoJCQkJCQl1bnNldCgkdmFsdWUpOyBicmVhazsNCgkJCQkJfQ0KCQkJ
CX0NCgkJCQlpZihpc3NldCgkdmFsdWUpKSB7DQoJCQkJCWlmKCFlbXB0eSgkY29udGVudFsn
dmFsdWUnXVsndmFsdWUnXSkpIGV0Y19wcm9jZXNzX25vZGUoJGNvbnRlbnRbJ3ZhbHVlJ11b
J3ZhbHVlJ10sICR2YWx1ZSwgJGludGVybmFscyk7DQoJCQkJCWVsc2VpZighJHdyYXApDQoJ
CQkJCQlpZihpc3NldCgkZXRjX3F1ZXJ5X3Nhbml0aXplWyRjaHVuay4nPyddKSkge2lmKCRl
dGNfcXVlcnlfc2FuaXRpemVbJGNodW5rLic/J10pICR2YWx1ZSA9ICRldGNfcXVlcnlfc2Fu
aXRpemVbJGNodW5rLic/J10oJHZhbHVlKTt9DQoJCQkJCQllbHNlaWYoIWVtcHR5KCRldGNf
cXVlcnlfc2FuaXRpemVbJz8nXSkpICR2YWx1ZSA9ICRldGNfcXVlcnlfc2FuaXRpemVbJz8n
XSgkdmFsdWUpOw0KCQkJCQlpZigkY29udGVudFsndHlwZSddICE9PSAnZGVmaW5lJykgaWYo
JHdyYXApICRyZXNbXSA9ICR2YWx1ZTsgZWxzZSAkcmVzIC49ICR2YWx1ZTsNCgkJCQkJZWxz
ZSAkZGVmaW5lID0gJHZhbHVlOw0KCQkJCX0gZWxzZWlmKCRjb250ZW50Wyd0eXBlJ10gPT09
ICdkZWZpbmUnKSAkdW5kZWZpbmVkID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4g
JHJlczsNCn0NCg0KZnVuY3Rpb24gZXRjX3Byb2Nlc3Nfbm9kZSgmJGF0dHIsICYkbm9kZSwg
JGludGVybmFscz1udWxsLCAkZmxhdD10cnVlLCAkcmVtb3ZlPWZhbHNlKSB7DQoJaWYoJGZs
YXQpIHsNCgkJaWYoZW1wdHkoJGF0dHIpICYmICRyZW1vdmUpICRub2RlID0gbnVsbDsNCgkJ
ZWxzZSBmb3JlYWNoKCRhdHRyIGFzICR2YWwpIGlmKCR2YWxbJ2F0dHInXSA9PT0gJy4nIHx8
ICR2YWxbJ2F0dHInXSA9PT0gJz8nKSB7DQoJCQlpZihpc3NldCgkaW50ZXJuYWxzWyd7P30n
XSkpICRpbnRlcm5hbHNbJ3s/fSddID0gJG5vZGU7DQoJCQkkbm9kZSA9IGV0Y19ldmFsdWF0
ZV9zdHJpbmcoJHZhbFsndmFsdWUnXSwgJG5vZGUsICRpbnRlcm5hbHMsICRmbGF0KTsNCgkJ
fQ0KCQlyZXR1cm47DQoJfQ0KDQoJZ2xvYmFsICRldGNfcXVlcnlfY29udGV4dDsNCg0KLy8J
JHNlbGZfcGF0aCA9IGFycmF5KCcuJywgJz8nLCAnIycsICcrJywgJ14nLCAnJCcsICd+Jywg
JyYnLCAnLycpOw0KCSRpc19hdHRyID0gKCRub2RlLT5ub2RlVHlwZSA9PT0gWE1MX0FUVFJJ
QlVURV9OT0RFKTsNCglpZihlbXB0eSgkYXR0cikgJiYgJHJlbW92ZSkgew0KCQlpZigkaXNf
YXR0cikgJG5vZGUtPm93bmVyRWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlTm9kZSgkbm9kZSk7
DQoJCWVsc2UgJG5vZGUtPnBhcmVudE5vZGUtPnJlbW92ZUNoaWxkKCRub2RlKTsNCgl9DQoJ
ZWxzZSBmb3JlYWNoKCRhdHRyIGFzICR2YWwpIHsNCi8vCQl1bnNldCgkbmFtZSk7DQoJCSRz
ZWxmID0gc3RycG9zKCcuPyMrXiR+Ji8nLCAkdmFsWydhdHRyJ10pICE9PSBmYWxzZTsvL2lu
X2FycmF5KCR2YWxbJ2F0dHInXSwgJHNlbGZfcGF0aCk7DQoJCWlmKCFpc3NldCgkdmFsWyd2
YWx1ZSddKSkge2lmKCEkc2VsZiAmJiAhJGlzX2F0dHIpICRub2RlLT5yZW1vdmVBdHRyaWJ1
dGUoJHZhbFsnYXR0ciddKTt9DQoJCWVsc2Ugew0KCQkJaWYoaXNzZXQoJGludGVybmFsc1sn
ez99J10pKSAkaW50ZXJuYWxzWyd7P30nXSA9ICRzZWxmIHx8ICRpc19hdHRyID8gJG5vZGUt
Pm5vZGVWYWx1ZSA6ICRub2RlLT5nZXRBdHRyaWJ1dGUoJHZhbFsnYXR0ciddKTsNCgkJCWlm
KGlzc2V0KCRpbnRlcm5hbHNbJ3sjfSddKSkgJGludGVybmFsc1sneyN9J10gPSAkc2VsZiB8
fCAkaXNfYXR0ciA/ICRub2RlLT5ub2RlTmFtZSA6ICR2YWxbJ2F0dHInXTsNCgkJCSR2YWx1
ZSA9IGlzc2V0KCR2YWxbJ3ZhbHVlJ11bJ3RleHQnXSkgPyAkdmFsWyd2YWx1ZSddWyd0ZXh0
J10gOiBldGNfZXZhbHVhdGVfc3RyaW5nKCR2YWxbJ3ZhbHVlJ10sICRub2RlLCAkaW50ZXJu
YWxzLCAkZmxhdCk7DQoJCQlzd2l0Y2goJHZhbFsnYXR0ciddKSB7DQoJCQkJY2FzZSAnJicg
OiBpZighJHJlbW92ZSkgcmV0dXJuICR2YWx1ZTsNCgkJCQljYXNlICcuJyA6IGNhc2UgJysn
IDogY2FzZSAnXicgOiBjYXNlICckJyA6IGlmKCEkaXNfYXR0cikgew0KCQkJCQlpZihzdHJw
b3MoJHZhbHVlLCAnPCcpID09PSBmYWxzZSkNCgkJCQkJCWlmKCR2YWxbJ2F0dHInXSAhPT0g
Jy4nKSAkZiA9ICRub2RlLT5vd25lckRvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZSgkdmFsdWUp
Ow0KCQkJCQkJZWxzZSB7JG5vZGUtPm5vZGVWYWx1ZSA9ICR2YWx1ZTsgYnJlYWs7fQ0KCQkJ
CQllbHNlIHsNCgkJCQkJCSRlbmNvZGluZyA9ICRldGNfcXVlcnlfY29udGV4dFsnZW5jb2Rp
bmcnXTsNCgkJCQkJCSRpc194bWwgPSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ3htbCddOw0KCQkJ
CQkJaWYoISRpc194bWwpICR2YWx1ZSA9IHByZWdfcmVwbGFjZSgnLzwoKD86YXJlYXxiYXNl
fGJyfGNvbHxjb21tYW5kfGVtYmVkfGhyfGltZ3xpbnB1dHxrZXlnZW58bGlua3xtZXRhfHBh
cmFtfHNvdXJjZXx0cmFja3x3YnIpXGJbXj5dKikoPzwhXC8pPi9pVScsICc8JDEgLz4nLCAk
dmFsdWUpOw0KCQkJCQkJaWYoISRpc194bWwgJiYgc3RycG9zKCR2YWx1ZSwgJyYnKSAhPT0g
ZmFsc2UpIHsNCgkJCQkJCQlpZighaXNzZXQoJGV0Y19xdWVyeV9jb250ZXh0WydkZWNvZGUn
XSkpICRldGNfcXVlcnlfY29udGV4dFsnZGVjb2RlJ10gPSBhcnJheV9mbGlwKGFycmF5X2Rp
ZmYoZ2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGUoSFRNTF9FTlRJVElFUywgRU5UX0NPTVBB
VCwgJGVuY29kaW5nKSwgZ2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGUoSFRNTF9TUEVDSUFM
Q0hBUlMsIEVOVF9DT01QQVQsICRlbmNvZGluZykpKTsNCgkJCQkJCQkkdmFsdWUgPSBzdHJ0
cigkdmFsdWUsICRldGNfcXVlcnlfY29udGV4dFsnZGVjb2RlJ10pOw0KCQkJCQkJfQ0KCQkJ
CQkJJGYgPSAkbm9kZS0+b3duZXJEb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
Ow0KCQkJCQkJJGYtPmFwcGVuZFhNTCgkdmFsdWUpOw0KCQkJCQl9DQoJCQkJCWlmKCR2YWxb
J2F0dHInXSA9PT0gJy4nKSAkbm9kZS0+bm9kZVZhbHVlID0gbnVsbDsNCgkJCQkJaWYoJHZh
bFsnYXR0ciddID09PSAnJicpICRub2RlLT5wYXJlbnROb2RlLT5yZXBsYWNlQ2hpbGQoJGYs
ICRub2RlKTsNCgkJCQkJZWxzZWlmKCR2YWxbJ2F0dHInXSA9PT0gJ14nKSAkbm9kZS0+cGFy
ZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKCRmLCAkbm9kZSk7DQoJCQkJCWVsc2VpZigkdmFsWydh
dHRyJ10gPT09ICckJykNCgkJCQkJCWlmKCRub2RlLT5uZXh0U2libGluZykgJG5vZGUtPnBh
cmVudE5vZGUtPmluc2VydEJlZm9yZSgkZiwgJG5vZGUtPm5leHRTaWJsaW5nKTsNCgkJCQkJ
CWVsc2UgJG5vZGUtPnBhcmVudE5vZGUtPmFwcGVuZENoaWxkKCRmKTsNCgkJCQkJZWxzZSAk
bm9kZS0+YXBwZW5kQ2hpbGQoJGYpOyBicmVhazsNCgkJCQl9DQoNCgkJCQljYXNlICc/JyA6
ICR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlLCBFTlRfQ09NUEFULCAkZXRjX3F1
ZXJ5X2NvbnRleHRbJ2VuY29kaW5nJ10sIGZhbHNlKTsNCgkJCQkkbm9kZS0+bm9kZVZhbHVl
ID0gJHZhbFsnYXR0ciddID09PSAnKycgfHwgJHZhbFsnYXR0ciddID09PSAnJCcgPyAkbm9k
ZS0+bm9kZVZhbHVlLiR2YWx1ZSA6ICgkdmFsWydhdHRyJ10gPT09ICdeJyA/ICR2YWx1ZS4k
bm9kZS0+bm9kZVZhbHVlIDogJHZhbHVlKTsNCgkJCQlicmVhazsNCg0KCQkJCWNhc2UgJ34n
IDogY2FzZSAnLycgOg0KCQkJCSRub2RlcyA9ICRldGNfcXVlcnlfY29udGV4dFsneHBhdGgn
XS0+ZXZhbHVhdGUoJHZhbHVlLCAkbm9kZSk7DQoJCQkJaWYgKCRub2RlcyBpbnN0YW5jZW9m
IERPTU5vZGVMaXN0KSBmb3JlYWNoKCRub2RlcyBhcyAkZWxlbWVudCkNCgkJCQkJaWYoISRp
c19hdHRyKSB7DQoJCQkJCQlpZigkdmFsWydhdHRyJ10gPT09ICd+JykgJGVsZW1lbnQtPnBh
cmVudE5vZGUtPmluc2VydEJlZm9yZSgkbm9kZSwgJGVsZW1lbnQpOw0KCQkJCQkJZWxzZSAk
ZWxlbWVudC0+YXBwZW5kQ2hpbGQoJG5vZGUpOw0KCQkJCQl9IGVsc2UgJGVsZW1lbnQtPnNl
dEF0dHJpYnV0ZU5vZGUoJG5vZGUpOw0KCQkJCWJyZWFrOw0KDQoJCQkJY2FzZSAnIycgOiBp
ZigkaXNfYXR0ciAmJiAkdmFsdWUgIT0gJG5vZGUtPm5hbWUpIHsNCgkJCQkJJG5vZGUtPm93
bmVyRWxlbWVudC0+c2V0QXR0cmlidXRlKCR2YWx1ZSwgJG5vZGUtPnZhbHVlKTsNCgkJCQkJ
JG5vZGUtPm93bmVyRWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlTm9kZSgkbm9kZSk7DQoJCQkJ
fSBicmVhazsNCg0KCQkJCWRlZmF1bHQgOiBpZighJGlzX2F0dHIpICRub2RlLT5zZXRBdHRy
aWJ1dGUoJHZhbFsnYXR0ciddLCAkdmFsdWUpOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovKioq
KioqKioqKioqKioqIE1JU0MgKioqKioqKioqKioqKioqKioqKioqKi8NCg0KZnVuY3Rpb24g
ZXRjX2NyZWF0ZV9lbGVtZW50KCRuYW1lLCAmJHZhbHVlLCAmJGRvYykgew0KCWlmKGVtcHR5
KCRuYW1lKSB8fCBpc19udW1lcmljKCRuYW1lKSkgeyRhdHRyID0gJG5hbWU7ICRuYW1lID0g
J3Jvdyc7fQ0KCWVsc2UgdW5zZXQoJGF0dHIpOw0KCWlmKCFpc19hcnJheSgkdmFsdWUpICYm
ICFpc19vYmplY3QoJHZhbHVlKSkgew0KCQkkdmFsdWUgPSAoc3RyaW5nKSR2YWx1ZTsNCgkJ
aWYoc3RycG9zKCR2YWx1ZSwgJyYnKSAhPT0gZmFsc2UpICR2YWx1ZSA9IHByZWdfcmVwbGFj
ZSgnLyYoIz9cdytcYig/ITspfCg/IVsjXHddKSkvJywgJyZhbXA7JDEnLCAkdmFsdWUpOw0K
CQkkZWxlbWVudCA9ICRkb2MtPmNyZWF0ZUVsZW1lbnQoJG5hbWUsICR2YWx1ZSk7DQovKgkJ
JGVsZW1lbnQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCRuYW1lKTsNCgkJJGVsZW1lbnQtPmFw
cGVuZENoaWxkKCRkb2MtPmNyZWF0ZVRleHROb2RlKChzdHJpbmcpJHZhbHVlKSk7DQoqLwl9
DQoJZWxzZSB7DQoJCSRlbGVtZW50ID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgkbmFtZSk7DQoJ
CWZvcmVhY2goJHZhbHVlIGFzICRrZXk9PiR2YWwpICRlbGVtZW50LT5hcHBlbmRDaGlsZChl
dGNfY3JlYXRlX2VsZW1lbnQoJGtleSwgJHZhbCwgJGRvYykpOw0KCX0NCglpZihpc3NldCgk
YXR0cikpICRlbGVtZW50LT5zZXRBdHRyaWJ1dGUoJ2luZGV4JywgJGF0dHIpOw0KCXJldHVy
biAkZWxlbWVudDsNCn0NCg0KZnVuY3Rpb24gZXRjX2NsZWFudXAoJG91dCA9IG51bGwsICRz
YWZlX2NvbnRleHQgPSBudWxsLCAkc2FmZV9nbG9iYWxzID0gbnVsbCwgJHNhZmVfc2FuaXRp
emUgPSBudWxsLCAkc2FmZV9zcGVjaWFscyA9IG51bGwpIHsNCglnbG9iYWwgJGV0Y19xdWVy
eV9jb250ZXh0LCAkZXRjX3F1ZXJ5X2dsb2JhbHMsICRldGNfcXVlcnlfc2FuaXRpemUsICRl
dGNfcXVlcnlfc3BlY2lhbHM7DQoJJGV0Y19xdWVyeV9jb250ZXh0ID0gJHNhZmVfY29udGV4
dDsNCgkkZXRjX3F1ZXJ5X2dsb2JhbHMgPSAkc2FmZV9nbG9iYWxzOw0KCSRldGNfcXVlcnlf
c2FuaXRpemUgPSAkc2FmZV9zYW5pdGl6ZTsNCgkkZXRjX3F1ZXJ5X3NwZWNpYWxzID0gJHNh
ZmVfc3BlY2lhbHM7DQoJcmV0dXJuKCRvdXQpOw0KfQ0KDQppZighZGVmaW5lZCgnRVRDX1BS
RUdfU1BFQycpKSBkZWZpbmUoJ0VUQ19QUkVHX1NQRUMnLCAnLyg/PCFceykoXHtbPyFdKD8+
W157fV18KD8xKSkrXH0pL1UnKTsiO3M6NDoidHlwZSI7czoxOiIwIjtzOjU6Im9yZGVyIjtz
OjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo0OiJoZWxwIjtzOjE4NzUwOiI8aDQ+RGVz
Y3JpcHRpb248L2g0PgoKCTxwPlRoaXMgbXVsdGlwdXJwb3NlIHBsdWdpbiBhbGxvd3MgeW91
IHRvIHBpY2sgc29tZSBkYXRhLCB0cmFuc2Zvcm0gaXQgYW5kIGRpc3BsYXkgdGhlIHJlc3Vs
dCB0aGUgd2F5IHlvdSBsaWtlLiBJdCBjYW4gcXVlcnkgSFRNTC9YTUwvSlNPTiBkb2N1bWVu
dHMsIGRhdGFiYXNlcywgTERBUCBkaXJlY3RvcmllcyBvciBnbG9iYWwgdmFyaWFibGVzLCBh
bmQgY2FuIGJlIHVzZWZ1bCBmb3I8L3A+CgoJPHVsPgoJCTxsaT5pbXBvcnRpbmcgZGF0YSBm
cm9tIGV4dGVybmFsIHNpdGVzL2ZlZWRzPC9saT4KCQk8bGk+cXVlcnlpbmcgZGF0YWJhc2Vz
PC9saT4KCQk8bGk+cmV0cmlldmluZyB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlczwvbGk+
CgkJPGxpPnBlcmZvcm1pbmcgYWxsIGtpbmQgb2YgY2FsY3VsYXRpb25zPC9saT4KCQk8bGk+
aXRlcmF0aW5nIG92ZXIgYXJyYXlzL3JhbmdlczwvbGk+CgkJPGxpPmNsZWFuaW5nIHBvb3Ig
YXJ0aWNsZSBtYXJrdXA8L2xpPgoJCTxsaT5jdXN0b21pemluZyB0aGUgb3V0cHV0IG9mIFRl
eHRwYXR0ZXJuIHRhZ3MgYW5kIG90aGVyIHBsdWdpbnM8L2xpPgoJCTxsaT5jcmVhdGluZyBu
YXZpZ2F0aW9uIGxpbmtzLCBwYWdpbmF0aW9uLCBhbmQgbXVjaCBtb3JlLjwvbGk+Cgk8L3Vs
PgoKCTxwPkl0IGlzIGluIG1hbnkgcG9pbnRzIGluc3BpcmVkIGJ5IDxhIGhyZWY9Imh0dHA6
Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTM4L3NtZF94bWwiPnNtZF94bWw8L2E+IGFu
ZCA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvOTc2L3NtZF9xdWVy
eSI+c21kX3F1ZXJ5PC9hPiwgYnV0IHVzZXMgWFBhdGggdG8gYWNjZXNzIHRoZSBkZXNpcmVk
IG5vZGVzLjwvcD4KCgk8cD5UaGUgc2Vuc2libGUgZmVhdHVyZXMgKFBIUCBmdW5jdGlvbnMs
IGRiIHF1ZXJ5LCBleHRlcm5hbCBkYXRhIGltcG9ydCkgYXJlIGF2YWlsYWJsZSBvbmx5IHRv
IHNpdGUgYWRtaW5pc3RyYXRvcnMuPC9wPgoKCTxoND5SZXF1aXJlbWVudHM8L2g0PgoKCTx1
bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNS4zLjEwIHdpdGggPHNw
YW4gY2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gZXh0ZW5zaW9uIChlbmFibGVkIGJ5IGRlZmF1
bHQpPC9saT4KCQk8bGk+QmFzaWMga25vd2xlZGdlIG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cu
dzNzY2hvb2xzLmNvbS94cGF0aC8iPlhQYXRoPC9hPjwvbGk+Cgk8L3VsPgoKCTxoND5TeW50
YXg8L2g0PgoKCTxwPlRoZSB3b3JrZmxvdyBpczogaW1wb3J0IHNvbWUgPHN0cm9uZz5kYXRh
PC9zdHJvbmc+LCA8c3Ryb25nPnF1ZXJ5PC9zdHJvbmc+IGl0IGZvciBzb21lIG5vZGVzIHdp
dGggWFBhdGgsIGRvIHNvbWUgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+bWVudHMgYW5kIGRp
c3BsYXkgdGhlIHJlc3VsdC4gRm9yIGV4YW1wbGUsPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhw
OmV0Y19xdWVyeSBkYXRhPSYjMzk7Jmx0O3R4cDpib2R5IC8mZ3Q7JiMzOTsgcmVwbGFjZT0m
cXVvdDsvL0BzdHlsZSZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+aW4gYW4gYXJ0
aWNsZSBmb3JtIHdpbGwgZGlzcGxheSB0aGUgYm9keSBvZiB0aGUgYXJ0aWNsZSB3aXRoIGFs
bCBzdHlsZSBhdHRyaWJ1dGVzIHJlbW92ZWQuPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmV0
Y19xdWVyeSB1cmw9JnF1b3Q7aHR0cDovL3RleHRwYXR0ZXJuLmNvbSZxdW90OyBxdWVyeT0m
cXVvdDsvL2RpdltAaWQ9JiMzOTthY2NvbGFkZXNCbG9jayYjMzk7XS8vaW1nJnF1b3Q7IHJl
cGxhY2U9JnF1b3Q7QHdpZHRoPTEyOCZxdW90OyZndDsKICB7Ln0gOiB7QGFsdD99CiZsdDt0
eHA6ZWxzZSAvJmd0OwogICZsdDtwJmd0O05vYm9keSBoZXJlLiZsdDsvcCZndDsKJmx0Oy90
eHA6ZXRjX3F1ZXJ5Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+d2lsbCBkaXNwbGF5IGFsbCA8
Y29kZT5pbWc8L2NvZGU+IGVsZW1lbnRzIChzY2FsZWQgdG8gPGNvZGU+d2lkdGg9MTI4PC9j
b2RlPikgd2l0aCB0aGVpciA8Y29kZT5hbHQ8L2NvZGU+IHRleHQgZm91bmQgaW4gdGhlIDxj
b2RlPmRpdiNhY2NvbGFkZUJsb2NrPC9jb2RlPiBvbiA8YSBocmVmPSJodHRwOi8vdGV4dHBh
dHRlcm4uY29tIj50ZXh0cGF0dGVybi5jb208L2E+LjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4
cDpldGNfcXVlcnkgZGF0YT0mcXVvdDtTRUxFQ1QgKiBGUk9NIHR4cF91c2VycyBXSEVSRSAx
JnF1b3Q7IHdyYXB0YWc9JnF1b3Q7dWwmcXVvdDsgYnJlYWs9JnF1b3Q7bGkmcXVvdDsmZ3Q7
CiAgeyRzdHJ0b3VwcGVyKHtSZWFsTmFtZT99KX0KJmx0Oy90eHA6ZXRjX3F1ZXJ5Jmd0Owo8
L2NvZGU+PC9wcmU+CgoJPHA+d2lsbCBkaXNwbGF5IGFuIHVwcGVyY2FzZSBsaXN0IG9mIGFs
bCB1c2VycyBvZiB5b3VyIHNpdGUuPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmV0Y19xdWVy
eSBnbG9iYWxzPSZxdW90O19HRVQmcXVvdDsgZnVuY3Rpb25zPSZxdW90O3NxcnQmcXVvdDsg
cXVlcnk9JnF1b3Q7c3FydCh7P251bXwwfGludHZhbH0pJnF1b3Q7IC8mZ3Q7CjwvY29kZT48
L3ByZT4KCgk8cD53aWxsIG1lcmVseSBjYWxjdWxhdGUgdGhlIHNxdWFyZSByb290IG9mIDxz
cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+R0VUPC9z
cGFuPiA8Y29kZT5udW08L2NvZGU+IGZpZWxkLCBzYW5pdGl6ZWQgYXMgaW50ZWdlci48L3A+
CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5kYXRhPC9zdHJv
bmc+OiBUaGUgZGF0YSB0byBwYXJzZS4gQ2FuIGJlIHNvbWUgPHNwYW4gY2xhc3M9ImNhcHMi
PkhUTUw8L3NwYW4+L1hNTCBjb2RlLCBhcnJheSwgZGF0YWJhc2UgcXVlcnkgb3IgTERBUCBz
dHJpbmcuIERlZmF1bHRzIHRvIDxjb2RlPm51bGw8L2NvZGU+LjwvbGk+CgkJPGxpPjxzdHJv
bmc+dXJsPC9zdHJvbmc+OiBUaGUgYWRkcmVzcyBvZiB0aGUgd2ViIHBhZ2UgdG8gcmV0cmll
dmUgdGhlIGRhdGEgZnJvbS4gSWYgbm90IGVtcHR5LCBzdXBlcnNlZGVzIHRoZSA8c3Ryb25n
PmRhdGE8L3N0cm9uZz4gYXR0cmlidXRlLiBUaGlzIG1heSBiZSBhIDxzcGFuIGNsYXNzPSJj
YXBzIj5MQVJHRTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPlNFQ1VSSVRZPC9zcGFuPiA8
c3BhbiBjbGFzcz0iY2FwcyI+SE9MRTwvc3Bhbj4sIHVzZSBpdCBvbmx5IHdpdGggdGhlIHNp
dGVzIHlvdSB0cnVzdC4gSW4gPGNvZGU+ZGI8L2NvZGU+IG1vZGUsIDxzdHJvbmc+dXJsPC9z
dHJvbmc+IGlzIHRoZSBuYW1lIG9mIGEgbG9jYWwgZGF0YWJhc2UuIERlZmF1bHQgaXMgZW1w
dHkgKHR4cCBvd24gZGF0YWJhc2UpLjwvbGk+CgkJPGxpPjxzdHJvbmc+Y29udGV4dDwvc3Ry
b25nPjogPGNvZGU+b3B0aW9uczwvY29kZT4gKGh0bWwgaGVhZGVycyBhbmQgc28gb24pIHRv
IHBhc3MgdG8gcGhwIDxhIGhyZWY9Imh0dHA6Ly9mcjIucGhwLm5ldC9tYW51YWwvZW4vZnVu
Y3Rpb24uc3RyZWFtLWNvbnRleHQtY3JlYXRlLnBocCI+c3RyZWFtLWNvbnRleHQtY3JlYXRl
PC9hPiBmdW5jdGlvbiB3aGVuIHJldHJpZXZpbmcgZGF0YSBmcm9tIDxzdHJvbmc+dXJsPC9z
dHJvbmc+LiBEZWZhdWx0cyB0byA8c3Ryb25nPm51bGw8L3N0cm9uZz4uPC9saT4KCQk8bGk+
PHN0cm9uZz5tYXJrdXA8L3N0cm9uZz46IDxjb2RlPmh0bWw8L2NvZGU+LCA8Y29kZT54bWw8
L2NvZGU+LCA8Y29kZT5kYjwvY29kZT4sIDxjb2RlPmpzb248L2NvZGU+LCA8Y29kZT5hcnJh
eTwvY29kZT4sIDxjb2RlPmxpc3Q8L2NvZGU+LCA8Y29kZT5sZGFwPC9jb2RlPiwgPGNvZGU+
ZGF0YTwvY29kZT4gb3IgPGNvZGU+cmF3PC9jb2RlPi4gSWYgZm9sbG93ZWQgYnkgPGNvZGU+
OnBmeDwvY29kZT4sIHRoZSBkZWZhdWx0LW5hbWVzcGFjZSBub2RlcyBjYW4gYmUgYWNjZXNz
ZWQgd2l0aCA8Y29kZT5wZng6bm9kZW5hbWU8L2NvZGU+LiBEZWZhdWx0cyB0byBlbXB0eSAo
Z3Vlc3MgZnJvbSA8c3Ryb25nPmRhdGE8L3N0cm9uZz4pLjwvbGk+CgkJPGxpPjxzdHJvbmc+
cXVlcnk8L3N0cm9uZz46IFhQYXRoIGV4cHJlc3Npb24sIGUuZy4gdGhlIHBhdGggb2YgdGhl
IHJlZmVyZW5jZSBub2Rlcy4gRGVmYXVsdHMgdG8gPGNvZGU+LjwvY29kZT4gKHRoZSA8c3Ry
b25nPmRhdGE8L3N0cm9uZz4gaXRzZWxmLCB3cmFwcGVkIGluIHNvbWUgcm9vdCkuPC9saT4K
CQk8bGk+PHN0cm9uZz5lbmNvZGluZzwvc3Ryb25nPjogdGhlIGRlc2lyZWQgb3V0cHV0IGNo
YXJzZXQsIG11c3QgYmUgZWl0aGVyIDxjb2RlPmNoYXJzZXRfdG88L2NvZGU+IG9yIDxjb2Rl
PmNoYXJzZXRfdG86Y2hhcnNldF9mcm9tPC9jb2RlPi4gSWYgPGNvZGU+Y2hhcnNldF9mcm9t
PC9jb2RlPiBpcyBnaXZlbiwgdGhlIGRhdGEgd2lsbCBiZSByZS1lbmNvZGVkIGV2ZW4gaWYg
aXQgaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmNoYXJzZXRfdG88L2NvZGU+LiBEZWZhdWx0IGlz
IDxjb2RlPlVURi04PC9jb2RlPi48L2xpPgoJCTxsaT48c3Ryb25nPmZvcm08L3N0cm9uZz46
IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBGb3JtIHdpdGggd2hpY2ggdG8g
cGFyc2UgZWFjaCBub2RlLiBZb3UgbWF5IHVzZSB0aGUgcGx1Z2luIGFzIGEgY29udGFpbmVy
IGluc3RlYWQgaWYgeW91IHByZWZlci4gRGVmYXVsdCBpcyBlbXB0eS48L2xpPgoJCTxsaT48
c3Ryb25nPnBvcHVsYXRlPC9zdHJvbmc+OiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw
YW4+IGVudGl0eSAoYXJ0aWNsZSwgaW1hZ2UsIGZpbGUgb3IgbGluaykgZmllbGRzIHRoYXQg
d2lsbCBiZSBwb3B1bGF0ZWQgYnkgdGhlIGRhdGEuIERlZmF1bHQgaXMgZW1wdHkuPC9saT4K
CQk8bGk+PHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+OiAqc2VwYXJhdG9yKi1zZXBhcmF0ZWQg
bGlzdCAoZW1wdHkgYnkgZGVmYXVsdCkgb2YgdG9rZW5zIGxpa2UgPGNvZGU+eHBhdGg9dmFs
dWU8L2NvZGU+LCBzZWUgYmVsb3cuPC9saT4KCQk8bGk+PHN0cm9uZz5kZWxpbTwvc3Ryb25n
Pjogc3ltYm9scyB0byBiZSB1c2VkIGluc3RlYWQgb2YgPGNvZGU+PTwvY29kZT4gaW4gPHN0
cm9uZz5yZXBsYWNlPC9zdHJvbmc+IGNvdXBsZXMuIFRoZSBkZWZhdWx0IDxjb2RlPj08L2Nv
ZGU+IHNob3VsZCBzdWZmaWNlIGluIG1vc3QgY2FzZXMuPC9saT4KCQk8bGk+PHN0cm9uZz5z
ZXBhcmF0b3I8L3N0cm9uZz46IHN5bWJvbHMgdG8gc2VwYXJhdGUgdGhlIDxzdHJvbmc+cmVw
bGFjZTwvc3Ryb25nPiB0b2tlbnMuIERlZmF1bHRzIHRvIDxjb2RlPjs8L2NvZGU+IChzZW1p
LWNvbG9uKS48L2xpPgoJCTxsaT48c3Ryb25nPmFyZ3NlcDwvc3Ryb25nPjogc3ltYm9scyB0
byBzZXBhcmF0ZSB0aGUgYXJndW1lbnRzIG9mIGZ1bmN0aW9uIHBhdHRlcm5zLCBzZWUgYmVs
b3cuIERlZmF1bHRzIHRvIDxjb2RlPnw8L2NvZGU+IChwaXBlKS48L2xpPgoJCTxsaT48c3Ry
b25nPmdsb2JhbHM8L3N0cm9uZz4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBnbG9iYWwg
dmFyaWFibGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgc3BlY2lhbCByZXBsYWNlbWVudCBwYXR0
ZXJucywgc2VlIGJlbG93LjwvbGk+CgkJPGxpPjxzdHJvbmc+c2FuaXRpemU8L3N0cm9uZz4g
OiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiA8c3Ryb25nPmdsb2JhbHM8L3N0cm9uZz4gdGhh
dCBzaG91bGQgYmUgc2FuaXRpemVkIHdpdGggPGNvZGU+aHRtbHNwZWNpYWxjaGFyczwvY29k
ZT4uIERlZmF1bHQgaXMgPGNvZGU+X0NPT0tJRSxfR0VULF9QT1NULF9SRVFVRVNUPC9jb2Rl
Pi4gWW91IGNhbiB1c2UgY3VzdG9tIHNhbml0aXplcnMgYXMgd2VsbDogPGNvZGU+c2FuaXRp
emU9Il9HRVQ6aW50dmFsIjwvY29kZT4uPC9saT4KCQk8bGk+PHN0cm9uZz5zcGVjaWFsczwv
c3Ryb25nPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgKGxpa2UgPGNv
ZGU+ZGF0YTwvY29kZT4sIDxjb2RlPnF1ZXJ5PC9jb2RlPiwgPGNvZGU+cmVwbGFjZTwvY29k
ZT4gb3IgPGNvZGU+Y29udGVudDwvY29kZT4pIHRvIHByb2NlZWQgd2l0aCB0aGUgc3BlY2lh
bCByZXBsYWNlbWVudCBwYXR0ZXJucy4gRGVmYXVsdCBpcyA8Y29kZT51cmwsZGF0YSxxdWVy
eTwvY29kZT4uPC9saT4KCQk8bGk+PHN0cm9uZz5mdW5jdGlvbnM8L3N0cm9uZz4gOiBjb21t
YS1zZXBhcmF0ZWQgbGlzdCBvZiBwaHAgZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4geHBhdGgg
ZXhwcmVzc2lvbnMuIFJlcXVpcmVzIHN1ZmZpY2llbnQgdXNlciBwcml2aWxlZ2VzLjwvbGk+
CgkJPGxpPjxzdHJvbmc+cGFyc2U8L3N0cm9uZz46IHdoZXRoZXIgPHNwYW4gY2xhc3M9ImNh
cHMiPlRYUDwvc3Bhbj4gcGFyc2VyIHNob3VsZCBwYXJzZSB0aGUgY29udGVudCA8Y29kZT5i
ZWZvcmU8L2NvZGU+IG9yIDxjb2RlPmFmdGVyPC9jb2RlPiB0aGUgcmVwbGFjZW1lbnRzLCBv
ciA8Y29kZT5ib3RoPC9jb2RlPiwgb3Igbm90IGF0IGFsbC4gSWYgeW91IGRvbiYjODIxNzt0
IGV4cGVjdCA8Y29kZT4mbHQ7dHhwOjwvY29kZT4gdGFncyBpbnNpZGUgdGhlIGNvbnRhaW5l
ciwgeW91IGNhbiBzZXQgPGNvZGU+cGFyc2U9IiI8L2NvZGU+LCB0aGlzIHdpbGwgc3BlZWQg
dXAgdGhlIHByb2Nlc3Npbmcgb2YgbGFyZ2UgZGF0YS4gRGVmYXVsdCBpcyA8Y29kZT5hdXRv
PC9jb2RlPjogZW1wdHkgaWYgbm8gPGNvZGU+Jmx0O3R4cDo8L2NvZGU+IHRhZ3MgYXJlIGRl
dGVjdGVkLCA8Y29kZT5hZnRlcjwvY29kZT4gb3RoZXJ3aXNlLjwvbGk+CgkJPGxpPjxzdHJv
bmc+bmFtZTwvc3Ryb25nPiA6IGlmIHNldCwgdGhlIG91dHB1dCB3aWxsIGJlIGFzc2lnbmVk
IHRvIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPiZsdDt0eHA6dmFyaWFibGUgLyZndDs8L2Nv
ZGU+LjwvbGk+CgkJPGxpPjxzdHJvbmc+c2F2ZTwvc3Ryb25nPiA6IGlmIHNldCwgdGhlIGRh
dGEgd2lsbCBiZSBzdG9yZWQgZm9yIGZ1cnRoZXIgcmV0cmlldmluZy48L2xpPgoJCTxsaT48
c3Ryb25nPmxpbWl0PC9zdHJvbmc+LCA8c3Ryb25nPm9mZnNldDwvc3Ryb25nPiwgPHN0cm9u
Zz53cmFwdGFnPC9zdHJvbmc+LCA8c3Ryb25nPmJyZWFrPC9zdHJvbmc+LCA8c3Ryb25nPmh0
bWxfaWQ8L3N0cm9uZz4sIDxzdHJvbmc+Y2xhc3M8L3N0cm9uZz4sIDxzdHJvbmc+bGFiZWw8
L3N0cm9uZz4gYW5kIDxzdHJvbmc+bGFiZWx0YWc8L3N0cm9uZz4gYXJlIHRoZSB1c3VhbCBU
ZXh0cGF0dGVybiBhdHRyaWJ1dGVzLCBhbGwgZW1wdHkgYnkgZGVmYXVsdC48L2xpPgoJPC91
bD4KCgk8aDQ+U3BlY2lhbCBwYXR0ZXJuczwvaDQ+CgoJPHA+RXZlcnkgdG9rZW4gaW5zaWRl
IGN1cmx5IDxjb2RlPnticmFjZXN9PC9jb2RlPiB3aWxsIGhhdmUgYSBzcGVjaWFsIG1lYW5p
bmcgZm9yIDxjb2RlPmV0Y19xdWVyeTwvY29kZT4uIFRoZXJlIGFyZSBmb3VyIGtpbmRzIG9m
IHBhdHRlcm5zLjwvcD4KCgk8aDU+VmFyaWFibGUgcGF0dGVybnM8L2g1PgoKCTxwPkEgcGF0
dGVybiA8Y29kZT57P3ZhcjEsdmFyMiwuLi58ZGVmYXVsdHxmdW5jdGlvbl9wYXR0ZXJufTwv
Y29kZT4gb3IgPGNvZGU+eyF2YXIxLHZhcjIsLi4ufGRlZmF1bHR8ZnVuY3Rpb25fcGF0dGVy
bn08L2NvZGU+IHdpbGwgc2VhcmNoIGZvciB0aGUgZmllbGQgPGNvZGU+dmFyMTwvY29kZT4g
aW4gZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIHRoZSBsaXN0IDxzdHJvbmc+Z2xvYmFsczwvc3Ry
b25nPiwgdGhlbiBmb3IgPGNvZGU+dmFyMjwvY29kZT4gaWYgPGNvZGU+dmFyMTwvY29kZT4g
aXMgbm90IGZvdW5kLCBhbmQgc28gb24uIElmIG5vdGhpbmcgaXMgZm91bmQsIHRoZSA8Y29k
ZT5kZWZhdWx0PC9jb2RlPiAoaWYgZ2l2ZW4pIHdpbGwgYmUgdXNlZC4gT3RoZXJ3aXNlLCB0
aGUgPGNvZGU+ZnVuY3Rpb25fcGF0dGVybjwvY29kZT4gKGlmIHNldCkgd2lsbCBiZSBhcHBs
aWVkIHRvIHRoZSB2YXJpYWJsZSBiZWZvcmUgcHJvY2Vzc2luZywgc2VlIGJlbG93LiBGb3Ig
ZXhhbXBsZSwgdG8gYXNzaWduIHRoZSB2YWx1ZSBvZiBzb21lIHVybCA8c3BhbiBjbGFzcz0i
Y2FwcyI+R0VUPC9zcGFuPiB2YXJpYWJsZSA8Y29kZT51PC9jb2RlPiB0byBhIHRleHRwYXR0
ZXJuIDxjb2RlPiZsdDt2YXJpYWJsZSBuYW1lPSZxdW90O3YmcXVvdDsgLyZndDs8L2NvZGU+
IGlmIDxjb2RlPnY8L2NvZGU+IGlzIG5vdCBzZXQsIHVzZTwvcD4KCjxwcmU+PGNvZGU+Jmx0
O3R4cDpldGNfcXVlcnkgZ2xvYmFscz0mcXVvdDt2YXJpYWJsZSxfR0VUJnF1b3Q7IG5hbWU9
JnF1b3Q7diZxdW90OyBkYXRhPSZxdW90O3s/dix1fDB9JnF1b3Q7IC8mZ3Q7CjwvY29kZT48
L3ByZT4KCgk8cD5JZiBzb21lIG9mIDxzdHJvbmc+Z2xvYmFsczwvc3Ryb25nPiBpcyBpbiA8
c3Ryb25nPnNhbml0aXplPC9zdHJvbmc+IGxpc3QsIGFuZCBubyA8Y29kZT5mdW5jdGlvbl9w
YXR0ZXJuPC9jb2RlPiBpcyBnaXZlbiwgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGVzIHdp
bGwgYmUgPGNvZGU+aHRtbHNwZWNpYWxjaGFyczwvY29kZT5lZC48L3A+CgoJPHA+RGVmYXVs
dCBmb3IgPHN0cm9uZz5nbG9iYWxzPC9zdHJvbmc+IGlzIDxjb2RlPnZhcmlhYmxlLCBwcmV0
ZXh0LCB0aGlzYXJ0aWNsZSwgdGhpc2ltYWdlLCB0aGlzZmlsZSwgdGhpc2xpbms8L2NvZGU+
LCBidXQgeW91IGNhbiB1c2UgYW55IGdsb2JhbCB2YXJpYWJsZSwgbGlrZSA8Y29kZT5fU0VT
U0lPTjwvY29kZT4gb3IgZXZlbiA8Y29kZT5fUkVRVUVTVDwvY29kZT4gKGF0IHlvdXIgb3du
IHJpc2spLiBUbyBtb2RpZnkgdGhlIGRlZmF1bHQgPHN0cm9uZz5nbG9iYWxzPC9zdHJvbmc+
IGxpc3QsIHlvdSBjYW4gc2F2ZSBpdCAobWFudWFsbHkgZm9yIHRoZSBtb21lbnQpIGluIDxj
b2RlPiRwcmVmc1smIzM5O2V0Y19nbG9iYWxzJiMzOTtdPC9jb2RlPi48L3A+CgoJPGg1PlhQ
YXRoIHBhdHRlcm5zPC9oNT4KCgk8cD5UaGVzZSBhcmUgb2YgdGhlIGZvcm0gPGNvZGU+e3hw
YXRoWz98I119PC9jb2RlPiwgYW5kIHJlcHJlc2VudCB0aGUgbm9kZXMgb3IgZXhwcmVzc2lv
bnMgKHJlbGF0aXZlbHkgdG8gPHN0cm9uZz5xdWVyeTwvc3Ryb25nPikgeW91IHdhbnQgdG8g
ZGlzcGxheS9ldmFsdWF0ZS4gRm9yIGV4YW1wbGUsIHRoZSB4cGF0aCA8Y29kZT57Ln08L2Nv
ZGU+IG1hdGNoZXMgdGhlIGN1cnJlbnQgbm9kZSByZXRyaWV2ZWQgYnkgPHN0cm9uZz5xdWVy
eTwvc3Ryb25nPiwgPGNvZGU+e2NvdW50KC4vYSl9PC9jb2RlPiBjb3VudHMgYWxsIDxjb2Rl
PiZsdDthJmd0OzwvY29kZT4gdGFncyB0aGF0IGFyZSBpdHMgY2hpbGRyZW4sIGFuZCBzbyBv
bi4gSWYgPGNvZGU+eHBhdGg8L2NvZGU+IGlzIGZvbGxvd2VkIGJ5IDxjb2RlPj88L2NvZGU+
LCB0aGUgbm9kZSB2YWx1ZSB3aWxsIGJlIGRpc3BsYXllZCwgYW5kIDxjb2RlPiM8L2NvZGU+
IHJlc3VsdHMgaW4gdGhlIG5vZGUgbmFtZS4gSWYgPGNvZGU+eHBhdGg8L2NvZGU+IGlzIGFu
IGV4cHJlc3Npb24gKGxpa2UgPGNvZGU+Y291bnQ8L2NvZGU+KSwgdGhlIHJlc3VsdCBpcyBp
dHMgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGNvbXBsZXRlIG5vZGUgd2l0aCBpdHMgY2hpbGRy
ZW4gd2lsbCBiZSBkaXNwbGF5ZWQuIFRoZSB0YWdzIDxjb2RlPns/fTwvY29kZT4gYW5kIDxj
b2RlPnsjfTwvY29kZT4gcmVwcmVzZW50IHRoZSBjb250ZXh0IG5vZGUmIzgyMTc7cyB2YWx1
ZSBhbmQgbmFtZSByZXNwZWN0aXZlbHkuICBQbGVhc2UgZmVlbCBmcmVlIHRvIHRlc3QgdGhl
IGV4YW1wbGUgYWJvdmUgdG8gc2VlIHdoYXQgaXQgYWxsIG1lYW5zLjwvcD4KCgk8aDU+SW50
ZXJuYWwgcGF0dGVybnM8L2g1PgoKCTxwPlRoZXJlIGFyZSBhbHNvIGZldyBpbnRlcm5hbCBw
YXR0ZXJucyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBjb250YWluZXIgYW5kIDxzdHJvbmc+
cmVwbGFjZTwvc3Ryb25nPjogPGNvZGU+eyNyb3d9PC9jb2RlPiBhbmQgPGNvZGU+eyNyb3dz
fTwvY29kZT4gd2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgcm93IG51bWJlciBzdGFydGluZyBm
cm9tIDEgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzcGxheWVkIHJvd3MuIFRoZWlyIGNv
dXNpbnMgIDxjb2RlPnsjaW5kfTwvY29kZT4gYW5kIDxjb2RlPnsjdG90YWx9PC9jb2RlPiBw
cm9kdWNlIHRoZSBhYnNvbHV0ZSByb3cgbnVtYmVyIChpZ25vcmluZyA8c3Ryb25nPmxpbWl0
PC9zdHJvbmc+IGFuZCA8c3Ryb25nPm9mZnNldDwvc3Ryb25nPiBhdHRyaWJ1dGVzKSBzdGFy
dGluZyB3aXRoIDAsIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIG1hdGNoZWQgbm9kZXMuIEZp
bmFsbHksIDxjb2RlPnsjI308L2NvZGU+IHJlcHJlc2VudHMgdGhlIGludGVybmFsIG5vZGUg
bnVtYmVyLjwvcD4KCgk8aDU+RnVuY3Rpb24gcGF0dGVybnM8L2g1PgoKCTxwPkEgcGF0dGVy
biBvZiB0aGUgZm9ybSA8Y29kZT57JGZ1bmMxKGFyZzF8YXJnMnwuLi4pLmZ1bmMyKC4uLil9
PC9jb2RlPiBpbiB0aGUgY29udGFpbmVyIG9yIDxzdHJvbmc+cmVwbGFjZTwvc3Ryb25nPiB3
aWxsIGNhbGwgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZ1bmN0aW9ucyA8
Y29kZT5mdW5jMShhcmcxLCBhcmcyLCAuLi4pPC9jb2RlPiwgYW5kIHNvIG9uLiBJZiB0aGVy
ZSBhcmUgbm8gYXJncywgdGhlbiA8Y29kZT5mdW5jKG5vZGUmIzM5O3MgdmFsdWUpPC9jb2Rl
PiB3aWxsIGJlIHJldHVybmVkLiBUaGUgb3V0cHV0IG9mIGVhY2ggZnVuY3Rpb24gY2FuIGJl
IHBhc3NlZCBhcyA8Y29kZT4kPC9jb2RlPiB0byB0aGUgbmV4dCBvbmUsIHVubGVzcyB0aGUg
ZnVuY3Rpb24gbmFtZSBpcyBwcmVmaXhlZCBieSA8Y29kZT5APC9jb2RlPi4gVGhhdCdzIG1h
aW5seSB1c2VkIHRvIGNhbGwgc29tZSBmdW5jdGlvbiB3aXRob3V0IGNoYW5naW5nIHRoZSAm
cXVvdDtjdXJyZW50JnF1b3Q7IHZhbHVlLCBvciB0byBwYXNzIGl0IGJ5IHJlZmVyZW5jZS4g
Rm9yIGV4YW1wbGUsPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmV0Y19xdWVyeSBkYXRhPSZx
dW90O0kgaGF0ZSBjYXRzJnF1b3Q7Jmd0OwogICAgICB7JGpzb25fZGVjb2RlKHsmcXVvdDto
YXRlJnF1b3Q7OiZxdW90O2xvdmUmcXVvdDssJnF1b3Q7Y2F0cyZxdW90OzomcXVvdDtkb2dz
JnF1b3Q7fXwxKS5zdHJ0cih7P318JCkuQHNodWZmbGUuaW1wbG9kZSggfCQpfQombHQ7L3R4
cDpldGNfcXVlcnkmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD53aWxsIG91dHB1dCAmIzgyMjA7
SSBsb3ZlIGRvZ3MmIzgyMjE7IG9yIHNvbWUgb2YgNiBwb3NzaWJsZSBwZXJtdXRhdGlvbnMg
b2YgdGhlc2UgMyB3b3Jkcy4gV2l0aG91dCA8Y29kZT5APC9jb2RlPiwgPGNvZGU+c2h1ZmZs
ZTwvY29kZT4gd291bGQgYXNzaWduIGl0cyByZXR1cm4gdmFsdWUgKHRydWUgb3IgZmFsc2Up
IHRvIDxjb2RlPiQ8L2NvZGU+LCBhbmQgPGNvZGU+aW1wbG9kZTwvY29kZT4gd291bGRuJ3Qg
d29yay48L3A+CgoJPHA+RmV3IGZ1bmN0aW9ucyBhcmUgcHJlZGVmaW5lZDogPGNvZGU+eyRk
YXRlKGZvcm1hdCl9PC9jb2RlPiB3aWxsIHRyYW5zZm9ybSB0aGUgbm9kZSYjODIxNztzIHZh
bHVlIGludG8gYSBkYXRlIGZvcm1hdHRlZCBhcyA8Y29kZT5mb3JtYXQ8L2NvZGU+LCA8Y29k
ZT50ZXh0aWxlPC9jb2RlPiB3aWxsIFRleHRpbGUgaXQuIFRoZSBwYXR0ZXJuIDxjb2RlPnsk
PyhpZnx0aGVufGVsc2V9PC9jb2RlPiB3aWxsIG91dHB1dCA8Y29kZT50aGVuPC9jb2RlPiBp
ZiA8Y29kZT5pZjwvY29kZT4gaXMgbm90IGVtcHR5LCBvciA8Y29kZT5lbHNlPC9jb2RlPiBv
dGhlcndpc2UuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGNvbXBhcmlzb24gKDxjb2RlPj0sJmx0
OywmZ3Q7PC9jb2RlPiksIGNvbmNhdGVuYXRpb24gKDxjb2RlPn48L2NvZGU+KSBhbmQgYXJp
dGhtZXRpYyBvcGVyYXRpb25zIDxjb2RlPissLSwqLC8sJTwvY29kZT4sIGxpa2UgPGNvZGU+
eyQrMX08L2NvZGU+IHRvIGFkZCAxIHRvIHRoZSBjdXJyZW50IG5vZGUgdmFsdWUuPC9wPgoK
CTxwPlRoZSBkZWZhdWx0IGFyZ3VtZW50IHNlcGFyYXRvciBpcyA8Y29kZT58PC9jb2RlPiAo
cGlwZSksIGJ1dCB5b3UgY2FuIGNoYW5nZSBpdCB3aXRoIDxzdHJvbmc+YXJnc2VwPC9zdHJv
bmc+IGF0dHJpYnV0ZS48L3A+CgoJPGg0PlJlcGxhY2UgYXR0cmlidXRlPC9oND4KCgk8cD5U
aGUgcHVycG9zZSBvZiA8c3Ryb25nPnJlcGxhY2U8L3N0cm9uZz4gYXR0cmlidXRlIGlzIHRv
IHJlcGxhY2UvaW5zZXJ0L2RlbGV0ZSBzb21lIG5vZGVzIGluIHRoZSA8c3Ryb25nPmRhdGE8
L3N0cm9uZz4gPHNwYW4gY2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gdHJlZS4gVGhlcmUgYXJl
IHNldmVyYWwgdHlwZXMgb2YgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+IHRva2Vucy48L3A+
CgoJPHA+VGhlIGZpcnN0IHR5cGUgaXMganVzdCA8Y29kZT54cGF0aDwvY29kZT4sIHdoaWNo
IHJlbW92ZXMgYWxsIHRoZSBub2RlcyBtYXRjaGVkIGJ5IDxjb2RlPnhwYXRoPC9jb2RlPi4g
IEZvciBleGFtcGxlLCByZXBsYWNlPSYjODIyMTsvL3NjcmlwdHwvL0AqW3N0YXJ0cy13aXRo
KG5hbWUoKSwmIzgyMTY7b24mIzgyMTc7KV0mIzgyMjE7IHdpbGwgYXR0ZW1wdCB0byBhdm9p
ZCBqYXZhc2NyaXB0IGluamVjdGlvbi48L3A+CgoJPHA+TmV4dCwgYSBjb3VwbGUgPGNvZGU+
eHBhdGg9dmFsdWU8L2NvZGU+IGdpdmVzIHRvIHRoZSBub2RlcyBtYXRjaGVkIGJ5IDxjb2Rl
PnhwYXRoPC9jb2RlPiB0aGUgPGNvZGU+dmFsdWU8L2NvZGU+IChwb3NzaWJseSBlbXB0eSku
IFRoZSA8Y29kZT52YWx1ZTwvY29kZT4gd2lsbCBiZSBwYXJzZWQgaW50byA8c3BhbiBjbGFz
cz0iY2FwcyI+WE1MPC9zcGFuPiB0cmVlLCB1bmxlc3MgPGNvZGU+eHBhdGg8L2NvZGU+IGlz
IGZvbGxvd2VkIGJ5IDxjb2RlPj88L2NvZGU+LiBJZiA8Y29kZT54cGF0aDwvY29kZT4gaXMg
Zm9sbG93ZWQgYnkgPGNvZGU+KzwvY29kZT4sIHRoZSA8Y29kZT52YWx1ZTwvY29kZT4gd2ls
bCBiZSBhcHBlbmRlZCBhcyBjaGlsZCB0byBlYWNoIG1hdGNoZWQgbm9kZS4gSWYgPGNvZGU+
eHBhdGg8L2NvZGU+IGlzIGZvbGxvd2VkIGJ5IDxjb2RlPl48L2NvZGU+IChyZXNwZWN0aXZl
bHkgPGNvZGU+JDwvY29kZT4pLCB0aGUgPGNvZGU+dmFsdWU8L2NvZGU+IHdpbGwgYmUgaW5z
ZXJ0ZWQgYmVmb3JlIChhZnRlcikgZWFjaCBtYXRjaGVkIG5vZGUuIEEgdG9rZW4gPGNvZGU+
eHBhdGgmYW1wOz12YWx1ZTwvY29kZT4gd2lsbCByZXBsYWNlIHRoZSBtYXRjaGVkIG5vZGUg
YnkgdmFsdWUuPC9wPgoKCTxwPlRoZSB0b2tlbnMgPGNvZGU+eHBhdGh+PXhwYXRoPC9jb2Rl
PiBhbmQgPGNvZGU+eHBhdGgvPXhwYXRoPC9jb2RlPiB3aWxsIG1vdmUgdGhlIGxlZnQtaGFu
ZCBub2RlLCBpbnNlcnRpbmcgaXQgYmVmb3JlIHRoZSByaWdodC1oYW5kIG9uZSwgb3IgYXBw
ZW5kaW5nIGFzIGl0cyBjaGlsZCByZXNwZWN0aXZlbHkuIEZvciBleGVtcGxlLCA8Y29kZT4v
L2FbMV0vPS4uPC9jb2RlPiB3aWxsIG1vdmUgZXZlcnkgZmlyc3QgbGluayB0byB0aGUgZW5k
IG9mIGl0cyBwYXJlbnQgbm9kZS48L3A+CgoJPHA+QSB0b2tlbiA8Y29kZT54cGF0aEBAYXR0
cjE9dmFsMUBhdHRyMj12YWwyLi4uPC9jb2RlPiB3aWxsIHNldCB0aGUgYXR0cmlidXRlcyA8
Y29kZT5hdHRyMSxhdHRyMiwuLi48L2NvZGU+IG9mIG1hdGNoZWQgZWxlbWVudHMgdG8gdGhl
IHJlc3BlY3RpdmUgdmFsdWVzLiBZb3UgY2FuIHVzZSB0aGUgc2hvcnRjdXRzIDxjb2RlPi48
L2NvZGU+LCA8Y29kZT4/PC9jb2RlPiwgPGNvZGU+KzwvY29kZT4sIDxjb2RlPl48L2NvZGU+
LCA8Y29kZT4kPC9jb2RlPiA8Y29kZT5+PC9jb2RlPiBhbmQgPGNvZGU+LzwvY29kZT4gYXMg
YXR0cmlidXRlcyB0b28uPC9wPgoKCTxwPllvdSBjYW4gYWxzbyBkbyByZXBsYWNlbWVudHMg
aW5zaWRlIHRoZSBjb250YWluZXIgYW5kIG5lc3QgdGhlIHNwZWNpYWwgdG9rZW5zLiBGb3Ig
ZXhhbXBsZSw8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3F1ZXJ5IGRhdGE9JnF1b3Q7
ez9ib2R5fSZxdW90OyBxdWVyeT0mcXVvdDsvL3AmcXVvdDsmZ3Q7CnsuKz0mbHQ7c3BhbiBj
bGFzcz0mcXVvdDtyb3cmcXVvdDsmZ3Q7eyNyb3d9Jmx0Oy9zcGFuJmd0O30KJmx0Oy90eHA6
ZXRjX3F1ZXJ5Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+d2lsbCBudW1iZXIgYW5kIGRpc3Bs
YXkgYWxsIHRoZSBwYXJhZ3JhcGhzIG9mIHRoZSBhcnRpY2xlLjwvcD4KCgk8cD5BbHRlcm5h
dGl2ZWx5LCA8c3BhbiBjbGFzcz0iY2FwcyI+WFNMPC9zcGFuPiB0cmFuc2Zvcm1zIGNhbiBi
ZSB1c2VkIGluIDxzdHJvbmc+cmVwbGFjZTwvc3Ryb25nPiBhbmQgPHN0cm9uZz5jb250ZW50
PC9zdHJvbmc+IHRvIGZvcm1hdCB0aGUgb3V0cHV0LjwvcD4KCgk8aDQ+PHNwYW4gY2xhc3M9
ImNhcHMiPkpTT048L3NwYW4+IHJhbmdlczwvaDQ+CgoJPHA+QSA8c3Ryb25nPmRhdGE8L3N0
cm9uZz4gbGlrZSA8Y29kZT5bMS4uMTBdPC9jb2RlPiB3aXRoIDxjb2RlPm1hcmt1cD0mcXVv
dDtqc29uJnF1b3Q7PC9jb2RlPiB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcmFuZ2Ugb2YgaW50
ZWdlcnMgPGNvZGU+MSZsdDs9biZsdDs9MTA8L2NvZGU+LiBZb3UgY2FuIG9wdGlvbmFsbHkg
c2V0IGl0cyBzdGVwIGFuZCBkaXJlY3Rpb246IDxjb2RlPlsxMC4uMToyXTwvY29kZT4gaXMg
aW50ZXJwcmV0ZWQgYXMgdGhlIGFycmF5IDxjb2RlPlsxMCw4LC4uLiwyXTwvY29kZT4sIGJ1
dCA8Y29kZT5bMTAuLjE6KzJdPC9jb2RlPiBpcyBlbXB0eS48L3A+CgoJPGg0PkV4YW1wbGVz
PC9oND4KCgk8aDU+UHJlZmV0Y2hpbmcgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UT0M8L3Nw
YW4+PC9oNT4KCgk8cD5UaGUgYXJ0aWNsZSBmb3JtPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhw
OmlmX2luZGl2aWR1YWxfYXJ0aWNsZSZndDsKICAmbHQ7dHhwOmV0Y19xdWVyeSBkYXRhPSZx
dW90O3s/Ym9keX0mcXVvdDsgcXVlcnk9JnF1b3Q7Ly9oMnwvL2gzfC8vaDR8Ly9oNSZxdW90
OyBsYWJlbD0mcXVvdDtUYWJsZSBvZiBDb250ZW50cyZxdW90OyBsYWJlbHRhZz0mcXVvdDto
MSZxdW90OyAvJmd0OwogICZsdDt0eHA6Ym9keSAvJmd0OwombHQ7dHhwOmVsc2UgLyZndDsK
ICAmbHQ7dHhwOmV4Y2VycHQgLyZndDsKICAmbHQ7dHhwOmV0Y19xdWVyeSBkYXRhPSZxdW90
O3s/Ym9keX0mcXVvdDsgcXVlcnk9JnF1b3Q7Ly9pbWcmcXVvdDsmZ3Q7CiAgICAmbHQ7bGlu
ayByZWw9JnF1b3Q7cHJlZmV0Y2gmcXVvdDsgaHJlZj0mcXVvdDt7QHNyYz99JnF1b3Q7IC8m
Z3Q7CiAgJmx0Oy90eHA6ZXRjX3F1ZXJ5Jmd0OwombHQ7L3R4cDppZl9pbmRpdmlkdWFsX2Fy
dGljbGUmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD53aWxsIHByZS1sb2FkIHRoZSBpbWFnZXMg
Zm91bmQgaW4gYXJ0aWNsZXMmIzgyMTc7IGJvZGllcyB3aGlsZSB2aWV3aW5nIHRoZSBleGNl
cnB0cywgYW5kIHByb2R1Y2UgYSB0YWJsZSBvZiBjb250ZW50cyBpbiB0aGUgaW5kaXZpZHVh
bCBhcnRpY2xlIHZpZXcuPC9wPgoKCTxoNT5DdXN0b21pemluZyBoYXJkLWNvZGVkIHR4cCB0
YWdzPC9oNT4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfcXVlcnkgZGF0YT0mIzM5OyZsdDt0
eHA6Y29tbWVudHNfZm9ybSAvJmd0OyYjMzk7IHF1ZXJ5PSZxdW90Oy8vdGV4dGFyZWFbQGlk
PSYjMzk7bWVzc2FnZSYjMzk7XSZxdW90OyByZXBsYWNlPSZxdW90O0BAcmVxdWlyZWQ9cmVx
dWlyZWRAcGxhY2Vob2xkZXI9RHJvcCB1cyBhIHdvcmQmcXVvdDsgLyZndDsKPC9jb2RlPjwv
cHJlPgoKCTxoNT5BZGRpbmcgPGNvZGU+X0dFVDwvY29kZT4gZGF0YSB0byBzb21lIDxzcGFu
IGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHZhcmlhYmxlPC9oNT4KCjxwcmU+PGNvZGU+Jmx0
O3R4cDpldGNfcXVlcnkgZ2xvYmFscz0mcXVvdDt2YXJpYWJsZSxfR0VUJnF1b3Q7IHF1ZXJ5
PSZxdW90O3s/dmFyfSt7P2dldHZhcnwwfGludHZhbH0mcXVvdDsgLyZndDsKPC9jb2RlPjwv
cHJlPgoKCTxoNT5NdWx0aXBsaWNhdGlvbiB0YWJsZSA6LSk8L2g1PgoKPHByZT48Y29kZT4m
bHQ7dHhwOmV0Y19xdWVyeSBkYXRhPSZxdW90O1sxLi45XSZxdW90OyBicmVhaz0mcXVvdDt0
ciZxdW90OyB3cmFwdGFnPSZxdW90O3RhYmxlJnF1b3Q7Jmd0OwombHQ7dHhwOmV0Y19xdWVy
eSBkYXRhPSZxdW90O1sxLi45XSZxdW90OyBicmVhaz0mcXVvdDt0ZCZxdW90OyZndDsKe3sk
Kns/fX19CiZsdDsvdHhwOmV0Y19xdWVyeSZndDsKJmx0Oy90eHA6ZXRjX3F1ZXJ5Jmd0Owo8
L2NvZGU+PC9wcmU+CgoJPGg1PkltcG9ydGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+UlNTPC9z
cGFuPiBmZWVkczwvaDU+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3F1ZXJ5IHVybD0mcXVv
dDtodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL2V4dGVybi5waHA/dHlwZT1SU1MmYW1w
O2FjdGlvbj1uZXcmYW1wO2ZpZD03OSZxdW90OwogIG1hcmt1cD0mcXVvdDt4bWwmcXVvdDsK
ICBxdWVyeT0mcXVvdDsvL2NoYW5uZWwvaXRlbVtwb3NpdGlvbigpJmx0OzZdJnF1b3Q7CiAg
d3JhcHRhZz0mcXVvdDtkbCZxdW90OwogIGxhYmVsPSZxdW90O05ld3MgZnJvbSBUZXh0cGF0
dGVybiBGb3J1bSZxdW90OyBsYWJlbHRhZz0mcXVvdDtoNCZxdW90OyZndDsKICAgICZsdDtk
dCZndDsmbHQ7YSBocmVmPSZxdW90O3tsaW5rP30mcXVvdDsmZ3Q7e3RpdGxlP30mbHQ7L2Em
Z3Q7Jmx0Oy9kdCZndDsKICAgICZsdDtkZCZndDt7ZGVzY3JpcHRpb24/fSZsdDsvZGQmZ3Q7
CiZsdDsvdHhwOmV0Y19xdWVyeSZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk1vcmUgaGVscCBh
bmQgZXhhbXBsZXMgb24gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gRm9ydW0gPGEg
aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTM3
OTMyIj50aHJlYWQ8L2E+IG9yIHBsdWdpbnMgPGEgaHJlZj0iaHR0cDovL3d3dy5pdXQtZmJs
ZWF1LmZyL3Byb2pldC9ldGMvIj5ob21lPC9hPi48L3A+CgoJPGg0Pkhpc3Rvcnk8L2g0PgoK
CTx1bD4KCQk8bGk+VmVyc2lvbiAwLjE6IHByb29mIG9mIGNvbmNlcHQsIG5vdCBwdWJsaWNs
eSByZWxlYXNlZC48L2xpPgoJCTxsaT5WZXJzaW9uIDAuMjogZmlyc3QgcmVsZWFzZS48L2xp
PgoJCTxsaT5WZXJzaW9uIDAuMzogZml4ZWQgZW5jb2RpbmcuPC9saT4KCQk8bGk+VmVyc2lv
biAwLjQ6IGFkZGVkIDxzdHJvbmc+cmVtb3ZlPC9zdHJvbmc+IGFuZCA8c3Ryb25nPnNlcGFy
YXRvcjwvc3Ryb25nPiBhdHRyaWJ1dGVzLjwvbGk+CgkJPGxpPlZlcnNpb24gMC40MTogY2Fu
IGFsc28gYmUgdXNlZCBhcyBzaW5nbGUgdGFnLjwvbGk+CgkJPGxpPlZlcnNpb24gMC41OiBm
aXhlZCBodG1sIG1hcmt1cCwgZW5oYW5jZWQgPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+IGF0
dHJpYnV0ZS48L2xpPgoJCTxsaT5WZXJzaW9uIDAuNjogcmVtb3ZlZCA8c3Ryb25nPnJlbW92
ZTwvc3Ryb25nPiAobWVyZ2VkIHdpdGggPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+KSwgaW50
cm9kdWNlZCBzcGVjaWFsIHBhdHRlcm5zLiBUaGUgPHN0cm9uZz5uYW1lIGlzIGNoYW5nZWQ8
L3N0cm9uZz4gdG8gPGNvZGU+ZXRjX3F1ZXJ5PC9jb2RlPi48L2xpPgoJCTxsaT5WZXJzaW9u
IDAuNjE6IG1pbm9yIHR3ZWFrcy48L2xpPgoJCTxsaT5WZXJzaW9uIDAuNzogYWRkZWQgPHN0
cm9uZz5mdW5jdGlvbnM8L3N0cm9uZz4sIDxzdHJvbmc+bGltaXQ8L3N0cm9uZz4gYW5kIDxz
dHJvbmc+b2Zmc2V0PC9zdHJvbmc+LCBlbmhhbmNlZCA8c3Ryb25nPnJlcGxhY2U8L3N0cm9u
Zz4uPC9saT4KCQk8bGk+VmVyc2lvbiAwLjc1OiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z
cGFuPiBmdW5jdGlvbnMgaW4gPHN0cm9uZz5yZXBsYWNlPC9zdHJvbmc+LjwvbGk+CgkJPGxp
PlZlcnNpb24gMC44OiBOb3cgY2FuIGFsc28gcXVlcnkgZGF0YWJhc2VzIGFuZCBhcnJheXMv
b2JqZWN0cy48L2xpPgoJCTxsaT5WZXJzaW9uIDAuODI6IGludHJvZHVjZWQgPHN0cm9uZz5z
cGVjaWFsczwvc3Ryb25nPiBhdHRyaWJ1dGUuPC9saT4KCQk8bGk+VmVyc2lvbiAwLjg3OiBl
bmhhbmNlZCBzcGVjaWFsIHBhdHRlcm5zIHdpdGggZGVmYXVsdCB2YWx1ZXMuPC9saT4KCQk8
bGk+VmVyc2lvbiAwLjg4OiBlbmhhbmNlZCBzcGVjaWFsIHBhdHRlcm5zIHdpdGggc2FuaXRp
emVyIGZ1bmN0aW9ucy4gRHJvcHBlZCA8c3Ryb25nPnByZXBhcnNlPC9zdHJvbmc+IGF0dHJp
YnV0ZS48L2xpPgoJCTxsaT5WZXJzaW9uIDAuODk6IG1pbm9yIGJ1Z2ZpeGVzLjwvbGk+CgkJ
PGxpPlZlcnNpb24gMC45OiBpbnRyb2R1Y2VkIDxzdHJvbmc+cGFyc2U8L3N0cm9uZz4gYW5k
IDxzdHJvbmc+c2FuaXRpemU8L3N0cm9uZz4gYXR0cmlidXRlcy48L2xpPgoJCTxsaT5WZXJz
aW9uIDAuOTM6IGludGVybmFsIG9wdGltaXphdGlvbi48L2xpPgoJCTxsaT5WZXJzaW9uIDAu
OTY6IHF1ZXJ5IGVuaGFuY2VtZW50cy48L2xpPgoJCTxsaT5WZXJzaW9uIDAuOTc6IG1vcmUg
cm9idXN0IHBhcnNlci48L2xpPgoJCTxsaT5WZXJzaW9uIDAuOTg6IGZ1bmN0aW9uIHBhdHRl
cm5zIHJlc3BlY3QgcGhwIHNjcmlwdGluZyBwcmVmZXJlbmNlcyAvIHVzZXIgbGV2ZWxzLjwv
bGk+CgkJPGxpPlZlcnNpb24gMS4wOiBlbmhhbmNlZCA8c3Ryb25nPnJlcGxhY2U8L3N0cm9u
Zz4gYXR0cmlidXRlLCBlbmFibGVkIGJ5LXJlZmVyZW5jZSBwYXNzaW5nIGluIGZ1bmN0aW9u
cy48L2xpPgoJCTxsaT5WZXJzaW9uIDEuMTogZXZlbiBtb3JlIGVuaGFuY2VkIDxzdHJvbmc+
cmVwbGFjZTwvc3Ryb25nPiBhdHRyaWJ1dGUuPC9saT4KCQk8bGk+VmVyc2lvbiAxLjI6IGlm
IGVuYWJsZWQgb24gdGhlIHNlcnZlciwgPHNwYW4gY2xhc3M9ImNhcHMiPlhTTDwvc3Bhbj4g
dHJhbnNmb3JtcyBjYW4gYmUgdXNlZCBpbiA8c3Ryb25nPnJlcGxhY2U8L3N0cm9uZz4gYW5k
IDxzdHJvbmc+Y29udGVudDwvc3Ryb25nPiB0byBmb3JtYXQgdGhlIG91dHB1dC48L2xpPgoJ
PC91bD4iO3M6MzoibWQ1IjtzOjMyOiJmOTI5MGNlMWFkNmExZjg4ZTY2NGI1ZTcxZjcwMDEw
ZCI7fQ==

Offline

#356 2020-08-09 10:22:17

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 8,774
Website GitHub Twitter

Re: etc_query: all things Textpattern

Thanks so much Oleg. Updated and I will check this evening.


Yiannis
——————————
neme.org | hblack.net | State Machines | NeMe @ github
I do my best editing after I click on the submit button.

Offline

#357 2020-08-09 10:40:22

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 8,774
Website GitHub Twitter

Re: etc_query: all things Textpattern

Found 10 minutes for a quick scan and everything works well. I did notice another instance of EvalElse in v1.3.5, but it appears that it is behaving.


Yiannis
——————————
neme.org | hblack.net | State Machines | NeMe @ github
I do my best editing after I click on the submit button.

Offline

#358 2020-08-09 11:42:59

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Thanks for testing, glad etc_query works for you again. It needs to analyse its content before parsing, whence the need for extracting true/false parts via EvalElse(). I might revise it when 4.8.3 is released.

Offline

#359 2020-12-29 22:06:25

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

Re: etc_query: all things Textpattern

etc wrote #315530:

Here is something to make you start:

<txp:variable name="contlist">...

Hey Oleg

Is the following functionality available in etc_query or something like “FOR” and “RETURN” in the code?

Suppose that we want to export all the contributor names to a single column of a flat file and we want to present the Last Name first, followed by a comma and the First Name. To reach that goal, we will use a FOR instruction that will apply a “concat” function to each instance of “//Product/Contributor” composite. The corresponding XPATH expression will look like this:

for $x in //Product/Contributor
return concat($x/KeyNames, ‘, ‘, $x/NamesBeforeKey)

From here which is another product I use:
https://onixedit.com/portals/0/docs/manuals/ONIXEDIT/DefiningXPATHexpressions.html

Thanks
Les

Last edited by lazlo (2020-12-29 22:07:09)

Offline

#360 2020-12-31 13:32:50

etc
Developer
Registered: 2010-11-11
Posts: 4,546
Website GitHub

Re: etc_query: all things Textpattern

Hi Les,

I don’t know where you pull the data from and how the output should be formatted, but that looks straightforward:

<txp:etc_query data="...valid XML input..." query="//Contributor" markup="xml">
    {KeyNames?}, {NamesBeforeKey?}
</txp:etc_query>

Offline

Board footer

Powered by FluxBB