Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Jul 2020 11:05:24 -0700
From:      Don Wilde <dwilde1@gmail.com>
To:        yuri@freebsd.org
Cc:        freebsd-stable@freebsd.org
Subject:   Re: quirk in libpng16.{a|so}
Message-ID:  <0fc386c4-35dc-39de-a0f0-365e82d4efde@gmail.com>
In-Reply-To: <d6be190a-878c-5af4-fa40-72b353b97503@rawbw.com>
References:  <05550c7e-e76b-5373-03ec-8e9008f3927f@gmail.com> <d6be190a-878c-5af4-fa40-72b353b97503@rawbw.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------2213BD46D49BCD2C860E8E1F
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit


On 7/14/20 10:10 AM, yuri@freebsd.org wrote:
> On 2020-07-14 09:59, Don Wilde wrote:
>> Hi, Yuri -- I understand that you maintain the png++ "C++ wrapper for 
>> libpng"?
>>
>> There's a game engine I'm trying to work with on my 12-stable system, 
>> called Drag[en]gine.
>>
>> https://dragondreams.ch/
>>
>> It's a complicated port, and I'll end up tweaking some heavy-duty 
>> OpenGL graphics to get it to do stuff for me. The first issue is that 
>> our libpng16 library is missing a C++ call: 
>> png_access_version_number(), which causes its setup program (a Python 
>> script)to crash.
>>
>> I have both png and png++ installed and both libpng16.so and 
>> libpng16.a are present.
>>
>> I'm in the process of (also) installing it on my Ubuntu 18.04.4 
>> machine. It hasn't given me this libpng16 issue.
>>
>> What do you think of this problem? Is this yours or is it the actual 
>> libpng library itself?
>>
>
> Hi Don,
>
>
> I used png++ on both Linux (CentOS) and FreeBSD without any problems.
>
>
> I also can't find png_access_version_number() call in the png++ sources.

Okay, this must actually be a call in the actual libpng sources.

>
>
> Could you please provide an example code that exhibits the problem?

Here's what happens, though there's evidently quite a bit of 
construction that happens in the middle.

scons is Yet Another Super-Make, and it's plus (evidently) is that it 
can also generate Android and Windows code.

I type 'scons -h', and the output is:
scons: Reading SConscript files ...
Checking for zlibVersion() in C++ library z... yes
Checking for png_access_version_number() in C++ library png16... no
KeyError: 'forceRuntimeLibs':
   File "/opt/dragengine/SConstruct", line 633:
     duplicate=0, exports='parent_env parent_targets parent_report' )
   File 
"/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", 
line 660:
     return method(*args, **kw)
   File 
"/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", 
line 597:
     return _SConscript(self.fs, *files, **subst_kw)
   File 
"/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", 
line 286:
     exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
   File "/opt/dragengine/extern/libpng/SConscript", line 120:
forceRuntimeLibs.extend(parent_targets['lib_zlib']['forceRuntimeLibs'])

The SConscript files are generated from the (attached) custom.py, from 
what I understand. The error happens in the construct between lines 631 
- 633 of that attached SConscript file (which acts like Makefile does 
for C and C++).

Don Wilde
****************************************************
* What is the Internet of Things but a system      *
* of systems including humans?                     *
****************************************************


--------------2213BD46D49BCD2C860E8E1F
Content-Type: text/plain; charset=UTF-8;
 name="SConstruct"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="SConstruct"

ZnJvbSBTQ29uc0NvbW1vbiBpbXBvcnQgKg0KZnJvbSBTQ29uc1BsYXRmb3JtQW5kcm9pZCBp
bXBvcnQgYW5kcm9pZFVwZGF0ZUVudg0KDQojIGNyZWF0ZSBlbnZpcm9ubWVudA0KdG9vbHMg
PSBBUkdVTUVOVFMuZ2V0KCAndG9vbHMnLCAnJyApDQppZiB0b29sczoNCglpZiB0b29scyA9
PSAnbWluZ3c2NCc6DQoJCXBhcmVudF9lbnYgPSBFbnZpcm9ubWVudCggQ1BQUEFUSD0nLics
IExJQlBBVEg9Jy4nLCB0b29scz1bJ21pbmd3J10gKQ0KCQkNCgkJY29tcGlsZXIgPSAneDg2
XzY0LXc2NC1taW5ndzMyJw0KCQlpZiBub3QgcGFyZW50X2Vudi5EZXRlY3QoICd7fS1nKysn
LmZvcm1hdCggY29tcGlsZXIgKSApOg0KCQkJcHJpbnQoICdXaW5kb3dzIDY0LWJpdCBDcm9z
cy1Db21waWxlciBub3QgZm91bmQuJyApDQoJCQlSZXR1cm4oKQ0KCQkNCgkJcGFyZW50X2Vu
di5SZXBsYWNlKCBDQyA9ICd7fS1nY2MnLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVu
dF9lbnYuUmVwbGFjZSggQ1hYID0gJ3t9LWcrKycuZm9ybWF0KCBjb21waWxlciApICkNCgkJ
cGFyZW50X2Vudi5SZXBsYWNlKCBMRCA9ICd7fS1sZCcuZm9ybWF0KCBjb21waWxlciApICkN
CgkJcGFyZW50X2Vudi5SZXBsYWNlKCBBUiA9ICd7fS1hcicuZm9ybWF0KCBjb21waWxlciAp
ICkNCgkJcGFyZW50X2Vudi5SZXBsYWNlKCBTVFJJUCA9ICd7fS1zdHJpcCcuZm9ybWF0KCBj
b21waWxlciApICkNCgkJI3BhcmVudF9lbnYuUmVwbGFjZSggTUFLRSA9ICd7fS1tYWtlJy5m
b3JtYXQoIGNvbXBpbGVyICkgKQ0KCQlwYXJlbnRfZW52LlJlcGxhY2UoIFJBTkxJQiA9ICd7
fS1yYW5saWInLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVudF9lbnYuUmVwbGFjZSgg
Tk0gPSAne30tbm0nLmZvcm1hdCggY29tcGlsZXIgKSApDQoJCXBhcmVudF9lbnYuUmVwbGFj
ZSggUkMgPSAne30td2luZHJlcycuZm9ybWF0KCBjb21waWxlciApICkNCgkJcGFyZW50X2Vu
di5SZXBsYWNlKCBETExUT09MID0gJ3t9LWRsbHRvb2wnLmZvcm1hdCggY29tcGlsZXIgKSAp
DQoJCQ0KCQlwYXJlbnRfZW52LlJlcGxhY2UoIFNIQ0NGTEFHUyA9IFsgJyRDQ0ZMQUdTJyBd
ICkgIyByZW1vdmUgLWZQSUMgaWYgaW5jbHVkZWQuIGp1c3QgdG8gc2lsZW5jZSBtaXNsZWFk
aW5nIHdhcm5pbmdzDQoJCXBhcmVudF9lbnYuUmVwbGFjZSggU0hMSUJQUkVGSVggPSAnJyAp
ICMgZml4IHByZWZpeCBzaW5jZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGZvciB1bml4
DQoJCXBhcmVudF9lbnYuUmVwbGFjZSggU0hMSUJTVUZGSVggPSAnLmRsbCcgKSAjIGZpeCBz
dWZmaXggc2luY2UgdGhlIGVudmlyb25tZW50IGlzIHNldCB1cCBmb3IgdW5peA0KCQlwYXJl
bnRfZW52LlJlcGxhY2UoIExJQlBSRUZJWCA9ICcnICkgIyBmaXggcHJlZml4IHNpbmNlIHRo
ZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgZm9yIHVuaXgNCgkJcGFyZW50X2Vudi5SZXBsYWNl
KCBMSUJQUkVGSVhFUyA9IFsgJycgXSApICMgZml4IHByZWZpeCBzaW5jZSB0aGUgZW52aXJv
bm1lbnQgaXMgc2V0IHVwIGZvciB1bml4DQoJCXBhcmVudF9lbnYuUmVwbGFjZSggTElCU1VG
RklYID0gJy5saWInICkNCgkJcGFyZW50X2Vudi5SZXBsYWNlKCBMSUJTVUZGSVhFUyA9IFsg
Jy5saWInLCAnLmEnIF0gKQ0KCQkNCgkJcGFyZW50X2VudlsgJ09TX05BTUUnIF0gPSAnd2lu
MzInDQoJCXBhcmVudF9lbnZbICdTWVNfUExBVEZPUk0nIF0gPSAnd2luMzInDQoJCXBhcmVu
dF9lbnZbICdDUk9TU0NPTVBJTEVfSE9TVCcgXSA9IGNvbXBpbGVyDQoJCXBhcmVudF9lbnZb
ICdDUk9TU0NPTVBJTEVfU1lTUk9PVCcgXSA9ICcvdXNyL3t9Jy5mb3JtYXQoIGNvbXBpbGVy
ICkNCgkJDQoJCSMgcHJldmVudCBzdGRjKys2IHByb2JsZW1zIHdpdGggbWlzc25pZyBzeW1i
b2xzIG9uIGRpZmZlcmVudCBjb21waWxlcnMNCgkJI3BhcmVudF9lbnYuQXBwZW5kKCBDUFBG
TEFHUyA9IFsgJy1zdGQ9YysrMTEnIF0gKQ0KCQkjcGFyZW50X2Vudi5BcHBlbmQoIENST1NT
Q09NUElMRV9DRkxBR1MgPSBbICctc3RkPWMrKzExJyBdICkNCgkJI3BhcmVudF9lbnYuQXBw
ZW5kKCBDUk9TU0NPTVBJTEVfQ1BQRkxBR1MgPSBbICctc3RkPWMrKzExJyBdICkNCgkJDQoJ
CXByaW50KCAnKioqIFVzaW5nIFdpbmRvd3MgNjQgQ3Jvc3MgQ29tcGlsZXInICkNCgkJDQoJ
ZWxzZToNCgkJcGFyZW50X2VudiA9IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFU
SD0nLicsIHRvb2xzPVsgdG9vbHMgXSApDQoJCXBhcmVudF9lbnZbICdPU19OQU1FJyBdID0g
b3MubmFtZQ0KCQlwYXJlbnRfZW52WyAnU1lTX1BMQVRGT1JNJyBdID0gc3lzLnBsYXRmb3Jt
DQoNCmVsaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6DQoJcHJpbnQoICdXaW5kb3dzIGRl
dGVjdGVkLiBTZXR0aW5nIHVwIE1pbkdXNjQgdG9vbGNoYWluJyApDQoJcGFyZW50X2VudiA9
IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFUSD0nLicsIHRvb2xzPVsgJ21pbmd3
JyBdICkNCgkiIiJwYXJlbnRfZW52LlJlcGxhY2UoIENDID0gJ3g4Nl82NC13NjQtbWluZ3cz
Mi1nY2MuZXhlJyApDQoJcGFyZW50X2Vudi5SZXBsYWNlKCBDWFggPSAneDg2XzY0LXc2NC1t
aW5ndzMyLWcrKy5leGUnICkNCglwYXJlbnRfZW52LlJlcGxhY2UoIExEID0gJ3g4Nl82NC13
NjQtbWluZ3czMi1nKysuZXhlJyApDQoJcGFyZW50X2Vudi5SZXBsYWNlKCBBUiA9ICd4ODZf
NjQtdzY0LW1pbmd3MzItYXInICkNCglwYXJlbnRfZW52LlJlcGxhY2UoIFNUUklQID0gJ3g4
Nl82NC13NjQtbWluZ3czMi1zdHJpcCcgKQ0KCXBhcmVudF9lbnYuUmVwbGFjZSggTUFLRSA9
ICd4ODZfNjQtdzY0LW1pbmd3MzItbWFrZScgKQ0KCXBhcmVudF9lbnYuUmVwbGFjZSggUkMg
PSAneDg2XzY0LXc2NC1taW5ndzMyLXdpbmRyZXMnICkNCglwYXJlbnRfZW52LlJlcGxhY2Uo
IFJDID0gJ3g4Nl82NC13NjQtbWluZ3czMi1kbGx0b29sJyApIiIiDQoJI3BhcmVudF9lbnYu
QXBwZW5kKCBFTlYgPSB7ICdQQVRIJyA6ICdDOlxcTWluR1dcXHg4Nl82NC13NjQtbWluZ3cz
MlxcYmluXFwnIH0gKQ0KCSNwYXJlbnRfZW52LkFwcGVuZCggRU5WID0geyAnUEFUSCcgOiAn
QzpcTWluR1dcYmluO0M6XE1pbkdXXGxpYmV4ZWNcZ2NjXHg4Nl82NC13NjQtbWluZ3czMlw0
LjguMzsnICsgb3MuZW52aXJvblsgJ1BBVEgnIF0gfSApDQoJIyNwYXJlbnRfZW52LkFwcGVu
ZCggRU5WID0geyAnUEFUSCcgOiAnQzpcTWluR1dcYmluOycgKyBvcy5lbnZpcm9uWyAnUEFU
SCcgXSB9ICkNCglwYXJlbnRfZW52WyAnT1NfTkFNRScgXSA9IG9zLm5hbWUNCglwYXJlbnRf
ZW52WyAnU1lTX1BMQVRGT1JNJyBdID0gc3lzLnBsYXRmb3JtDQoNCmVsc2U6DQoJcGFyZW50
X2VudiA9IEVudmlyb25tZW50KCBDUFBQQVRIPScuJywgTElCUEFUSD0nLicgKQ0KCXBhcmVu
dF9lbnZbICdPU19OQU1FJyBdID0gb3MubmFtZQ0KCXBhcmVudF9lbnZbICdTWVNfUExBVEZP
Uk0nIF0gPSBzeXMucGxhdGZvcm0NCg0KcGFyZW50X2Vudi5Ub29sKCdsb2dTdGRPdXQnKQ0K
aWYgcGFyZW50X2VudlsnTG9nU3RkT3V0X0VuYWJsZWQnXToNCglwYXJlbnRfZW52WydMT0df
U1REX09VVF9GSUxFJ10gPSBvcGVuKCdidWlsZC5sb2cnLCAndycpDQoNCnBhcmVudF9lbnYu
VG9vbCgncnVuSXNvbGF0ZWQnKQ0KDQpwYXJlbnRfZW52LlRvb2woJ21hY29zX2J1bmRsZScp
DQoNCkluaXRDb21tb24oIHBhcmVudF9lbnYgKQ0KI3ByaW50KCdvcy5uYW1lJywgb3MubmFt
ZSkNCiNwcmludCgnc3lzLnBsYXRmb3JtJywgc3lzLnBsYXRmb3JtKQ0KDQojIGFwcGVuZCBm
bGFncw0KcGFyZW50X2Vudi5SZXBsYWNlKCBNT0RVTEVfQ1BQRkxBR1MgPSBbXSApDQpwYXJl
bnRfZW52LlJlcGxhY2UoIE1PRFVMRV9MSU5LRkxBR1MgPSBbXSApDQoNCmlmICdDUFBGTEFH
UycgaW4gb3MuZW52aXJvbjoNCglwYXJlbnRfZW52LkFwcGVuZCggQ1BQRkxBR1MgPSBvcy5l
bnZpcm9uWyAnQ1BQRkxBR1MnIF0gKQ0KDQppZiAnTERGTEFHUycgaW4gb3MuZW52aXJvbjoN
CglwYXJlbnRfZW52LkFwcGVuZCggTElOS0ZMQUdTID0gb3MuZW52aXJvblsgJ0xERkxBR1Mn
IF0gKQ0KDQppZiBwYXJlbnRfZW52WydPU1Bvc2l4J106DQoJcGFyZW50X2Vudi5BcHBlbmQo
IENQUEZMQUdTID0gWyAnLURPU19VTklYJyBdICkNCg0KaWYgcGFyZW50X2VudlsnT1NXaW5k
b3dzJ106DQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLURPU19XMzInLCAn
LW13aW5kb3dzJyBdICkNCgkjIG1pbmd3IHJlcXVpcmVzIHRoaXMgdG8gcmVjb2duaXplIHdX
aW5NYWluDQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLW11bmljb2RlJyBd
ICkNCgkNCmVsaWYgcGFyZW50X2VudlsnT1NCZU9TJ106DQoJcGFyZW50X2Vudi5BcHBlbmQo
IENQUEZMQUdTID0gWyAnLURPU19CRU9TJyBdICkNCglwYXJlbnRfZW52LkFwcGVuZCggTElO
S0ZMQUdTID0gWyAnLUwvYm9vdC9jb21tb24vbGliJyBdICkNCgkNCmVsaWYgcGFyZW50X2Vu
dlsnT1NNYWNPUyddOg0KCXBhcmVudF9lbnYuQXBwZW5kKENQUEZMQUdTID0gWyctRE9TX01B
Q09TJ10pDQoNCmlmIG5vdCAocGFyZW50X2VudlsnT1NQb3NpeCddIG9yIHBhcmVudF9lbnZb
J09TV2luZG93cyddIG9yIHBhcmVudF9lbnZbJ09TQmVPUyddIG9yIHBhcmVudF9lbnZbJ09T
TWFjT1MnXSk6DQoJRXhpdCggJ05vIHN1cHBvcnRlZCBPUyBmb3VuZCEnKQ0KDQojIHBhcmFt
ZXRlcnMNCiNwYXJhbXMgPSBWYXJpYWJsZXMoIFsgJ3BhcmFtZXRlcnMuY2FjaGUnLCAnY3Vz
dG9tLnB5JyBdICkNCnBhcmFtcyA9IFZhcmlhYmxlcyggWyAnY3VzdG9tLnB5JyBdICkNCg0K
cGFyYW1zLkFkZCggRW51bVZhcmlhYmxlKCAncGxhdGZvcm1fYW5kcm9pZCcsICdCdWlsZCBm
b3IgQW5kcm9pZCBwbGF0Zm9ybScsICdubycsIFsnbm8nLCdhcm12NycsJ3g4NiddICkgKQ0K
cGFyYW1zLkFkZCggQm9vbFZhcmlhYmxlKCAnd2l0aF90ZXN0cycsICdCdWlsZCBlbmdpbmUg
dGVzdHMnLCBGYWxzZSApICkNCnBhcmFtcy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfZGVi
dWcnLCAnQnVpbGQgd2l0aCBkZWJ1ZyBzeW1ib2xzIGZvciBHREIgdXNhZ2UnLCBGYWxzZSAp
ICkNCnBhcmFtcy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfd2FybmVycm9ycycsICdUcmVh
dCB3YXJuaW5ncyBhcyBlcnJvcnMgKCBkZXYtYnVpbGRzICknLCBGYWxzZSApICkNCnBhcmFt
cy5BZGQoIEJvb2xWYXJpYWJsZSggJ3dpdGhfc2FuaXRpemUnLCAnRW5hYmxlIHNhbml0aXpp
bmcgKGRldi1idWlsZHMpJywgRmFsc2UgKSApDQpwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUo
ICd3aXRoX3Nhbml0aXplX3RocmVhZCcsICdFbmFibGUgdGhyZWFkIHNhbml0aXppbmcgKGRl
di1idWlsZHMpJywgRmFsc2UgKSApDQpwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUoICd3aXRo
X3ZlcmJvc2UnLCAnVmVyYm9zZSBjb21waWxhdGlvbiBzaG93aW5nIGNvbW1hbmQgbGluZXMo
IGRldi1idWlsZHMgKScsIEZhbHNlICkgKQ0KcGFyYW1zLkFkZChTdHJpbmdWYXJpYWJsZSgn
Zm9yY2VfdmVyc2lvbicsICdGb3JjZSB2ZXJzaW9uIChlbXB0eSB0byBkaXNhYmxlKScsICcn
KSkNCg0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1femxpYics
ICdVc2UgU3lzdGVtIFpsaWInICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAn
d2l0aF9zeXN0ZW1fbGlicG5nJywgJ1VzZSBTeXN0ZW0gbGlicG5nJyApICkNCnBhcmFtcy5B
ZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX3NuZGlvJywgJ1VzZSBTeXN0ZW0g
c25kaW8nICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1f
bGliYXBuZycsICdVc2UgU3lzdGVtIGxpYmFwbmcnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFy
eVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1fbGlianBlZycsICdVc2UgU3lzdGVtIEpQRUcnICkg
KQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0ZW1fb3BlbmFsJywg
J1VzZSBTeXN0ZW0gT3BlbkFMJyApICkNCnBhcmFtcy5BZGQoIExpc3RWYXJpYWJsZSggJ3dp
dGhfb3BlbmFsX2JhY2tlbmRzJywgJ1doZW4gY29tcGlsaW5nIE9wZW5BTCB3aGF0IGJhY2tl
bmRzIGFyZSByZXF1aXJlZCcsDQoJW10sIFsnYWxzYScsICdwdWxzZWF1ZGlvJywgJ3BvcnRh
dWRpbycsICdvc3MnXSApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhf
c3lzdGVtX2xpYm9nZycsICdVc2UgU3lzdGVtIGxpYm9nZycgKSApDQpwYXJhbXMuQWRkKCBU
ZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJ2b3JiaXMnLCAnVXNlIFN5c3RlbSBs
aWJ2b3JiaXMnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9zeXN0
ZW1fbGlidGhlb3JhJywgJ1VzZSBTeXN0ZW0gbGlidGhlb3JhJyApICkNCnBhcmFtcy5BZGQo
IFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2ZveCcsICdVc2UgU3lzdGVtIEZPWCBU
b29sa2l0JyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVt
X2RyYWdvbnNjcmlwdCcsICdVc2UgU3lzdGVtIERyYWdvblNjcmlwdCcgKSApDQpwYXJhbXMu
QWRkKCBQYXRoVmFyaWFibGUoICd3aXRoX2RyYWdvbnNjcmlwdF9pbmMnLA0KCSdQYXRoIHRv
IERyYWdvblNjcmlwdCBpbmNsdWRlIGZpbGVzIG9yIGVtcHR5IHRvIHVzZSBzeXN0ZW0gZGVm
YXVsdCcsDQoJJycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KcGFyYW1zLkFkZCgg
UGF0aFZhcmlhYmxlKCAnd2l0aF9kcmFnb25zY3JpcHRfbGliJywNCgknUGF0aCB0byBEcmFn
b25TY3JpcHQgbGlicmFyeSBmaWxlcyBvciBlbXB0eSB0byB1c2Ugc3lzdGVtIGRlZmF1bHQn
LA0KCScnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCnBhcmFtcy5BZGQoIFRlcm5h
cnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2xpYmZmaScsICdVc2UgU3lzdGVtIGxpYmZmaScg
KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJsdGRs
JywgJ1VzZSBTeXN0ZW0gbGlibHRkbCcgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFi
bGUoICd3aXRoX3N5c3RlbV9saWJzaWdzZWd2JywgJ1VzZSBTeXN0ZW0gbGlic2lnc2Vndicg
KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9zbWFsbHRh
bGsnLCAnVXNlIFN5c3RlbSBTbWFsbHRhbGsnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZh
cmlhYmxlKCAnd2l0aF9zeXN0ZW1fbGliZXZkZXYnLCAnVXNlIFN5c3RlbSBsaWJldmRldicg
KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3N5c3RlbV9saWJ1c2In
LCAnVXNlIFN5c3RlbSBsaWJ1c2InICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxl
KCAnd2l0aF9zeXN0ZW1fbGliaGlkYXBpJywgJ1VzZSBTeXN0ZW0gbGliaGlkYXBpJyApICkN
CnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfc3lzdGVtX2xpYm9wZW5obWQn
LCAnVXNlIFN5c3RlbSBsaWJvcGVuaG1kJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJp
YWJsZSggJ3dpdGhfc3lzdGVtX2ZmdHcnLCAnVXNlIFN5c3RlbSBmZnR3JyApICkNCg0KcGFy
YW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9vcGVuZ2wnLCAnVXNlIE9wZW5HTCcg
KSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3B5dGhvbicsICdVc2Ug
UHl0aG9uJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfbnBhcGlz
ZGsnLCAnVXNlIE5QQVBJIFNESycgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUo
ICdidWlsZF9hdWRpb19vcGVuYWwnLCAnQnVpbGQgT3BlbkFMIEF1ZGlvIE1vZHVsZScgKSAp
DQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9jcl9iYXNpYycsICdCdWls
ZCBCYXNpYyBDcmFzaC1SZWNvdmVyeSBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFy
eVZhcmlhYmxlKCAnYnVpbGRfZ3JhcGhpY3Nfb3BlbmdsJywgJ0J1aWxkIE9wZW5HTCBHcmFw
aGljcyBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRf
aW1hZ2VfcG5nJywgJ0J1aWxkIFBORyBJbWFnZSBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCgg
VGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW1hZ2VfcG5nM2QnLCAnQnVpbGQgUE5HLTNEIElt
YWdlIE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9p
bWFnZV9qcGVnJywgJ0J1aWxkIEpQRUcgSW1hZ2UgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQo
IFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X3gnLCAnQnVpbGQgWCBJbnB1dCBNb2R1
bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW5wdXRfdzMy
JywgJ0J1aWxkIFdpbmRvd3MgSW5wdXQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5h
cnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X2Jlb3MnLCAnQnVpbGQgQmVPUyBJbnB1dCBNb2R1
bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfaW5wdXRfbWFj
b3MnLCAnQnVpbGQgTWFjT1MgSW5wdXQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5h
cnlWYXJpYWJsZSggJ2J1aWxkX2lucHV0X2FuZHJvaWQnLCAnQnVpbGQgQW5kcm9pZCBJbnB1
dCBNb2R1bGUnICkgKQ0KcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfcGh5
c2ljc19idWxsZXQnLCAnQnVpbGQgQnVsbGV0IFBoeXNpY3MgTW9kdWxlJywgVHJ1ZSApICkN
CnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3NjcmlwdF9kcycsICdCdWls
ZCBEcmFnb25TY3JpcHQgU2NyaXB0IE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJuYXJ5
VmFyaWFibGUoICdidWlsZF9zY3JpcHRfcHl0aG9uJywgJ0J1aWxkIFB5dGhvbiBTY3JpcHQg
TW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3Njcmlw
dF9zbWFsbHRhbGsnLCAnQnVpbGQgU21hbGx0YWxrIFNjcmlwdCBNb2R1bGUnICkgKQ0KcGFy
YW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfc291bmRfb2dnJywgJ0J1aWxkIE9H
RyBWb3JiaXMgU291bmQgTW9kdWxlJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJs
ZSggJ2J1aWxkX3ZpZGVvX3RoZW9yYScsICdCdWlsZCBUaGVvcmEgVmlkZW8gTW9kdWxlJyAp
ICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX3ZpZGVvX2FwbmcnLCAn
QnVpbGQgQW5pbWF0ZWQgUE5HIFZpZGVvIE1vZHVsZScgKSApDQpwYXJhbXMuQWRkKCBUZXJu
YXJ5VmFyaWFibGUoICdidWlsZF9pZ2RlJywgJ0J1aWxkIElHREUnICkgKQ0KcGFyYW1zLkFk
ZCggVGVybmFyeVZhcmlhYmxlKCAnYnVpbGRfZ3VpbGF1bmNoZXInLCAnQnVpbGQgR1VJIExh
dW5jaGVyJyApICkNCnBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ2J1aWxkX2xhdW5j
aGVyX2FuZHJvaWQnLCAnQnVpbGQgQW5kcm9pZCBMYXVuY2hlcicgKSApDQpwYXJhbXMuQWRk
KCBUZXJuYXJ5VmFyaWFibGUoICdidWlsZF9hcmNoaXZlX2RlbGdhJywgJ0J1aWxkIERFTEdB
IEFyY2hpdmUgTW9kdWxlJyApICkNCg0KcGFyYW1zLkFkZCggRW51bVZhcmlhYmxlKCAnYXJj
aGl2ZV9mb3JtYXQnLCAnQXJjaGl2ZSBmaWxlIGZvcm1hdCcsICd0YXJiejInLCBbJ3RhcmJ6
MicsICd6aXAnXSApICkNCnBhcmFtcy5BZGQoIFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9u
YW1lX2VuZ2luZScsDQoJJ0FyY2hpdmUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIGZv
ciBEcmFnW2VuXWdpbmUgYXJjaGl2ZScsICdkcmFnZW5naW5lJyApICkNCnBhcmFtcy5BZGQo
IFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9uYW1lX2VuZ2luZV9kZXYnLA0KCSdBcmNoaXZl
IGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbiBmb3IgRHJhZ1tlbl1naW5lIERldmVsb3Bt
ZW50IGFyY2hpdmUnLCAnZHJhZ2VuZ2luZS1kZXYnICkgKQ0KcGFyYW1zLkFkZCggU3RyaW5n
VmFyaWFibGUoICdhcmNoaXZlX25hbWVfaWdkZScsDQoJJ0FyY2hpdmUgZmlsZSBuYW1lIHdp
dGhvdXQgZXh0ZW5zaW9uIGZvciBJR0RFIGFyY2hpdmUnLCAnZGVpZ2RlJyApICkNCnBhcmFt
cy5BZGQoIFN0cmluZ1ZhcmlhYmxlKCAnYXJjaGl2ZV9uYW1lX2lnZGVfZGV2JywNCgknQXJj
aGl2ZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIElHREUgRGV2ZWxvcG1lbnQg
YXJjaGl2ZScsICdkZWlnZGVfZGV2JyApICkNCnBhcmFtcy5BZGQoIFN0cmluZ1ZhcmlhYmxl
KCAnYXJjaGl2ZV9uYW1lX3NwZWNpYWwnLA0KCSdBcmNoaXZlIGZpbGUgbmFtZSB3aXRob3V0
IGV4dGVuc2lvbiBmb3IgU3BlY2lhbCBhcmNoaXZlJywgJ2Rlc3BlY2lhbCcgKSApDQpwYXJh
bXMuQWRkKCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxlcl9uYW1lX2VuZ2luZScsDQoJJ0lu
c3RhbGxlciBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIERyYWdbZW5dZ2luZSBp
bnN0YWxsZXInLCAnaW5zdGFsbC1kcmFnZW5naW5lJyApICkNCnBhcmFtcy5BZGQoIFN0cmlu
Z1ZhcmlhYmxlKCAnaW5zdGFsbGVyX25hbWVfZW5naW5lX2RldicsDQoJJ0luc3RhbGxlciBm
aWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24gZm9yIERyYWdbZW5dZ2luZSBEZXZlbG9wbWVu
dCBpbnN0YWxsZXInLCAnaW5zdGFsbC1kcmFnZW5naW5lLWRldicgKSApDQpwYXJhbXMuQWRk
KCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxlcl9uYW1lX2lnZGUnLA0KCSdJbnN0YWxsZXIg
ZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIGZvciBJR0RFIGluc3RhbGxlcicsICdpbnN0
YWxsLWRlaWdkZScgKSApDQpwYXJhbXMuQWRkKCBTdHJpbmdWYXJpYWJsZSggJ2luc3RhbGxl
cl9uYW1lX2lnZGVfZGV2JywNCgknSW5zdGFsbGVyIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVu
c2lvbiBmb3IgSUdERSBEZXZlbG9wbWVudCBpbnN0YWxsZXInLCAnaW5zdGFsbC1kZWlnZGUt
ZGV2JyApICkNCg0KDQppZiBwYXJlbnRfZW52WydPU01hY09TJ106DQoJcGFyYW1zLkFkZCgg
VGVybmFyeVZhcmlhYmxlKCAnd2l0aF9kbCcsICdVc2UgdGhlIGR5bmFtaWMgbGlicmFyeSBz
eXN0ZW0nICkgKQ0KCXBhcmFtcy5BZGQoIFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfcHRocmVh
ZCcsICdVc2UgcHRocmVhZCcgKSApDQoJcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAn
d2l0aF94JywgJ1VzZSB0aGUgWCBXaW5kb3cgU3lzdGVtJyApICkNCgkNCglwYXJhbXMuQWRk
KEVudW1WYXJpYWJsZSgnaWdkZV90b29sa2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWls
ZGluZyBJR0RFJywgJ251bGwnLCBbJ251bGwnXSkpDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZh
cmlhYmxlKCAncHJlZml4JywgJ1N5c3RlbSBwYXRoJywgJy91c3InLCBQYXRoVmFyaWFibGUu
UGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdsaWJkaXInLCAn
U3lzdGVtIGxpYnJhcmllcycsICcke3ByZWZpeH0vbGliJywgUGF0aFZhcmlhYmxlLlBhdGhB
Y2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnaW5jbHVkZWRpcicsICdT
eXN0ZW0gaW5jbHVkZXMnLCAnJHtwcmVmaXh9L2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0
aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdkYXRhZGlyJywgJ1N5
c3RlbSBzaGFyZXMnLCAnJHtwcmVmaXh9L3NoYXJlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2Nl
cHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnc3lzY29uZmRpcicsICdTeXN0
ZW0gY29uZmlndXJhdGlvbicsICcvZXRjJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp
DQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAnZXhlY2RpcicsICdTeXN0ZW0gYmluYXJp
ZXMnLCAnL0FwcGxpY2F0aW9ucycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3N5c3ZhcmRpcicsICdTeXN0ZW0gdmFyJywgJyR7
cHJlZml4fS92YXInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdjYWNoZWRpcicsICdTeXN0ZW0gY2FjaGUnLCAnJHtzeXN2YXJk
aXJ9L2xpYicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCgg
UGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4nLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5l
IGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCAp
ICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRv
IHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVzJywNCgkJJyR7bGliZGlyfScsIFBhdGhWYXJp
YWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhf
ZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCSck
e2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkN
CglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2NvbmZpZycsICdQYXRoIHRv
IHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJhdGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2Ry
YWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQ
YXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5l
IGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFj
Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3NoYXJlJywg
J1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kcmFn
ZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0
aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUg
Y2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRo
QWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2Jp
bicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRo
VmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdw
YXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhlIElHREUgbGlicmFyaWVzJywNCgkJJyR7bGli
ZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhW
YXJpYWJsZSggJ3BhdGhfaWdkZV9pbmNsdWRlJywgJ1BhdGggdG8gdGhlIElHREUgaGVhZGVy
cycsDQoJCScke2luY2x1ZGVkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0
ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcnLCAn
UGF0aCB0byB0aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lzY29uZmRpcn0vZGVp
Z2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZh
cmlhYmxlKCAncGF0aF9pZ2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgSUdERSBkYXRhJywNCgkJ
JyR7bGliZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJh
bXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUg
SUdERSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0
aEFjY2VwdCApICkNCg0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNo
ZXJfYmluJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rp
cn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFy
aWFibGUoICdwYXRoX2xhdW5jaGVyX2Jpbl9saWInLCAnUGF0aCB0byB0aGUgTGF1bmNoZXIg
YmluYXJ5IGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFj
Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2Nv
bmZpZycsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lz
Y29uZmRpcn0vZGVsYXVuY2hlcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZGF0YScsICdQYXRoIHRv
IHRoZSBMYXVuY2hlciBkYXRhJywNCgkJJyR7bGliZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZh
cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0
aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0KCQkn
JHtkYXRhZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ
cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9nYW1lcycsICdQYXRo
IHRvIHRoZSBMYXVuY2hlciBnYW1lcycsDQoJCScvb3B0L2RlbGF1bmNoZXIvZ2FtZXMnLCBQ
YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCg0KCQ0KZWxpZiBwYXJlbnRfZW52WydPU0Jl
T1MnXToNCglwYXJhbXMuQWRkKCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX2RsJywgJ1VzZSB0
aGUgZHluYW1pYyBsaWJyYXJ5IHN5c3RlbScgKSApDQoJcGFyYW1zLkFkZCggVGVybmFyeVZh
cmlhYmxlKCAnd2l0aF9wdGhyZWFkJywgJ1VzZSBwdGhyZWFkJyApICkNCglwYXJhbXMuQWRk
KCBUZXJuYXJ5VmFyaWFibGUoICd3aXRoX3gnLCAnVXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0n
ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoRW51bVZhcmlhYmxlKCdpZ2RlX3Rvb2xraXQnLCAnVG9v
bEtpdCB0byB1c2UgZm9yIGJ1aWxkaW5nIElHREUnLCAnbnVsbCcsIFsnbnVsbCddKSkNCgkN
CglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwcmVmaXgnLCAnU3lzdGVtIHBhdGgnLCAn
L2Jvb3Qvc3lzdGVtJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFk
ZCggUGF0aFZhcmlhYmxlKCAnbGliZGlyJywgJ1N5c3RlbSBsaWJyYXJpZXMnLCAnJHtwcmVm
aXh9L2xpYicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh
dGhWYXJpYWJsZSggJ2luY2x1ZGVkaXInLCAnU3lzdGVtIGluY2x1ZGVzJywgJyR7cHJlZml4
fS9kZXZlbG9wL2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJh
bXMuQWRkKCBQYXRoVmFyaWFibGUoICdkYXRhZGlyJywgJ1N5c3RlbSBzaGFyZXMnLCAnJHtw
cmVmaXh9L2RhdGEnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdzeXNjb25mZGlyJywgJ1N5c3RlbSBjb25maWd1cmF0aW9uJywg
JyR7cHJlZml4fS9zZXR0aW5ncycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2V4ZWNkaXInLCAnU3lzdGVtIGJpbmFyaWVzJywg
JyR7cHJlZml4fS9iaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu
QWRkKCBQYXRoVmFyaWFibGUoICdzeXN2YXJkaXInLCAnU3lzdGVtIHZhcicsICcke3ByZWZp
eH0vdmFyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0
aFZhcmlhYmxlKCAnY2FjaGVkaXInLCAnU3lzdGVtIGNhY2hlJywgJyR7cHJlZml4fS9jYWNo
ZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJp
YWJsZSggJ2RvY2RpcicsICdTeXN0ZW0gZG9jdW1lbnRhdGlvbicsICcke3ByZWZpeH0vZG9j
dW1lbnRhdGlvbicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFk
ZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4nLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1n
aW5lIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2Vw
dCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRo
IHRvIHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVzJywNCgkJJyR7bGliZGlyfScsIFBhdGhW
YXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3Bh
dGhfZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJ
CScke2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCAp
ICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2NvbmZpZycsICdQYXRo
IHRvIHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJhdGlvbicsDQoJCScke3N5c2NvbmZkaXJ9
L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1n
aW5lIGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0
aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3NoYXJl
JywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9k
cmFnZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCgg
UGF0aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdp
bmUgY2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5Q
YXRoQWNjZXB0ICkgKQ0KDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2Rl
X2JpbicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0nLCBQ
YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo
ICdwYXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhlIElHREUgbGlicmFyaWVzJywNCgkJJyR7
bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh
dGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9pbmNsdWRlJywgJ1BhdGggdG8gdGhlIElHREUgaGVh
ZGVycycsDQoJCScke2luY2x1ZGVkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj
ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcn
LCAnUGF0aCB0byB0aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7c3lzY29uZmRpcn0v
ZGVpZ2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0
aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2RhdGEnLCAnUGF0aCB0byB0aGUgSUdERSBkYXRhJywN
CgkJJyR7bGliZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw
YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0
aGUgSUdERSBzaGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kZWlnZGUnLCBQYXRoVmFyaWFibGUu
UGF0aEFjY2VwdCApICkNCg0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1
bmNoZXJfYmluJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGJpbmFyaWVzJywNCgkJJyR7ZXhl
Y2Rpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo
VmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2Jpbl9saWInLCAnUGF0aCB0byB0aGUgTGF1bmNo
ZXIgYmluYXJ5IGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0
aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVy
X2NvbmZpZycsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBjb25maWd1cmF0aW9uJywNCgkJJyR7
c3lzY29uZmRpcn0vZGVsYXVuY2hlcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K
CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZGF0YScsICdQYXRo
IHRvIHRoZSBMYXVuY2hlciBkYXRhJywNCgkJJyR7bGliZGlyfS9kZWxhdW5jaGVyJywgUGF0
aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAn
cGF0aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0K
CQknJHtkYXRhZGlyfS9kZWxhdW5jaGVyJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp
DQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9nYW1lcycsICdQ
YXRoIHRvIHRoZSBMYXVuY2hlciBnYW1lcycsDQoJCScvYm9vdC9zeXN0ZW0vZGVsYXVuY2hl
ci9nYW1lcycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KZWxpZiBwYXJlbnRf
ZW52WydPU1Bvc2l4J106DQoJcGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF9k
bCcsICdVc2UgdGhlIGR5bmFtaWMgbGlicmFyeSBzeXN0ZW0nICkgKQ0KCXBhcmFtcy5BZGQo
IFRlcm5hcnlWYXJpYWJsZSggJ3dpdGhfcHRocmVhZCcsICdVc2UgcHRocmVhZCcgKSApDQoJ
cGFyYW1zLkFkZCggVGVybmFyeVZhcmlhYmxlKCAnd2l0aF94JywgJ1VzZSB0aGUgWCBXaW5k
b3cgU3lzdGVtJyApICkNCgkNCglwYXJhbXMuQWRkKEVudW1WYXJpYWJsZSgnaWdkZV90b29s
a2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWlsZGluZyBJR0RFJywgJ2ZveCcsIFsnZm94
JywnbnVsbCddKSkNCgkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwcmVmaXgnLCAn
U3lzdGVtIHBhdGgnLCAnL3VzcicsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2xpYmRpcicsICdTeXN0ZW0gbGlicmFyaWVzJywg
JyR7cHJlZml4fS9saWInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu
QWRkKCBQYXRoVmFyaWFibGUoICdpbmNsdWRlZGlyJywgJ1N5c3RlbSBpbmNsdWRlcycsICck
e3ByZWZpeH0vaW5jbHVkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFt
cy5BZGQoIFBhdGhWYXJpYWJsZSggJ2RhdGFkaXInLCAnU3lzdGVtIHNoYXJlcycsICcke3By
ZWZpeH0vc2hhcmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdzeXNjb25mZGlyJywgJ1N5c3RlbSBjb25maWd1cmF0aW9uJywg
Jy9ldGMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo
VmFyaWFibGUoICdleGVjZGlyJywgJ1N5c3RlbSBiaW5hcmllcycsICcke3ByZWZpeH0vYmlu
JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlh
YmxlKCAnc3lzdmFyZGlyJywgJ1N5c3RlbSB2YXInLCAnL3ZhcicsIFBhdGhWYXJpYWJsZS5Q
YXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ2NhY2hlZGlyJywg
J1N5c3RlbSBjYWNoZScsICcke3N5c3ZhcmRpcn0vbGliJywgUGF0aFZhcmlhYmxlLlBhdGhB
Y2NlcHQgKSApDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9iaW4n
LCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5lIGJpbmFyaWVzJywNCgkJJyR7ZXhlY2Rpcn0n
LCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFi
bGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgbGlicmFyaWVz
JywNCgkJJyR7bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFt
cy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfaW5jbHVkZScsICdQYXRoIHRvIHRoZSBE
cmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCScke2luY2x1ZGVkaXJ9L2RyYWdlbmdpbmUnLCBQ
YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo
ICdwYXRoX2RlX2NvbmZpZycsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY29uZmlndXJh
dGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2RyYWdlbmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0
aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2RhdGEn
LCAnUGF0aCB0byB0aGUgRHJhZ1tlbl1naW5lIGRhdGEnLA0KCQknJHtsaWJkaXJ9L2RyYWdl
bmdpbmUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo
VmFyaWFibGUoICdwYXRoX2RlX3NoYXJlJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBz
aGFyZXMnLA0KCQknJHtkYXRhZGlyfS9kcmFnZW5naW5lJywgUGF0aFZhcmlhYmxlLlBhdGhB
Y2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9kZV9jYWNoZScs
ICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY2FjaGUnLA0KCQknJHtjYWNoZWRpcn0vZHJh
Z2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KCXBhcmFtcy5BZGQo
IFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9iaW4nLCAnUGF0aCB0byB0aGUgSUdERSBiaW5h
cmllcycsDQoJCScke2V4ZWNkaXJ9JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ
cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX2xpYicsICdQYXRoIHRvIHRo
ZSBJR0RFIGxpYnJhcmllcycsDQoJCScke2xpYmRpcn0nLCBQYXRoVmFyaWFibGUuUGF0aEFj
Y2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfaW5jbHVk
ZScsICdQYXRoIHRvIHRoZSBJR0RFIGhlYWRlcnMnLA0KCQknJHtpbmNsdWRlZGlyfS9kZWln
ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFy
aWFibGUoICdwYXRoX2lnZGVfY29uZmlnJywgJ1BhdGggdG8gdGhlIElHREUgY29uZmlndXJh
dGlvbicsDQoJCScke3N5c2NvbmZkaXJ9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj
ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9kYXRhJywg
J1BhdGggdG8gdGhlIElHREUgZGF0YScsDQoJCScke2xpYmRpcn0vZGVpZ2RlJywgUGF0aFZh
cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0
aF9pZ2RlX3NoYXJlJywgJ1BhdGggdG8gdGhlIElHREUgc2hhcmVzJywNCgkJJyR7ZGF0YWRp
cn0vZGVpZ2RlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJDQoJcGFyYW1zLkFk
ZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9iaW4nLCAnUGF0aCB0byB0aGUgTGF1
bmNoZXIgYmluYXJpZXMnLA0KCQknJHtleGVjZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj
ZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfYmlu
X2xpYicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBiaW5hcnkgbGlicmFyaWVzJywNCgkJJyR7
bGliZGlyfScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBh
dGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfY29uZmlnJywgJ1BhdGggdG8gdGhlIExhdW5j
aGVyIGNvbmZpZ3VyYXRpb24nLA0KCQknJHtzeXNjb25mZGlyfS9kZWxhdW5jaGVyJywgUGF0
aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAn
cGF0aF9sYXVuY2hlcl9kYXRhJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGRhdGEnLA0KCQkn
JHtsaWJkaXJ9L2RlbGF1bmNoZXInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw
YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX3NoYXJlJywgJ1BhdGgg
dG8gdGhlIExhdW5jaGVyIHNoYXJlcycsDQoJCScke2RhdGFkaXJ9L2RlbGF1bmNoZXInLCBQ
YXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUo
ICdwYXRoX2xhdW5jaGVyX2dhbWVzJywgJ1BhdGggdG8gdGhlIExhdW5jaGVyIGdhbWVzJywN
CgkJJy9vcHQvZGVsYXVuY2hlci9nYW1lcycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkg
KQ0KCQ0KZWxpZiBwYXJlbnRfZW52WydPU1dpbmRvd3MnXToNCglwYXJhbXMuQWRkKEVudW1W
YXJpYWJsZSgnaWdkZV90b29sa2l0JywgJ1Rvb2xLaXQgdG8gdXNlIGZvciBidWlsZGluZyBJ
R0RFJywgJ2ZveCcsIFsnZm94JywnbnVsbCddKSkNCgkNCglwYXJhbXMuQWRkKCBQYXRoVmFy
aWFibGUoICdwcm9ncmFtZmlsZXMnLCAnV2luZG93IHByb2dyYW0gZmlsZXMgZGlyZWN0b3J5
JywNCgkJJ0BQcm9ncmFtRmlsZXMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw
YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdzeXN0ZW1yb290JywgJ1dpbmRvdyBzeXN0ZW0g
cm9vdCBkaXJlY3RvcnknLA0KCQknQFN5c3RlbScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0
ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfc2RrJywgJ1Bh
dGggdG8gRHJhZ1tlbl1naW5lIFNESyBkaXJlY3RvcnknLA0KCQknJHtwYXRoX2RlfS9TREsn
LCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFi
bGUoICdwYXRoX2RlX3Nka19saWInLCAnUGF0aCB0byBEcmFnW2VuXWdpbmUgU0RLIGxpYnJh
cmllcycsDQoJCScke3BhdGhfZGVfc2RrfS9saWInLCBQYXRoVmFyaWFibGUuUGF0aEFjY2Vw
dCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX3Nka19pbmMnLCAn
UGF0aCB0byBEcmFnW2VuXWdpbmUgU0RLIGluY2x1ZGVzJywNCgkJJyR7cGF0aF9kZV9zZGt9
L2luY2x1ZGUnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCgkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBJ
bnN0YWxsYXRpb24nLA0KCQknJHtwcm9ncmFtZmlsZXN9L0RyYWdlbmdpbmUnLCBQYXRoVmFy
aWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRo
X2RlX2JpbicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgYmluYXJpZXMnLA0KCQknJHtw
YXRoX2RlfS9CaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRk
KCBQYXRoVmFyaWFibGUoICdwYXRoX2RlX2xpYicsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdp
bmUgbGlicmFyaWVzJywNCgkJJyR7cGF0aF9kZV9zZGtfbGlifScsIFBhdGhWYXJpYWJsZS5Q
YXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfaW5j
bHVkZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgaGVhZGVycycsDQoJCScke3BhdGhf
ZGVfc2RrX2luY30vZHJhZ2VuZ2luZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K
CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfY29uZmlnJywgJ1BhdGggdG8g
dGhlIERyYWdbZW5dZ2luZSBjb25maWd1cmF0aW9uJywNCgkJJyR7cGF0aF9kZX0vQ29uZmln
JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlh
YmxlKCAncGF0aF9kZV9kYXRhJywgJ1BhdGggdG8gdGhlIERyYWdbZW5dZ2luZSBkYXRhJywN
CgkJJyR7cGF0aF9kZX0vRGF0YScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUg
RHJhZ1tlbl1naW5lIHNoYXJlcycsDQoJCScke3BhdGhfZGV9L1NoYXJlJywgUGF0aFZhcmlh
YmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9k
ZV9jYWNoZScsICdQYXRoIHRvIHRoZSBEcmFnW2VuXWdpbmUgY2FjaGUnLA0KCQknQExvY2Fs
QXBwRGF0YS9EcmFnZW5naW5lL0NhY2hlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSAp
DQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9pZ2RlX3NkaycsICdQYXRo
IHRvIERyYWdbZW5dZ2luZSBJR0RFIFNESyBkaXJlY3RvcnknLA0KCQknJHtwYXRoX2lnZGV9
L1NESycsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhW
YXJpYWJsZSggJ3BhdGhfaWdkZV9zZGtfbGliJywgJ1BhdGggdG8gRHJhZ1tlbl1naW5lIElH
REUgU0RLIGxpYnJhcmllcycsDQoJCScke3BhdGhfaWdkZV9zZGt9L2xpYicsIFBhdGhWYXJp
YWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhf
aWdkZV9zZGtfaW5jJywgJ1BhdGggdG8gRHJhZ1tlbl1naW5lIElHREUgU0RLIGluY2x1ZGVz
JywNCgkJJyR7cGF0aF9pZ2RlX3Nka30vaW5jbHVkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNj
ZXB0ICkgKQ0KCQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZScsICdQ
YXRoIHRvIHRoZSBJR0RFIEluc3RhbGxhdGlvbicsDQoJCScke3Byb2dyYW1maWxlc30vREVJ
R0RFJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZh
cmlhYmxlKCAncGF0aF9pZ2RlX2JpbicsICdQYXRoIHRvIHRoZSBJR0RFIGJpbmFyaWVzJywN
CgkJJyR7cGF0aF9pZ2RlfS9CaW4nLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglw
YXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdwYXRoX2lnZGVfbGliJywgJ1BhdGggdG8gdGhl
IElHREUgbGlicmFyaWVzJywNCgkJJyR7cGF0aF9pZ2RlX3Nka19saWJ9JywgUGF0aFZhcmlh
YmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9p
Z2RlX2luY2x1ZGUnLCAnUGF0aCB0byB0aGUgSUdERSBoZWFkZXJzJywNCgkJJyR7cGF0aF9p
Z2RlX3Nka19pbmN9L2RlaWdkZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCXBh
cmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfaWdkZV9jb25maWcnLCAnUGF0aCB0byB0
aGUgSUdERSBjb25maWd1cmF0aW9uJywNCgkJJyR7cGF0aF9pZ2RlfS9Db25maWcnLCBQYXRo
VmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRoVmFyaWFibGUoICdw
YXRoX2lnZGVfZGF0YScsICdQYXRoIHRvIHRoZSBJR0RFIGRhdGEnLA0KCQknJHtwYXRoX2ln
ZGV9L0RhdGEnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQ
YXRoVmFyaWFibGUoICdwYXRoX2lnZGVfc2hhcmUnLCAnUGF0aCB0byB0aGUgSUdERSBzaGFy
ZXMnLA0KCQknJHtwYXRoX2lnZGV9L1NoYXJlJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQg
KSApDQoJDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcicsICdQ
YXRoIHRvIHRoZSBMYXVuY2hlciBJbnN0YWxsYXRpb24nLA0KCQknJHtwYXRoX2RlfS9MYXVu
Y2hlcnMnLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMuQWRkKCBQYXRo
VmFyaWFibGUoICdwYXRoX2xhdW5jaGVyX2JpbicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBi
aW5hcmllcycsDQoJCScke3BhdGhfbGF1bmNoZXJ9L0JpbicsIFBhdGhWYXJpYWJsZS5QYXRo
QWNjZXB0ICkgKQ0KCXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJf
YmluX2xpYicsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBiaW5hcnkgbGlicmFyaWVzJywNCgkJ
JyR7cGF0aF9sYXVuY2hlcl9iaW59JywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJ
cGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9jb25maWcnLCAnUGF0
aCB0byB0aGUgTGF1bmNoZXIgY29uZmlndXJhdGlvbicsDQoJCSdAUm9hbWluZ0FwcERhdGEv
REVMYXVuY2hlcnMvQ29uZmlnJywgUGF0aFZhcmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFy
YW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0aF9sYXVuY2hlcl9kYXRhJywgJ1BhdGggdG8g
dGhlIExhdW5jaGVyIGRhdGEnLA0KCQknJHtwYXRoX2xhdW5jaGVyfS9EYXRhJywgUGF0aFZh
cmlhYmxlLlBhdGhBY2NlcHQgKSApDQoJcGFyYW1zLkFkZCggUGF0aFZhcmlhYmxlKCAncGF0
aF9sYXVuY2hlcl9zaGFyZScsICdQYXRoIHRvIHRoZSBMYXVuY2hlciBzaGFyZXMnLA0KCQkn
JHtwYXRoX2xhdW5jaGVyfS9TaGFyZScsIFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0K
CXBhcmFtcy5BZGQoIFBhdGhWYXJpYWJsZSggJ3BhdGhfbGF1bmNoZXJfZ2FtZXMnLCAnUGF0
aCB0byB0aGUgTGF1bmNoZXIgZ2FtZXMnLA0KCQknJHtwYXRoX2xhdW5jaGVyfS9HYW1lcycs
IFBhdGhWYXJpYWJsZS5QYXRoQWNjZXB0ICkgKQ0KCQ0KZWxzZToNCglFeGl0KCAnTm8gc3Vw
cG9ydGVkIE9TIGZvdW5kIScpDQoNCnBhcmFtcy5VcGRhdGUoIHBhcmVudF9lbnYgKQ0KI3By
aW50KHBhcmVudF9lbnYuRHVtcCgpKQ0KDQojIGRldGVybWluZSBzYW5pdGl6ZSBmbGFncyB0
byB1c2UNCnBhcmVudF9lbnYuUmVwbGFjZShTQU5JVElaRV9GTEFHUyA9IFtdKQ0KDQppZiBw
YXJlbnRfZW52Wyd3aXRoX2RlYnVnJ10gYW5kIHBhcmVudF9lbnZbJ3dpdGhfc2FuaXRpemUn
XToNCglpZiBwYXJlbnRfZW52Wyd3aXRoX3Nhbml0aXplX3RocmVhZCddOg0KCQlwYXJlbnRf
ZW52LkFwcGVuZChTQU5JVElaRV9GTEFHUyA9IFsnLWZzYW5pdGl6ZT10aHJlYWQnXSkNCgkJ
DQoJZWxzZToNCgkJcGFyZW50X2Vudi5BcHBlbmQoU0FOSVRJWkVfRkxBR1MgPSBbDQoJCQkn
LWZzYW5pdGl6ZT1hZGRyZXNzJywNCgkJCSctZnNhbml0aXplLWFkZHJlc3MtdXNlLWFmdGVy
LXNjb3BlJywNCgkJCSctZnNhbml0aXplPXBvaW50ZXItY29tcGFyZScsDQoJCQknLWZzYW5p
dGl6ZT1wb2ludGVyLXN1YnRyYWN0J10pDQoJCXBhcmVudF9lbnYuQXBwZW5kKFNBTklUSVpF
X0ZMQUdTID0gWw0KCQkJJy1mc2FuaXRpemU9bGVhayddKQ0KCQlwYXJlbnRfZW52LkFwcGVu
ZChTQU5JVElaRV9GTEFHUyA9IFsNCgkJCSctZnNhbml0aXplPXVuZGVmaW5lZCcsDQoJCQkn
LWZzYW5pdGl6ZT1zaGlmdCcsDQoJCQknLWZzYW5pdGl6ZT1zaGlmdC1leHBvbmVudCcsDQoJ
CQknLWZzYW5pdGl6ZT1zaGlmdC1iYXNlJywNCgkJCSctZnNhbml0aXplPWludGVnZXItZGl2
aWRlLWJ5LXplcm8nLA0KCQkJJy1mc2FuaXRpemU9dW5yZWFjaGFibGUnLA0KCQkJJy1mc2Fu
aXRpemU9dmxhLWJvdW5kJywNCgkJCSctZnNhbml0aXplPW51bGwnLA0KCQkJJy1mc2FuaXRp
emU9cmV0dXJuJywNCgkJCSctZnNhbml0aXplPXNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93JywN
CgkJCSctZnNhbml0aXplPWJvdW5kcycsDQoJCQknLWZzYW5pdGl6ZT1ib3VuZHMtc3RyaWN0
JywNCgkJCSctZnNhbml0aXplPWFsaWdubWVudCcsDQoJCQknLWZzYW5pdGl6ZT1vYmplY3Qt
c2l6ZScsDQoJCQknLWZzYW5pdGl6ZT1mbG9hdC1kaXZpZGUtYnktemVybycsDQoJCQknLWZz
YW5pdGl6ZT1mbG9hdC1jYXN0LW92ZXJmbG93JywNCgkJCSctZnNhbml0aXplPW5vbm51bGwt
YXR0cmlidXRlJywNCgkJCSctZnNhbml0aXplPXJldHVybnMtbm9ubnVsbC1hdHRyaWJ1dGUn
LA0KCQkJJy1mc2FuaXRpemU9Ym9vbCcsDQoJCQknLWZzYW5pdGl6ZT1lbnVtJywNCgkJCSct
ZnNhbml0aXplPXZwdHInLA0KCQkJJy1mc2FuaXRpemU9cG9pbnRlci1vdmVyZmxvdycsDQoJ
CQknLWZzYW5pdGl6ZT1idWlsdGluJ10pDQoNCiMgZm9yIG1vZHVsZXMgaGlkZSBldmVyeXRo
aW5nIGV4Y2VwdCB0aGUgZW50cnkgcG9pbnQuIGZvciB0aGlzIHRoZSBkZWZhdWx0IHZpc2li
aWxpdHkNCiMgaXMgc2V0IHRvIGhpZGRlbiBhbmQgb25seSB0aGUgZW50cnkgcG9pbnQgaXMg
cXVhbGlmaWVkIHdpdGggbm9ybWFsIHZpc2liaWxpdHkuDQojIGhpZGluZyBhbHNvIGlubGlu
ZXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBoZWxwcyB0byByZW1vdmUgc29tZSBzcGVjaWFs
IGNhc2VzLg0KIyB0aGUgdmVyc2lvbiBzY3JpcHQgaXMgcmVxdWlyZWQgdG8gaGlkZSBzeW1i
b2xzIG9mIGxpbmtlZCBzdGF0aWMgbGlicmFyaWVzLg0KIyB0aGUgLXMgZmxhZyBldmVudHVh
bGx5IHN0cmlwcyB1bnVzZWQgY29kZSBsaW5rZWQgaW4gYnkgc3RhdGljIGxpYnJhcmllcw0K
DQppZiBwYXJlbnRfZW52Wyd3aXRoX2RlYnVnJ106DQoJcGFyZW50X2Vudi5BcHBlbmQoTU9E
VUxFX0NQUEZMQUdTID0gWyctRE1PRF9FTlRSWV9QT0lOVF9BVFRSPSddKQ0KCWlmIHBhcmVu
dF9lbnZbJ3dpdGhfc2FuaXRpemUnXToNCgkJcGFyZW50X2Vudi5BcHBlbmQoTU9EVUxFX0NQ
UEZMQUdTID0gcGFyZW50X2VudlsnU0FOSVRJWkVfRkxBR1MnXSkNCgkJcGFyZW50X2Vudi5B
cHBlbmQoTU9EVUxFX0xJTktGTEFHUyA9IHBhcmVudF9lbnZbJ1NBTklUSVpFX0ZMQUdTJ10p
DQoJDQplbHNlOg0KCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9DUFBGTEFHUyA9IFsnLWZ2
aXNpYmlsaXR5PWhpZGRlbiddKQ0KCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxB
R1MgPSBbJy1mdmlzaWJpbGl0eT1oaWRkZW4nXSkNCgkNCglwYXJlbnRfZW52LkFwcGVuZChN
T0RVTEVfQ1hYRkxBR1MgPSBbJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiddKQ0KCXBh
cmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxBR1MgPSBbJy1mdmlzaWJpbGl0eS1pbmxp
bmVzLWhpZGRlbiddKQ0KCQ0KCWlmIG5vdCBwYXJlbnRfZW52WydPU01hY09TJ106DQoJCXBh
cmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5LRkxBR1MgPSBbJy1XbCwtLXZlcnNpb24tc2Ny
aXB0PW1vZHVsZS52ZXJzaW9uJ10pDQoJCXBhcmVudF9lbnYuQXBwZW5kKE1PRFVMRV9MSU5L
RkxBR1MgPSBbJy1zJ10pDQoJcGFyZW50X2Vudi5BcHBlbmQoTU9EVUxFX0NQUEZMQUdTID0g
WyctRE1PRF9FTlRSWV9QT0lOVF9BVFRSPV9fYXR0cmlidXRlX19cXChcXCh2aXNpYmlsaXR5
XFwoXFwiZGVmYXVsdFxcIlxcKVxcKVxcKSddKQ0KDQojIGFuZHJvaWQNCmlmIHBhcmVudF9l
bnZbICdwbGF0Zm9ybV9hbmRyb2lkJyBdICE9ICdubyc6DQoJcGFyYW1zLkFkZCggUGF0aFZh
cmlhYmxlKCAnbmRrcm9vdCcsICdQYXRoIHRvIE5ESyB0b29sY2hhaW4gKE5ES19ST09UIGVu
di1wYXJhbSBieSBkZWZhdWx0KScsDQoJCW9zLnBhdGguZXhwYW5kdXNlciggb3MuZW52aXJv
blsnTkRLX1JPT1QnXSApLCBQYXRoVmFyaWFibGUuUGF0aEFjY2VwdCApICkNCglwYXJhbXMu
QWRkKCBTdHJpbmdWYXJpYWJsZSggJ2FwaWxldmVsJywgJ0FuZHJvaWQgQVBJIGxldmVsJywg
JzE4JyApICkNCglwYXJhbXMuQWRkKCBCb29sVmFyaWFibGUoICdoYXJkZnAnLCAnVXNlIGhh
cmR3YXJlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgaW5zdGVhZCBvZiBzb2Z0ZnAgb24gQVJN
djcgb25seScsIEZhbHNlICkgKQ0KCQ0KCXBhcmFtcy5VcGRhdGUoIHBhcmVudF9lbnYgKQ0K
CQ0KCWFuZHJvaWRVcGRhdGVFbnYoIHBhcmVudF9lbnYgKQ0KDQojIGRpc2FibGUgdmVyYm9z
ZSBjb21waWxlIG1lc3NhZ2VzIGlmIHJlcXVlc3RlZA0KaWYgbm90IHBhcmVudF9lbnZbICd3
aXRoX3ZlcmJvc2UnIF06DQoJRGlzYWJsZVZlcmJvc2VDb21waWxpbmcoIHBhcmVudF9lbnYg
KQ0KDQppZiBwYXJlbnRfZW52Wyd3aXRoX2RlYnVnJ106DQoJaWYgcGFyZW50X2VudlsnT1NX
aW5kb3dzJ106DQoJCXBhcmVudF9lbnYuQXBwZW5kKENQUEZMQUdTID0gWyctZycsICctZ3N0
YWJzJywgJy1nZ2RiJ10pDQoJZWxzZToNCgkJcGFyZW50X2Vudi5BcHBlbmQoQ1BQRkxBR1Mg
PSBbJy1nJ10pDQoJCSMgbWluZ3cgcHJvZHVjZXMgaW50ZXJuYWwgY29tcGlsZXIgZXJyb3Jz
IG9uIDgueCBHQ0MuIGRpc2FibGVkIHVudGlsIGZpeGVkIG9yIGEgY2hlY2sgaXMgcHJlc2Vu
dA0KCQlwYXJlbnRfZW52LkFwcGVuZChDUFBGTEFHUyA9IFsnLWZuby1vbWl0LWZyYW1lLXBv
aW50ZXInXSkNCg0KIyBzZXQgZmxhZ3MgYmFzZWQgb24gcGFyYW1ldGVycw0KaWYgcGFyZW50
X2VudlsgJ3BsYXRmb3JtX2FuZHJvaWQnIF0gPT0gJ25vJzoNCglwYXJlbnRfZW52LkFwcGVu
ZCggQ1BQRkxBR1MgPSBbICctTzInIF0gKSAgIyBiZWNhdXNlIGFuZHJvaWQgcGxhdGZvcm0g
c2NyaXB0IGRlZmluZXMgdGhpcyBhbHJlYWR5DQpwYXJlbnRfZW52LkFwcGVuZCggQ1BQRkxB
R1MgPSBbICctV2FsbCcgXSApDQoNCiMgZGlzYWJsZSB0aGUgbmV3IChhbmQgdHJ1ZWx5IHN0
dXBpZCkgbmV3IGdjYyA4LjEgc2hlbmFuaWdhbnMuDQojIHNlZSBodHRwczovL2djYy5nbnUu
b3JnL29ubGluZWRvY3MvZ2NjL0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2lu
ZGV4LVdjbGFzcy1tZW1hY2Nlc3MgLg0KIyB0aGUgaWRlYSBiZWhpbmQgYWxsIHRoaXMgaXMg
YWxsIG5pY2UgYW5kIGRhbmR5IGJ1dCBpdCBwcmV2ZW50cyBsZWdpdCBmYXN0IG1lbW9yeSBo
YW5kbGluZw0KIyB0cnlpbmcgdG8gcHJldGVuZCBpZGlvdHMgZnJvbSBzaG9vdGluZyB0aGVt
c2VsdmVzIGluIHRoZSBmb290LiBpZiBzb21lYm9keSB1c2VzIG1lbWNweSB0aGVuDQojIGhl
IHNob3VsZCBrbm93IHdoYXQgaGUgaXMgZG9pbmcgc28gc3RvcCBicmVha2luZyBidWlsZHMg
d2l0aCBub24tc2Vuc2UgZXJyb3JzLg0KcGFyZW50X2Vudi5BcHBlbmQoQ1hYRkxBR1MgPSBb
Jy1Xbm8tY2xhc3MtbWVtYWNjZXNzJ10pDQoNCmlmIHBhcmVudF9lbnZbICd3aXRoX3dhcm5l
cnJvcnMnIF06DQoJcGFyZW50X2Vudi5BcHBlbmQoIENQUEZMQUdTID0gWyAnLVdlcnJvcicg
XSApDQoNCmlmIHBhcmVudF9lbnZbICdwbGF0Zm9ybV9hbmRyb2lkJyBdICE9ICdubyc6DQoJ
cGFyZW50X2Vudi5BcHBlbmQoQ1BQRkxBR1MgPSBbJy1Xbm8tdW51c2VkLXByaXZhdGUtZmll
bGQnXSkNCglwYXJlbnRfZW52LkFwcGVuZChDUFBGTEFHUyA9IFsnLVduby10YXV0b2xvZ2lj
YWwtY29uc3RhbnQtY29tcGFyZSddKQ0KDQojIG5vIGRlZmF1bHQgdGFyZ2V0cw0KRGVmYXVs
dCggTm9uZSApDQoNCiMgZGVmaW5lIHRoZSB0YXJnZXRzIGFycmF5IGFuZCByZXBvcnRzIGRp
Y3Rpb25hcnkgdG8gYmUgZmlsbGVkDQpwYXJlbnRfdGFyZ2V0cyA9IHt9DQpwYXJlbnRfcmVw
b3J0ID0ge30NCg0KIyByZXBvcnQgc3R1ZmYNCmlmIHBhcmVudF9lbnZbJ09TUG9zaXgnXToN
CglwYXJlbnRfcmVwb3J0WyAncHJlZml4JyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50
X2VudlsgJ3ByZWZpeCcgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgYmluYXJ5
IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9iaW4n
IF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGxpYnJhcnkgcGF0aCcgXSA9IHBh
cmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2RlX2xpYicgXSApDQoJcGFyZW50
X3JlcG9ydFsgJ2RyYWdlbmdpbmUgaW5jbHVkZSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJz
dCggcGFyZW50X2VudlsgJ3BhdGhfZGVfaW5jbHVkZScgXSApDQoJcGFyZW50X3JlcG9ydFsg
J2RyYWdlbmdpbmUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCgg
cGFyZW50X2VudlsgJ3BhdGhfZGVfY29uZmlnJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJh
Z2VuZ2luZSBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAn
cGF0aF9kZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBzaGFyZWQg
ZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVf
c2hhcmUnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGNhY2hlIHBhdGgnIF0g
PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9jYWNoZScgXSApDQoN
CmVsaWYgcGFyZW50X2VudlsnT1NXaW5kb3dzJ106DQoJcGFyZW50X3JlcG9ydFsgJ3N5c3Rl
bSBsaWJyYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAnc3lz
dGVtcm9vdCcgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgc2RrIHBhdGgnIF0g
PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9kZV9zZGsnIF0gKQ0KCXBh
cmVudF9yZXBvcnRbICdkcmFnZW5naW5lIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBw
YXJlbnRfZW52WyAncGF0aF9kZScgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUg
YmluYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9k
ZV9iaW4nIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkcmFnZW5naW5lIGxpYnJhcnkgcGF0aCcg
XSA9IHBhcmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2RlX2xpYicgXSApDQoJ
cGFyZW50X3JlcG9ydFsgJ2RyYWdlbmdpbmUgaW5jbHVkZSBwYXRoJyBdID0gcGFyZW50X2Vu
di5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVfaW5jbHVkZScgXSApDQoJcGFyZW50X3Jl
cG9ydFsgJ2RyYWdlbmdpbmUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFyZW50X2Vudi5z
dWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVfY29uZmlnJyBdICkNCglwYXJlbnRfcmVwb3J0
WyAnZHJhZ2VuZ2luZSBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRf
ZW52WyAncGF0aF9kZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBz
aGFyZWQgZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3Bh
dGhfZGVfc2hhcmUnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdkZWlnZGUgcGF0aCcgXSA9IHBh
cmVudF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwYXRoX2lnZGUnIF0gKQ0KCXBhcmVudF9y
ZXBvcnRbICdkZWlnZGUgYmluYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJl
bnRfZW52WyAncGF0aF9pZ2RlX2JpbicgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RlaWdkZSBs
aWJyYXJ5IHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9p
Z2RlX2xpYicgXSApDQoJcGFyZW50X3JlcG9ydFsgJ2RlaWdkZSBpbmNsdWRlIHBhdGgnIF0g
PSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52WyAncGF0aF9pZ2RlX2luY2x1ZGUnIF0g
KQ0KCXBhcmVudF9yZXBvcnRbICdkZWlnZGUgY29uZmlndXJhdGlvbiBwYXRoJyBdID0gcGFy
ZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfaWdkZV9jb25maWcnIF0gKQ0KCXBh
cmVudF9yZXBvcnRbICdkZWlnZGUgZGF0YSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCgg
cGFyZW50X2VudlsgJ3BhdGhfaWdkZV9kYXRhJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZGVp
Z2RlIHNoYXJlZCBkYXRhIHBhdGgnIF0gPSBwYXJlbnRfZW52LnN1YnN0KCBwYXJlbnRfZW52
WyAncGF0aF9pZ2RlX3NoYXJlJyBdICkNCglwYXJlbnRfcmVwb3J0WyAnZHJhZ2VuZ2luZSBj
YWNoZSBwYXRoJyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFyZW50X2VudlsgJ3BhdGhfZGVf
Y2FjaGUnIF0gKQ0KCSNwYXJlbnRfcmVwb3J0WyAncHJvZ3JhbSBmaWxlcycgXSA9IHBhcmVu
dF9lbnYuc3Vic3QoIHBhcmVudF9lbnZbICdwcm9ncmFtZmlsZXMnIF0gKQ0KDQpwYXJlbnRf
cmVwb3J0WyAncGxhdGZvcm1fYW5kcm9pZCcgXSA9IHBhcmVudF9lbnZbICdwbGF0Zm9ybV9h
bmRyb2lkJyBdDQppZiBwYXJlbnRfZW52WyAncGxhdGZvcm1fYW5kcm9pZCcgXSAhPSAnbm8n
Og0KCXBhcmVudF9yZXBvcnRbICduZGtyb290JyBdID0gcGFyZW50X2Vudi5zdWJzdCggcGFy
ZW50X2VudlsgJ25ka3Jvb3QnIF0gKQ0KCXBhcmVudF9yZXBvcnRbICdhcGlsZXZlbCcgXSA9
IHBhcmVudF9lbnZbICdhcGlsZXZlbCcgXQ0KCXBhcmVudF9yZXBvcnRbICdoYXJkZnAnIF0g
PSAneWVzJyBpZiBwYXJlbnRfZW52WyAnaGFyZGZwJyBdIGVsc2UgJ25vJw0KDQpwYXJlbnRf
cmVwb3J0WyAnYnVpbGQgZHJhZ2VuZ2luZSB0ZXN0cycgXSA9ICd5ZXMnIGlmIHBhcmVudF9l
bnZbICd3aXRoX3Rlc3RzJyBdIGVsc2UgJ25vJw0KcGFyZW50X3JlcG9ydFsgJ3RyZWF0IHdh
cm5pbmdzIGFzIGVycm9ycycgXSA9ICd5ZXMnIGlmIHBhcmVudF9lbnZbICd3aXRoX3dhcm5l
cnJvcnMnIF0gZWxzZSAnbm8nDQpwYXJlbnRfcmVwb3J0WyAnYnVpbGQgd2l0aCBkZWJ1ZyBz
eW1ib2xzJyBdID0gJ3llcycgaWYgcGFyZW50X2VudlsgJ3dpdGhfZGVidWcnIF0gZWxzZSAn
bm8nDQpwYXJlbnRfcmVwb3J0WyAnYnVpbGQgd2l0aCBzYW5pdGl6aW5nJyBdID0gJ3llcycg
aWYgcGFyZW50X2VudlsgJ3dpdGhfc2FuaXRpemUnIF0gZWxzZSAnbm8nDQpwYXJlbnRfcmVw
b3J0WyAnYnVpbGQgd2l0aCB0aHJlYWQgc2FuaXRpemluZycgXSA9ICd5ZXMnIGlmIHBhcmVu
dF9lbnZbICd3aXRoX3Nhbml0aXplX3RocmVhZCcgXSBlbHNlICdubycNCg0KDQoNCiMgZXh0
ZXJuYWwgbGlicmFyaWVzDQpleHRkaXJzID0gW10NCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJu
L3psaWInICkNCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJuL2xpYnBuZycgKQ0KZXh0ZGlycy5h
cHBlbmQoICdleHRlcm4vbGliYXBuZycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGli
anBlZycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vc25kaW8nICkNCmV4dGRpcnMuYXBw
ZW5kKCAnZXh0ZXJuL29wZW5hbCcgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGlib2dn
JyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9saWJ2b3JiaXMnICkNCmV4dGRpcnMuYXBw
ZW5kKCAnZXh0ZXJuL2xpYnRoZW9yYScgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vZm94
JyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9kcmFnb25zY3JpcHQnICkNCmV4dGRpcnMu
YXBwZW5kKCAnZXh0ZXJuL2xpYmZmaScgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGli
bHRkbCcgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRlcm4vbGlic2lnc2VndicgKQ0KI2V4dGRp
cnMuYXBwZW5kKCAnZXh0ZXJuL3NtYWxsdGFsaycgKQ0KZXh0ZGlycy5hcHBlbmQoICdleHRl
cm4vbGliZXZkZXYnICkNCmV4dGRpcnMuYXBwZW5kKCAnZXh0ZXJuL2xpYnVzYicgKQ0KZXh0
ZGlycy5hcHBlbmQoICdleHRlcm4vbGliaGlkYXBpJyApDQpleHRkaXJzLmFwcGVuZCggJ2V4
dGVybi9saWJvcGVuaG1kJyApDQpleHRkaXJzLmFwcGVuZCggJ2V4dGVybi9mZnR3JyApDQoN
CmZvciBleHRkaXIgaW4gZXh0ZGlyczoNCglTQ29uc2NyaXB0KCBkaXJzPWV4dGRpciwgdmFy
aWFudF9kaXI9J3t9L2J1aWxkJy5mb3JtYXQoIGV4dGRpciApLA0KCQlkdXBsaWNhdGU9MCwg
ZXhwb3J0cz0ncGFyZW50X2VudiBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoN
ClNDb25zY3JpcHQoIGRpcnM9J2V4dGVybi9taW5ndycsIHZhcmlhbnRfZGlyPSdleHRlcm4v
bWluZ3cvYnVpbGQnLA0KCWR1cGxpY2F0ZT0wLCBleHBvcnRzPSdwYXJlbnRfZW52IHBhcmVu
dF90YXJnZXRzIHBhcmVudF9yZXBvcnQnICkNCg0KIyBkcmFnW2VuXWdpbmUgZ2FtZSBlbmdp
bmUNClNDb25zY3JpcHQoIGRpcnM9J3NyYy9kcmFnZW5naW5lJywgdmFyaWFudF9kaXI9J3Ny
Yy9kcmFnZW5naW5lL2J1aWxkJywgZHVwbGljYXRlPTAsDQoJZXhwb3J0cz0ncGFyZW50X2Vu
diBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoNCnNjZGlycyA9IFtdDQoNCiMg
Z2FtZSBlbmdpbmUgbW9kdWxlcw0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FuaW1h
dG9yL2RlYW5pbWF0b3InICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FpL2Rl
YWknICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FuaW1hdGlvbi9kZWFuaW0n
ICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2F1ZGlvL251bGwnICkNCnNjZGly
cy5hcHBlbmQoICdzcmMvbW9kdWxlcy9hdWRpby9vcGVuYWwnICkNCg0Kc2NkaXJzLmFwcGVu
ZCggJ3NyYy9tb2R1bGVzL2NyYXNocmVjb3Zlcnkvc2ltcGx5cXVpdCcgKQ0Kc2NkaXJzLmFw
cGVuZCggJ3NyYy9tb2R1bGVzL2NyYXNocmVjb3ZlcnkvYmFzaWNyZWNvdmVyeScgKQ0KDQpz
Y2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMvZm9udC9kZWZvbnQnICkNCg0Kc2NkaXJzLmFw
cGVuZCggJ3NyYy9tb2R1bGVzL2dyYXBoaWMvbnVsbCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3Ny
Yy9tb2R1bGVzL2dyYXBoaWMvb3BlbmdsJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9k
dWxlcy9pbWFnZS9wbmcnICkNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbWFnZS9w
bmczZCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2ltYWdlL3RnYScgKQ0Kc2Nk
aXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2ltYWdlL2pwZWcnICkNCg0Kc2NkaXJzLmFwcGVu
ZCggJ3NyYy9tb2R1bGVzL2lucHV0L2NvbnNvbGUnICkNCnNjZGlycy5hcHBlbmQoICdzcmMv
bW9kdWxlcy9pbnB1dC94c3lzdGVtJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMv
aW5wdXQvdzMyaW5wdXQnICkNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbnB1dC9i
ZW9zJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVsZXMvaW5wdXQvbWFjb3MnICkNCnNj
ZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9pbnB1dC9hbmRyb2lkJyApDQoNCnNjZGlycy5h
cHBlbmQoICdzcmMvbW9kdWxlcy9sYW5ncGFjay9kZWxhbmdwYWNrJyApDQoNCnNjZGlycy5h
cHBlbmQoICdzcmMvbW9kdWxlcy9tb2RlbC9kZW1vZGVsJyApDQoNCnNjZGlycy5hcHBlbmQo
ICdzcmMvbW9kdWxlcy9uZXR3b3JrL2Jhc2ljJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMv
bW9kdWxlcy9vY2NsdXNpb25tZXNoL2Rlb2NjbHVzaW9ubWVzaCcgKQ0KDQpzY2RpcnMuYXBw
ZW5kKCAnc3JjL21vZHVsZXMvcGh5c2ljcy9idWxsZXQnICkNCg0Kc2NkaXJzLmFwcGVuZCgg
J3NyYy9tb2R1bGVzL3JpZy9kZXJpZycgKQ0KDQpzY2RpcnMuYXBwZW5kKCAnc3JjL21vZHVs
ZXMvc2NyaXB0aW5nL2RyYWdvbnNjcmlwdCcgKQ0KI3NjZGlycy5hcHBlbmQoICdzcmMvbW9k
dWxlcy9zY3JpcHRpbmcvcHl0aG9uJyApDQojc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVz
L3NjcmlwdGluZy9zbWFsbHRhbGsnICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVz
L3NraW4vZGVza2luJyApDQoNCnNjZGlycy5hcHBlbmQoICdzcmMvbW9kdWxlcy9zb3VuZC9v
Z2d2b3JiaXMnICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3N5bnRoZXNpemVy
L2Rlc3ludGhlc2l6ZXInICkNCg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3ZpZGVv
L3RoZW9yYScgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL3ZpZGVvL2FwbmcnICkN
Cg0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2FyY2hpdmUvZGVsZ2EnICkNCg0Kc2Nk
aXJzLmFwcGVuZCggJ3NyYy9tb2R1bGVzL2NvbWJpbmVkL2ZieCcgKQ0KDQojIGxhdW5jaGVy
cw0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9sYXVuY2hlci9jb25zb2xlJyApDQpzY2RpcnMuYXBw
ZW5kKCAnc3JjL2xhdW5jaGVyL2d1aScgKQ0KI3NjZGlycy5hcHBlbmQoICdzcmMvbGF1bmNo
ZXIvYW5kcm9pZCcgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9sYXVuY2hlci9saXZlJyApDQoN
CiMgdGVzdHMNCnNjZGlycy5hcHBlbmQoICdzcmMvdGVzdHMnICkNCg0KIyBpbnRlZ3JhdGVk
IGdhbWUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQNCnNjZGlycy5hcHBlbmQoICdzcmMvZGVp
Z2RlL2RlaWdkZScgKQ0KDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3dv
cmxkJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL2FuaW1hdG9yJyAp
DQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3JpZ2VkaXRvcicgKQ0Kc2Nk
aXJzLmFwcGVuZCggJ3NyYy9kZWlnZGUvZWRpdG9ycy9mb250JyApDQpzY2RpcnMuYXBwZW5k
KCAnc3JjL2RlaWdkZS9lZGl0b3JzL3NreScgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9kZWln
ZGUvZWRpdG9ycy9za2luJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3Jz
L3BhcnRpY2xlRW1pdHRlcicgKQ0Kc2NkaXJzLmFwcGVuZCggJ3NyYy9kZWlnZGUvZWRpdG9y
cy9zcGVlY2hBbmltYXRpb24nICkNCnNjZGlycy5hcHBlbmQoICdzcmMvZGVpZ2RlL2VkaXRv
cnMvY29udmVyc2F0aW9uJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3Jz
L2xhbmdwYWNrJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3N5bnRo
ZXNpemVyJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL2dhbWVEZWZp
bml0aW9uJyApDQpzY2RpcnMuYXBwZW5kKCAnc3JjL2RlaWdkZS9lZGl0b3JzL3Byb2plY3Qn
ICkNCg0KZm9yIHNjZGlyIGluIHNjZGlyczoNCglTQ29uc2NyaXB0KCBkaXJzPXNjZGlyLCB2
YXJpYW50X2Rpcj0ne30vYnVpbGQnLmZvcm1hdCggc2NkaXIgKSwNCgkJZHVwbGljYXRlPTAs
IGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcgKQ0K
DQojdG9vbHMNClNDb25zY3JpcHQoIGRpcnM9J3NyYy90b29scy9ibGVuZGVyJywgdmFyaWFu
dF9kaXI9J3NyYy90b29scy9ibGVuZGVyL2J1aWxkJywNCglkdXBsaWNhdGU9MCwgZXhwb3J0
cz0ncGFyZW50X2VudiBwYXJlbnRfdGFyZ2V0cyBwYXJlbnRfcmVwb3J0JyApDQoNCiMgc3Bl
Y2lhbCBzdHVmZg0KU0NvbnNjcmlwdCggZGlycz0nc3JjL2xhdW5jaGVyL3VzYmRyaXZlJywg
dmFyaWFudF9kaXI9J3NyYy9sYXVuY2hlci91c2Jkcml2ZS9idWlsZCcsDQoJZHVwbGljYXRl
PTAsIGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcg
KQ0KDQoNCg0KIyBhcmNoaXZpbmcNClNDb25zY3JpcHQoIGRpcnM9J2FyY2hpdmUnLCB2YXJp
YW50X2Rpcj0nYXJjaGl2ZS9idWlsZCcsDQoJZHVwbGljYXRlPTAsIGV4cG9ydHM9J3BhcmVu
dF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50X3JlcG9ydCcgKQ0KDQoiIiINClNDb25zY3Jp
cHQoICdzcmMvdG9vbHMvbGF1bmNoZXIvYW5kcm9pZC9TQ29uc2NyaXB0U3BlY2lhbCcsDQoJ
dmFyaWFudF9kaXI9J3NyYy90b29scy9sYXVuY2hlci9hbmRyb2lkL2J1aWxkX2FwaycsDQoJ
ZHVwbGljYXRlPTAsIGV4cG9ydHM9J3BhcmVudF9lbnYgcGFyZW50X3RhcmdldHMgcGFyZW50
X3JlcG9ydCcgKQ0KIiIiDQoNClNDb25zY3JpcHQoJ2FyY2hpdmUvU0NvbnNIYWlrdUhwa2cu
cHknLCB2YXJpYW50X2Rpcj0nYXJjaGl2ZS9idWlsZFBhY2thZ2UnLA0KCWR1cGxpY2F0ZT0w
LCBleHBvcnRzPSdwYXJlbnRfZW52IHBhcmVudF90YXJnZXRzIHBhcmVudF9yZXBvcnQnKQ0K
DQoNCg0KIyBpbnN0YWxsZXJzDQpTQ29uc2NyaXB0KGRpcnM9J2luc3RhbGxlcicsIHZhcmlh
bnRfZGlyPSdpbnN0YWxsZXIvYnVpbGQnLA0KCWR1cGxpY2F0ZT0wLCBleHBvcnRzPSdwYXJl
bnRfZW52IHBhcmVudF90YXJnZXRzIHBhcmVudF9yZXBvcnQnKQ0KDQoNCiNwYXJhbXMuU2F2
ZSggJ3BhcmFtZXRlcnMuY2FjaGUnLCBwYXJlbnRfZW52ICkNCg0KIyBhZGQgYWxpYXNlcw0K
YnVpbGRBbGwgPSBbXQ0KaW5zdGFsbEFsbCA9IFtdDQppbnN0YWxsQWxsUnVudGltZSA9IFtd
DQppbnN0YWxsRW5naW5lUnVudGltZSA9IFtdDQppbnN0YWxsSWdkZVJ1bnRpbWUgPSBbXQ0K
ZG94eWdlbkFsbCA9IFtdDQpjbG9jQWxsID0gW10NCmNsb2NSZXBvcnRzID0gW10NCg0KZm9y
IGtleSBpbiBwYXJlbnRfdGFyZ2V0czoNCglpZiAnYnVpbGQnIGluIHBhcmVudF90YXJnZXRz
WyBrZXkgXToNCgkJYnVpbGRBbGwuYXBwZW5kKCBwYXJlbnRfdGFyZ2V0c1sga2V5IF1bICdi
dWlsZCcgXSApDQoJDQoJaWYgJ2luc3RhbGwnIGluIHBhcmVudF90YXJnZXRzWyBrZXkgXToN
CgkJaW5zdGFsbEFsbC5hcHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsgJ2luc3RhbGwn
IF0gKQ0KCQlpZiAnaW5zdGFsbC1ydW50aW1lJyBpbiBwYXJlbnRfdGFyZ2V0c1sga2V5IF06
DQoJCQlpbnN0YWxsQWxsUnVudGltZS5hcHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsg
J2luc3RhbGwtcnVudGltZScgXSApDQoJCWVsc2U6DQoJCQlpbnN0YWxsQWxsUnVudGltZS5h
cHBlbmQoIHBhcmVudF90YXJnZXRzWyBrZXkgXVsgJ2luc3RhbGwnIF0gKQ0KCQ0KCWlmICdp
bnN0YWxsLWVuZ2luZS1ydW50aW1lJyBpbiBwYXJlbnRfdGFyZ2V0c1trZXldOg0KCQlpbnN0
YWxsRW5naW5lUnVudGltZS5hcHBlbmQocGFyZW50X3RhcmdldHNba2V5XVsnaW5zdGFsbC1l
bmdpbmUtcnVudGltZSddKQ0KCQ0KCWlmICdpbnN0YWxsLWlnZGUtcnVudGltZScgaW4gcGFy
ZW50X3RhcmdldHNba2V5XToNCgkJaW5zdGFsbElnZGVSdW50aW1lLmFwcGVuZChwYXJlbnRf
dGFyZ2V0c1trZXldWydpbnN0YWxsLWlnZGUtcnVudGltZSddKQ0KCQ0KCWlmICdkb3h5Z2Vu
JyBpbiBwYXJlbnRfdGFyZ2V0c1sga2V5IF06DQoJCWRveHlnZW5BbGwuYXBwZW5kKCBwYXJl
bnRfdGFyZ2V0c1sga2V5IF1bICdkb3h5Z2VuJyBdICkNCgkNCglpZiAnY2xvYycgaW4gcGFy
ZW50X3RhcmdldHNbIGtleSBdOg0KCQljbG9jQWxsLmFwcGVuZCggcGFyZW50X3RhcmdldHNb
IGtleSBdWyAnY2xvYycgXSApDQoJCWNsb2NSZXBvcnRzLmFwcGVuZCggcGFyZW50X3Rhcmdl
dHNbIGtleSBdWyAnY2xvY1JlcG9ydCcgXSApDQoNCnRhcmdldEJ1aWxkQWxsID0gcGFyZW50
X2Vudi5BbGlhcyggJ2J1aWxkJywgYnVpbGRBbGwgKQ0KcGFyZW50X3RhcmdldHNbICdidWls
ZCcgXSA9IHsNCgknbmFtZScgOiAnQnVpbGQgRXZlcnl0aGluZycsDQoJJ3RhcmdldCcgOiB0
YXJnZXRCdWlsZEFsbCB9DQoNCnRhcmdldEluc3RhbGxBbGwgPSBwYXJlbnRfZW52LkFsaWFz
KCAnaW5zdGFsbCcsIGluc3RhbGxBbGwgKQ0KcGFyZW50X3RhcmdldHNbICdpbnN0YWxsJyBd
ID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIEV2ZXJ5dGhpbmcnLA0KCSd0YXJnZXQnIDogdGFy
Z2V0SW5zdGFsbEFsbCB9DQoNCnRhcmdldEluc3RhbGxBbGxSdW50aW1lID0gcGFyZW50X2Vu
di5BbGlhcyggJ2luc3RhbGxfcnVudGltZScsIGluc3RhbGxBbGxSdW50aW1lICkNCnBhcmVu
dF90YXJnZXRzWyAnaW5zdGFsbF9ydW50aW1lJyBdID0gew0KCSduYW1lJyA6ICdJbnN0YWxs
IEV2ZXJ5dGhpbmcgUnVudGltZSAobm8gZGV2ZWxvcG1lbnQgZmlsZXMpJywNCgkndGFyZ2V0
JyA6IHRhcmdldEluc3RhbGxBbGxSdW50aW1lIH0NCg0KdGFyZ2V0SW5zdGFsbEVuZ2luZVJ1
bnRpbWUgPSBwYXJlbnRfZW52LkFsaWFzKCdpbnN0YWxsX2VuZ2luZV9ydW50aW1lJywgaW5z
dGFsbEVuZ2luZVJ1bnRpbWUpDQpwYXJlbnRfdGFyZ2V0c1snaW5zdGFsbF9lbmdpbmVfcnVu
dGltZSddID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIEVuZ2luZSBSdW50aW1lIChubyBkZXZl
bG9wbWVudCBmaWxlcyknLA0KCSd0YXJnZXQnIDogdGFyZ2V0SW5zdGFsbEVuZ2luZVJ1bnRp
bWUgfQ0KDQp0YXJnZXRJbnN0YWxsSWdkZVJ1bnRpbWUgPSBwYXJlbnRfZW52LkFsaWFzKCdp
bnN0YWxsX2lnZGVfcnVudGltZScsIGluc3RhbGxJZ2RlUnVudGltZSkNCnBhcmVudF90YXJn
ZXRzWydpbnN0YWxsX2lnZGVfcnVudGltZSddID0gew0KCSduYW1lJyA6ICdJbnN0YWxsIElH
REUgUnVudGltZSAobm8gZGV2ZWxvcG1lbnQgZmlsZXMpJywNCgkndGFyZ2V0JyA6IHRhcmdl
dEluc3RhbGxJZ2RlUnVudGltZSB9DQoNCnRhcmdldERveHlnZW5BbGwgPSBwYXJlbnRfZW52
LkFsaWFzKCAnZG94eWdlbicsIGRveHlnZW5BbGwgKQ0KcGFyZW50X3RhcmdldHNbICdkb3h5
Z2VuJyBdID0gew0KCSduYW1lJyA6ICdEb3h5Z2VuIEV2ZXJ5dGhpbmcnLA0KCSd0YXJnZXQn
IDogdGFyZ2V0RG94eWdlbkFsbCB9DQoNCmlmIGNsb2NSZXBvcnRzOg0KCXRhcmdldENsb2NT
dW1tYXJ5ID0gcGFyZW50X2Vudi5BbGlhcyggJ2Nsb2Nfc3VtbWFyeScsDQoJCUJ1aWxkQ0xP
Q1N1bW1hcnkoIHBhcmVudF9lbnYsIGNsb2NSZXBvcnRzLCAnY2xvY3N1bW1hcnkuY3N2JyAp
ICkNCgljbG9jQWxsLmFwcGVuZCggdGFyZ2V0Q2xvY1N1bW1hcnkgKQ0KDQp0YXJnZXRDbG9j
QWxsID0gcGFyZW50X2Vudi5BbGlhcyggJ2Nsb2MnLCBjbG9jQWxsICkNCnBhcmVudF90YXJn
ZXRzWyAnY2xvYycgXSA9IHsNCgknbmFtZScgOiAnQ0xvYyBFdmVyeXRoaW5nJywNCgkndGFy
Z2V0JyA6IHRhcmdldENsb2NBbGwgfQ0KDQojIGRlZmF1bHQgaXMgYnVpbGRpbmcgYW5kIGlu
c3RhbGxpbmcgZXZlcnl0aGluZw0KRGVmYXVsdCggJ2luc3RhbGwnICkNCg0KDQoNCiMgcHJv
ZHVjZSBoZWxwDQpIZWxwKCBCdWlsZEhlbHBUZXh0KCBwYXJlbnRfdGFyZ2V0cyApICkNCg0K
IyBwcmludCBvdXQgcmVwb3J0DQpQcmludENvbmZpZ1JlcG9ydCggcGFyZW50X3JlcG9ydCAp
DQo=
--------------2213BD46D49BCD2C860E8E1F--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0fc386c4-35dc-39de-a0f0-365e82d4efde>