diff --git a/dist.ini b/dist.ini index 2421cd2..0d91bf5 100644 --- a/dist.ini +++ b/dist.ini @@ -1,5 +1,5 @@ name = Devel-PatchPerl -version = 2.08 +version = 2.09 author = Chris Williams license = Perl_5 copyright_holder = Chris Williams and Marcus Holland-Moritz diff --git a/lib/Devel/PatchPerl.pm b/lib/Devel/PatchPerl.pm index c0f7cd6..5592e34 100644 --- a/lib/Devel/PatchPerl.pm +++ b/lib/Devel/PatchPerl.pm @@ -13,7 +13,7 @@ use Module::Pluggable search_path => ['Devel::PatchPerl::Plugin']; use vars qw[@ISA @EXPORT_OK]; use constant CERTIFIED => 5.033005; # Anything less than this -use constant HINTSCERT => 5.033004; # Hints certified to this +use constant HINTSCERT => 5.039006; # Hints certified to this @ISA = qw(Exporter); @EXPORT_OK = qw(patch_source); @@ -290,6 +290,12 @@ my @patch = ( ], subs => [ [ \&_patch_useshrplib ] ], }, + { + perl => [ + qr/.*/, + ], + subs => [ [ \&_patch_dbfile_clang ] ], + }, ); sub patch_source { @@ -444,10 +450,16 @@ sub _patch } } +sub _write_b64_or_die { + my($file, $base64) = @_; + my $data = decode_base64($base64); + _write_or_die($file, $data); +} + sub _write_or_die { my($file, $data) = @_; - my $fh = IO::File->new(">$file") or die "$file: $!\n"; + my $fh = IO::File->new($file,'>') or die "$file: $!\n"; $fh->print($data); } @@ -10458,6 +10470,255 @@ c2xpYi5kbGwkQ29uZmlnX2xpYmV4dCIgKSApIHsK EUMMBIGSUR } +sub _patch_dbfile_clang { + return unless $^O eq 'freebsd'; # for the moment limit this + my $perlver = shift; + my $num = _norm_ver( $perlver ); + # I've only tested against v5.8.9 and v5.10.0 + # It might work for intervening v5.9.*, but at this point + # it's not my circus, nor my monkeys + return unless $num > 5.008008; + return unless $num < 5.010001; + # Patch mkpport.lst + _patch_b64(<<'DBFILE001'); +LS0tIG1rcHBwb3J0LmxzdC5vcmcJMjAyMy0xMS0yNyAyMjo0NzoyOS41ODM5NjEwMDAgKzAwMDAK +KysrIG1rcHBwb3J0LmxzdAkyMDIzLTExLTI3IDIyOjQ3OjU3LjU3OTk3MTAwMCArMDAwMApAQCAt +OCwzICs4LDQgQEAKIGV4dC9JUEMvU3lzVgogZXh0L1RpbWUvSGlSZXMKIGV4dC9XaW4zMkFQSS9G +aWxlCitleHQvREJfRmlsZQo= +DBFILE001 + # Patch ext/DB_File/DB_File.xs + _patch_b64(<<'DBFILE002'); +LS0tIGV4dC9EQl9GaWxlL0RCX0ZpbGUueHMub3JnCTIwMjMtMTEtMjcgMjI6NTg6NTcuNDcwNDM2 +MDAwICswMDAwCisrKyBleHQvREJfRmlsZS9EQl9GaWxlLnhzCTIwMjMtMTEtMjcgMjI6NTk6MTgu +Njk1ODI4MDAwICswMDAwCkBAIC0xMjMsOSArMTIzLDcgQEAKICNpbmNsdWRlICJwZXJsLmgiCiAj +aW5jbHVkZSAiWFNVQi5oIgogCi0jaWZkZWYgX05PVF9DT1JFCi0jICBpbmNsdWRlICJwcHBvcnQu +aCIKLSNlbmRpZgorI2luY2x1ZGUgInBwcG9ydC5oIgogCiAvKiBNZW50aW9uIERCX1ZFUlNJT05f +TUFKT1JfQ0ZHLCBEQl9WRVJTSU9OX01JTk9SX0NGRywgYW5kCiAgICBEQl9WRVJTSU9OX1BBVENI +X0NGRyBoZXJlIHNvIHRoYXQgQ29uZmlndXJlIHB1bGxzIHRoZW0gYWxsIGluLiAqLwo= +DBFILE002 + # Overwrite ext/DB_File/Makefile.PL + { + my $file = File::Spec->catfile('ext','DB_File','Makefile.PL'); + my $mode; + if (-r $file and not -w _) { + $mode = (stat $file)[2]; + chmod $mode | 0200, $file; + } + _write_b64_or_die($file,<<'DBFILE003'); +IyEgcGVybCAtdwoKdXNlIHN0cmljdCA7CnVzZSBFeHRVdGlsczo6TWFrZU1ha2VyIDUuMTYgOwp1 +c2UgQ29uZmlnIDsKCmRpZSAiREJfRmlsZSBuZWVkcyBQZXJsIDUuMDA0XzA1IG9yIGJldHRlci4g +VGhpcyBpcyAkXVxuIiAKICAgIGlmICRdIDw9IDUuMDA0MDQ7IAoKbXkgJFZFUl9JTkZPIDsKbXkg +JExJQl9ESVIgOwpteSAkSU5DX0RJUiA7Cm15ICREQl9OQU1FIDsKbXkgJExJQlMgOwpteSAkQ09N +UEFUMTg1ID0gIiIgOwoKUGFyc2VDT05GSUcoKSA7CgpteSBAZmlsZXMgPSAoJ0RCX0ZpbGUucG0n +LCBnbG9iICJ0LyoudCIpIDsKVXBEb3duZ3JhZGUoQGZpbGVzKTsKCmlmIChkZWZpbmVkICREQl9O +QU1FKQogIHsgJExJQlMgPSAkREJfTkFNRSB9CmVsc2UgewogICAgaWYgKCReTyBlcSAnTVNXaW4z +MicpCiAgICAgIHsgJExJQlMgPSAkQ29uZmlne2NjfSA9fiAvZ2NjLyA/ICctbGRiJyA6ICctbGxp +YmRiJyB9CiAgICBlbHNlCiAgICAgIHsgJExJQlMgPSAnLWxkYicgfQp9CgojIFNvbGFyaXMgaXMg +c3BlY2lhbC4KIyRMSUJTIC49ICIgLWx0aHJlYWQiIGlmICReTyBlcSAnc29sYXJpcycgOwoKIyBB +SVggaXMgc3BlY2lhbC4KJExJQlMgLj0gIiAtbHB0aHJlYWQiIGlmICReTyBlcSAnYWl4JyA7Cgoj +IE9TMiBpcyBhIHNwZWNpYWwgY2FzZSwgc28gY2hlY2sgZm9yIGl0IG5vdy4KbXkgJE9TMiA9ICIi +IDsKJE9TMiA9ICItRE9TMiIgaWYgJENvbmZpZ3snb3NuYW1lJ30gZXEgJ29zMicgOwoKbXkgJFdB +TEwgPSAnJyA7CiMkV0FMTCA9ICcgLVdhbGwgJzsKCldyaXRlTWFrZWZpbGUoCglOQU1FIAkJPT4g +J0RCX0ZpbGUnLAoJTElCUyAJCT0+IFsiLUwke0xJQl9ESVJ9ICRMSUJTIl0sCglJTkMJCT0+ICIt +SSRJTkNfRElSIiwKICAgIFZFUlNJT05fRlJPTQk9PiAnREJfRmlsZS5wbScsCglYU19WRVJTSU9O +ICAgICAgPT4gZXZhbCBNTS0+cGFyc2VfdmVyc2lvbignREJfRmlsZS5wbScpLAoJWFNQUk9UT0FS +Rwk9PiAnLW5vcHJvdG90eXBlcycsCglERUZJTkUJCT0+ICItRF9OT1RfQ09SRSAkT1MyICRWRVJf +SU5GTyAkQ09NUEFUMTg1ICRXQUxMIiwKCU9CSkVDVAkJPT4gJ3ZlcnNpb24kKE9CSl9FWFQpIERC +X0ZpbGUkKE9CSl9FWFQpJywKICAgICgoRXh0VXRpbHM6Ok1ha2VNYWtlci0+VkVSU0lPTigpIGd0 +ICc2LjMwJykgCiAgICAgICAgPyAgKCdMSUNFTlNFJyAgPT4gJ3BlcmwnKSAgICAgICAgIAogICAg +ICAgIDogKCkKICAgICksCiAgICAoCiAgICAkXSA+PSA1LjAwNQogICAgICAgID8gKEFCU1RSQUNU +X0ZST00gPT4gJ0RCX0ZpbGUucG0nLAogICAgICAgICAgICBBVVRIT1IgICAgICAgPT4gJ1BhdWwg +TWFycXVlc3MgPHBtcXNAY3Bhbi5vcmc+JykKICAgICAgICA6ICgpCiAgICApLAogICAgCgoJI09Q +VElNSVpFCT0+ICctZycsCgknZGVwZW5kJwk9PiB7ICdNYWtlZmlsZScgICAgICAgICAgPT4gJ2Nv +bmZpZy5pbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24kKE9CSl9FWFQp +JyA9PiAndmVyc2lvbi5jJ30sCgknY2xlYW4nCQk9PiB7IEZJTEVTID0+ICdjb25zdGFudHMuaCBj +b25zdGFudHMueHMnIH0sCgknbWFjcm8nCQk9PiB7IElOU1RBTExESVJTID0+ICdwZXJsJywgbXlf +ZmlsZXMgPT4gIkBmaWxlcyIgfSwKICAgICAgICAnZGlzdCcgICAgICAgICAgPT4geyBDT01QUkVT +UyA9PiAnZ3ppcCcsIFNVRkZJWCA9PiAnZ3onLAoJCQkgICAgIERJU1RfREVGQVVMVCA9PiAnTXlE +b3VibGVDaGVjayB0YXJkaXN0J30sICAgIAoJKTsKCgpteSBAbmFtZXMgPSBxdygKCUJUUkVFTUFH +SUMKCUJUUkVFVkVSU0lPTgoJREJfTE9DSwoJREJfU0hNRU0KCURCX1RYTgoJSEFTSE1BR0lDCglI +QVNIVkVSU0lPTgoJTUFYX1BBR0VfTlVNQkVSCglNQVhfUEFHRV9PRkZTRVQKCU1BWF9SRUNfTlVN +QkVSCglSRVRfRVJST1IKCVJFVF9TUEVDSUFMCglSRVRfU1VDQ0VTUwoJUl9DVVJTT1IKCVJfRFVQ +CglSX0ZJUlNUCglSX0ZJWEVETEVOCglSX0lBRlRFUgoJUl9JQkVGT1JFCglSX0xBU1QKCVJfTkVY +VAoJUl9OT0tFWQoJUl9OT09WRVJXUklURQoJUl9QUkVWCglSX1JFQ05PU1lOQwoJUl9TRVRDVVJT +T1IKCVJfU05BUFNIT1QKCV9fUl9VTlVTRUQKCSk7CgppZiAoZXZhbCB7cmVxdWlyZSBFeHRVdGls +czo6Q29uc3RhbnQ7IDF9KSB7CiAgICAjIENoZWNrIHRoZSBjb25zdGFudHMgYWJvdmUgYWxsIGFw +cGVhciBpbiBARVhQT1JUIGluIERCX0ZpbGUucG0KICAgIG15ICVuYW1lcyA9IG1hcCB7ICRfLCAx +fSBAbmFtZXM7CiAgICBvcGVuIEYsICI8REJfRmlsZS5wbSIgb3IgZGllICJDYW5ub3Qgb3BlbiBE +Ql9GaWxlLnBtOiAkIVxuIjsKICAgIHdoaWxlICg8Rj4pCiAgICB7CiAgICAgICAgbGFzdCBpZiAv +XlxzKlxARVhQT1JUXHMrPVxzK3F3XCgvIDsKICAgIH0KCiAgICB3aGlsZSAoPEY+KQogICAgewog +ICAgICAgIGxhc3QgaWYgL15ccypcKS8gOwogICAgICAgIC8oXFMrKS8gOwogICAgICAgIGRlbGV0 +ZSAkbmFtZXN7JDF9IGlmIGRlZmluZWQgJDEgOwogICAgfQogICAgY2xvc2UgRiA7CgogICAgaWYg +KCBrZXlzICVuYW1lcyApCiAgICB7CiAgICAgICAgbXkgJG1pc3NpbmcgPSBqb2luICgiXG5cdCIs +IHNvcnQga2V5cyAlbmFtZXMpIDsKICAgICAgICBkaWUgIlRoZSBmb2xsb3dpbmcgbmFtZXMgYXJl +IG1pc3NpbmcgZnJvbSBcQEVYUE9SVCBpbiBEQl9GaWxlLnBtXG4iIC4KICAgICAgICAgICAgIlx0 +JG1pc3NpbmdcbiIgOwogICAgfQogICAgCgogICAgRXh0VXRpbHM6OkNvbnN0YW50OjpXcml0ZUNv +bnN0YW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUUgPT4gJ0RC +X0ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgPT4gXEBu +YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfRklMRSAgPT4gJ2Nv +bnN0YW50cy5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTX0ZJTEUg +ID0+ICdjb25zdGFudHMueHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICApOwp9IAplbHNlIHsKICAgIHVzZSBGaWxlOjpDb3B5OwogICAgY29weSAo +J2ZhbGxiYWNrLmgnLCAnY29uc3RhbnRzLmgnKQogICAgICBvciBkaWUgIkNhbid0IGNvcHkgZmFs +bGJhY2suaCB0byBjb25zdGFudHMuaDogJCEiOwogICAgY29weSAoJ2ZhbGxiYWNrLnhzJywgJ2Nv +bnN0YW50cy54cycpCiAgICAgIG9yIGRpZSAiQ2FuJ3QgY29weSBmYWxsYmFjay54cyB0byBjb25z +dGFudHMueHM6ICQhIjsKfQoKZXhpdDsKCgpzdWIgTVk6OmxpYnNjYW4KewogICAgbXkgJHNlbGYg +PSBzaGlmdCA7CiAgICBteSAkcGF0aCA9IHNoaWZ0IDsKCiAgICByZXR1cm4gdW5kZWYKICAgICAg +ICBpZiAkcGF0aCA9fiAvKH58XC5iYWspJC8gfHwgCiAgICAgICAgICAgJHBhdGggPX4gL15cLi4q +XC5zd3AkLyA7CgogICAgcmV0dXJuICRwYXRoOyAgICAKfQoKCnN1YiBNWTo6cG9zdGFtYmxlIHsg +PDwnRU9NJyB9IDsKCk15RG91YmxlQ2hlY2s6CglAZWNobyBDaGVja2luZyBjb25maWcuaW4gaXMg +c2V0dXAgZm9yIGEgcmVsZWFzZQoJQChncmVwICJeTElCLiovdXNyL2xvY2FsL0JlcmtlbGV5REIi +IGNvbmZpZy5pbiAmJiAJXAoJZ3JlcCAiXklOQ0xVREUuKi91c3IvbG9jYWwvQmVya2VsZXlEQiIg +Y29uZmlnLmluICYmCVwKCWdyZXAgIl4jREJOQU1FLioiIGNvbmZpZy5pbikgPi9kZXYvbnVsbCB8 +fAkJXAoJICAgIChlY2hvIGNvbmZpZy5pbiBuZWVkcyBmaXhpbmcgOyBleGl0IDEpCglAZWNobyBj +b25maWcuaW4gaXMgb2sKCUBlY2hvIAoJQGVjaG8gQ2hlY2tpbmcgREJfRmlsZS54cyBpcyBvayBm +b3IgYSByZWxlYXNlLgoJQChwZXJsIC1uZSAnIGV4aXQgMSBpZiAvXlxzKiNccypkZWZpbmVccytU +UkFDRS8gOyAnIERCX0ZpbGUueHMgfHwgXAoJICAgIChlY2hvIERCX0ZpbGUueHMgbmVlZHMgZml4 +aW5nIDsgZXhpdCAxKSkKCUBlY2hvIERCX0ZpbGUueHMgaXMgb2sKCUBlY2hvIAoJQGVjaG8gQ2hl +Y2tpbmcgZm9yICQkXlcgaW4gZmlsZXM6ICQobXlfZmlsZXMpCglAcGVybCAtbmUgJwkJCQkJCVwK +CSAgICBleGl0IDEgaWYgL15ccypsb2NhbFxzKlwoXHMqXCQkXF5XXHMqXCkvOycgJChteV9maWxl +cykgfHwJXAoJICAoZWNobyBmb3VuZCB1bmV4cGVjdGVkICQkXlcgOyBleGl0IDEpCglAZWNobyBO +byAkJF5XIGZvdW5kLgoJQGVjaG8gCglAZWNobyBDaGVja2luZyBmb3IgJ3VzZSB2YXJzJyBpbiBm +aWxlczogJChteV9maWxlcykKCUBwZXJsIC1uZSAnCQkJCQkJXAoJICAgIGV4aXQgMCBpZiAvXl9f +KERBVEF8RU5EKV9fLzsgICAgICAgICAgICAgICAJXAoJICAgIGV4aXQgMSBpZiAvXlxzKnVzZVxz +K3ZhcnMvOycgJChteV9maWxlcykgfHwJXAoJICAoZWNobyBmb3VuZCB1bmV4cGVjdGVkICJ1c2Ug +dmFycyI7IGV4aXQgMSkKCUBlY2hvIE5vICd1c2UgdmFycycgZm91bmQuCglAZWNobyAKCUBlY2hv +IEFsbCBmaWxlcyBhcmUgT0sgZm9yIGEgcmVsZWFzZS4KCUBlY2hvIAoKRU9NCgoKCnN1YiBQYXJz +ZUNPTkZJRwp7CiAgICBteSAoJGssICR2KSA7CiAgICBteSBAYmFka2V5ID0gKCkgOwogICAgbXkg +JUluZm8gPSAoKSA7CiAgICBteSBAT3B0aW9ucyA9IHF3KCBJTkNMVURFIExJQiBQUkVGSVggSEFT +SCBEQk5BTUUgQ09NUEFUMTg1ICkgOwogICAgbXkgJVZhbGlkT3B0aW9uID0gbWFwIHskXywgMX0g +QE9wdGlvbnMgOwogICAgbXkgJVBhcnNlZCA9ICVWYWxpZE9wdGlvbiA7CiAgICBteSAkQ09ORklH +ID0gJ2NvbmZpZy5pbicgOwoKICAgIHByaW50ICJQYXJzaW5nICRDT05GSUcuLi5cbiIgOwoKICAg +ICMgREJOQU1FICYgQ09NUEFUMTg1IGFyZSBvcHRpb25hbCwgc28gcHJldGVuZCB0aGV5ICBoYXZl +IAogICAgIyBiZWVuIHBhcnNlZC4KICAgIGRlbGV0ZSAkUGFyc2VkeydEQk5BTUUnfSA7CiAgICBk +ZWxldGUgJFBhcnNlZHsnQ09NUEFUMTg1J30gOwogICAgJEluZm97Q09NUEFUMTg1fSA9ICJObyIg +OwoKCiAgICBvcGVuKEYsICIkQ09ORklHIikgb3IgZGllICJDYW5ub3Qgb3BlbiBmaWxlICRDT05G +SUc6ICQhXG4iIDsKICAgIHdoaWxlICg8Rj4pIHsKCXMvXlxzKnxccyokLy9nIDsKCW5leHQgaWYg +L15ccyokLyBvciAvXlxzKiMvIDsKCXMvXHMqI1xzKiQvLyA7CgoJKCRrLCAkdikgPSBzcGxpdCgv +XHMrPVxzKy8sICRfLCAyKSA7CgkkayA9IHVjICRrIDsKCWlmICgkVmFsaWRPcHRpb257JGt9KSB7 +CgkgICAgZGVsZXRlICRQYXJzZWR7JGt9IDsKCSAgICAkSW5mb3ska30gPSAkdiA7Cgl9CgllbHNl +IHsKCSAgICBwdXNoKEBiYWRrZXksICRrKSA7Cgl9CiAgICB9CiAgICBjbG9zZSBGIDsKCiAgICBw +cmludCAiVW5rbm93biBrZXlzIGluICRDT05GSUcgaWdub3JlZCBbQGJhZGtleV1cbiIKCWlmIEBi +YWRrZXkgOwoKICAgICMgY2hlY2sgcGFyc2VkIHZhbHVlcwogICAgbXkgQG1pc3NpbmcgPSAoKSA7 +CiAgICBkaWUgIlRoZSBmb2xsb3dpbmcga2V5cyBhcmUgbWlzc2luZyBmcm9tICRDT05GSUcgZmls +ZTogW0BtaXNzaW5nXVxuIiAKICAgICAgICBpZiBAbWlzc2luZyA9IGtleXMgJVBhcnNlZCA7Cgog +ICAgJElOQ19ESVIgPSAkRU5WeydEQl9GSUxFX0lOQ0xVREUnfSB8fCAkSW5mb3snSU5DTFVERSd9 +IDsKICAgICRMSUJfRElSID0gJEVOVnsnREJfRklMRV9MSUInfSB8fCAkSW5mb3snTElCJ30gOwog +ICAgJERCX05BTUUgPSAkRU5WeydEQl9GSUxFX05BTUUnfSB8fCAkSW5mb3snREJOQU1FJ30gOwog +ICAgJENPTVBBVDE4NSA9ICItRENPTVBBVDE4NSAtRERCX0xJQlJBUllfQ09NUEFUSUJJTElUWV9B +UEkiIAogICAgICAgIGlmIChkZWZpbmVkICRFTlZ7J0RCX0ZJTEVfQ09NUEFUMTg1J30gJiYgCgkJ +JEVOVnsnREJfRklMRV9DT01QQVQxODUnfSA9fiAvXlxzKihvbnx0cnVlfDEpXHMqJC9pKSB8fAoJ +CSRJbmZveydDT01QQVQxODUnfSA9fiAvXlxzKihvbnx0cnVlfDEpXHMqJC9pIDsgCiAgICBteSAk +UFJFRklYICA9ICRJbmZveydQUkVGSVgnfSA7CiAgICBteSAkSEFTSCAgICA9ICRJbmZveydIQVNI +J30gOwoKICAgICRWRVJfSU5GTyA9ICItRG1EQl9QcmVmaXhfdD0ke1BSRUZJWH0gLURtREJfSGFz +aF90PSR7SEFTSH0iIDsKCiAgICBwcmludCA8PEVPTSBpZiAwIDsKICAgIElOQ0xVREUJWyRJTkNf +RElSXQogICAgTElCCQlbJExJQl9ESVJdCiAgICBIQVNICVskSEFTSF0KICAgIFBSRUZJWAlbJFBS +RUZJWF0KICAgIERCTkFNRSAgICAgIFskREJfTkFNRV0KCkVPTQoKICAgIHByaW50ICJMb29rcyBH +b29kLlxuIiA7Cgp9CgpzdWIgVXBEb3duZ3JhZGUKewogICAgbXkgQGZpbGVzID0gQF8gOwoKICAg +ICMgb3VyICAgICAgaXMgc3RhYmxlIGZyb20gNS42LjAgb253YXJkCiAgICAjIHdhcm5pbmdzIGlz +IHN0YWJsZSBmcm9tIDUuNi4xIG9ud2FyZAoKICAgICMgTm90ZTogdGhpcyBjb2RlIGFzc3VtZXMg +dGhhdCBlYWNoIHN0YXRlbWVudCBpdCBtb2RpZmllcyBpcyBub3QKICAgICMgICAgICAgc3BsaXQg +YWNyb3NzIG11bHRpcGxlIGxpbmVzLgoKCiAgICBteSAkd2Fybl9zdWIgOwogICAgbXkgJG91cl9z +dWIgOwoKICAgIGlmICgkXSA8IDUuMDA2MDAxKSB7CiAgICAgICAgIyBGcm9tOiB1c2V8bm8gd2Fy +bmluZ3MgImJsYWgiCiAgICAgICAgIyBUbzogICBsb2NhbCAoJF5XKSA9IDE7ICMgdXNlfG5vIHdh +cm5pbmdzICJibGFoIgogICAgICAgICMKICAgICAgICAjIGFuZAogICAgICAgICMKICAgICAgICAj +IEZyb206IHdhcm5pbmdzOjp3YXJuaWYoeCx5KTsKICAgICAgICAjIFRvOiAgICReVyAmJiBjYXJw +KHkpOyAjIHdhcm5pZiAtLSB4CiAgICAgICAgJHdhcm5fc3ViID0gc3ViIHsKCSAgICBzL14oXHMq +KShub1xzK3dhcm5pbmdzKS8kezF9bG9jYWwgKFwkXlcpID0gMDsgIyQyLyA7CgkgICAgcy9eKFxz +KikodXNlXHMrd2FybmluZ3MpLyR7MX1sb2NhbCAoXCReVykgPSAxOyAjJDIvIDsKCgkgICAgcy9e +KFxzKil3YXJuaW5nczo6d2FybmlmXHMqXCgoLio/KVxzKixccyooLio/KVwpXHMqOy8kezF9XCRe +VyAmJiBjYXJwKCQzKTsgIyB3YXJuaWYgLSAkMi8gOwogICAgICAgICAgfTsKICAgIH0KICAgIGVs +c2UgewogICAgICAgICMgRnJvbTogbG9jYWwgKCReVykgPSAxOyAjIHVzZXxubyB3YXJuaW5ncyAi +YmxhaCIKICAgICAgICAjIFRvOiAgIHVzZXxubyB3YXJuaW5ncyAiYmxhaCIKICAgICAgICAjCiAg +ICAgICAgIyBhbmQKICAgICAgICAjCiAgICAgICAgIyBGcm9tOiAkXlcgJiYgY2FycCh5KTsgIyB3 +YXJuaWYgLS0geAogICAgICAgICMgVG86ICAgd2FybmluZ3M6Ondhcm5pZih4LHkpOwogICAgICAg +ICR3YXJuX3N1YiA9IHN1YiB7CgkgICAgcy9eKFxzKilsb2NhbFxzKlwoXCRcXldcKVxzKj1ccypc +ZCtccyo7XHMqI1xzKigobm98dXNlKVxzK3dhcm5pbmdzLiopLyQxJDIvIDsKCSAgICBzL14oXHMq +KVwkXF5XXHMrXCZcJlxzKmNhcnBccypcKCguKj8pXClccyo7XHMqI1xzKndhcm5pZlxzKi1ccyoo +LiopLyR7MX13YXJuaW5nczo6d2FybmlmKCQzLCAkMik7LyA7CiAgICAgICAgICB9OwogICAgfQoK +ICAgIGlmICgkXSA8IDUuMDA2MDAwKSB7CiAgICAgICAgJG91cl9zdWIgPSBzdWIgewoJICAgIGlm +ICggL14oXHMqKW91clxzK1woXHMqKFteKV0rXHMqKVwpLyApIHsKICAgICAgICAgICAgICAgIG15 +ICRpbmRlbnQgPSAkMTsKICAgICAgICAgICAgICAgIG15ICR2YXJzID0gam9pbiAnICcsIHNwbGl0 +IC9ccyosXHMqLywgJDI7CiAgICAgICAgICAgICAgICAkXyA9ICIke2luZGVudH11c2UgdmFycyBx +dygkdmFycyk7XG4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgfQogICAgZWxzZSB7 +CiAgICAgICAgJG91cl9zdWIgPSBzdWIgewoJICAgIGlmICggL14oXHMqKXVzZVxzK3ZhcnNccytx +d1woKC4qPylcKS8gKSB7CiAgICAgICAgICAgICAgICBteSAkaW5kZW50ID0gJDE7CiAgICAgICAg +ICAgICAgICBteSAkdmFycyA9IGpvaW4gJywgJywgc3BsaXQgJyAnLCAkMjsKICAgICAgICAgICAg +ICAgICRfID0gIiR7aW5kZW50fW91ciAoJHZhcnMpO1xuIjsKICAgICAgICAgICAgfQogICAgICAg +ICAgfTsKICAgIH0KCiAgICBmb3JlYWNoIChAZmlsZXMpCiAgICAgIHsgZG9VcERvd24oJG91cl9z +dWIsICR3YXJuX3N1YiwgJF8pIH0KfQoKCnN1YiBkb1VwRG93bgp7CiAgICBteSAkb3VyX3N1YiA9 +IHNoaWZ0OwogICAgbXkgJHdhcm5fc3ViID0gc2hpZnQ7CgogICAgbG9jYWwgKCReSSkgPSAiLmJh +ayIgOwogICAgbG9jYWwgKEBBUkdWKSA9IHNoaWZ0OwoKICAgIHdoaWxlICg8PikKICAgIHsKCXBy +aW50LCBsYXN0IGlmIC9eX18oRU5EfERBVEEpX18vIDsKCgkmeyAkb3VyX3N1YiB9KCk7CgkmeyAk +d2Fybl9zdWIgfSgpOwoJcHJpbnQgOwogICAgfQoKICAgIHJldHVybiBpZiBlb2YgOwoKICAgIHdo +aWxlICg8PikKICAgICAgeyBwcmludCB9Cn0KCiMgZW5kIG9mIGZpbGUgTWFrZWZpbGUuUEwK +DBFILE003 + chmod $mode, $file if $mode; + } + # Create ext/DB_File/config.in + { + my $file = File::Spec->catfile('ext','DB_File','config.in'); + _write_b64_or_die($file,<<'DBFILE004'); +IyBGaWxlbmFtZToJY29uZmlnLmluCiMKIyB3cml0dGVuIGJ5IFBhdWwgTWFycXVlc3MgPFBhdWwu +TWFycXVlc3NAYnRpbnRlcm5ldC5jb20+CiMgbGFzdCBtb2RpZmllZCA5dGggU2VwdCAxOTk3CiMg +dmVyc2lvbiAxLjU1CgojIDEuIFdoZXJlIGlzIHRoZSBmaWxlIGRiLmg/CiMKIyAgICBDaGFuZ2Ug +dGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBkYi5oIGlzCiMg +ICAgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgoKSU5DTFVERQk9IC91c3IvbG9jYWwvQmVya2Vs +ZXlEQi9pbmNsdWRlCiNJTkNMVURFCT0gL3Vzci9sb2NhbC9pbmNsdWRlCiNJTkNMVURFCT0gL3Vz +ci9pbmNsdWRlCgojIDIuIFdoZXJlIGlzIGxpYmRiPwojCiMgICAgQ2hhbmdlIHRoZSBwYXRoIGJl +bG93IHRvIHBvaW50IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgbGliZGIgaXMKIyAgICBpbnN0YWxs +ZWQgb24geW91ciBzeXN0ZW0uCgpMSUIJPSAvdXNyL2xvY2FsL0JlcmtlbGV5REIvbGliCiNMSUIJ +PSAvdXNyL2xvY2FsL2xpYgojTElCCT0gL3Vzci9saWIKCiMgMy4gV2hhdCB2ZXJzaW9uIG9mIEJl +cmtlbHkgREIgaGF2ZSB5b3UgZ290PwojCiMgICAgSWYgeW91IGhhdmUgdmVyc2lvbiAyLjAgb3Ig +Z3JlYXRlciwgeW91IGNhbiBza2lwIHRoaXMgcXVlc3Rpb24uCiMKIyAgICBJZiB5b3UgaGF2ZSBC +ZXJrZWxleSBEQiAxLjc4IG9yIGdyZWF0ZXIgeW91IHNob3VsZG4ndCBoYXZlIHRvCiMgICAgY2hh +bmdlIHRoZSBkZWZpbml0aW9ucyBmb3IgUFJFRklYIGFuZCBIQVNIIGJlbG93LgojCiMgICAgRm9y +IG9sZGVyIHZlcnNpb25zIG9mIEJlcmtlbGV5IERCIGNoYW5nZSBib3RoIFBSRUZJWCBhbmQgSEFT +SCB0byBpbnQuCiMgICAgVmVyc2lvbiAxLjcxLCAxLjcyIGFuZCAxLjczIGFyZSBrbm93biB0byBu +ZWVkIHRoaXMgY2hhbmdlLgojCiMgICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB2ZXJzaW9uIHlv +dSBoYXZlIGhhdmUgYSBsb29rIGluIHRoZSBmaWxlIGRiLmguIAojCiMgICAgU2VhcmNoIGZvciB0 +aGUgc3RyaW5nICJEQl9WRVJTSU9OX01BSk9SIi4gSWYgaXQgaXMgcHJlc2VudCwgeW91CiMgICAg +aGF2ZSBCZXJrZWxleSBEQiB2ZXJzaW9uIDIgKG9yIGdyZWF0ZXIpLgojCiMgICAgSWYgdGhhdCBk +aWRuJ3Qgd29yaywgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgQlRSRUVJTkZPIHR5cGVkZWYu +CiMgICAgQ2hlY2sgdGhlIHJldHVybiB0eXBlIGZyb20gdGhlIHByZWZpeCBlbGVtZW50LiBJdCBz +aG91bGQgbG9vayBsaWtlCiMgICAgdGhpcyBpbiBhbiBvbGRlciBjb3B5IG9mIGRiLmg6CiMKIyAg +ICAgICAgaW50ICAgICAgKCpwcmVmaXgpICAgICAgX19QKChjb25zdCBEQlQgKiwgY29uc3QgREJU +ICopKTsgIAojCiMgICAgYW5kIGxpa2UgdGhpcyBpbiBhIG1vcmUgcmVjZW50IGNvcHk6CiMKIyAg +ICAgICAgc2l6ZV90ICAoKnByZWZpeCkgICAgICAgLyogcHJlZml4IGZ1bmN0aW9uICovCiMgICAg +ICAgICAgICBfX1AoKGNvbnN0IERCVCAqLCBjb25zdCBEQlQgKikpOwojCiMgICAgQ2hhbmdlIHRo +ZSBkZWZpbml0aW9uIG9mIFBSRUZJWCwgYmVsb3csIHRvIHJlZmxlY3QgdGhlIHJldHVybiB0eXBl +CiMgICAgb2YgdGhlIHByZWZpeCBmdW5jdGlvbiBpbiB5b3VyIGRiLmguCiMKIyAgICBOb3cgZmlu +ZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgSEFTSElORk8gdHlwZWRlZi4gQ2hlY2sgdGhlIHJldHVy +bgojICAgIHR5cGUgb2YgdGhlIGhhc2ggZWxlbWVudC4gT2xkZXIgdmVyc2lvbnMgbG9vayBsaWtl +IHRoaXM6CiMKIyAgICAgICAgaW50ICAgICAgKCpoYXNoKSBfX1AoKGNvbnN0IHZvaWQgKiwgc2l6 +ZV90KSk7ICAgICAgCiMKIyAgICBuZXdlciBsaWtlIHRoaXM6CiMKIyAgICAgICAgdV9pbnQzMl90 +ICAgICAgICAgICAgICAgLyogaGFzaCBmdW5jdGlvbiAqLwojICAgICAgICAgICAgICAgICgqaGFz +aCkgX19QKChjb25zdCB2b2lkICosIHNpemVfdCkpOwojCiMgICAgQ2hhbmdlIHRoZSBkZWZpbml0 +aW9uIG9mIEhBU0gsIGJlbG93LCB0byByZWZsZWN0IHRoZSByZXR1cm4gdHlwZSBvZgojICAgIHRo +ZSBoYXNoIGZ1bmN0aW9uIGluIHlvdXIgZGIuaC4KIwoKUFJFRklYCT0Jc2l6ZV90CkhBU0gJPQl1 +X2ludDMyX3QKCiMgNC4gSXMgdGhlIGxpYnJhcnkgY2FsbGVkIGxpYmRiPwojCiMgICAgSWYgeW91 +IGhhdmUgY29waWVzIG9mIGJvdGggMS54IGFuZCAyLnggQmVya2VsZXkgREIgaW5zdGFsbGVkIG9u +CiMgICAgeW91ciBzeXN0ZW0gaXQgY2FuIHNvbWV0aW1lcyBiZSB0cmlja3kgdG8gbWFrZSBzdXJl +IHlvdSBhcmUgdXNpbmcKIyAgICB0aGUgY29ycmVjdCBvbmUuIFJlbmFtaW5nIG9uZSAob3IgY3Jl +YXRpbmcgYSBzeW1ib2xpYyBsaW5rKSB0bwojICAgIGluY2x1ZGUgdGhlIHZlcnNpb24gbnVtYmVy +IG9mIHRoZSBsaWJyYXJ5IGNhbiBoZWxwLgojCiMgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZl +IGJvdGggQmVya2VsZXkgREIgMi4zLjEyIGFuZCAxLjg1IG9uIHlvdXIKIyAgICBzeXN0ZW0gYW5k +IHlvdSB3YW50IHRvIHVzZSB0aGUgQmVya2VsZXkgREIgdmVyc2lvbiAyIGxpYnJhcnkgeW91CiMg +ICAgY291bGQgcmVuYW1lIHRoZSB2ZXJzaW9uIDIgbGlicmFyeSBmcm9tIGxpYmRiLmEgdG8gbGli +ZGItMi4zLjEyLmEgYW5kCiMgICAgY2hhbmdlIHRoZSBEQk5BTUUgbGluZSBiZWxvdyB0byBsb29r +IGxpa2UgdGhpczoKIwojICAgICAgICBEQk5BTUUgPSAtbGRiLTIuMy4xMgojCiMgICAgVGhhdCB3 +aWxsIGVuc3VyZSB5b3UgYXJlIGxpbmtpbmcgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiB0aGUgREIK +IyAgICBsaWJyYXJ5LgojCiMgICAgTm90ZTogSWYgeW91IGFyZSBidWlsZGluZyB0aGlzIG1vZHVs +ZSB3aXRoIFdpbjMyLCAtbGxpYmRiIHdpbGwgYmUKIyAgICB1c2VkIGJ5IGRlZmF1bHQuCiMKIyAg +ICBJZiB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LCB1bmNvbW1lbnQg +dGhlIGxpbmUKIyAgICBiZWxvdyAoYnkgcmVtb3ZpbmcgdGhlIGxlYWRpbmcgIykgYW5kIGVkaXQg +dGhlIGxpbmUgdG8gdXNlIHRoZSBuYW1lCiMgICAgeW91IGhhdmUgcGlja2VkLgogCiNEQk5BTUUg +PSAtbGRiLTIuNC4xMAoKIyBlbmQgb2YgZmlsZSBjb25maWcuaW4K +DBFILE004 + } +} + sub _patch_useshrplib { # from https://github.com/Perl/perl5/commit/191f8909fa4eca1db16a91ada42dd4a065c04890 _patch(<<'END'); diff --git a/lib/Devel/PatchPerl/Hints.pm b/lib/Devel/PatchPerl/Hints.pm index c487d39..2af276d 100644 --- a/lib/Devel/PatchPerl/Hints.pm +++ b/lib/Devel/PatchPerl/Hints.pm @@ -78,33 +78,46 @@ YnN3YW50ZWQ9YGVjaG8gIiAkbGlic3dhbnRlZCAiIHwgc2VkIC1lICdzLyBjIC8gL2cnYAojIC0g ZWxpbWluYXRlIC1sbSwgc3ltbGluayB0byBsaWJjeWd3aW4uYQpsaWJzd2FudGVkPWBlY2hvICIg JGxpYnN3YW50ZWQgIiB8IHNlZCAtZSAncy8gbSAvIC9nJ2AKIyAtIGVsaW1pbmF0ZSAtbHV0aWws IHN5bWJvbHMgYXJlIGFsbCBpbiBsaWJjeWd3aW4uYQpsaWJzd2FudGVkPWBlY2hvICIgJGxpYnN3 -YW50ZWQgIiB8IHNlZCAtZSAncy8gdXRpbCAvIC9nJ2AKIyAtIGFkZCBsaWJnZGJtX2NvbXBhdCAk -bGlic3dhbnRlZApsaWJzd2FudGVkPSIkbGlic3dhbnRlZCBnZGJtX2NvbXBhdCIKdGVzdCAteiAi -JG9wdGltaXplIiAmJiBvcHRpbWl6ZT0nLU8zJwptYW4zZXh0PSczcG0nCnRlc3QgLXogIiR1c2U2 -NGJpdGludCIgJiYgdXNlNjRiaXRpbnQ9J2RlZmluZScKdGVzdCAteiAiJHVzZWl0aHJlYWRzIiAm -JiB1c2VpdGhyZWFkcz0nZGVmaW5lJwpjY2ZsYWdzPSIkY2NmbGFncyAtRFBFUkxfVVNFX1NBRkVf -UFVURU5WIC1VX19TVFJJQ1RfQU5TSV9fIC1EX0dOVV9TT1VSQ0UiCiMgLSBvdGhlcndpc2UgaTY4 -Ni1jeWd3aW4KYXJjaG5hbWU9J2N5Z3dpbicKCiMgZHluYW1pYyBsb2FkaW5nCiMgLSBvdGhlcndp -c2UgLWZwaWMKY2NjZGxmbGFncz0nICcKbGRkbGZsYWdzPScgLS1zaGFyZWQnCnRlc3QgLXogIiRs -ZCIgJiYgbGQ9J2crKycKCmNhc2UgIiRvc3ZlcnMiIGluCiAgICAjIENvbmZpZ3VyZSBnZXRzIHRo -ZXNlIHdyb25nIGlmIHRoZSBJUEMgc2VydmVyIGlzbid0IHlldCBydW5uaW5nOgogICAgIyBvbmx5 -IHVzZSBmb3IgMS41LjcgYW5kIG9ud2FyZHMKICAgIFsyLTldKnwxLls2LTldKnwxLlsxLTVdWzAt -OV0qfDEuNS5bNy05XSp8MS41LlsxLTZdWzAtOV0qKQogICAgICAgIGRfc2VtY3RsX3NlbWlkX2Rz -PSdkZWZpbmUnCiAgICAgICAgZF9zZW1jdGxfc2VtdW49J2RlZmluZScKICAgICAgICA7Owplc2Fj -CgpjYXNlICIkb3N2ZXJzIiBpbgogICAgWzItOV0qfDEuWzYtOV0qKQogICAgICAgICMgSVB2NiBv -bmx5IHNpbmNlIDEuNwogICAgICAgIGRfaW5ldG50b3A9J2RlZmluZScKICAgICAgICBkX2luZXRw -dG9uPSdkZWZpbmUnCiAgICAgICAgOzsKICAgICopCiAgICAgICAgIyBJUHY2IG5vdCBpbXBsZW1l -bnRlZCBiZWZvcmUgY3lnd2luLTEuNwogICAgICAgIGRfaW5ldG50b3A9J3VuZGVmJwogICAgICAg -IGRfaW5ldHB0b249J3VuZGVmJwplc2FjCgojIGNvbXBpbGUgV2luMzJDT1JFICJtb2R1bGUiIGFz -IHN0YXRpYy4gdHJ5IHRvIGF2b2lkIHRoZSBzcGFjZS4KaWYgdGVzdCAteiAiJHN0YXRpY19leHQi -OyB0aGVuCiAgc3RhdGljX2V4dD0iV2luMzJDT1JFIgplbHNlCiAgc3RhdGljX2V4dD0iJHN0YXRp -Y19leHQgV2luMzJDT1JFIgpmaQoKIyBXaW45eCBwcm9ibGVtIHdpdGggbm9uLWJsb2NraW5nIHJl -YWQgZnJvbSBhIGNsb3NlZCBwaXBlCmRfZW9mbmJsaz0nZGVmaW5lJwoKIyBzdXBwcmVzcyBhdXRv -LWltcG9ydCB3YXJuaW5ncwpsZGZsYWdzPSIkbGRmbGFncyAtV2wsLS1lbmFibGUtYXV0by1pbXBv -cnQgLVdsLC0tZXhwb3J0LWFsbC1zeW1ib2xzIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2Ui -CmxkZGxmbGFncz0iJGxkZGxmbGFncyAkbGRmbGFncyIKCiMgc3RyaXAgZXhlJ3MgYW5kIGRsbCdz -LCBiZXR0ZXIgZG8gaXQgYWZ0ZXJ3YXJkcwojbGRmbGFncz0iJGxkZmxhZ3MgLXMiCiNjY2RsZmxh -Z3M9IiRjY2RsZmxhZ3MgLXMiCiNsZGRsZmxhZ3M9IiRsZGRsZmxhZ3MgLXMiCg==', +YW50ZWQgIiB8IHNlZCAtZSAncy8gdXRpbCAvIC9nJ2AKdGVzdCAteiAiJGlnbm9yZV92ZXJzaW9u +ZWRfc29saWJzIiAmJiBpZ25vcmVfdmVyc2lvbmVkX3NvbGlicz0neScKdGVzdCAteiAiJHVzZW5t +IiAmJiB1c2VubT0nbm8nCnRlc3QgLXogIiRsaWJjIiAmJiBsaWJjPScvdXNyL2xpYi9saWJjeWd3 +aW4uYScKdGVzdCAteiAiJGxvY2xpYnB0aCIgJiYgbG9jbGlicHRoPScgJwp0ZXN0IC16ICIkZ2xp +YnB0aCIgJiYgZ2xpYnB0aD0nICcKdGVzdCAteiAiJHBsaWJwdGgiICYmIHBsaWJwdGg9JyAnCnRl +c3QgLXogIiRsaWJwdGgiICYmIGxpYnB0aD0nICcKUEFUSD0nLjovdXNyL2Jpbi8nCiMgLSBhZGQg +bGliZ2RibV9jb21wYXQgJGxpYnN3YW50ZWQKbGlic3dhbnRlZD0iJGxpYnN3YW50ZWQgZ2RibV9j +b21wYXQiCnRlc3QgLXogIiRvcHRpbWl6ZSIgJiYgb3B0aW1pemU9Jy1PMycKbWFuM2V4dD0nM3Bt +Jwp0ZXN0IC16ICIkdXNlNjRiaXRpbnQiICYmIHVzZTY0Yml0aW50PSdkZWZpbmUnCnRlc3QgLXog +IiR1c2VpdGhyZWFkcyIgJiYgdXNlaXRocmVhZHM9J2RlZmluZScKdGVzdCAteiAiJHVzZW15bWFs +bG9jIiAmJiB1c2VteW1hbGxvYz0ndW5kZWYnCmNjZmxhZ3M9IiRjY2ZsYWdzIC1VX19TVFJJQ1Rf +QU5TSV9fIC1EX0dOVV9TT1VSQ0UiCiMgLSBvdGhlcndpc2UgaTY4Ni1jeWd3aW4KYXJjaG5hbWU9 +J2N5Z3dpbicKCiMgZHluYW1pYyBsb2FkaW5nCiMgLSBvdGhlcndpc2UgLWZwaWMKY2NjZGxmbGFn +cz0nICcKbGRkbGZsYWdzPScgLS1zaGFyZWQnCnRlc3QgLXogIiRsZCIgJiYgbGQ9J2crKycKCmNh +c2UgIiRvc3ZlcnMiIGluCiAgICAjIENvbmZpZ3VyZSBnZXRzIHRoZXNlIHdyb25nIGlmIHRoZSBJ +UEMgc2VydmVyIGlzbid0IHlldCBydW5uaW5nOgogICAgIyBvbmx5IHVzZSBmb3IgMS41LjcgYW5k +IG9ud2FyZHMKICAgIFsyLTldKnwxLls2LTldKnwxLlsxLTVdWzAtOV0qfDEuNS5bNy05XSp8MS41 +LlsxLTZdWzAtOV0qKQogICAgICAgIGRfc2VtY3RsX3NlbWlkX2RzPSdkZWZpbmUnCiAgICAgICAg +ZF9zZW1jdGxfc2VtdW49J2RlZmluZScKICAgICAgICA7Owplc2FjCgpjYXNlICIkb3N2ZXJzIiBp +bgogICAgWzItOV0qfDEuWzYtOV0qKQogICAgICAgICMgSVB2NiBvbmx5IHNpbmNlIDEuNwogICAg +ICAgIGRfaW5ldG50b3A9J2RlZmluZScKICAgICAgICBkX2luZXRwdG9uPSdkZWZpbmUnCiAgICAg +ICAgOzsKICAgICopCiAgICAgICAgIyBJUHY2IG5vdCBpbXBsZW1lbnRlZCBiZWZvcmUgY3lnd2lu +LTEuNwogICAgICAgIGRfaW5ldG50b3A9J3VuZGVmJwogICAgICAgIGRfaW5ldHB0b249J3VuZGVm +Jwplc2FjCgojIGNvbXBpbGUgV2luMzJDT1JFICJtb2R1bGUiIGFzIHN0YXRpYy4gdHJ5IHRvIGF2 +b2lkIHRoZSBzcGFjZS4KaWYgdGVzdCAteiAiJHN0YXRpY19leHQiOyB0aGVuCiAgc3RhdGljX2V4 +dD0iV2luMzJDT1JFIgplbHNlCiAgc3RhdGljX2V4dD0iJHN0YXRpY19leHQgV2luMzJDT1JFIgpm +aQoKIyBXaW45eCBwcm9ibGVtIHdpdGggbm9uLWJsb2NraW5nIHJlYWQgZnJvbSBhIGNsb3NlZCBw +aXBlCmRfZW9mbmJsaz0nZGVmaW5lJwoKIyBzdXBwcmVzcyBhdXRvLWltcG9ydCB3YXJuaW5ncwps +ZGZsYWdzPSIkbGRmbGFncyAtV2wsLS1lbmFibGUtYXV0by1pbXBvcnQgLVdsLC0tZXhwb3J0LWFs +bC1zeW1ib2xzIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiCmxkZGxmbGFncz0iJGxkZGxm +bGFncyAkbGRmbGFncyIKCiMgc3RyaXAgZXhlJ3MgYW5kIGRsbCdzLCBiZXR0ZXIgZG8gaXQgYWZ0 +ZXJ3YXJkcwojbGRmbGFncz0iJGxkZmxhZ3MgLXMiCiNjY2RsZmxhZ3M9IiRjY2RsZmxhZ3MgLXMi +CiNsZGRsZmxhZ3M9IiRsZGRsZmxhZ3MgLXMiCgojIFNlZW1zIHRoYXQgZXhwb3J0aW5nIF9UaHJl +YWRfbG9jYWwgZG9lc24ndCB3b3JrIG9uIGN5Z3dpbi4gVGhpcyA2IHllYXIgb2xkCiMgZ2NjIGJ1 +ZyBzdWdnZXN0cyB0aGF0IG1heWJlIHRoZSBwcm9ibGVtIHJlYWxseSBpcyBiaW51dGlscywgYnV0 +IGVpdGhlciB3YXkKIyBpdCBzdGlsbCBkb2Vzbid0IHdvcmssIGRlc3BpdGUgb3VyIHByb2JlcyBs +b29raW5nIGdvb2Q6CiMgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/ +aWQ9NjQ2OTcKZF90aHJlYWRfbG9jYWw9dW5kZWYKCiMgQnJva2VuOiBodHRwczovL3NvdXJjZXdh +cmUub3JnL3BpcGVybWFpbC9jeWd3aW4vMjAyMi1BdWd1c3QvMjUyMDQzLmh0bWwgKi8KZF9uZXds +b2NhbGU9dW5kZWYK', 'darwin' => 'IyMKIyBEYXJ3aW4gKE1hYyBPUykgaGludHMKIyBXaWxmcmVkbyBTYW5jaGV6IDx3c2FuY2hlekB3 c2FuY2hlei5uZXQ+CiMjCgojIwojIFBhdGhzCiMjCgojIENvbmZpZ3VyZSBoYXNuJ3QgZmlndXJl @@ -284,11 +297,11 @@ ZGZsYWdzfSAtZmxhdF9uYW1lc3BhY2UiCiAgIGxkZGxmbGFncz0iJHtsZGZsYWdzfSAtYnVuZGxl IC11bmRlZmluZWQgc3VwcHJlc3MiCiAgIDs7ClsyLTZdLiopICAgIyBPUyBYIDEwLjEueCAtIDEw LjIueCAodGhvdWdoIFsyLTRdIG5ldmVyIGV4aXN0ZWQgcHVibGljbHkpCiAgIGxkZmxhZ3M9IiR7 bGRmbGFnc30gLWZsYXRfbmFtZXNwYWNlIgogICBsZGRsZmxhZ3M9IiR7bGRmbGFnc30gLWJ1bmRs -ZSAtdW5kZWZpbmVkIHN1cHByZXNzIgogICA7OwpbNy05XS4qKSAgICMgT1MgWCAxMC4zLnggLSAx -MC41LngKICAgbGRkbGZsYWdzPSIke2xkZmxhZ3N9IC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWlj +ZSAtdW5kZWZpbmVkIHN1cHByZXNzIgogICA7OwpbNy04XS4qKSAgICMgT1MgWCAxMC4zLnggLSAx +MC40LngKICAgbGRkbGZsYWdzPSIke2xkZmxhZ3N9IC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWlj X2xvb2t1cCIKICAgY2FzZSAiJGxkIiBpbgogICAgICAgKk1BQ09TWF9ERVBMT1lNRU5UX1RBUkdF VCopIDs7CiAgICAgICAqKSBsZD0iZW52IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC4zICR7 -bGR9IiA7OwogICBlc2FjCiAgIDs7CiopICAgICAgICAjIE9TIFggMTAuNi54IC0gY3VycmVudAog +bGR9IiA7OwogICBlc2FjCiAgIDs7CiopICAgICAgICAjIE9TIFggMTAuNS54IC0gY3VycmVudAog ICAjIFRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgbm90IG5lZWRlZCwKICAgIyBidXQg dGhlIC1tbWFjb3N4LXZlcnNpb24tbWluIG9wdGlvbiBpcyBhbHdheXMgdXNlZC4KCiAgICMgV2Ug bm93IHVzZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQsIGlmIHNldCwgYXMgYW4gb3ZlcnJpZGUg @@ -323,84 +336,85 @@ MTB8MTAuMTEpCiAgICAgICAgICBjY2ZsYWdzPSIkY2NmbGFncyAtV2Vycm9yPXBhcnRpYWwtYXZh aWxhYmlsaXR5IC1EX0RBUldJTl9GRUFUVVJFX0NMT0NLX0dFVFRJTUU9MCIKICAgICAgICAgIDs7 CiAgICAgICAgKikKICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZmkKCiAgIGxkZGxmbGFn cz0iJHtsZGZsYWdzfSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAiCiAgIDs7CmVz -YWMKCmxkbGlicHRobmFtZT0nRFlMRF9MSUJSQVJZX1BBVEgnOwoKIyB1c2VzaHJwbGliPXRydWUg -cmVzdWx0cyBpbiBtdWNoIHNsb3dlciBzdGFydHVwIHRpbWVzLgojICdmYWxzZScgaXMgdGhlIGRl -ZmF1bHQgdmFsdWUuICBVc2UgQ29uZmlndXJlIC1EdXNlc2hycGxpYiB0byBvdmVycmlkZS4KCmNh -dCA+IFVVL2FyY2huYW1lLmNidSA8PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBVVS9hcmNobmFtZS5j -YnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBieSBDb25maWd1cmUgCiMgYWZ0ZXIgaXQgaGFzIG90 -aGVyd2lzZSBkZXRlcm1pbmVkIHRoZSBhcmNoaXRlY3R1cmUgbmFtZS4KY2FzZSAiJGxkZmxhZ3Mi -IGluCioiLWZsYXRfbmFtZXNwYWNlIiopIDs7ICMgQmFja3dhcmQgY29tcGF0LCBiZSBmbGF0Lgoj -IElmIHdlIGFyZSB1c2luZyB0d28tbGV2ZWwgbmFtZXNwYWNlLCB3ZSB3aWxsIG11bmdlIHRoZSBh -cmNobmFtZSB0byBzaG93IGl0LgoqKSBhcmNobmFtZT0iJHthcmNobmFtZX0tMmxldmVsIiA7Owpl -c2FjCkVPQ0JVCgojIDY0LWJpdCBhZGRyZXNzaW5nIHN1cHBvcnQuIEN1cnJlbnRseSBzdHJpY3Rs -eSBleHBlcmltZW50YWwuIERGRCAyMDA1LTA2LTA2CmNhc2UgIiR1c2U2NGJpdGFsbCIgaW4KJGRl -ZmluZXx0cnVlfFt5WV0qKQpjYXNlICIkb3N2ZXJzIiBpbgpbMS03XS4qKQogICAgIGNhdCA8PEVP -TSA+JjQKCgoKKioqIDY0LWJpdCBhZGRyZXNzaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIE1hYyBP -UyBYIHZlcnNpb25zCioqKiBiZWxvdyAxMC40ICgiVGlnZXIiKSBvciBEYXJ3aW4gdmVyc2lvbnMg -YmVsb3cgOC4gUGxlYXNlIHRyeQoqKiogYWdhaW4gd2l0aG91dCAtRHVzZTY0Yml0YWxsLiAoLUR1 -c2U2NGJpdGludCB3aWxsIHdvcmssIGhvd2V2ZXIuKQoKRU9NCiAgICAgZXhpdCAxCiAgOzsKKikK -ICAgIGNhc2UgIiRvc3ZlcnMiIGluCiAgICA4LiopCiAgICAgICAgY2F0IDw8RU9NID4mNAoKCgoq -KiogUGVybCA2NC1iaXQgYWRkcmVzc2luZyBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCBmb3IgTWFj -IE9TIFgKKioqIDEwLjQgKCJUaWdlciIpIGFuZCBEYXJ3aW4gdmVyc2lvbiA4LiBTeXN0ZW0gViBJ -UEMgaXMgZGlzYWJsZWQKKioqIGR1ZSB0byBwcm9ibGVtcyB3aXRoIHRoZSA2NC1iaXQgdmVyc2lv -bnMgb2YgbXNnY3RsLCBzZW1jdGwsCioqKiBhbmQgc2htY3RsLiBZb3Ugc2hvdWxkIGFsc28gZXhw -ZWN0IHRoZSBmb2xsb3dpbmcgdGVzdCBmYWlsdXJlczoKKioqCioqKiAgICBleHQvdGhyZWFkcy1z -aGFyZWQvdC93YWl0ICh0aHJlYWRlZCBidWlsZHMgb25seSkKCkVPTQoKICAgICAgICBbICIkZF9t -c2djdGwiIF0gfHwgZF9tc2djdGw9J3VuZGVmJwogICAgICAgIFsgIiRkX3NlbWN0bCIgXSB8fCBk -X3NlbWN0bD0ndW5kZWYnCiAgICAgICAgWyAiJGRfc2htY3RsIiBdIHx8IGRfc2htY3RsPSd1bmRl -ZicKICAgIDs7CiAgICBlc2FjCgogICAgY2FzZSBgdW5hbWUgLXBgIGluIAogICAgcG93ZXJwYykg -YXJjaD1wcGM2NCA7OwogICAgaTM4NikgYXJjaD14ODZfNjQgOzsKICAgICopIGNhdCA8PEVPTSA+ -JjQKCioqKiBEb24ndCByZWNvZ25pemUgcHJvY2Vzc29yLCBjYW4ndCBzcGVjaWZ5IDY0IGJpdCBj -b21waWxhdGlvbi4KCkVPTQogICAgOzsKICAgIGVzYWMKICAgIGZvciB2YXIgaW4gY2NmbGFncyBj -cHBmbGFncyBsZCBsZGZsYWdzCiAgICBkbwogICAgICAgZXZhbCAkdmFyPSJcJCR7dmFyfVwgLWFy -Y2hcICRhcmNoIgogICAgZG9uZQoKICAgIDs7CmVzYWMKOzsKZXNhYwoKIyMKIyBTeXN0ZW0gbGli -cmFyaWVzCiMjCgojIHZmb3JrIHdvcmtzCnVzZXZmb3JrPSd0cnVlJzsKCiMgbWFsbG9jIHdyYXAg -d29ya3MKY2FzZSAiJHVzZW1hbGxvY3dyYXAiIGluCicnKSB1c2VtYWxsb2N3cmFwPSdkZWZpbmUn -IDs7CmVzYWMKCiMgb3VyIG1hbGxvYyB3b3JrcyAoYnV0IGFsbG93IHVzZXJzIHRvIG92ZXJyaWRl -KQpjYXNlICIkdXNlbXltYWxsb2MiIGluCicnKSB1c2VteW1hbGxvYz0nbicgOzsKZXNhYwojIEhv -d2V2ZXIgc2JyaygpIHJldHVybnMgLTEgKGZhaWx1cmUpIHNvbWV3aGVyZSBpbiBsaWIvdW5pY29y -ZS9ta3RhYmxlcyBhdAojIGFyb3VuZCAxNE0sIHNvIHdlIG5lZWQgdG8gdXNlIHN5c3RlbSBtYWxs -b2MoKSBhcyBvdXIgc2JyaygpCiMKIyBzYnJrKCkgaW4gRGFyd2luIGRlcHJlY2F0ZWQgc2luY2Ug -TWF2ZXJpY2tzICgxMC45KSwgaXQgc3RpbGwgZXhpc3RzCiMgaW4gWW9zZW1pdGUgKDEwLjEwKSBi -dXQgdGhhdCBpcyBqdXN0IGFuIGVtdWxhdGlvbiwgYW5kIGZhaWxzIGZvcgojIGFsbG9jYXRpb25z -IGJleW9uZCA0TUIuICBPbmUgc2hvdWxkIHVzZSBlLmcuIG1tYXAgaW5zdGVhZCAob3Igc3lzdGVt -CiMgbWFsbG9jLCBhcyBzdWdnZXN0ZWQgYWJvdmUsIHRoYXQgYnV0IGlzIGtpbmQgb2YgYmFja3dh -cmQpLgptYWxsb2NfY2ZsYWdzPSdjY2ZsYWdzPSItRFVTRV9QRVJMX1NCUksgLURQRVJMX1NCUktf -VklBX01BTExPQyAkY2NmbGFncyInCgojIExvY2FsZXMgYXJlbid0IGZlZWxpbmcgd2VsbC4KTENf -QUxMPUM7IGV4cG9ydCBMQ19BTEw7CkxBTkc9QzsgZXhwb3J0IExBTkc7CgojCiMgVGhlIGxpYnJh -cmllcyBhcmUgbm90IHRocmVhZHNhZmUgYXMgb2YgT1MgWCAxMC4xLgojCiMgRml4IHdoZW4gQXBw -bGUgZml4ZXMgbGliYy4KIwpjYXNlICIkdXNldGhyZWFkcyR1c2VpdGhyZWFkcyIgaW4KICAqZGVm -aW5lKikKICBjYXNlICIkb3N2ZXJzIiBpbgogICAgWzEyMzQ1XS4qKSAgICAgY2F0IDw8RU9NID4m -NAoKCgoqKiogV2FybmluZywgdGhlcmUgbWlnaHQgYmUgcHJvYmxlbXMgd2l0aCB5b3VyIGxpYnJh -cmllcyB3aXRoCioqKiByZWdhcmRzIHRvIHRocmVhZGluZy4gIFRoZSB0ZXN0IGV4dC90aHJlYWRz -L3QvbGliYy50IGlzIGxpa2VseQoqKiogdG8gZmFpbC4KCkVPTQogICAgOzsKICAgICopIHVzZXJl -ZW50cmFudD0nZGVmaW5lJzs7CiAgZXNhYwoKZXNhYwoKIyBGaW5rIGNhbiBpbnN0YWxsIGEgR0RC -TSBsaWJyYXJ5IHRoYXQgY2xhaW1zIHRvIGhhdmUgdGhlIE9EQk0gaW50ZXJmYWNlcwojIGJ1dCBQ -ZXJsIGR5bmFsb2FkZXIgY2Fubm90IGZvciBzb21lIHJlYXNvbiB1c2UgdGhhdCBsaWJyYXJ5LiAg -V2UgZG9uJ3QKIyByZWFsbHkgbmVlZCBPREJNX0ZJbGUsIHRob3VnaCwgc28gbGV0J3MganVzdCBo -aW50IE9EQk0gYXdheS4KaV9kYm09dW5kZWY7CgojIENvbmZpZ3VyZSBkb2Vzbid0IGRldGVjdCBy -YW5saWIgb24gVGlnZXIgcHJvcGVybHkuCiMgTmVpbFcgc2F5cyB0aGlzIHNob3VsZCBiZSBhY2Nl -cHRhYmxlIG9uIGFsbCBkYXJ3aW4gdmVyc2lvbnMuCnJhbmxpYj0ncmFubGliJwoKIyBDYXRjaCBN -YWNQb3J0cyBnY2MvZysrIGV4dHJhIGxpYmRpcgpjYXNlICIkKCRjYyAtdiAyPiYxKSIgaW4KKiJN -YWNQb3J0cyBnY2MiKikgbG9jbGlicHRoPSIkbG9jbGlicHRoIC9vcHQvbG9jYWwvbGliL2xpYmdj -YyIgOzsKZXNhYwoKIyMKIyBCdWlsZCBwcm9jZXNzCiMjCgojIENhc2UtaW5zZW5zaXRpdmUgZmls -ZXN5c3RlbXMgZG9uJ3QgZ2V0IGFsb25nIHdpdGggTWFrZWZpbGUgYW5kCiMgbWFrZWZpbGUgaW4g -dGhlIHNhbWUgcGxhY2UuICBTaW5jZSBEYXJ3aW4gdXNlcyBHTlUgbWFrZSwgdGhpcyBkb2RnZXMK -IyB0aGUgcHJvYmxlbS4KZmlyc3RtYWtlZmlsZT1HTlVtYWtlZmlsZTsKCiMgUGFydHMgb2YgdGhl -IHN5c3RlbSBjYWxsIHNldGVudigpLCBpbiBwYXJ0aWN1bGFyIGluIGFuIGF0Zm9yayBoYW5kbGVy -LgojIFRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4gdGhlIGNoaWxkIHRyaWVzIHRvIGNsZWFuIHVw -IGVudmlyb25bXSwgc28KIyBsZXQgbGliYyBtYW5hZ2UgZW52aXJvbltdLgpjYXQgPj4gY29uZmln -Lm92ZXIgPDwnRU9PVkVSJwppZiB0ZXN0ICIkZF91bnNldGVudiIgPSAiJGRlZmluZSIgLWEgXAog -ICAgYGV4cHIgIiRjY2ZsYWdzIiA6ICcuKi1EUEVSTF9VU0VfU0FGRV9QVVRFTlYnYCAtZXEgMDsg -dGhlbgogICAgICAgIGNjZmxhZ3M9IiRjY2ZsYWdzIC1EUEVSTF9VU0VfU0FGRV9QVVRFTlYiCmZp -CkVPT1ZFUgoKIyBpZiB5b3UgdXNlIGEgbmV3ZXIgdG9vbGNoYWluIGJlZm9yZSBPUyBYIDEwLjkg -dGhlc2UgZnVuY3Rpb25zIG1heSBiZQojIGluY29ycmVjdGx5IGRldGVjdGVkLCBzbyBkaXNhYmxl -IHRoZW0KIyBPUyBYIDEwLjEwLnggY29ycmVzcG9uZHMgdG8ga2VybmVsIDE0LngKY2FzZSAiJG9z -dmVycyIgaW4KICAgIFsxLTldLip8MVswLTNdLiopCglkX2xpbmthdD11bmRlZgoJZF9vcGVuYXQ9 -dW5kZWYKCWRfcmVuYW1lYXQ9dW5kZWYKCWRfdW5saW5rYXQ9dW5kZWYKCWRfZmNobW9kYXQ9dW5k -ZWYKCTs7CmVzYWMKCiMgbWtvc3RlbXAoKSB3YXMgYXV0b2RldGVjdGVkIGFzIHByZXNlbnQgYnV0 -IGZvdW5kIHRvIG5vdCBiZSBsaW5rYWJsZQojIG9uIDE1LjYuMC4gIFVua25vd24gd2hhdCBvdGhl -ciBPUyB2ZXJzaW9ucyBhcmUgYWZmZWN0ZWQuCmRfbWtvc3RlbXA9dW5kZWYK', +YWMKCiMgRGFyd2luJ3MgcXVlcnlsb2NhbGUoKSBoYXMgcmFjZXMKY2NmbGFncz0iJGNjZmxhZ3Mg +LUROT19USFJFQURfU0FGRV9RVUVSWUxPQ0FMRSIKCiMgQnV0IGl0IGRvZXNuJ3QgbXVjaCBtYXR0 +ZXIgYmVjYXVzZSB0aGUgd2hvbGUgaW1wbGVtZW50YXRpb24gaGFzIGJ1Z3MgW0dICiMgIzIxNTU2 +XQpjY2ZsYWdzPSIkY2NmbGFncyAtRE5PX1BPU0lYXzIwMDhfTE9DQUxFIgoKbGRsaWJwdGhuYW1l +PSdEWUxEX0xJQlJBUllfUEFUSCc7CgojIHVzZXNocnBsaWI9dHJ1ZSByZXN1bHRzIGluIG11Y2gg +c2xvd2VyIHN0YXJ0dXAgdGltZXMuCiMgJ2ZhbHNlJyBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4gIFVz +ZSBDb25maWd1cmUgLUR1c2VzaHJwbGliIHRvIG92ZXJyaWRlLgoKY2F0ID4gVVUvYXJjaG5hbWUu +Y2J1IDw8J0VPQ0JVJwojIFRoaXMgc2NyaXB0IFVVL2FyY2huYW1lLmNidSB3aWxsIGdldCAnY2Fs +bGVkLWJhY2snIGJ5IENvbmZpZ3VyZSAKIyBhZnRlciBpdCBoYXMgb3RoZXJ3aXNlIGRldGVybWlu +ZWQgdGhlIGFyY2hpdGVjdHVyZSBuYW1lLgpjYXNlICIkbGRmbGFncyIgaW4KKiItZmxhdF9uYW1l +c3BhY2UiKikgOzsgIyBCYWNrd2FyZCBjb21wYXQsIGJlIGZsYXQuCiMgSWYgd2UgYXJlIHVzaW5n +IHR3by1sZXZlbCBuYW1lc3BhY2UsIHdlIHdpbGwgbXVuZ2UgdGhlIGFyY2huYW1lIHRvIHNob3cg +aXQuCiopIGFyY2huYW1lPSIke2FyY2huYW1lfS0ybGV2ZWwiIDs7CmVzYWMKRU9DQlUKCiMgNjQt +Yml0IGFkZHJlc3Npbmcgc3VwcG9ydC4gQ3VycmVudGx5IHN0cmljdGx5IGV4cGVyaW1lbnRhbC4g +REZEIDIwMDUtMDYtMDYKY2FzZSAiJHVzZTY0Yml0YWxsIiBpbgokZGVmaW5lfHRydWV8W3lZXSop +CmNhc2UgIiRvc3ZlcnMiIGluClsxLTddLiopCiAgICAgY2F0IDw8RU9NID4mNAoKCgoqKiogNjQt +Yml0IGFkZHJlc3NpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFjIE9TIFggdmVyc2lvbnMKKioq +IGJlbG93IDEwLjQgKCJUaWdlciIpIG9yIERhcndpbiB2ZXJzaW9ucyBiZWxvdyA4LiBQbGVhc2Ug +dHJ5CioqKiBhZ2FpbiB3aXRob3V0IC1EdXNlNjRiaXRhbGwuICgtRHVzZTY0Yml0aW50IHdpbGwg +d29yaywgaG93ZXZlci4pCgpFT00KICAgICBleGl0IDEKICA7OwoqKQogICAgY2FzZSAiJG9zdmVy +cyIgaW4KICAgIDguKikKICAgICAgICBjYXQgPDxFT00gPiY0CgoKCioqKiBQZXJsIDY0LWJpdCBh +ZGRyZXNzaW5nIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsIGZvciBNYWMgT1MgWAoqKiogMTAuNCAo +IlRpZ2VyIikgYW5kIERhcndpbiB2ZXJzaW9uIDguIFN5c3RlbSBWIElQQyBpcyBkaXNhYmxlZAoq +KiogZHVlIHRvIHByb2JsZW1zIHdpdGggdGhlIDY0LWJpdCB2ZXJzaW9ucyBvZiBtc2djdGwsIHNl +bWN0bCwKKioqIGFuZCBzaG1jdGwuIFlvdSBzaG91bGQgYWxzbyBleHBlY3QgdGhlIGZvbGxvd2lu +ZyB0ZXN0IGZhaWx1cmVzOgoqKioKKioqICAgIGV4dC90aHJlYWRzLXNoYXJlZC90L3dhaXQgKHRo +cmVhZGVkIGJ1aWxkcyBvbmx5KQoKRU9NCgogICAgICAgIFsgIiRkX21zZ2N0bCIgXSB8fCBkX21z +Z2N0bD0ndW5kZWYnCiAgICAgICAgWyAiJGRfc2VtY3RsIiBdIHx8IGRfc2VtY3RsPSd1bmRlZicK +ICAgICAgICBbICIkZF9zaG1jdGwiIF0gfHwgZF9zaG1jdGw9J3VuZGVmJwogICAgOzsKICAgIGVz +YWMKCiAgICBjYXNlIGB1bmFtZSAtcGAgaW4gCiAgICBwb3dlcnBjKSBhcmNoPXBwYzY0IDs7CiAg +ICBpMzg2KSBhcmNoPXg4Nl82NCA7OwogICAgKikgY2F0IDw8RU9NID4mNAoKKioqIERvbid0IHJl +Y29nbml6ZSBwcm9jZXNzb3IsIGNhbid0IHNwZWNpZnkgNjQgYml0IGNvbXBpbGF0aW9uLgoKRU9N +CiAgICA7OwogICAgZXNhYwogICAgZm9yIHZhciBpbiBjY2ZsYWdzIGNwcGZsYWdzIGxkIGxkZmxh +Z3MKICAgIGRvCiAgICAgICBldmFsICR2YXI9IlwkJHt2YXJ9XCAtYXJjaFwgJGFyY2giCiAgICBk +b25lCgogICAgOzsKZXNhYwo7Owplc2FjCgojIwojIFN5c3RlbSBsaWJyYXJpZXMKIyMKCiMgdmZv +cmsgd29ya3MKdXNldmZvcms9J3RydWUnOwoKIyBtYWxsb2Mgd3JhcCB3b3JrcwpjYXNlICIkdXNl +bWFsbG9jd3JhcCIgaW4KJycpIHVzZW1hbGxvY3dyYXA9J2RlZmluZScgOzsKZXNhYwoKIyBvdXIg +bWFsbG9jIHdvcmtzIChidXQgYWxsb3cgdXNlcnMgdG8gb3ZlcnJpZGUpCmNhc2UgIiR1c2VteW1h +bGxvYyIgaW4KJycpIHVzZW15bWFsbG9jPSduJyA7Owplc2FjCiMgSG93ZXZlciBzYnJrKCkgcmV0 +dXJucyAtMSAoZmFpbHVyZSkgc29tZXdoZXJlIGluIGxpYi91bmljb3JlL21rdGFibGVzIGF0CiMg +YXJvdW5kIDE0TSwgc28gd2UgbmVlZCB0byB1c2Ugc3lzdGVtIG1hbGxvYygpIGFzIG91ciBzYnJr +KCkKIwojIHNicmsoKSBpbiBEYXJ3aW4gZGVwcmVjYXRlZCBzaW5jZSBNYXZlcmlja3MgKDEwLjkp +LCBpdCBzdGlsbCBleGlzdHMKIyBpbiBZb3NlbWl0ZSAoMTAuMTApIGJ1dCB0aGF0IGlzIGp1c3Qg +YW4gZW11bGF0aW9uLCBhbmQgZmFpbHMgZm9yCiMgYWxsb2NhdGlvbnMgYmV5b25kIDRNQi4gIE9u +ZSBzaG91bGQgdXNlIGUuZy4gbW1hcCBpbnN0ZWFkIChvciBzeXN0ZW0KIyBtYWxsb2MsIGFzIHN1 +Z2dlc3RlZCBhYm92ZSwgdGhhdCBidXQgaXMga2luZCBvZiBiYWNrd2FyZCkuCm1hbGxvY19jZmxh +Z3M9J2NjZmxhZ3M9Ii1EVVNFX1BFUkxfU0JSSyAtRFBFUkxfU0JSS19WSUFfTUFMTE9DICRjY2Zs +YWdzIicKCiMgTG9jYWxlcyBhcmVuJ3QgZmVlbGluZyB3ZWxsLgpMQ19BTEw9QzsgZXhwb3J0IExD +X0FMTDsKTEFORz1DOyBleHBvcnQgTEFORzsKCiMKIyBUaGUgbGlicmFyaWVzIGFyZSBub3QgdGhy +ZWFkc2FmZSBhcyBvZiBPUyBYIDEwLjEuCiMKIyBGaXggd2hlbiBBcHBsZSBmaXhlcyBsaWJjLgoj +CmNhc2UgIiR1c2V0aHJlYWRzJHVzZWl0aHJlYWRzIiBpbgogICpkZWZpbmUqKQogIGNhc2UgIiRv +c3ZlcnMiIGluCiAgICBbMTIzNDVdLiopICAgICBjYXQgPDxFT00gPiY0CgoKCioqKiBXYXJuaW5n +LCB0aGVyZSBtaWdodCBiZSBwcm9ibGVtcyB3aXRoIHlvdXIgbGlicmFyaWVzIHdpdGgKKioqIHJl +Z2FyZHMgdG8gdGhyZWFkaW5nLiAgVGhlIHRlc3QgZXh0L3RocmVhZHMvdC9saWJjLnQgaXMgbGlr +ZWx5CioqKiB0byBmYWlsLgoKRU9NCiAgICA7OwogICAgKikgdXNlcmVlbnRyYW50PSdkZWZpbmUn +OzsKICBlc2FjCgplc2FjCgojIEZpbmsgY2FuIGluc3RhbGwgYSBHREJNIGxpYnJhcnkgdGhhdCBj +bGFpbXMgdG8gaGF2ZSB0aGUgT0RCTSBpbnRlcmZhY2VzCiMgYnV0IFBlcmwgZHluYWxvYWRlciBj +YW5ub3QgZm9yIHNvbWUgcmVhc29uIHVzZSB0aGF0IGxpYnJhcnkuICBXZSBkb24ndAojIHJlYWxs +eSBuZWVkIE9EQk1fRklsZSwgdGhvdWdoLCBzbyBsZXQncyBqdXN0IGhpbnQgT0RCTSBhd2F5Lgpp +X2RibT11bmRlZjsKCiMgQ29uZmlndXJlIGRvZXNuJ3QgZGV0ZWN0IHJhbmxpYiBvbiBUaWdlciBw +cm9wZXJseS4KIyBOZWlsVyBzYXlzIHRoaXMgc2hvdWxkIGJlIGFjY2VwdGFibGUgb24gYWxsIGRh +cndpbiB2ZXJzaW9ucy4KcmFubGliPSdyYW5saWInCgojIENhdGNoIE1hY1BvcnRzIGdjYy9nKysg +ZXh0cmEgbGliZGlyCmNhc2UgIiQoJGNjIC12IDI+JjEpIiBpbgoqIk1hY1BvcnRzIGdjYyIqKSBs +b2NsaWJwdGg9IiRsb2NsaWJwdGggL29wdC9sb2NhbC9saWIvbGliZ2NjIiA7Owplc2FjCgojIwoj +IEJ1aWxkIHByb2Nlc3MKIyMKCiMgQ2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyBkb24ndCBn +ZXQgYWxvbmcgd2l0aCBNYWtlZmlsZSBhbmQKIyBtYWtlZmlsZSBpbiB0aGUgc2FtZSBwbGFjZS4g +IFNpbmNlIERhcndpbiB1c2VzIEdOVSBtYWtlLCB0aGlzIGRvZGdlcwojIHRoZSBwcm9ibGVtLgpm +aXJzdG1ha2VmaWxlPUdOVW1ha2VmaWxlOwoKIyBpZiB5b3UgdXNlIGEgbmV3ZXIgdG9vbGNoYWlu +IGJlZm9yZSBPUyBYIDEwLjkgdGhlc2UgZnVuY3Rpb25zIG1heSBiZQojIGluY29ycmVjdGx5IGRl +dGVjdGVkLCBzbyBkaXNhYmxlIHRoZW0KIyBPUyBYIDEwLjEwLnggY29ycmVzcG9uZHMgdG8ga2Vy +bmVsIDE0LngKY2FzZSAiJG9zdmVycyIgaW4KICAgIFsxLTldLip8MVswLTNdLiopCglkX2xpbmth +dD11bmRlZgoJZF9vcGVuYXQ9dW5kZWYKCWRfcmVuYW1lYXQ9dW5kZWYKCWRfdW5saW5rYXQ9dW5k +ZWYKCWRfZmNobW9kYXQ9dW5kZWYKCTs7CmVzYWMKCiMgbWtvc3RlbXAoKSB3YXMgYXV0b2RldGVj +dGVkIGFzIHByZXNlbnQgYnV0IGZvdW5kIHRvIG5vdCBiZSBsaW5rYWJsZQojIG9uIDE1LjYuMC4g +IFVua25vd24gd2hhdCBvdGhlciBPUyB2ZXJzaW9ucyBhcmUgYWZmZWN0ZWQuCmRfbWtvc3RlbXA9 +dW5kZWYKCiMgQXBwYXJlbnRseSB0aGUgTUFDSC1PIGZvcm1hdCBjYW4ndCBzdXBwb3J0IF9UaHJl +YWRfbG9jYWwgaW4gc2hhcmVkIG9iamVjdHMsCiMgYnV0IGNsYW5nIGlzbid0IHdpc2UgdG8gdGhp +cywgc28gb3VyIHByb2JlIHdvcmtzIGJ1dCB0aGUgYnVpbGQgZmFpbHMuLi4KZF90aHJlYWRfbG9j +YWw9dW5kZWYK', 'dragonfly' => 'IyBoaW50cy9kcmFnb25mbHkuc2gKIwojIFRoaXMgZmlsZSBpcyBtb3N0bHkgY29waWVkIGZyb20g aGludHMvZnJlZWJzZC5zaCB3aXRoIHRoZSBPUyB2ZXJzaW9uCiMgaW5mb3JtYXRpb24gdGFrZW4g @@ -442,7 +456,9 @@ IGluCicnKSB1c2VtYWxsb2N3cmFwPSdkZWZpbmUnIDs7CmVzYWMKCnRlc3QgIiRvcHRpbWl6ZSIg fHwgb3B0aW1pemU9Jy1PMicKCiMgQ29uZmlndXJlIGNhbid0IGZpbmQgZGxvcGVuKCkgd2hlbiB1 c2luZyBnKysKIyBsaW51eCwgZnJlZWJzZCBhbmQgc29sYXJpcyBoaW50cyBoYXZlIHRoZSBzYW1l IHdvcmthcm91bmQKY2FzZSAiJGNjIiBpbgoqZysrKikKICBkX2Rsb3Blbj0nZGVmaW5lJwogIDs7 -CmVzYWMK', +CmVzYWMKCiMgRHJhZ29uZmx5IGxlYWtzIHdpdGggYSBuZXdsb2NhbGUvZnJlZWxvY2FsZSBjb21i +aW5hdGlvbi4gIFNlZQojIGh0dHBzOi8vYnVncy5kcmFnb25mbHlic2Qub3JnL2lzc3Vlcy8zMzYx +CmNjZmxhZ3M9IiRjY2ZsYWdzIC1ETk9fUE9TSVhfMjAwOCIKCg==', 'freebsd' => 'IyBPcmlnaW5hbCBiYXNlZCBvbiBpbmZvIGZyb20KIyBDYXJsIE0uIEZvbmdoZWlzZXIgPGNtZkBp bnMuaW5mb25ldC5uZXQ+CiMgRGF0ZTogVGh1LCAyOCBKdWwgMTk5NCAxOToxNzowNSAtMDUwMCAo @@ -615,13 +631,25 @@ MDAzNTA3IF0gfHwgXAojICAgIFsgJEZSRUVCU0RfS0VSTkVMX1ZFUlNJT04gLWdlIDExMDAwMDAg XSAmJiBbICRGUkVFQlNEX0tFUk5FTF9WRVJTSU9OIC1sdCAxMTAwNTAyIF0gfHwgXAojICAgIFsg JEZSRUVCU0RfS0VSTkVMX1ZFUlNJT04gLWdlIDEyMDAwMDAgXSAmJiBbICRGUkVFQlNEX0tFUk5F TF9WRVJTSU9OIC1sdCAxMjAwMDA0IF0KaWYgIFsgJEZSRUVCU0RfS0VSTkVMX1ZFUlNJT04gLWx0 -IDEyMDAwNTYgXQp0aGVuCiAgICBkX3VzZWxvY2FsZT0ndW5kZWYnCmZpCgojIGh0dHBzOi8vZ2l0 -aHViLmNvbS9QZXJsL3Blcmw1L2lzc3Vlcy8xNTk4NAojIFJlcG9ydGVkIGluIDExLjAtQ1VSUkVO -VCB3aXRoIGcrKy00LjguNToKIyBJZiB1c2luZyBnKyssIHRoZSBDb25maWd1cmUgc2NhbiBmb3Ig -ZGxvcGVuKCkgZmFpbHMuCiMgRWFzaWVyIGZvciBub3cgdG8ganVzdCB0byBmb3JjaWJseSBzZXQg -aXQuCmNhc2UgIiRjYyIgaW4KKmcrKyopCiAgZF9kbG9wZW49J2RlZmluZScKICA7Owplc2FjCgpj -YXNlIGB1bmFtZSAtcGAgaW4KYXJtfG1pcHMpCiAgOzsKKikKICB0ZXN0ICIkb3B0aW1pemUiIHx8 -IG9wdGltaXplPSctTzInCiAgOzsKZXNhYwo=', +IDEyMDAwNTYgXSAgICAgIyBCdXQgb3RoZXIgYnVncyByZW1haW47IHNlZSBiZWxvdwp0aGVuCiAg +ICBkX3VzZWxvY2FsZT0ndW5kZWYnCmZpCgojIFNlZSBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcv +YnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI2NTk1MApjY2ZsYWdzPSIke2NjZmxhZ3N9IC1ETk9f +UE9TSVhfMjAwOF9MT0NBTEUiCgojIGh0dHBzOi8vZ2l0aHViLmNvbS9QZXJsL3Blcmw1L2lzc3Vl +cy8xNTk4NAojIFJlcG9ydGVkIGluIDExLjAtQ1VSUkVOVCB3aXRoIGcrKy00LjguNToKIyBJZiB1 +c2luZyBnKyssIHRoZSBDb25maWd1cmUgc2NhbiBmb3IgZGxvcGVuKCkgZmFpbHMuCiMgRWFzaWVy +IGZvciBub3cgdG8ganVzdCB0byBmb3JjaWJseSBzZXQgaXQuCmNhc2UgIiRjYyIgaW4KKmcrKyop +CiAgZF9kbG9wZW49J2RlZmluZScKICA7Owplc2FjCgpjYXNlIGB1bmFtZSAtcGAgaW4KYXJtfG1p +cHMpCiAgOzsKKikKICB0ZXN0ICIkb3B0aW1pemUiIHx8IG9wdGltaXplPSctTzInCiAgOzsKZXNh +YwoKIyBkb24ndCBtb2RpZnkgYSBzdXBwbGllZCAtRGFyY2huYW1lCmNhc2UgIiRhcmNobmFtZSIg +aW4KJycpCiAgY2F0ID4gVVUvYXJjaG5hbWUuY2J1IDw8J0VPQ0JVJwp1bmFtZW09YHVuYW1lIC1t +YApjYXNlICIkYXJjaG5hbWUiIGluCiIkdW5hbWVtIi0qKQogIGFyY2g9YHVuYW1lIC1wYAogIGFy +Y2huYW1lPWBlY2hvICIkYXJjaG5hbWUiIHwgc2VkIC1lICJzL14kdW5hbWVtLS8kYXJjaC0vImAK +ICA7Owplc2FjCkVPQ0JVCiAgOzsKZXNhYwoKIyBUaGlzIGZ1bmN0aW9uIG9uIHRoaXMgYm94IGhh +cyB3ZWlyZCBiZWhhdmlvci4gIFNlZQojIGh0dHBzOi8vYnVncy5mcmVlYnNkLm9yZy9idWd6aWxs +YS9zaG93X2J1Zy5jZ2k/aWQ9MjU1NjQ2CiMgVGhpcyBoYXMgYWxsZWdlZGx5IGJlZW4gZml4ZWQs +IGJ1dCB3ZSBjYW4ndCBiZSBzdXJlIGJlY2F1c2Ugb2YKIyBodHRwczovL2J1Z3MuZnJlZWJzZC5v +cmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI2NTk1MAojZF9xdWVyeWxvY2FsZT0ndW5kZWYn +Cg==', 'gnu' => 'IyBoaW50cy9nbnUuc2gKIyBPcmlnaW5hbGx5IGNvbnRyaWJ1dGVkIGJ5OiAgTWFyayBLZXR0ZW5p cyA8a2V0dGVuaXNAcGh5cy51dmEubmw+IERlYyAxMCAxOTk4CgojIGxpYm5zbCBpcyB1bnVzYWJs @@ -1094,24 +1122,27 @@ ZHMiIGluCiAgICAnJ3wkdW5kZWYpCglkX2NyeXB0X3JfcHJvdG89J3VuZGVmJwoJZF9nZXRncmVu dF9yX3Byb3RvPSd1bmRlZicKCWRfZ2V0cHdlbnRfcl9wcm90bz0ndW5kZWYnCglkX3N0cmVycm9y X3JfcHJvdG89J3VuZGVmJwoJOzsKICAgIGVzYWMKCiMgSC5NZXJpam4gc2F5cyBpdCdzIG5vdCAx OTk4IGFueW1vcmU6IE9EQk0gaXMgbm90IG5lZWRlZCwKIyBhbmQgaXQgc2VlbXMgdG8gYmUgYnVn -Z3kgaW4gSFAtVVggYW55d2F5LgppX2RibT11bmRlZgoKIyBJbiBIUC1VWGVzIHByaW9yIHRvIDEx -LjIzIHN0cnRvbGQoKSByZXR1cm5lZCBhIEhQLVVYCiMgc3BlY2lmaWMgdW5pb24gY2FsbGVkIGxv -bmdfZG91YmxlLCBub3QgYSBDOTkgbG9uZyBkb3VibGUuCmNhc2UgImBncmVwICdkb3VibGUgc3Ry -dG9sZC5jb25zdCcgL3Vzci9pbmNsdWRlL3N0ZGxpYi5oYCIgaW4KKiJsb25nIGRvdWJsZSBzdHJ0 -b2xkIiopIDs7ICMgc3RydG9sZCBzaG91bGQgYmUgc2FmZS4KKikgZWNobyAiTG9va3MgbGlrZSB5 -b3VyIHN0cnRvbGQoKSBpcyBub24tc3RhbmRhcmQuLi4iID4mNAogICBkX3N0cnRvbGQ9dW5kZWYg -OzsKZXNhYwoKIyBJbiBwcmUtMTEgSFAtVVhlcyB0aGVyZSByZWFsbHkgaXNuJ3QgaXNmaW5pdGUo -KSwgZGVzcGl0ZSB3aGF0CiMgQ29uZmlndXJlIG1pZ2h0IHRoaW5rLiAoVGhlcmUgaXMgZmluaXRl -KCksIHRob3VnaC4pCmNhc2UgImBncmVwICdpc2Zpbml0ZScgL3Vzci9pbmNsdWRlL21hdGguaGAi -IGluCioiaXNmaW5pdGUiKikgOzsKKikgZF9pc2Zpbml0ZT11bmRlZiA7Owplc2FjCgojIDExLjIz -IHNheXMgaXQgaGFzIG1icmxlbiBhbmQgbWJydG93YywgYnV0IGNvbXBpbGluZyB0aGVtIGZhaWxz -IGFzIGl0IGNhbid0CiMgZmluZCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciBtYnN0YXRlX3Qgd2hp -Y2ggb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGlzLiAgSXQncwojIG5vdCBpbiB0aGUgaGRyIHRoZSBt -YW4gcGFnZSBzYXlzIGl0IGlzLiAgUGVyaGFwcyBhIGJldHRlciBDb25maWd1cmUgcHJvYmUgaXMK -IyBuZWVkZWQsIGJ1dCBmb3Igbm93IHNpbXBseSB1bmRlZmluZSB0aGVtCmRfbWJybGVuPSd1bmRl -ZicKZF9tYnJ0b3djPSd1bmRlZicKIyBBbmQgdGhpcyBvbmUgaXMgbm90IGtub3cgb24gMTEuMTEg -KHdpdGggSFAgQy1BTlNJLUMpCmlmIFsgIiR4eE9zUmV2TWFqb3IiIC1sdCAxMSBdIHx8IFsgIiR4 -eE9zUmV2TWlub3IiIC1sdCAxMiBdOyB0aGVuCmRfd2NydG9tYj0ndW5kZWYnCmZpCg==', +Z3kgaW4gSFAtVVggYW55d2F5LgppX2RibT11bmRlZgoKaWYgWyAiJHh4T3NSZXZNYWpvciIgLWx0 +IDExIF0gfHwgWyAiJHh4T3NSZXZNYWpvciIgLWVxIDExIF0gJiYgWyAiJHh4T3NSZXZNaW5vciIg +LWx0IDIzIF07IHRoZW4KICAgICMgSW4gSFAtVVhlcyBwcmlvciB0byAxMS4yMyBzdHJ0b2xkKCkg +cmV0dXJuZWQgYSBIUC1VWAogICAgIyBzcGVjaWZpYyB1bmlvbiBjYWxsZWQgbG9uZ19kb3VibGUs +IG5vdCBhIEM5OSBsb25nIGRvdWJsZS4KICAgIGNhc2UgImBncmVwICdkb3VibGUgc3RydG9sZC5j +b25zdCcgL3Vzci9pbmNsdWRlL3N0ZGxpYi5oYCIgaW4KICAgICAgICAqImxvbmcgZG91YmxlIHN0 +cnRvbGQiKikgOzsgIyBzdHJ0b2xkIHNob3VsZCBiZSBzYWZlLgogICAgICAgICopIGVjaG8gIkxv +b2tzIGxpa2UgeW91ciBzdHJ0b2xkKCkgaXMgbm9uLXN0YW5kYXJkLi4uIiA+JjQKICAgICAgICBk +X3N0cnRvbGQ9dW5kZWYgOzsKICAgIGVzYWMKZmkKCiMgSW4gcHJlLTExIEhQLVVYZXMgdGhlcmUg +cmVhbGx5IGlzbid0IGlzZmluaXRlKCksIGRlc3BpdGUgd2hhdAojIENvbmZpZ3VyZSBtaWdodCB0 +aGluay4gKFRoZXJlIGlzIGZpbml0ZSgpLCB0aG91Z2guKQpjYXNlICJgZ3JlcCAnaXNmaW5pdGUn +IC91c3IvaW5jbHVkZS9tYXRoLmhgIiBpbgoqImlzZmluaXRlIiopIDs7CiopIGRfaXNmaW5pdGU9 +dW5kZWYgOzsKZXNhYwoKIyAxMS4yMyBzYXlzIGl0IGhhcyBtYnJsZW4gYW5kIG1icnRvd2MsIGJ1 +dCBjb21waWxpbmcgdGhlbSBmYWlscyBhcyBpdCBjYW4ndAojIGZpbmQgdGhlIHR5cGUgZGVmaW5p +dGlvbiBmb3IgbWJzdGF0ZV90IHdoaWNoIG9uZSBvZiB0aGUgcGFyYW1ldGVycyBpcy4gIEl0J3MK +IyBub3QgaW4gdGhlIGhkciB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBpcy4gIFBlcmhhcHMgYSBiZXR0 +ZXIgQ29uZmlndXJlIHByb2JlIGlzCiMgbmVlZGVkLCBidXQgZm9yIG5vdyBzaW1wbHkgdW5kZWZp +bmUgdGhlbQpkX21icmxlbj0ndW5kZWYnCmRfbWJydG93Yz0ndW5kZWYnCiMgQW5kIHRoaXMgb25l +IGlzIG5vdCBrbm93IG9uIDExLjExICh3aXRoIEhQIEMtQU5TSS1DKQppZiBbICIkeHhPc1Jldk1h +am9yIiAtbHQgMTEgXSB8fCBbICIkeHhPc1Jldk1pbm9yIiAtbHQgMTIgXTsgdGhlbgpkX3djcnRv +bWI9J3VuZGVmJwpmaQo=', 'linux' => 'IyBoaW50cy9saW51eC5zaAojIE9yaWdpbmFsIHZlcnNpb24gYnkgcnNhbmRlcnMKIyBBZGRpdGlv bmFsIHN1cHBvcnQgYnkgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4KIwoj @@ -1183,204 +1214,211 @@ emU9Jy1PMycgOzsKICAgIGVzYWMKICAgIDs7CioiIFN1biAiKiJDIiopCiAgICAjIFN1bidzIEMg Y29tcGlsZXIsIHdoaWNoIG1pZ2h0IGhhdmUgYSAndGFnJyBuYW1lIGJldHdlZW4KICAgICMgJ1N1 bicgYW5kIHRoZSAnQyc6ICBFeGFtcGxlczoKICAgICMgY2M6IFN1biBDIDUuOSBMaW51eF9pMzg2 IFBhdGNoIDEyNDg3MS0wMSAyMDA3LzA3LzMxCiAgICAjIGNjOiBTdW4gQ2VyZXMgQyA1LjEwIExp -bnV4X2kzODYgMjAwOC8wNy8xMAogICAgdGVzdCAiJG9wdGltaXplIiB8fCBvcHRpbWl6ZT0nLXhP -MicKICAgIGNjY2RsZmxhZ3M9Jy1LUElDJwogICAgbGRkbGZsYWdzPSctRyAtQmR5bmFtaWMnCiAg -ICAjIFN1biBDIGRvZXNuJ3Qgc3VwcG9ydCBnY2MgYXR0cmlidXRlcywgYnV0LCBpbiBtYW55IGNh -c2VzLCBkb2Vzbid0CiAgICAjIGNvbXBsYWluIGVpdGhlci4gIE5vdCBhbGwgY2FzZXMsIHRob3Vn -aC4KICAgIGRfYXR0cmlidXRlX2Zvcm1hdD0ndW5kZWYnCiAgICBkX2F0dHJpYnV0ZV9tYWxsb2M9 -J3VuZGVmJwogICAgZF9hdHRyaWJ1dGVfbm9ubnVsbD0ndW5kZWYnCiAgICBkX2F0dHJpYnV0ZV9u -b3JldHVybj0ndW5kZWYnCiAgICBkX2F0dHJpYnV0ZV9wdXJlPSd1bmRlZicKICAgIGRfYXR0cmli -dXRlX3VudXNlZD0ndW5kZWYnCiAgICBkX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHQ9J3Vu -ZGVmJwogICAgOzsKZXNhYwoKY2FzZSAiJG9wdGltaXplIiBpbgojIHVzZSAtTzIgYnkgZGVmYXVs -dCA7IC1PMyBkb2Vzbid0IHNlZW0gdG8gYnJpbmcgc2lnbmlmaWNhbnQgYmVuZWZpdHMgd2l0aCBn -Y2MKJycpCiAgICBvcHRpbWl6ZT0nLU8yJwogICAgY2FzZSAiJHVuYW1lX21pbnVzX20iIGluCiAg -ICAgICAgcHBjKikKICAgICAgICAgICAgIyBvbiBwcGMsIGl0IHNlZW1zIHRoYXQgZ2NjIChhdCBs -ZWFzdCBnY2MgMy4zLjIpIGlzbid0IGhhcHB5CiAgICAgICAgICAgICMgd2l0aCAtTzIgOyBzbyBk -b3duZ3JhZGUgdG8gLU8xLgogICAgICAgICAgICBvcHRpbWl6ZT0nLU8xJwogICAgICAgIDs7CiAg -ICAgICAgaWE2NCopCiAgICAgICAgICAgICMgVGhpcyBhcmNoaXRlY3R1cmUgaGFzIGhhZCB2YXJp -b3VzIHByb2JsZW1zIHdpdGggZ2NjJ3MKICAgICAgICAgICAgIyBpbiB0aGUgMy4yLCAzLjMsIGFu -ZCAzLjQgcmVsZWFzZXMgd2hlbiBvcHRpbWl6ZWQgdG8gLU8yLiAgU2VlCiAgICAgICAgICAgICMg -UlQgIzM3MTU2IGZvciBhIGRpc2N1c3Npb24gb2YgdGhlIHByb2JsZW0uCiAgICAgICAgICAgIGNh -c2UgImAke2NjOi1nY2N9IC12IDI+JjFgIiBpbgogICAgICAgICAgICAqInZlcnNpb24gMy4yIip8 -KiJ2ZXJzaW9uIDMuMyIqfCoidmVyc2lvbiAzLjQiKikKICAgICAgICAgICAgICAgIGNjZmxhZ3M9 -Ii1mbm8tZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MgJGNjZmxhZ3MiCiAgICAgICAgICAgIDs7 -CiAgICAgICAgICAgIGVzYWMKICAgICAgICA7OwogICAgZXNhYwogICAgOzsKZXNhYwoKIyBVYnVu -dHUgMTEuMDQgKGFuZCBsYXRlciwgcHJlc3VtYWJseSkgZG9lc24ndCBrZWVwIG1vc3QgbGlicmFy -aWVzCiMgKHN1Y2ggYXMgLWxtKSBpbiAvbGliIG9yIC91c3IvbGliLiAgU28gd2UgaGF2ZSB0byBh -c2sgZ2NjIHRvIHRlbGwgdXMKIyB3aGVyZSB0byBsb29rLiAgV2UgZG9uJ3Qgd2FudCBnY2MncyBv -d24gbGlicmFyaWVzLCBob3dldmVyLCBzbyB3ZQojIGZpbHRlciB0aG9zZSBvdXQuCiMgVGhpcyBj -b3VsZCBiZSBjb25kaXRpb25hbCBvbiBVbmJ1bnR1LCBidXQgb3RoZXIgZGlzdHJpYnV0aW9ucyBt -YXkKIyBmb2xsb3cgc3VpdCwgYW5kIHRoaXMgc2NoZW1lIHNlZW1zIHRvIHdvcmsgZXZlbiBvbiBy -YXRoZXIgb2xkIGdjYydzLgojIFRoaXMgdW5jb25kaXRpb25hbGx5IHVzZXMgZ2NjIGJlY2F1c2Ug -ZXZlbiBpZiB0aGUgdXNlciBpcyB1c2luZyBhbm90aGVyCiMgY29tcGlsZXIsIHdlIHN0aWxsIG5l -ZWQgdG8gZmluZCB0aGUgbWF0aCBsaWJyYXJ5IGFuZCBmcmllbmRzLCBhbmQgSSBkb24ndAojIGtu -b3cgaG93IG90aGVyIGNvbXBpbGVycyB3aWxsIGNvcGUgd2l0aCB0aGF0IHNpdHVhdGlvbi4KIyBN -b3JldmVyLCBpZiB0aGUgdXNlciBoYXMgdGhlaXIgb3duIGdjYyBlYXJsaWVyIGluICRQQVRIIHRo -YW4gdGhlIHN5c3RlbSBnY2MsCiMgd2UgZG9uJ3Qgd2FudCBpdHMgbGlicmFyaWVzLiBTbyB3ZSB0 -cnkgdG8gcHJlZmVyIHRoZSBzeXN0ZW0gZ2NjCiMgU3RpbGwsIGFzIGFuIGVzY2FwZSBoYXRjaCwg -YWxsb3cgQ29uZmlndXJlIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgdG8KIyBwbGlicHRoIHRvIGJ5 -cGFzcyB0aGlzIGNoZWNrLgppZiBbIC14IC91c3IvYmluL2djYyBdIDsgdGhlbgogICAgZ2NjPS91 -c3IvYmluL2djYwojIGNsYW5nIGFsc28gcHJvdmlkZXMgLXByaW50LXNlYXJjaC1kaXJzCmVsaWYg -JHtjYzotY2N9IC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgJ15jbGFuZyAnIDsgdGhl -bgogICAgZ2NjPSR7Y2M6LWNjfQplbHNlCiAgICBnY2M9Z2NjCmZpCgpjYXNlICIkcGxpYnB0aCIg -aW4KJycpIHBsaWJwdGg9YExBTkc9QyBMQ19BTEw9QyAkZ2NjICRjY2ZsYWdzICRsZGZsYWdzIC1w -cmludC1zZWFyY2gtZGlycyB8IGdyZXAgbGlicmFyaWVzIHwKCWN1dCAtZjItIC1kPSB8IHRyICc6 -JyAkdHJubCB8IGdyZXAgLXYgJ2djYycgfCBzZWQgLWUgJ3M6LyQ6OidgCiAgICBzZXQgWCAkcGxp -YnB0aCAjIENvbGxhcHNlIGFsbCBlbnRyaWVzIG9uIG9uZSBsaW5lCiAgICBzaGlmdAogICAgcGxp -YnB0aD0iJCoiCiAgICA7Owplc2FjCgojIEZvciB0aGUgbXVzbCBsaWJjLCBwZXJsIHNob3VsZCAj -ZGVmaW5lIF9HTlVfU09VUkNFLiAgT3RoZXJ3aXNlLCBzb21lCiMgYXZhaWxhYmxlIGZ1bmN0aW9u -cywgbGlrZSBtZW1lbSwgd29uJ3QgYmUgdXNlZC4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbgojIFtw -ZXJsICMxMzM3NjBdLiAgbXVzbCBkb2Vzbid0IG9mZmVyIGFuIGVhc3kgd2F5IHRvIGlkZW50aWZ5 -IGl0LCBidXQsCiMgYXQgbGVhc3Qgb24gYWxwaW5lIGxpbnV4LCB0aGUgbGRkIC0tdmVyc2lvbiBv -dXRwdXQgY29udGFpbnMgdGhlCiMgc3RyaW5nICdtdXNsLicKY2FzZSBgbGRkIC0tdmVyc2lvbiAy -PiYxYCBpbgogICAgbXVzbCopICBjY2ZsYWdzPSIkY2NmbGFncyAtRF9HTlVfU09VUkNFIiA7Owog -ICAgICAgICopIDs7CmVzYWMKCiMgbGlicXVhZG1hdGggaXMgc29tZXRpbWVzIGluc3RhbGxlZCBh -cyBnY2MgaW50ZXJuYWwgbGlicmFyeSwKIyBzbyBjb250cmFyeSB0byBvdXIgdXN1YWwgcG9saWN5 -IG9mICpub3QqIGxvb2tpbmcgYXQgZ2NjIGludGVybmFsCiMgZGlyZWN0b3JpZXMgd2Ugbm93ICpk -byogbG9vayBhdCB0aGVtLCBpbiBjYXNlIHRoZXkgY29udGFpbgojIHRoZSBxdWFkbWF0aCBsaWJy -YXJ5LgojIFhYWCBUaGlzIG1heSBhcHBseSB0byBvdGhlciBnY2MgaW50ZXJuYWwgbGlicmFyaWVz -LCBpZiBzdWNoIGV4aXN0LgojIFhYWCBUaGlzIGNvdWxkIGJlIGF0IENvbmZpZ3VyZSBsZXZlbCwg -YnV0IHRoZW4gdGhlICRnY2MgaXMgbWVzc3kuCmNhc2UgIiR1c2VxdWFkbWF0aCIgaW4KIiRkZWZp -bmUiKQogIGZvciBkIGluIGBMQU5HPUMgTENfQUxMPUMgJGdjYyAkY2NmbGFncyAkbGRmbGFncyAt -cHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwIGxpYnJhcmllcyB8IGN1dCAtZjItIC1kPSB8IHRyICc6 -JyAkdHJubCB8IGdyZXAgJ2djYycgfCBzZWQgLWUgJ3M6LyQ6OidgCiAgZG8KICAgIGNhc2UgYGxz -ICRkLypsaWJxdWFkbWF0aCokc28qIDI+L2Rldi9udWxsYCBpbgogICAgJGQvKmxpYnF1YWRtYXRo -KiRzbyopIHhsaWJwdGg9IiR4bGlicHRoICRkIiA7OwogICAgZXNhYwogIGRvbmUKICA7Owplc2Fj -CgpjYXNlICIkbGliYyIgaW4KJycpCiMgSWYgeW91IGhhdmUgZ2xpYmMsIHRoZW4gcmVwb3J0IHRo -ZSB2ZXJzaW9uIGZvciAuL215Y29uZmlnIGJ1ZyByZXBvcnRpbmcuCiMgKENvbmZpZ3VyZSBkb2Vz -bid0IG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdmVyc2lvbiBzaW5jZSBpdCBqdXN0IHVzZXMK -IyBnY2MgdG8gbG9hZCB0aGUgbGlicmFyeSBmb3IgYWxsIHRlc3RzLikKIyBXZSBkb24ndCB1c2Ug -X19HTElCQ19fIGFuZCAgX19HTElCQ19NSU5PUl9fIGJlY2F1c2UgdGhleQojIGFyZSBpbnN1ZmZp -Y2llbnRseSBwcmVjaXNlIHRvIGRpc3Rpbmd1aXNoIHRoaW5ncyBsaWtlCiMgbGliYy0yLjAuNiBh -bmQgbGliYy0yLjAuNy4KICAgIGZvciBwIGluICRwbGlicHRoCiAgICBkbwogICAgICAgIGZvciB0 -cnlsaWIgaW4gbGliYy5zby42IGxpYmMuc28KICAgICAgICBkbwogICAgICAgICAgICBpZiAkdGVz -dCAtZSAkcC8kdHJ5bGliOyB0aGVuCiAgICAgICAgICAgICAgICBsaWJjPWBscyAtbCAkcC8kdHJ5 -bGliIHwgYXdrICd7cHJpbnQgJE5GfSdgCiAgICAgICAgICAgICAgICBpZiAkdGVzdCAiWCRsaWJj -IiAhPSBYOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGZp -CiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgICAgIGlmICR0ZXN0ICJYJGxpYmMiICE9 -IFg7IHRoZW4KICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaQogICAgZG9uZQogICAgOzsKZXNh -YwoKaWYgJHtzaDotL2Jpbi9zaH0gLWMgZXhpdDsgdGhlbgogIGVjaG8gJycKICBlY2hvICdZb3Ug -YXBwZWFyIHRvIGhhdmUgYSB3b3JraW5nIGJhc2guICBHb29kLicKZWxzZQogIGNhdCA8PCAnRU9N -JyA+JjQKCioqKioqKioqKioqKioqKioqKioqKioqIFdhcm5pbmchICoqKioqKioqKioqKioqKioq -KioqKgpJdCB3b3VsZCBhcHBlYXIgeW91IGhhdmUgYSBkZWZlY3RpdmUgYmFzaCBzaGVsbCBpbnN0 -YWxsZWQuIFRoaXMgaXMgbGlrZWx5IHRvCmdpdmUgeW91IGEgZmFpbHVyZSBvZiBvcC9leGVjIHRl -c3QgIzUgZHVyaW5nIHRoZSB0ZXN0IHBoYXNlIG9mIHRoZSBidWlsZCwKVXBncmFkaW5nIHRvIGEg -cmVjZW50IHZlcnNpb24gKDEuMTQuNCBvciBsYXRlcikgc2hvdWxkIGZpeCB0aGUgcHJvYmxlbS4K -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkVP -TQoKZmkKCiMgT24gU1BBUkNsaW51eCwKIyBUaGUgZm9sbG93aW5nIGNzaCBjb25zaXN0ZW50bHkg -Y29yZWR1bXBlZCBpbiB0aGUgdGVzdCBkaXJlY3RvcnkKIyAiL2hvbWUvbWlrZWRsci9wZXJsNS4w -MDNfOTQvdCIsIHRob3VnaCBub3QgbW9zdCBvdGhlciBkaXJlY3Rvcmllcy4KCiNOYW1lICAgICAg -ICA6IGNzaCAgICAgICAgICAgICAgICAgICAgRGlzdHJpYnV0aW9uOiBSZWQgSGF0IExpbnV4IChS -ZW1icmFuZHQpCiNWZXJzaW9uICAgICA6IDUuMi42ICAgICAgICAgICAgICAgICAgICAgICAgVmVu -ZG9yOiBSZWQgSGF0IFNvZnR3YXJlCiNSZWxlYXNlICAgICA6IDMgICAgICAgICAgICAgICAgICAg -ICAgICBCdWlsZCBEYXRlOiBGcmkgTWF5IDI0IDE5OjQyOjE0IDE5OTYKI0luc3RhbGwgZGF0ZTog -VGh1IEp1bCAxMSAxNjoyMDoxNCAxOTk2IEJ1aWxkIEhvc3Q6IGl0Y2h5LnJlZGhhdC5jb20KI0dy -b3VwICAgICAgIDogU2hlbGxzICAgICAgICAgICAgICAgICAgIFNvdXJjZSBSUE06IGNzaC01LjIu -Ni0zLnNyYy5ycG0KI1NpemUgICAgICAgIDogMTg0NDE3CiNEZXNjcmlwdGlvbiA6IEJTRCBjLXNo -ZWxsCgojIEZvciB0aGlzIHJlYXNvbiBJIHN1Z2dlc3QgdXNpbmcgdGhlIG11Y2ggYnVnLWZpeGVk -IHRjc2ggZm9yIGdsb2JiaW5nCiMgd2hlcmUgYXZhaWxhYmxlLgoKIyBOb3ZlbWJlciAyMDAxOiAg -VGhhdCB3YXJuaW5nJ3MgcHJldHR5IG9sZCBub3cgYW5kIHByb2JhYmx5IG5vdCBzbwojIHJlbGV2 -YW50LCBlc3BlY2lhbGx5IHNpbmNlIHBlcmwgbm93IHVzZXMgRmlsZTo6R2xvYiBmb3IgZ2xvYmJp -bmcuCiMgV2UnbGwgc3RpbGwgbG9vayBmb3IgdGNzaCwgYnV0IHRvbmUgZG93biB0aGUgd2Fybmlu -Z3MuCiMgQW5keSBEb3VnaGVydHksIE5vdi4gNiwgMjAwMQppZiAkY3NoIC1jICdlY2hvICR2ZXJz -aW9uJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgIGVjaG8gJ1lvdXIgY3NoIGlzIHJlYWxseSB0 -Y3NoLiAgR29vZC4nCmVsc2UKICAgIGlmIHh4eD1gLi9VVS9sb2MgdGNzaCBibHVyZmwgJHB0aGA7 -ICR0ZXN0IC1mICIkeHh4IjsgdGhlbgoJZWNobyAiRm91bmQgdGNzaC4gIEknbGwgdXNlIGl0IGZv -ciBnbG9iYmluZy4iCgkjIFdlIGNhbid0IGNoYW5nZSBDb25maWd1cmUncyBzZXR0aW5nIG9mICRj -c2gsIGR1ZSB0byB0aGUgd2F5CgkjIENvbmZpZ3VyZSBoYW5kbGVzICRkX3BvcnRhYmxlIGFuZCBj -b21tYW5kcyBmb3VuZCBpbiAkbG9jbGlzdC4KCSMgV2UgY2FuIHNldCB0aGUgdmFsdWUgZm9yIENT -SCBpbiBjb25maWcuaCBieSBzZXR0aW5nIGZ1bGxfY3NoLgoJZnVsbF9jc2g9JHh4eAogICAgZWxp -ZiBbIC1mICIkY3NoIiBdOyB0aGVuCgllY2hvICJDb3VsZG4ndCBmaW5kIHRjc2guICBDc2gtYmFz -ZWQgZ2xvYmJpbmcgbWlnaHQgYmUgYnJva2VuLiIKICAgIGZpCmZpCgojIFNoaW1wZWkgWWFtYXNo -aXRhIDxzaGltcGVpQHNvY3JhdGVzLnBhdG5ldC5jYWx0ZWNoLmVkdT4KIyBNZXNzYWdlLUlkOiA8 -MzNFRjE2MzQuQjM2QjY1MDBAcG9ib3guY29tPgojCiMgVGhlIERSMiBvZiBNa0xpbnV4IChvc25h -bWU9bGludXgsYXJjaG5hbWU9cHBjLWxpbnV4KSBtYXkgbmVlZAojIHNwZWNpYWwgZmxhZ3MgcGFz -c2VkIGluIG9yZGVyIGZvciBkeW5hbWljIGxvYWRpbmcgdG8gd29yay4KIyBpbnN0ZWFkIG9mIHRo -ZSByZWNvbW1lbmRlZDoKIwojIGNjZGxmbGFncz0nLXJkeW5hbWljJwojCiMgaXQgc2hvdWxkIGJl -OgojIGNjZGxmbGFncz0nLVdsLC1FJwojCiMgU28gaWYgeW91ciBEUjIgKERSMyBjYW1lIG91dCBz -dW1tZXIgMTk5OCwgY29uc2lkZXIgdXBncmFkaW5nKQojIGhhcyBwcm9ibGVtcyB3aXRoIGR5bmFt -aWMgbG9hZGluZywgdW5jb21tZW50IHRoZQojIGZvbGxvd2luZyB0aHJlZSBsaW5lcywgbWFrZSBk -aXN0Y2xlYW4sIGFuZCByZS1Db25maWd1cmU6CiNjYXNlICJgdW5hbWUgLXIgfCBzZWQgJ3MvXlsw -LTkuLV0qLy8nYGBhcmNoYCIgaW4KIydvc2ZtYWNoM3BwYycpIGNjZGxmbGFncz0nLVdsLC1FJyA7 -OwojZXNhYwoKY2FzZSAiJHVuYW1lX21pbnVzX20iIGluCnNwYXJjKikKCWNhc2UgIiRjY2NkbGZs -YWdzIiBpbgoJKi1mcGljKikgY2NjZGxmbGFncz0iYGVjaG8gJGNjY2RsZmxhZ3N8c2VkICdzLy1m -cGljLy1mUElDLydgIiA7OwoJKi1mUElDKikgOzsKCSopCSBjY2NkbGZsYWdzPSIkY2NjZGxmbGFn -cyAtZlBJQyIgOzsKCWVzYWMKCTs7CmVzYWMKCiMgU3VTRTguMiBoYXMgL3Vzci9saWIvbGlibmRi -bSogd2hpY2ggYXJlIGxkIHNjcmlwdHMgcmF0aGVyIHRoYW4KIyB0cnVlIGxpYnJhcmllcy4gVGhl -IHNjcmlwdHMgY2F1c2UgYmluZGluZyBhZ2FpbnN0IHN0YXRpYwojIHZlcnNpb24gb2YgLWxnZGJt -IHdoaWNoIGlzIGEgYmFkIGlkZWEuIFNvIGlmIHdlIGhhdmUgJ25tJwojIG1ha2Ugc3VyZSBpdCBj -YW4gcmVhZCB0aGUgZmlsZQojIE5JLVMgMjAwMy8wOC8wNwpjYXNlICIkbm0iIGluCiAgICAnJykg -OzsKICAgICopCiAgICBmb3IgcCBpbiAkcGxpYnB0aAogICAgZG8KICAgICAgICBpZiAkdGVzdCAt -ciAkcC9saWJuZGJtLnNvOyB0aGVuCiAgICAgICAgICAgIGlmICRubSAkcC9saWJuZGJtLnNvID4v -ZGV2L251bGwgMj4mMSA7IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gJ1lvdXIgc2hhcmVkIC1s -bmRibSBzZWVtcyB0byBiZSBhIHJlYWwgbGlicmFyeS4nCiAgICAgICAgICAgICAgICBfbGlibmRi -bV9yZWFsPTEKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkK -ICAgIGRvbmUKICAgIGlmICR0ZXN0ICJYJF9saWJuZGJtX3JlYWwiID0gWDsgdGhlbgogICAgICAg -IGVjaG8gJ1lvdXIgc2hhcmVkIC1sbmRibSBpcyBub3QgYSByZWFsIGxpYnJhcnkuJwogICAgICAg -IHNldCBgZWNobyBYICIkbGlic3dhbnRlZCAifCBzZWQgLWUgJ3MvIG5kYm0gLyAvJ2AKICAgICAg -ICBzaGlmdAogICAgICAgIGxpYnN3YW50ZWQ9IiQqIgogICAgZmkKICAgIDs7CmVzYWMKCiMgTGlu -dXggb24gU3lub2xvZ3kuCmlmIFsgLWYgL2V0Yy9zeW5vaW5mby5jb25mIC1hIC1kIC91c3Ivc3lu -byBdOyB0aGVuCiAgICAjIFRlc3RlZCBvbiBTeW5vbG9neSBEUzIxMyBhbmQgRFM0MTMKICAgICMg -IE9TIHZlcnNpb24gaW5mbyBpbiAvZXRjLmRlZmF1bHRzL1ZFUlNJT04KICAgICMgIGh0dHA6Ly9m -b3J1bS5zeW5vbG9neS5jb20vd2lraS9pbmRleC5waHAvV2hhdF9raW5kX29mX0NQVV9kb2VzX215 -X05BU19oYXZlCiAgICAjIFN5bm9sb2d5IERTMjEzIHJ1bm5pbmcgRFNNIDQuMy0zODEwLTAgKDIw -MTMtMTEtMDYpCiAgICAjICBDUFUgbW9kZWwgTWFydmVsbCBLaXJrd29vZCBtdjYyODIgQVJNdjV0 -ZQogICAgIyAgTGludXggMi42LjMyLjEyICMzODEwIFdlZCBOb3YgNiAwNToxMzo0MSBDU1QgMjAx -MyBhcm12NXRlbCBHTlUvTGludXgKICAgICMgU3lub2xvZ3kgRFM0MTMgcnVubmluZyBEU00gNC4z -LTM4MTAtMCAoMjAxMy0xMS0wNikKICAgICMgIENQVSBtb2RlbCBGcmVlc2NhbGUgUW9ySVEgUDEw -MjIgcHBjIChlNTAwdjIpCiAgICAjICBsaW51eCAyLjYuMzIuMTIgIzM4MTAgcHBjIEdOVS9MaW51 -eAogICAgIyBBbGwgZGV2ZWxvcG1lbnQgc3R1ZmYgaW5zdGFsbGVkIHdpdGggaXBrZyBpcyBpbiAv -b3B0CiAgICBpZiBbICIkTEFORyIgPSAiIiAtbyAiJExBTkciID0gIkMiIF07IHRoZW4KCWVjaG8g -J1lvdXIgTEFORyBpcyBzYWZlJwogICAgZWxzZQoJZWNobyAnUGxlYXNlIHNldCAkTEFORyB0byAi -QyIuIEFsbCBvdGhlciAkTEFORyBzZXR0aW5ncyB3aWxsIGNhdXNlIGhhdm9jJyA+JjQKCUxBTkc9 -QwogICAgZmkKICAgIGVjaG8gJ1NldHRpbmcgdXAgdG8gdXNlIC9vcHQvKicgPiY0CiAgICBsb2Np -bmNwdGg9Ii9vcHQvaW5jbHVkZSAkbG9jaW5jcHRoIgogICAgbGlicHRoPSIvb3B0L2xpYiAkbGli -cHRoIgogICAgbGlic3B0aD0iL29wdC9saWIgJGxpYnNwdGgiCiAgICBsb2NsaWJwdGg9Ii9vcHQv -bGliICRsb2NsaWJwdGgiCiAgICAjIFBPU0lYIHdpbGwgbm90IGxpbmsgd2l0aG91dCB0aGUgcHRo -cmVhZCBsaWIKICAgIGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHB0aHJlYWQiCiAgICBlY2hvICIk -bGlic3dhbnRlZCIgPiY0CmZpCgojIFRoaXMgc2NyaXB0IFVVL3VzZXRocmVhZHMuY2J1IHdpbGwg -Z2V0ICdjYWxsZWQtYmFjaycgYnkgQ29uZmlndXJlCiMgYWZ0ZXIgaXQgaGFzIHByb21wdGVkIHRo -ZSB1c2VyIGZvciB3aGV0aGVyIHRvIHVzZSB0aHJlYWRzLgpjYXQgPiBVVS91c2V0aHJlYWRzLmNi -dSA8PCdFT0NCVScKY2FzZSAiJHVzZXRocmVhZHMiIGluCiRkZWZpbmV8dHJ1ZXxbeVldKikKICAg -ICAgICBjY2ZsYWdzPSItRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAkY2NmbGFncyIKICAgICAg -ICBpZiBlY2hvICRsaWJzd2FudGVkIHwgZ3JlcCAtdiBwdGhyZWFkID4vZGV2L251bGwKICAgICAg -ICB0aGVuCiAgICAgICAgICAgIHNldCBgZWNobyBYICIkbGlic3dhbnRlZCAifCBzZWQgLWUgJ3Mv -IGMgLyBwdGhyZWFkIGMgLydgCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIGxpYnN3YW50 -ZWQ9IiQqIgogICAgICAgIGZpCgoJIyBTb21laG93IGF0IGxlYXN0IGluIERlYmlhbiAyLjIgdGhl -c2UgbWFuYWdlIHRvIGVzY2FwZQoJIyB0aGUgI2RlZmluZSBmb3Jlc3Qgb2YgPGZlYXR1cmVzLmg+ -IGFuZCA8dGltZS5oPiBzbyB0aGF0CgkjIHRoZSBoYXNwcm90byBtYWNybyBvZiBDb25maWd1cmUg -ZG9lc24ndCBzZWUgdGhlc2UgcHJvdG9zLAoJIyBldmVuIHdpdGggdGhlIC1EX0dOVV9TT1VSQ0Uu -CgoJZF9hc2N0aW1lX3JfcHJvdG89IiRkZWZpbmUiCglkX2NyeXB0X3JfcHJvdG89IiRkZWZpbmUi -CglkX2N0aW1lX3JfcHJvdG89IiRkZWZpbmUiCglkX2dtdGltZV9yX3Byb3RvPSIkZGVmaW5lIgoJ -ZF9sb2NhbHRpbWVfcl9wcm90bz0iJGRlZmluZSIKCWRfcmFuZG9tX3JfcHJvdG89IiRkZWZpbmUi -CgoJOzsKZXNhYwpFT0NCVQoKY2F0ID4gVVUvdXNlbGFyZ2VmaWxlcy5jYnUgPDwnRU9DQlUnCiMg -VGhpcyBzY3JpcHQgVVUvdXNlbGFyZ2VmaWxlcy5jYnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBi -eSBDb25maWd1cmUKIyBhZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIgZm9yIHdoZXRoZXIg -dG8gdXNlIGxhcmdlIGZpbGVzLgpjYXNlICIkdXNlbGFyZ2VmaWxlcyIgaW4KJyd8JGRlZmluZXx0 -cnVlfFt5WV0qKQojIEtlZXAgdGhpcyBpbiB0aGUgbGVmdCBtYXJnaW4uCmNjZmxhZ3NfdXNlbGFy -Z2VmaWxlcz0iLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgoKCWNj -ZmxhZ3M9IiRjY2ZsYWdzICRjY2ZsYWdzX3VzZWxhcmdlZmlsZXMiCgk7Owplc2FjCkVPQ0JVCgoj -IFB1cmlmeSBmYWlscyB0byBsaW5rIFBlcmwgaWYgYSAiLWxjIiBpcyBwYXNzZWQgaW50byBpdHMg -bGlua2VyCiMgZHVlIHRvIGR1cGxpY2F0ZSBzeW1ib2xzLgpjYXNlICIkUFVSSUZZIiBpbgokZGVm -aW5lfHRydWV8W3lZXSopCiAgICBzZXQgYGVjaG8gWCAiJGxpYnN3YW50ZWQgInwgc2VkIC1lICdz -LyBjIC8gLydgCiAgICBzaGlmdAogICAgbGlic3dhbnRlZD0iJCoiCiAgICA7Owplc2FjCgojIElm -IHVzaW5nIGcrKywgdGhlIENvbmZpZ3VyZSBzY2FuIGZvciBkbG9wZW4oKSBhbmQgKGVzcGVjaWFs -bHkpCiMgZGxlcnJvcigpIG1pZ2h0IGZhaWwsIGVhc2llciBqdXN0IHRvIGZvcmNpYmx5IGhpbnQg -dGhlbSBpbi4KY2FzZSAiJGNjIiBpbgoqZysrKikKICBkX2Rsb3Blbj0nZGVmaW5lJwogIGRfZGxl -cnJvcj0nZGVmaW5lJwogIDs7CmVzYWMKCiMgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIGxpYmRi -IGNhbiBnZXQgYnVpbHQgaW4gc3VjaCBhIHdheSBhcyB0bwojIG5lZWQgcHRocmVhZCBleHBsaWNp -dGx5IGxpbmtlZC4KCmxpYmRiX25lZWRzX3B0aHJlYWQ9Ik4iCgppZiBlY2hvICIgJGxpYnN3YW50 -ZWQgIiB8IGdyZXAgLXYgIiBwdGhyZWFkICIgPi9kZXYvbnVsbAp0aGVuCiAgIGlmIGVjaG8gIiAk -bGlic3dhbnRlZCAiIHwgZ3JlcCAiIGRiICIgPi9kZXYvbnVsbAogICB0aGVuCiAgICAgZm9yIERC -RElSIGluICRnbGlicHRoCiAgICAgZG8KICAgICAgIERCTElCPSIkREJESVIvbGliZGIuc28iCiAg -ICAgICBpZiBbIC1mICREQkxJQiBdCiAgICAgICB0aGVuCiAgICAgICAgIGlmICR7bm06LW5tfSAt -dSAkREJMSUIgMj4vZGV2L251bGwgfCBncmVwIHB0aHJlYWQgPi9kZXYvbnVsbAogICAgICAgICB0 -aGVuCiAgICAgICAgICAgaWYgbGRkICREQkxJQiB8IGdyZXAgcHRocmVhZCA+L2Rldi9udWxsCiAg -ICAgICAgICAgdGhlbgogICAgICAgICAgICAgbGliZGJfbmVlZHNfcHRocmVhZD0iTiIKICAgICAg -ICAgICBlbHNlCiAgICAgICAgICAgICBsaWJkYl9uZWVkc19wdGhyZWFkPSJZIgogICAgICAgICAg -IGZpCiAgICAgICAgIGZpCiAgICAgICBmaQogICAgIGRvbmUKICAgZmkKZmkKCmNhc2UgIiRsaWJk -Yl9uZWVkc19wdGhyZWFkIiBpbgogICJZIikKICAgIGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHB0 -aHJlYWQiCiAgICA7Owplc2FjCg==', +bnV4X2kzODYgMjAwOC8wNy8xMAogICAgIyBjYzogU3R1ZGlvIDEyLjYgU3VuIEMgNS4xNSBMaW51 +eF9pMzg2IDIwMTcvMDUvMzAKICAgICMgR0ggIzIxNTM1IC0gYXBwYXJlbnQgb3B0aW1pemF0aW9u +IGJ1ZyBpbiB3b3Jrc2hvcCBjYwogICAgdGVzdCAiJG9wdGltaXplIiB8fCBvcHRpbWl6ZT0nLU8x +JwogICAgY2NjZGxmbGFncz0nLUtQSUMnCiAgICBsZGRsZmxhZ3M9Jy1HIC1CZHluYW1pYycKICAg +ICMgU3VuIEMgZG9lc24ndCBzdXBwb3J0IGdjYyBhdHRyaWJ1dGVzLCBidXQsIGluIG1hbnkgY2Fz +ZXMsIGRvZXNuJ3QKICAgICMgY29tcGxhaW4gZWl0aGVyLiAgTm90IGFsbCBjYXNlcywgdGhvdWdo +LgogICAgZF9hdHRyaWJ1dGVfZm9ybWF0PSd1bmRlZicKICAgIGRfYXR0cmlidXRlX21hbGxvYz0n +dW5kZWYnCiAgICBkX2F0dHJpYnV0ZV9ub25udWxsPSd1bmRlZicKICAgIGRfYXR0cmlidXRlX25v +cmV0dXJuPSd1bmRlZicKICAgIGRfYXR0cmlidXRlX3B1cmU9J3VuZGVmJwogICAgZF9hdHRyaWJ1 +dGVfdW51c2VkPSd1bmRlZicKICAgIGRfYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdD0ndW5k +ZWYnCiAgICBjYXNlICIkY2MiIGluCiAgICAqYzk5KSAgICMgV2l0aG91dCAtWGEgYzk5IGVycm9y +cyBvbiBzb21lIExpbnV4IHN5c3RlbSBoZWFkZXJzCiAgICAgICAgICAgICMgaW4gcGFydGljdWxh +ciB6ZXJvIHNpemVkIGFycmF5cyBhdCB0aGUgZW5kIG9mIHN0cnVjdHMKCSAgICBjYXNlICIkY2Nm +bGFncyIgaW4KCQkqLVhhKikJOzsKCQkqKSBjY2ZsYWdzPSIkY2NmbGFncyAtWGEiIDs7CgkgICAg +ZXNhYwoJICAgIDs7CiAgICBlc2FjCiAgICA7Owplc2FjCgpjYXNlICIkb3B0aW1pemUiIGluCiMg +dXNlIC1PMiBieSBkZWZhdWx0IDsgLU8zIGRvZXNuJ3Qgc2VlbSB0byBicmluZyBzaWduaWZpY2Fu +dCBiZW5lZml0cyB3aXRoIGdjYwonJykKICAgIG9wdGltaXplPSctTzInCiAgICBjYXNlICIkdW5h +bWVfbWludXNfbSIgaW4KICAgICAgICBwcGMqKQogICAgICAgICAgICAjIG9uIHBwYywgaXQgc2Vl +bXMgdGhhdCBnY2MgKGF0IGxlYXN0IGdjYyAzLjMuMikgaXNuJ3QgaGFwcHkKICAgICAgICAgICAg +IyB3aXRoIC1PMiA7IHNvIGRvd25ncmFkZSB0byAtTzEuCiAgICAgICAgICAgIG9wdGltaXplPSct +TzEnCiAgICAgICAgOzsKICAgICAgICBpYTY0KikKICAgICAgICAgICAgIyBUaGlzIGFyY2hpdGVj +dHVyZSBoYXMgaGFkIHZhcmlvdXMgcHJvYmxlbXMgd2l0aCBnY2MncwogICAgICAgICAgICAjIGlu +IHRoZSAzLjIsIDMuMywgYW5kIDMuNCByZWxlYXNlcyB3aGVuIG9wdGltaXplZCB0byAtTzIuICBT +ZWUKICAgICAgICAgICAgIyBSVCAjMzcxNTYgZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGUgcHJvYmxl +bS4KICAgICAgICAgICAgY2FzZSAiYCR7Y2M6LWdjY30gLXYgMj4mMWAiIGluCiAgICAgICAgICAg +ICoidmVyc2lvbiAzLjIiKnwqInZlcnNpb24gMy4zIip8KiJ2ZXJzaW9uIDMuNCIqKQogICAgICAg +ICAgICAgICAgY2NmbGFncz0iLWZuby1kZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcyAkY2NmbGFn +cyIKICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CiAgICBlc2FjCiAg +ICA7Owplc2FjCgojIFVidW50dSAxMS4wNCAoYW5kIGxhdGVyLCBwcmVzdW1hYmx5KSBkb2Vzbid0 +IGtlZXAgbW9zdCBsaWJyYXJpZXMKIyAoc3VjaCBhcyAtbG0pIGluIC9saWIgb3IgL3Vzci9saWIu +ICBTbyB3ZSBoYXZlIHRvIGFzayBnY2MgdG8gdGVsbCB1cwojIHdoZXJlIHRvIGxvb2suICBXZSBk +b24ndCB3YW50IGdjYydzIG93biBsaWJyYXJpZXMsIGhvd2V2ZXIsIHNvIHdlCiMgZmlsdGVyIHRo +b3NlIG91dC4KIyBUaGlzIGNvdWxkIGJlIGNvbmRpdGlvbmFsIG9uIFVidW50dSwgYnV0IG90aGVy +IGRpc3RyaWJ1dGlvbnMgbWF5CiMgZm9sbG93IHN1aXQsIGFuZCB0aGlzIHNjaGVtZSBzZWVtcyB0 +byB3b3JrIGV2ZW4gb24gcmF0aGVyIG9sZCBnY2Mncy4KIyBUaGlzIHVuY29uZGl0aW9uYWxseSB1 +c2VzIGdjYyBiZWNhdXNlIGV2ZW4gaWYgdGhlIHVzZXIgaXMgdXNpbmcgYW5vdGhlcgojIGNvbXBp +bGVyLCB3ZSBzdGlsbCBuZWVkIHRvIGZpbmQgdGhlIG1hdGggbGlicmFyeSBhbmQgZnJpZW5kcywg +YW5kIEkgZG9uJ3QKIyBrbm93IGhvdyBvdGhlciBjb21waWxlcnMgd2lsbCBjb3BlIHdpdGggdGhh +dCBzaXR1YXRpb24uCiMgTW9yZXZlciwgaWYgdGhlIHVzZXIgaGFzIHRoZWlyIG93biBnY2MgZWFy +bGllciBpbiAkUEFUSCB0aGFuIHRoZSBzeXN0ZW0gZ2NjLAojIHdlIGRvbid0IHdhbnQgaXRzIGxp +YnJhcmllcy4gU28gd2UgdHJ5IHRvIHByZWZlciB0aGUgc3lzdGVtIGdjYwojIFN0aWxsLCBhcyBh +biBlc2NhcGUgaGF0Y2gsIGFsbG93IENvbmZpZ3VyZSBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIHRv +CiMgcGxpYnB0aCB0byBieXBhc3MgdGhpcyBjaGVjay4KaWYgWyAteCAvdXNyL2Jpbi9nY2MgXSA7 +IHRoZW4KICAgIGdjYz0vdXNyL2Jpbi9nY2MKIyBjbGFuZyBhbHNvIHByb3ZpZGVzIC1wcmludC1z +ZWFyY2gtZGlycwplbGlmICR7Y2M6LWNjfSAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwIC1x +IC1lICdeY2xhbmcgdmVyc2lvbicgLWUgJyBjbGFuZyB2ZXJzaW9uJzsgdGhlbgogICAgZ2NjPSR7 +Y2M6LWNjfQplbHNlCiAgICBnY2M9Z2NjCmZpCgpjYXNlICIkcGxpYnB0aCIgaW4KJycpIHBsaWJw +dGg9YExBTkc9QyBMQ19BTEw9QyAkZ2NjICRjY2ZsYWdzICRsZGZsYWdzIC1wcmludC1zZWFyY2gt +ZGlycyB8IGdyZXAgbGlicmFyaWVzIHwKCWN1dCAtZjItIC1kPSB8IHRyICc6JyAkdHJubCB8IGdy +ZXAgLXYgJ2djYycgfCBzZWQgLWUgJ3M6LyQ6OidgCiAgICBzZXQgWCAkcGxpYnB0aCAjIENvbGxh +cHNlIGFsbCBlbnRyaWVzIG9uIG9uZSBsaW5lCiAgICBzaGlmdAogICAgcGxpYnB0aD0iJCoiCiAg +ICA7Owplc2FjCgojIEZvciB0aGUgbXVzbCBsaWJjLCBwZXJsIHNob3VsZCAjZGVmaW5lIF9HTlVf +U09VUkNFLiAgT3RoZXJ3aXNlLCBzb21lCiMgYXZhaWxhYmxlIGZ1bmN0aW9ucywgbGlrZSBtZW1l +bSwgd29uJ3QgYmUgdXNlZC4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbgojIFtwZXJsICMxMzM3NjBd +LiAgbXVzbCBkb2Vzbid0IG9mZmVyIGFuIGVhc3kgd2F5IHRvIGlkZW50aWZ5IGl0LCBidXQsCiMg +YXQgbGVhc3Qgb24gYWxwaW5lIGxpbnV4LCB0aGUgbGRkIC0tdmVyc2lvbiBvdXRwdXQgY29udGFp +bnMgdGhlCiMgc3RyaW5nICdtdXNsLicKY2FzZSBgbGRkIC0tdmVyc2lvbiAyPiYxYCBpbgogICAg +bXVzbCopICBjY2ZsYWdzPSIkY2NmbGFncyAtRF9HTlVfU09VUkNFIiA7OwogICAgICAgICopIDs7 +CmVzYWMKCiMgbGlicXVhZG1hdGggaXMgc29tZXRpbWVzIGluc3RhbGxlZCBhcyBnY2MgaW50ZXJu +YWwgbGlicmFyeSwKIyBzbyBjb250cmFyeSB0byBvdXIgdXN1YWwgcG9saWN5IG9mICpub3QqIGxv +b2tpbmcgYXQgZ2NjIGludGVybmFsCiMgZGlyZWN0b3JpZXMgd2Ugbm93ICpkbyogbG9vayBhdCB0 +aGVtLCBpbiBjYXNlIHRoZXkgY29udGFpbgojIHRoZSBxdWFkbWF0aCBsaWJyYXJ5LgojIFhYWCBU +aGlzIG1heSBhcHBseSB0byBvdGhlciBnY2MgaW50ZXJuYWwgbGlicmFyaWVzLCBpZiBzdWNoIGV4 +aXN0LgojIFhYWCBUaGlzIGNvdWxkIGJlIGF0IENvbmZpZ3VyZSBsZXZlbCwgYnV0IHRoZW4gdGhl +ICRnY2MgaXMgbWVzc3kuCmNhc2UgIiR1c2VxdWFkbWF0aCIgaW4KIiRkZWZpbmUiKQogIGZvciBk +IGluIGBMQU5HPUMgTENfQUxMPUMgJGdjYyAkY2NmbGFncyAkbGRmbGFncyAtcHJpbnQtc2VhcmNo +LWRpcnMgfCBncmVwIGxpYnJhcmllcyB8IGN1dCAtZjItIC1kPSB8IHRyICc6JyAkdHJubCB8IGdy +ZXAgJ2djYycgfCBzZWQgLWUgJ3M6LyQ6OidgCiAgZG8KICAgIGNhc2UgYGxzICRkLypsaWJxdWFk +bWF0aCokc28qIDI+L2Rldi9udWxsYCBpbgogICAgJGQvKmxpYnF1YWRtYXRoKiRzbyopIHhsaWJw +dGg9IiR4bGlicHRoICRkIiA7OwogICAgZXNhYwogIGRvbmUKICA7Owplc2FjCgpjYXNlICIkbGli +YyIgaW4KJycpCiMgSWYgeW91IGhhdmUgZ2xpYmMsIHRoZW4gcmVwb3J0IHRoZSB2ZXJzaW9uIGZv +ciAuL215Y29uZmlnIGJ1ZyByZXBvcnRpbmcuCiMgKENvbmZpZ3VyZSBkb2Vzbid0IG5lZWQgdG8g +a25vdyB0aGUgc3BlY2lmaWMgdmVyc2lvbiBzaW5jZSBpdCBqdXN0IHVzZXMKIyBnY2MgdG8gbG9h +ZCB0aGUgbGlicmFyeSBmb3IgYWxsIHRlc3RzLikKIyBXZSBkb24ndCB1c2UgX19HTElCQ19fIGFu +ZCAgX19HTElCQ19NSU5PUl9fIGJlY2F1c2UgdGhleQojIGFyZSBpbnN1ZmZpY2llbnRseSBwcmVj +aXNlIHRvIGRpc3Rpbmd1aXNoIHRoaW5ncyBsaWtlCiMgbGliYy0yLjAuNiBhbmQgbGliYy0yLjAu +Ny4KICAgIGZvciBwIGluICRwbGlicHRoCiAgICBkbwogICAgICAgIGZvciB0cnlsaWIgaW4gbGli +Yy5zby42IGxpYmMuc28KICAgICAgICBkbwogICAgICAgICAgICBpZiAkdGVzdCAtZSAkcC8kdHJ5 +bGliOyB0aGVuCiAgICAgICAgICAgICAgICBsaWJjPWBscyAtbCAkcC8kdHJ5bGliIHwgYXdrICd7 +cHJpbnQgJE5GfSdgCiAgICAgICAgICAgICAgICBpZiAkdGVzdCAiWCRsaWJjIiAhPSBYOyB0aGVu +CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAg +IGZpCiAgICAgICAgZG9uZQogICAgICAgIGlmICR0ZXN0ICJYJGxpYmMiICE9IFg7IHRoZW4KICAg +ICAgICAgICAgYnJlYWsKICAgICAgICBmaQogICAgZG9uZQogICAgOzsKZXNhYwoKaWYgJHtzaDot +L2Jpbi9zaH0gLWMgZXhpdDsgdGhlbgogIGVjaG8gJycKICBlY2hvICdZb3UgYXBwZWFyIHRvIGhh +dmUgYSB3b3JraW5nIGJhc2guICBHb29kLicKZWxzZQogIGNhdCA8PCAnRU9NJyA+JjQKCioqKioq +KioqKioqKioqKioqKioqKioqIFdhcm5pbmchICoqKioqKioqKioqKioqKioqKioqKgpJdCB3b3Vs +ZCBhcHBlYXIgeW91IGhhdmUgYSBkZWZlY3RpdmUgYmFzaCBzaGVsbCBpbnN0YWxsZWQuIFRoaXMg +aXMgbGlrZWx5IHRvCmdpdmUgeW91IGEgZmFpbHVyZSBvZiBvcC9leGVjIHRlc3QgIzUgZHVyaW5n +IHRoZSB0ZXN0IHBoYXNlIG9mIHRoZSBidWlsZCwKVXBncmFkaW5nIHRvIGEgcmVjZW50IHZlcnNp +b24gKDEuMTQuNCBvciBsYXRlcikgc2hvdWxkIGZpeCB0aGUgcHJvYmxlbS4KKioqKioqKioqKioq +KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkVPTQoKZmkKCiMgT24g +U1BBUkNsaW51eCwKIyBUaGUgZm9sbG93aW5nIGNzaCBjb25zaXN0ZW50bHkgY29yZWR1bXBlZCBp +biB0aGUgdGVzdCBkaXJlY3RvcnkKIyAiL2hvbWUvbWlrZWRsci9wZXJsNS4wMDNfOTQvdCIsIHRo +b3VnaCBub3QgbW9zdCBvdGhlciBkaXJlY3Rvcmllcy4KCiNOYW1lICAgICAgICA6IGNzaCAgICAg +ICAgICAgICAgICAgICAgRGlzdHJpYnV0aW9uOiBSZWQgSGF0IExpbnV4IChSZW1icmFuZHQpCiNW +ZXJzaW9uICAgICA6IDUuMi42ICAgICAgICAgICAgICAgICAgICAgICAgVmVuZG9yOiBSZWQgSGF0 +IFNvZnR3YXJlCiNSZWxlYXNlICAgICA6IDMgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBE +YXRlOiBGcmkgTWF5IDI0IDE5OjQyOjE0IDE5OTYKI0luc3RhbGwgZGF0ZTogVGh1IEp1bCAxMSAx +NjoyMDoxNCAxOTk2IEJ1aWxkIEhvc3Q6IGl0Y2h5LnJlZGhhdC5jb20KI0dyb3VwICAgICAgIDog +U2hlbGxzICAgICAgICAgICAgICAgICAgIFNvdXJjZSBSUE06IGNzaC01LjIuNi0zLnNyYy5ycG0K +I1NpemUgICAgICAgIDogMTg0NDE3CiNEZXNjcmlwdGlvbiA6IEJTRCBjLXNoZWxsCgojIEZvciB0 +aGlzIHJlYXNvbiBJIHN1Z2dlc3QgdXNpbmcgdGhlIG11Y2ggYnVnLWZpeGVkIHRjc2ggZm9yIGds +b2JiaW5nCiMgd2hlcmUgYXZhaWxhYmxlLgoKIyBOb3ZlbWJlciAyMDAxOiAgVGhhdCB3YXJuaW5n +J3MgcHJldHR5IG9sZCBub3cgYW5kIHByb2JhYmx5IG5vdCBzbwojIHJlbGV2YW50LCBlc3BlY2lh +bGx5IHNpbmNlIHBlcmwgbm93IHVzZXMgRmlsZTo6R2xvYiBmb3IgZ2xvYmJpbmcuCiMgV2UnbGwg +c3RpbGwgbG9vayBmb3IgdGNzaCwgYnV0IHRvbmUgZG93biB0aGUgd2FybmluZ3MuCiMgQW5keSBE +b3VnaGVydHksIE5vdi4gNiwgMjAwMQppZiAkY3NoIC1jICdlY2hvICR2ZXJzaW9uJyA+L2Rldi9u +dWxsIDI+JjE7IHRoZW4KICAgIGVjaG8gJ1lvdXIgY3NoIGlzIHJlYWxseSB0Y3NoLiAgR29vZC4n +CmVsc2UKICAgIGlmIHh4eD1gLi9VVS9sb2MgdGNzaCBibHVyZmwgJHB0aGA7ICR0ZXN0IC1mICIk +eHh4IjsgdGhlbgoJZWNobyAiRm91bmQgdGNzaC4gIEknbGwgdXNlIGl0IGZvciBnbG9iYmluZy4i +CgkjIFdlIGNhbid0IGNoYW5nZSBDb25maWd1cmUncyBzZXR0aW5nIG9mICRjc2gsIGR1ZSB0byB0 +aGUgd2F5CgkjIENvbmZpZ3VyZSBoYW5kbGVzICRkX3BvcnRhYmxlIGFuZCBjb21tYW5kcyBmb3Vu +ZCBpbiAkbG9jbGlzdC4KCSMgV2UgY2FuIHNldCB0aGUgdmFsdWUgZm9yIENTSCBpbiBjb25maWcu +aCBieSBzZXR0aW5nIGZ1bGxfY3NoLgoJZnVsbF9jc2g9JHh4eAogICAgZWxpZiBbIC1mICIkY3No +IiBdOyB0aGVuCgllY2hvICJDb3VsZG4ndCBmaW5kIHRjc2guICBDc2gtYmFzZWQgZ2xvYmJpbmcg +bWlnaHQgYmUgYnJva2VuLiIKICAgIGZpCmZpCgojIFNoaW1wZWkgWWFtYXNoaXRhIDxzaGltcGVp +QHNvY3JhdGVzLnBhdG5ldC5jYWx0ZWNoLmVkdT4KIyBNZXNzYWdlLUlkOiA8MzNFRjE2MzQuQjM2 +QjY1MDBAcG9ib3guY29tPgojCiMgVGhlIERSMiBvZiBNa0xpbnV4IChvc25hbWU9bGludXgsYXJj +aG5hbWU9cHBjLWxpbnV4KSBtYXkgbmVlZAojIHNwZWNpYWwgZmxhZ3MgcGFzc2VkIGluIG9yZGVy +IGZvciBkeW5hbWljIGxvYWRpbmcgdG8gd29yay4KIyBpbnN0ZWFkIG9mIHRoZSByZWNvbW1lbmRl +ZDoKIwojIGNjZGxmbGFncz0nLXJkeW5hbWljJwojCiMgaXQgc2hvdWxkIGJlOgojIGNjZGxmbGFn +cz0nLVdsLC1FJwojCiMgU28gaWYgeW91ciBEUjIgKERSMyBjYW1lIG91dCBzdW1tZXIgMTk5OCwg +Y29uc2lkZXIgdXBncmFkaW5nKQojIGhhcyBwcm9ibGVtcyB3aXRoIGR5bmFtaWMgbG9hZGluZywg +dW5jb21tZW50IHRoZQojIGZvbGxvd2luZyB0aHJlZSBsaW5lcywgbWFrZSBkaXN0Y2xlYW4sIGFu +ZCByZS1Db25maWd1cmU6CiNjYXNlICJgdW5hbWUgLXIgfCBzZWQgJ3MvXlswLTkuLV0qLy8nYGBh +cmNoYCIgaW4KIydvc2ZtYWNoM3BwYycpIGNjZGxmbGFncz0nLVdsLC1FJyA7OwojZXNhYwoKY2Fz +ZSAiJHVuYW1lX21pbnVzX20iIGluCnNwYXJjKikKCWNhc2UgIiRjY2NkbGZsYWdzIiBpbgoJKi1m +cGljKikgY2NjZGxmbGFncz0iYGVjaG8gJGNjY2RsZmxhZ3N8c2VkICdzLy1mcGljLy1mUElDLydg +IiA7OwoJKi1mUElDKikgOzsKCSopCSBjY2NkbGZsYWdzPSIkY2NjZGxmbGFncyAtZlBJQyIgOzsK +CWVzYWMKCTs7CmVzYWMKCiMgU3VTRTguMiBoYXMgL3Vzci9saWIvbGlibmRibSogd2hpY2ggYXJl +IGxkIHNjcmlwdHMgcmF0aGVyIHRoYW4KIyB0cnVlIGxpYnJhcmllcy4gVGhlIHNjcmlwdHMgY2F1 +c2UgYmluZGluZyBhZ2FpbnN0IHN0YXRpYwojIHZlcnNpb24gb2YgLWxnZGJtIHdoaWNoIGlzIGEg +YmFkIGlkZWEuIFNvIGlmIHdlIGhhdmUgJ25tJwojIG1ha2Ugc3VyZSBpdCBjYW4gcmVhZCB0aGUg +ZmlsZQojIE5JLVMgMjAwMy8wOC8wNwpjYXNlICIkbm0iIGluCiAgICAnJykgOzsKICAgICopCiAg +ICBmb3IgcCBpbiAkcGxpYnB0aAogICAgZG8KICAgICAgICBpZiAkdGVzdCAtciAkcC9saWJuZGJt +LnNvOyB0aGVuCiAgICAgICAgICAgIGlmICRubSAkcC9saWJuZGJtLnNvID4vZGV2L251bGwgMj4m +MSA7IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gJ1lvdXIgc2hhcmVkIC1sbmRibSBzZWVtcyB0 +byBiZSBhIHJlYWwgbGlicmFyeS4nCiAgICAgICAgICAgICAgICBfbGlibmRibV9yZWFsPTEKICAg +ICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgIGRvbmUKICAg +IGlmICR0ZXN0ICJYJF9saWJuZGJtX3JlYWwiID0gWDsgdGhlbgogICAgICAgIGVjaG8gJ1lvdXIg +c2hhcmVkIC1sbmRibSBpcyBub3QgYSByZWFsIGxpYnJhcnkuJwogICAgICAgIHNldCBgZWNobyBY +ICIkbGlic3dhbnRlZCAifCBzZWQgLWUgJ3MvIG5kYm0gLyAvJ2AKICAgICAgICBzaGlmdAogICAg +ICAgIGxpYnN3YW50ZWQ9IiQqIgogICAgZmkKICAgIDs7CmVzYWMKCiMgTGludXggb24gU3lub2xv +Z3kuCmlmIFsgLWYgL2V0Yy9zeW5vaW5mby5jb25mIC1hIC1kIC91c3Ivc3lubyBdOyB0aGVuCiAg +ICAjIFRlc3RlZCBvbiBTeW5vbG9neSBEUzIxMyBhbmQgRFM0MTMKICAgICMgIE9TIHZlcnNpb24g +aW5mbyBpbiAvZXRjLmRlZmF1bHRzL1ZFUlNJT04KICAgICMgIGh0dHA6Ly9mb3J1bS5zeW5vbG9n +eS5jb20vd2lraS9pbmRleC5waHAvV2hhdF9raW5kX29mX0NQVV9kb2VzX215X05BU19oYXZlCiAg +ICAjIFN5bm9sb2d5IERTMjEzIHJ1bm5pbmcgRFNNIDQuMy0zODEwLTAgKDIwMTMtMTEtMDYpCiAg +ICAjICBDUFUgbW9kZWwgTWFydmVsbCBLaXJrd29vZCBtdjYyODIgQVJNdjV0ZQogICAgIyAgTGlu +dXggMi42LjMyLjEyICMzODEwIFdlZCBOb3YgNiAwNToxMzo0MSBDU1QgMjAxMyBhcm12NXRlbCBH +TlUvTGludXgKICAgICMgU3lub2xvZ3kgRFM0MTMgcnVubmluZyBEU00gNC4zLTM4MTAtMCAoMjAx +My0xMS0wNikKICAgICMgIENQVSBtb2RlbCBGcmVlc2NhbGUgUW9ySVEgUDEwMjIgcHBjIChlNTAw +djIpCiAgICAjICBsaW51eCAyLjYuMzIuMTIgIzM4MTAgcHBjIEdOVS9MaW51eAogICAgIyBBbGwg +ZGV2ZWxvcG1lbnQgc3R1ZmYgaW5zdGFsbGVkIHdpdGggaXBrZyBpcyBpbiAvb3B0CiAgICBpZiBb +ICIkTEFORyIgPSAiIiAtbyAiJExBTkciID0gIkMiIF07IHRoZW4KCWVjaG8gJ1lvdXIgTEFORyBp +cyBzYWZlJwogICAgZWxzZQoJZWNobyAnUGxlYXNlIHNldCAkTEFORyB0byAiQyIuIEFsbCBvdGhl +ciAkTEFORyBzZXR0aW5ncyB3aWxsIGNhdXNlIGhhdm9jJyA+JjQKCUxBTkc9QwogICAgZmkKICAg +IGVjaG8gJ1NldHRpbmcgdXAgdG8gdXNlIC9vcHQvKicgPiY0CiAgICBsb2NpbmNwdGg9Ii9vcHQv +aW5jbHVkZSAkbG9jaW5jcHRoIgogICAgbGlicHRoPSIvb3B0L2xpYiAkbGlicHRoIgogICAgbGli +c3B0aD0iL29wdC9saWIgJGxpYnNwdGgiCiAgICBsb2NsaWJwdGg9Ii9vcHQvbGliICRsb2NsaWJw +dGgiCiAgICAjIFBPU0lYIHdpbGwgbm90IGxpbmsgd2l0aG91dCB0aGUgcHRocmVhZCBsaWIKICAg +IGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHB0aHJlYWQiCiAgICBlY2hvICIkbGlic3dhbnRlZCIg +PiY0CmZpCgojIFRoaXMgc2NyaXB0IFVVL3VzZXRocmVhZHMuY2J1IHdpbGwgZ2V0ICdjYWxsZWQt +YmFjaycgYnkgQ29uZmlndXJlCiMgYWZ0ZXIgaXQgaGFzIHByb21wdGVkIHRoZSB1c2VyIGZvciB3 +aGV0aGVyIHRvIHVzZSB0aHJlYWRzLgpjYXQgPiBVVS91c2V0aHJlYWRzLmNidSA8PCdFT0NCVScK +Y2FzZSAiJHVzZXRocmVhZHMiIGluCiRkZWZpbmV8dHJ1ZXxbeVldKikKICAgICAgICBjY2ZsYWdz +PSItRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAkY2NmbGFncyIKICAgICAgICBpZiBlY2hvICRs +aWJzd2FudGVkIHwgZ3JlcCAtdiBwdGhyZWFkID4vZGV2L251bGwKICAgICAgICB0aGVuCiAgICAg +ICAgICAgIHNldCBgZWNobyBYICIkbGlic3dhbnRlZCAifCBzZWQgLWUgJ3MvIGMgLyBwdGhyZWFk +IGMgLydgCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIGxpYnN3YW50ZWQ9IiQqIgogICAg +ICAgIGZpCgoJIyBTb21laG93IGF0IGxlYXN0IGluIERlYmlhbiAyLjIgdGhlc2UgbWFuYWdlIHRv +IGVzY2FwZQoJIyB0aGUgI2RlZmluZSBmb3Jlc3Qgb2YgPGZlYXR1cmVzLmg+IGFuZCA8dGltZS5o +PiBzbyB0aGF0CgkjIHRoZSBoYXNwcm90byBtYWNybyBvZiBDb25maWd1cmUgZG9lc24ndCBzZWUg +dGhlc2UgcHJvdG9zLAoJIyBldmVuIHdpdGggdGhlIC1EX0dOVV9TT1VSQ0UuCgoJZF9hc2N0aW1l +X3JfcHJvdG89IiRkZWZpbmUiCglkX2NyeXB0X3JfcHJvdG89IiRkZWZpbmUiCglkX2N0aW1lX3Jf +cHJvdG89IiRkZWZpbmUiCglkX2dtdGltZV9yX3Byb3RvPSIkZGVmaW5lIgoJZF9sb2NhbHRpbWVf +cl9wcm90bz0iJGRlZmluZSIKCWRfcmFuZG9tX3JfcHJvdG89IiRkZWZpbmUiCgoJOzsKZXNhYwpF +T0NCVQoKY2F0ID4gVVUvdXNlbGFyZ2VmaWxlcy5jYnUgPDwnRU9DQlUnCiMgVGhpcyBzY3JpcHQg +VVUvdXNlbGFyZ2VmaWxlcy5jYnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBieSBDb25maWd1cmUK +IyBhZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIgZm9yIHdoZXRoZXIgdG8gdXNlIGxhcmdl +IGZpbGVzLgpjYXNlICIkdXNlbGFyZ2VmaWxlcyIgaW4KJyd8JGRlZmluZXx0cnVlfFt5WV0qKQoj +IEtlZXAgdGhpcyBpbiB0aGUgbGVmdCBtYXJnaW4uCmNjZmxhZ3NfdXNlbGFyZ2VmaWxlcz0iLURf +TEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgoKCWNjZmxhZ3M9IiRjY2Zs +YWdzICRjY2ZsYWdzX3VzZWxhcmdlZmlsZXMiCgk7Owplc2FjCkVPQ0JVCgojIFB1cmlmeSBmYWls +cyB0byBsaW5rIFBlcmwgaWYgYSAiLWxjIiBpcyBwYXNzZWQgaW50byBpdHMgbGlua2VyCiMgZHVl +IHRvIGR1cGxpY2F0ZSBzeW1ib2xzLgpjYXNlICIkUFVSSUZZIiBpbgokZGVmaW5lfHRydWV8W3lZ +XSopCiAgICBzZXQgYGVjaG8gWCAiJGxpYnN3YW50ZWQgInwgc2VkIC1lICdzLyBjIC8gLydgCiAg +ICBzaGlmdAogICAgbGlic3dhbnRlZD0iJCoiCiAgICA7Owplc2FjCgojIElmIHVzaW5nIGcrKywg +dGhlIENvbmZpZ3VyZSBzY2FuIGZvciBkbG9wZW4oKSBhbmQgKGVzcGVjaWFsbHkpCiMgZGxlcnJv +cigpIG1pZ2h0IGZhaWwsIGVhc2llciBqdXN0IHRvIGZvcmNpYmx5IGhpbnQgdGhlbSBpbi4KY2Fz +ZSAiJGNjIiBpbgoqZysrKikKICBkX2Rsb3Blbj0nZGVmaW5lJwogIGRfZGxlcnJvcj0nZGVmaW5l +JwogIDs7CmVzYWMKCiMgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzIGxpYmRiIGNhbiBnZXQgYnVp +bHQgaW4gc3VjaCBhIHdheSBhcyB0bwojIG5lZWQgcHRocmVhZCBleHBsaWNpdGx5IGxpbmtlZC4K +CmxpYmRiX25lZWRzX3B0aHJlYWQ9Ik4iCgppZiBlY2hvICIgJGxpYnN3YW50ZWQgIiB8IGdyZXAg +LXYgIiBwdGhyZWFkICIgPi9kZXYvbnVsbAp0aGVuCiAgIGlmIGVjaG8gIiAkbGlic3dhbnRlZCAi +IHwgZ3JlcCAiIGRiICIgPi9kZXYvbnVsbAogICB0aGVuCiAgICAgZm9yIERCRElSIGluICRnbGli +cHRoCiAgICAgZG8KICAgICAgIERCTElCPSIkREJESVIvbGliZGIuc28iCiAgICAgICBpZiBbIC1m +ICREQkxJQiBdCiAgICAgICB0aGVuCiAgICAgICAgIGlmICR7bm06LW5tfSAtdSAkREJMSUIgMj4v +ZGV2L251bGwgfCBncmVwIHB0aHJlYWQgPi9kZXYvbnVsbAogICAgICAgICB0aGVuCiAgICAgICAg +ICAgaWYgbGRkICREQkxJQiB8IGdyZXAgcHRocmVhZCA+L2Rldi9udWxsCiAgICAgICAgICAgdGhl +bgogICAgICAgICAgICAgbGliZGJfbmVlZHNfcHRocmVhZD0iTiIKICAgICAgICAgICBlbHNlCiAg +ICAgICAgICAgICBsaWJkYl9uZWVkc19wdGhyZWFkPSJZIgogICAgICAgICAgIGZpCiAgICAgICAg +IGZpCiAgICAgICBmaQogICAgIGRvbmUKICAgZmkKZmkKCmNhc2UgIiRsaWJkYl9uZWVkc19wdGhy +ZWFkIiBpbgogICJZIikKICAgIGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHB0aHJlYWQiCiAgICA7 +Owplc2FjCg==', 'midnightbsd' => 'dXNldmZvcms9J3RydWUnCmNhc2UgIiR1c2VteW1hbGxvYyIgaW4KICAgICIiKSB1c2VteW1hbGxv Yz0nbicKICAgICAgICA7Owplc2FjCmxpYnN3YW50ZWQ9YGVjaG8gJGxpYnN3YW50ZWQgfCBzZWQg @@ -1615,7 +1653,10 @@ Yl92ZXJzaW9uOyBlY2hvIGxpYnBlcmwuc28uJHttYWpvcn0uJHttaW5vcn1gCglmaQoJOzsKZXNh YwoKIyBvcGVuYnNkIGhhcyBhIHByb2JsZW0gcmVnYXJkaW5nIG5ld2xvY2FsZSgpCiMgaHR0cHM6 Ly9tYXJjLmluZm8vP2w9b3BlbmJzZC1idWdzJm09MTU1MzY0NTY4NjA4NzU5Jnc9MgojIHdoaWNo IGlzIGJlaW5nIGZpeGVkLiAgSW4gdGhlIG1lYW50aW1lLCBmb3JiaWQgUE9TSVggMjAwOCBsb2Nh -bGVzCmRfbmV3bG9jYWxlPSIkdW5kZWYiCgojIGVuZAo=', +bGVzCiNkX25ld2xvY2FsZT0iJHVuZGVmIgoKIyBTZWVtcyB0aGF0IE9wZW5CU0QgcmV0dXJucyBi +b2d1cyB2YWx1ZXMgaW4gX1RocmVhZF9sb2NhbCB2YXJpYWJsZXMgaW4gY29kZSBpbgojIHNoYXJl +ZCBvYmplY3RzLCBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgaXQuIFNlZSBHSCAjMTkxMDkKZF90aHJl +YWRfbG9jYWw9dW5kZWYKCiMgZW5kCg==', 'solaris' => 'IyBoaW50cy9zb2xhcmlzXzIuc2gKIyBDb250cmlidXRpb25zIGJ5IChpbiBhbHBoYWJldGljYWwg b3JkZXIpIEFsYW4gQnVybGlzb24sIEFuZHkgRG91Z2hlcnR5LAojIERlYW4gUm9laHJpY2gsIEph @@ -1663,367 +1704,360 @@ IHRoYXQgZG91YmxlcyBhcmUgOCBieXRlIGFsaWduZWQuCiMgVGhhbmtzIHRvICBIYWxsdmFyZCBC LiBGdXJ1c2V0aCA8aC5iLmZ1cnVzZXRoQHVzaXQudWlvLm5vPgpzZXQgYGVjaG8gIiAkbGlic3dh bnRlZCAiIHwgc2VkIC1lICdzQCBsZCBAIEAnIC1lICdzQCBtYWxsb2MgQCBAJyAtZSAnc0AgdWNi IEAgQCcgLWUgJ3NAIHNlYyBAIEAnIC1lICdzQCBjcnlwdCBAIEAnYApsaWJzd2FudGVkPSIkKiIK -CiMgTG9vayBmb3IgYXJjaGl0ZWN0dXJlIG5hbWUuICBXZSB3YW50IHRvIHN1Z2dlc3QgYSB1c2Vm -dWwgZGVmYXVsdC4KY2FzZSAiJGFyY2huYW1lIiBpbgonJykKICAgIGlmIHRlc3QgLWYgL3Vzci9i -aW4vYXJjaDsgdGhlbgoJYXJjaG5hbWU9YC91c3IvYmluL2FyY2hgCglhcmNobmFtZT0iJHthcmNo -bmFtZX0tJHtvc25hbWV9IgogICAgZWxpZiB0ZXN0IC1mIC91c3IvdWNiL2FyY2g7IHRoZW4KCWFy -Y2huYW1lPWAvdXNyL3VjYi9hcmNoYAoJYXJjaG5hbWU9IiR7YXJjaG5hbWV9LSR7b3NuYW1lfSIK -ICAgIGZpCiAgICA7Owplc2FjCgojCiMgVGhpcyBleHRyYWN0cyB0aGUgbGlicmFyeSBkaXJlY3Rv -cmllcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgYnkgdGhlIFN1bgojIFdvcmtzaG9wIGNvbXBpbGVy -LCBnaXZlbiB0aGUgY29tbWFuZC1saW5lIHN1cHBsaWVkIGluICR0cnl3b3Jrc2hvcGNjLgojIFVz -ZSB0aHVzbHk6IGxvY2xpYnB0aD0iYCRnZXR3b3Jrc2hvcGxpYnNgICRsb2NsaWJwdGgiCiMKCWdl -dHdvcmtzaG9wbGlicz1gY2F0IDw8J0VORCcKZXZhbCAkdHJ5d29ya3Nob3BjYyAtIyMjIDI+JjEg -fCBcCnNlZCAtbiAnLyAtWSAvcyEuKiAtWSAiUCxcKFteIl0qXCkiLiohXDEhcCcgfCB0ciAnOicg -JyAnIHwgXApzZWQgLWUgJ3MhL3Vzci9saWIvc3BhcmN2OSEhJyAtZSAncyEvdXNyL2Njcy9saWIv -c3BhcmN2OSEhJyBcCiAgICAtZSAncyEvdXNyL2xpYiEhZycgLWUgJ3MhL3Vzci9jY3MvbGliISFn -JwpFTkQKYAoKY2FzZSAiJGNjIiBpbgonJykgICAgZm9yIGkgaW4gYGxzIC1yIC9vcHQvKnN0dWRp -byovYmluL2NjYCAvb3B0L1NVTldzcHJvL2Jpbi9jYwogICAgICAgZG8KCSAgICAgICBpZiB0ZXN0 -IC1mICIkaSI7IHRoZW4KCQkgICAgICAgY2M9JGkKCQkgICAgICAgY2F0IDw8RU9GID4mNAoKWW91 -IHNwZWNpZmllZCBubyBjYyBidXQgeW91IHNlZW0gdG8gaGF2ZSB0aGUgV29ya3Nob3AgY29tcGls -ZXIKKCRjYykgaW5zdGFsbGVkLCB1c2luZyB0aGF0LgpJZiB5b3Ugd2FudCBzb21ldGhpbmcgZWxz -ZSwgc3BlY2lmeSB0aGF0IGluIHRoZSBjb21tYW5kIGxpbmUsCmUuZy4gQ29uZmlndXJlIC1EY2M9 -Z2NjCgpFT0YKCQkJYnJlYWsKCQlmaQoJZG9uZQoJOzsKZXNhYwoKIyMjIyMjIyMjIyMjIyMjIyMj -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgR2VuZXJhbCBzYW5pdHkgdGVz -dGluZy4gIFNlZSBiZWxvdyBmb3IgZXhjZXJwdHMgZnJvbSB0aGUgU29sYXJpcyBGQVEuCiMKIyBG -cm9tIHJvZWhyaWNoQGlyb253b29kLWZkZGkuY3JheS5jb20gV2VkIFNlcCAyNyAxMjo1MTo0NiAx -OTk1CiMgRGF0ZTogVGh1LCA3IFNlcCAxOTk1IDE2OjMxOjQwIC0wNTAwCiMgRnJvbTogRGVhbiBS -b2VocmljaCA8cm9laHJpY2hAaXJvbndvb2QtZmRkaS5jcmF5LmNvbT4KIyBUbzogcGVybDUtcG9y -dGVyc0BhZnJpY2Eubmljb2guY29tCiMgU3ViamVjdDogUmU6IE9uIHBlcmw1L3NvbGFyaXMvZ2Nj -CiMKIyBIZXJlJ3MgYW5vdGhlciBkcmFmdCBvZiB0aGUgcGVybDUvc29sYXJpcy9nY2Mgc2FuaXR5 -LWNoZWNrZXIuCgpjYXNlIGB0eXBlICR7Y2M6LWNjfWAgaW4KKi91c3IvdWNiL2NjKikgY2F0IDw8 -RU5EID4mNAoKTk9URTogIFNvbWUgcGVvcGxlIGhhdmUgcmVwb3J0ZWQgcHJvYmxlbXMgd2l0aCAv -dXNyL3VjYi9jYy4KSWYgeW91IGhhdmUgZGlmZmljdWx0aWVzLCBwbGVhc2UgbWFrZSBzdXJlIHRo -ZSBkaXJlY3RvcnkKY29udGFpbmluZyB5b3VyIEMgY29tcGlsZXIgaXMgYmVmb3JlIC91c3IvdWNi -IGluIHlvdXIgUEFUSC4KCkVORAo7Owplc2FjCgoKIyBDaGVjayB0aGF0IC9kZXYvZmQgaXMgbW91 -bnRlZC4gIElmIGl0IGlzIG5vdCBtb3VudGVkLCBsZXQgdGhlCiMgdXNlciBrbm93IHRoYXQgc3Vp -ZCBzY3JpcHRzIG1heSBub3Qgd29yay4KJHJ1biBtb3VudCB8IGdyZXAgJ14vZGV2L2ZkICcgMj4m -MSA+IC9kZXYvbnVsbApjYXNlICQ/IGluCjApIDs7CiopCgljYXQgPDxFTkQgPiY0CgpOT1RFOiBZ -b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIC9kZXYvZmQgbW91bnRlZC4gIElmIHlvdSB3YW50IHRv -CmJlIGFibGUgdG8gdXNlIHNldC11aWQgc2NyaXB0cyB5b3UgbXVzdCBhc2sgeW91ciBzeXN0ZW0g -YWRtaW5pc3RyYXRvcgp0byBtb3VudCAvZGV2L2ZkLgoKRU5ECgk7Owplc2FjCgoKIyBTZWUgaWYg -bGlidWNiIGNhbiBiZSBmb3VuZCBpbiAvdXNyL2xpYi4gIElmIGl0IGlzLCB3YXJuIHRoZSB1c2Vy -CiMgdGhhdCB0aGlzIG1heSBjYXVzZSBwcm9ibGVtcyB3aGlsZSBidWlsZGluZyBQZXJsIGV4dGVu -c2lvbnMuCmZvdW5kX2xpYnVjYj0nJwpjYXNlICIkcnVuIiBpbgonJykgL3Vzci9iaW4vbHMgL3Vz -ci9saWIvbGlidWNiKiA+L2Rldi9udWxsIDI+JjEKICAgIGZvdW5kX2xpYnVjYj0kPwogICAgOzsK -KikgICRydW4gL3Vzci9iaW4vbHMgJy91c3IvbGliL2xpYnVjYionID4vZGV2L251bGwgMj4mMQog -ICAgZm91bmRfbGlidWNiPSQ/CiAgICA7Owplc2FjCgpjYXNlICRmb3VuZF9saWJ1Y2IgaW4KMCkK -CWNhdCA8PEVORCA+JjQKCk5PVEU6IGxpYnVjYiBoYXMgYmVlbiBmb3VuZCBpbiAvdXNyL2xpYi4g -IGxpYnVjYiBzaG91bGQgcmVzaWRlIGluCi91c3IvdWNibGliLiAgWW91IG1heSBoYXZlIHRyb3Vi -bGUgd2hpbGUgYnVpbGRpbmcgUGVybCBleHRlbnNpb25zLgoKRU5ECjs7CmVzYWMKCiMgVXNlIHNo -ZWxsIGJ1aWx0LWluICd0eXBlJyBjb21tYW5kIGluc3RlYWQgb2YgL3Vzci9iaW4vd2hpY2ggdG8K -IyBhdm9pZCBwb3NzaWJsZSBjc2ggc3RhcnQtdXAgcHJvYmxlbXMgYW5kIGFsc28gdG8gdXNlIHRo -ZSBzYW1lIHNoZWxsCiMgd2UnbGwgYmUgdXNpbmcgdG8gQ29uZmlndXJlIGFuZCBtYWtlIHBlcmwu -CiMgVGhlIHBhdGggbmFtZSBpcyB0aGUgbGFzdCBmaWVsZCBpbiB0aGUgb3V0cHV0LCBidXQgdGhl -IHR5cGUgY29tbWFuZAojIGhhcyBhbiBhbm5veWluZyBhcnJheSBvZiBwb3NzaWJsZSBvdXRwdXRz -LCBlLmcuOgojCW1ha2UgaXMgaGFzaGVkICgvb3B0L2dudS9iaW4vbWFrZSkKIwljYyBpcyAvdXNy -L3VjYi9jYwojCWZvbyBub3QgZm91bmQKIyB1c2UgYSBjb21tYW5kIGxpa2UgdHlwZSBtYWtlIHwg -YXdrICd7cHJpbnQgJE5GfScgfCBzZWQgJ3MvWygpXS8vZycKCiMgU2VlIGlmIG1ha2UoMSkgaXMg -R05VIG1ha2UoMSkuCiMgSWYgaXQgaXMsIG1ha2Ugc3VyZSB0aGUgc2V0Z2lkIGJpdCBpcyBub3Qg -c2V0LgptYWtlIC12ID4gbWFrZS52ZXJzIDI+JjEKaWYgZ3JlcCBHTlUgbWFrZS52ZXJzID4gL2Rl -di9udWxsIDI+JjE7IHRoZW4KICAgIHRtcD1gdHlwZSBtYWtlIHwgYXdrICd7cHJpbnQgJE5GfScg -fCBzZWQgJ3MvWygpXS8vZydgCiAgICBjYXNlICJgJHtsczotJy91c3IvYmluL2xzJ30gLWxMICR0 -bXBgIiBpbgogICAgPz8/Pz8/cyopCgkgICAgY2F0IDw8RU5EID4mMgoKTk9URTogWW91ciBQQVRI -IHBvaW50cyB0byBHTlUgbWFrZSwgYW5kIHlvdXIgR05VIG1ha2UgaGFzIHRoZSBzZXQtZ3JvdXAt -aWQKYml0IHNldC4gIFlvdSBtdXN0IGVpdGhlciByZWFycmFuZ2UgeW91ciBQQVRIIHRvIHB1dCAv -dXNyL2Njcy9iaW4gYmVmb3JlIHRoZQpHTlUgdXRpbGl0aWVzIG9yIHlvdSBtdXN0IGFzayB5b3Vy -IHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGRpc2FibGUgdGhlCnNldC1ncm91cC1pZCBiaXQgb24g -R05VIG1ha2UuCgpFTkQKCSAgICA7OwogICAgZXNhYwpmaQpybSAtZiBtYWtlLnZlcnMKCmNhdCA+ -IFVVL2NjLmNidSA8PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBVVS9jYy5jYnUgd2lsbCBnZXQgJ2Nh -bGxlZC1iYWNrJyBieSBDb25maWd1cmUgYWZ0ZXIgaXQKIyBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIg -Zm9yIHRoZSBDIGNvbXBpbGVyIHRvIHVzZS4KCiMgSWYgdGhlIEMgY29tcGlsZXIgaXMgZ2NjOgoj -ICAgLSBjaGVjayB0aGUgZml4ZWQtaW5jbHVkZXMKIyAgIC0gY2hlY2sgYXMoMSkgYW5kIGxkKDEp -LCB0aGV5IHNob3VsZCBub3QgYmUgR05VCiMJKEdOVSBhcyBhbmQgbGQgMi44LjEgYW5kIGxhdGVy -IGFyZSByZXBvcnRlZGx5IG9rLCBob3dldmVyLikKIyBJZiB0aGUgQyBjb21waWxlciBpcyBub3Qg -Z2NjOgojICAgLSBDaGVjayBpZiBpdCBpcyB0aGUgV29ya3Nob3AvRm9ydGUgY29tcGlsZXIuCiMg -ICAgIElmIGl0IGlzLCBwcmVwYXJlIGZvciA2NCBiaXQgYW5kIGxvbmcgZG91Ymxlcy4KIyAgIC0g -Y2hlY2sgYXMoMSkgYW5kIGxkKDEpLCB0aGV5IHNob3VsZCBub3QgYmUgR05VCiMJKEdOVSBhcyBh -bmQgbGQgMi44LjEgYW5kIGxhdGVyIGFyZSByZXBvcnRlZGx5IG9rLCBob3dldmVyLikKIwojIFdh -dGNoIG91dCBpbiBjYXNlIHRoZXkgaGF2ZSBub3Qgc2V0ICRjYy4KCiMgUGVybCBjb21waWxlZCB3 -aXRoIHNvbWUgY29tYmluYXRpb25zIG9mIEdOVSBhcyBhbmQgbGQgbWF5IG5vdAojIGJlIGFibGUg -dG8gcGVyZm9ybSBkeW5hbWljIGxvYWRpbmcgb2YgZXh0ZW5zaW9ucy4gIElmIHlvdSBoYXZlIGEK -IyBwcm9ibGVtIHdpdGggZHluYW1pYyBsb2FkaW5nLCBiZSBzdXJlIHRoYXQgeW91IGFyZSB1c2lu -ZyB0aGUgU29sYXJpcwojIC91c3IvY2NzL2Jpbi9hcyBhbmQgL3Vzci9jY3MvYmluL2xkLiAgWW91 -IGNhbiBkbyB0aGF0IHdpdGgKIwlzaCBDb25maWd1cmUgLURjYz0nZ2NjIC1CL3Vzci9jY3MvYmlu -LycKIyAobm90ZSB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgcmVxdWlyZWQpLgojIENvbWJpbmF0aW9u -cyB0aGF0IGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBoaW50czoKIwojICBn -Y2MtMi43LjIsIEdOVSBhcyAyLjcsIEdOVSBsZCAyLjcKIyAgZWdjcy0xLjAuMywgR05VIGFzIDIu -OS4xIGFuZCBHTlUgbGQgMi45LjEKIwktLUFuZHkgRG91Z2hlcnR5ICA8ZG91Z2hlcmFAbGFmYXll -dHRlLmVkdT4KIwlUdWUgQXByIDEzIDE3OjE5OjQzIEVEVCAxOTk5CgojIEdldCBnY2MgdG8gc2hh -cmUgaXRzIHNlY3JldHMuCmVjaG8gJ2ludCBtYWluKCkgeyByZXR1cm4gMDsgfScgPiB0cnkuYwoJ -IyBJbmRlbnQgdG8gYXZvaWQgcHJvcGFnYXRpb24gdG8gY29uZmlnLnNoCgl2ZXJib3NlPWAke2Nj -Oi1jY30gJGNjZmxhZ3MgLXYgLW8gdHJ5IHRyeS5jIDI+JjFgCgojIFhYWCBUT0RPOiAgJ3NwZWNz -JyBvdXRwdXQgY2hhbmdlZCBmcm9tICdSZWFkaW5nIHNwZWNzIGZyb20nIGluIGdjYy1bMjNdIHRv -ICdVc2luZwojIGJ1aWx0LWluIHNwZWNzJyBpbiBnY2MtNC4gIFBlcmhhcHMgd2Ugc2hvdWxkIGp1 -c3QgdXNlIHRoZSBzYW1lIGdjYyB0ZXN0IGFzCiMgaW4gQ29uZmlndXJlIHRvIHNlZSBpZiB3ZSdy -ZSB1c2luZyBnY2MuCmlmIGVjaG8gIiR2ZXJib3NlIiB8IGVncmVwICcoUmVhZGluZyBzcGVjcyBm -cm9tKXwoVXNpbmcgYnVpbHQtaW4gc3BlY3MpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KCSMKCSMg -VXNpbmcgZ2NjLgoJIwoJY2NfbmFtZT0nZ2NjJwoKCSMgU2VlIGlmIGFzKDEpIGlzIEdOVSBhcygx -KS4gIEdOVSBhcygxKSBtaWdodCBub3Qgd29yayBmb3IgdGhpcyBqb2IuCglpZiBlY2hvICIkdmVy -Ym9zZSIgfCBncmVwICcgL3Vzci9jY3MvYmluL2FzICcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCgkg -ICAgOgoJZWxzZQoJICAgIGNhdCA8PEVORCA+JjIKCk5PVEU6IFlvdSBhcmUgdXNpbmcgR05VIGFz -KDEpLiAgR05VIGFzKDEpIG1pZ2h0IG5vdCBidWlsZCBQZXJsLiAgSWYgeW91CmhhdmUgdHJvdWJs -ZSwgeW91IGNhbiB1c2UgL3Vzci9jY3MvYmluL2FzIGJ5IGluY2x1ZGluZyAtQi91c3IvY2NzL2Jp -bi8KaW4geW91ciAke2NjOi1jY30gY29tbWFuZC4gIChOb3RlIHRoYXQgdGhlIHRyYWlsaW5nICIv -IiBpcyByZXF1aXJlZC4pCgpFTkQKCSAgICAjIEFwcGFyZW50bHkgbm90IG5lZWRlZCwgYXQgbGVh -c3QgZm9yIGFzIDIuNyBhbmQgbGF0ZXIuCgkgICAgIyBjYz0iJHtjYzotY2N9ICRjY2ZsYWdzIC1C -L3Vzci9jY3MvYmluLyIKCWZpCgoJIyBTZWUgaWYgbGQoMSkgaXMgR05VIGxkKDEpLiAgR05VIGxk -KDEpIG1pZ2h0IG5vdCB3b3JrIGZvciB0aGlzIGpvYi4KCSMgUmVjb21wdXRlICR2ZXJib3NlIHNp -bmNlIHdlIG1heSBoYXZlIGp1c3QgY2hhbmdlZCAkY2MuCgl2ZXJib3NlPWAke2NjOi1jY30gJGNj -ZmxhZ3MgLXYgLW8gdHJ5IHRyeS5jIDI+JjEgfCBncmVwIGxkIDI+JjFgCgoJaWYgZWNobyAiJHZl -cmJvc2UiIHwgZ3JlcCAnIC91c3IvY2NzL2Jpbi9sZCAnID4vZGV2L251bGwgMj4mMTsgdGhlbgoJ -ICAgICMgT2ssIGdjYyBkaXJlY3RseSBjYWxscyB0aGUgU29sYXJpcyAvdXNyL2Njcy9iaW4vbGQu -CgkgICAgOgoJZWxpZiBlY2hvICIkdmVyYm9zZSIgfCBncmVwICJsZDogU29mdHdhcmUgR2VuZXJh -dGlvbiBVdGlsaXRpZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgoJICAgICMgSG1tLiAgZ2NjIGRv -ZXNuJ3QgY2FsbCAvdXNyL2Njcy9iaW4vbGQgZGlyZWN0bHksIGJ1dCBpdAoJICAgICMgZG9lcyBh -cHBlYXIgdG8gYmUgdXNpbmcgaXQgZXZlbnR1YWxseS4gIGVnY3MtMS4wLjMncyBsZAoJICAgICMg -d3JhcHBlciBkb2VzIHRoaXMuCgkgICAgIyBNb3N0IFNvbGFyaXMgdmVyc2lvbnMgb2YgbGQgSSd2 -ZSBzZWVuIGNvbnRhaW4gdGhlIG1hZ2ljCgkgICAgIyBzdHJpbmcgdXNlZCBpbiB0aGUgZ3JlcC4K -CSAgICA6CgllbGlmIGVjaG8gIiR2ZXJib3NlIiB8IGdyZXAgIlNvbGFyaXMgTGluayBFZGl0b3Jz -IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KCSAgICAjIEhvd2V2ZXIgc29tZSBTb2xhcmlzIDggdmVy -c2lvbnMgcHJpb3IgdG8gbGQgNS44LTEuMjg2IGNvbnRhaW4KCSAgICAjIHRoaXMgc3RyaW5nIGlu -c3RlYWQuCgkgICAgOgoJZWxzZQoJICAgICMgTm8gZXZpZGVuY2UgeWV0IG9mIC91c3IvY2NzL2Jp -bi9sZC4gIFNvbWUgdmVyc2lvbnMKCSAgICAjIG9mIGVnY3MncyBsZCB3cmFwcGVyIGNhbGwgL3Vz -ci9jY3MvYmluL2xkIGluIHR1cm4gYnV0CgkgICAgIyBhcHBhcmVudGx5IGRvbid0IHJldmVhbCB0 -aGF0IHVubGVzcyB5b3UgcGFzcyBpbiAtVi4KCSAgICAjIChUaGlzIG1heSBhbGwgZGVwZW5kIG9u -IGxvY2FsIGNvbmZpZ3VyYXRpb25zIHRvby4pCgoJICAgICMgUmVjb21wdXRlIHZlcmJvc2Ugd2l0 -aCAtV2wsLXYgdG8gZmluZCBHTlUgbGQgaWYgcHJlc2VudAoJICAgIHZlcmJvc2U9YCR7Y2M6LWNj -fSAkY2NmbGFncyAtV2wsLXYgLW8gdHJ5IHRyeS5jIDI+JjEgfCBncmVwIC9sZCAyPiYxYAoKCSAg -ICBteWxkPWBlY2hvICR2ZXJib3NlIHwgYXdrICcvXC9sZC8ge3ByaW50ICQxfSdgCgkgICAgIyBU -aGlzIGFzc3VtZXMgdGhhdCBnY2MncyBvdXRwdXQgd2lsbCBub3QgY2hhbmdlLCBhbmQgdGhhdAoJ -ICAgICMgL2Z1bGwvcGF0aC90by9sZCB3aWxsIGJlIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBvdXRw -dXQuCgkgICAgIyBUaHVzIG15bGQgaXMgc29tZXRoaW5nIGxpa2UgL29wdC9nbnUvc3BhcmMtc3Vu -LXNvbGFyaXMyLjUvYmluL2xkCgoJICAgICMgQWxsb3cgdGhhdCAkbXlsZCBtYXkgYmUgJycsIGR1 -ZSB0byBjaGFuZ2VzIGluIGdjYydzIG91dHB1dAoJICAgIGlmICR7bXlsZDotbGR9IC1WIDI+JjEg -fAoJCWdyZXAgImxkOiBTb2Z0d2FyZSBHZW5lcmF0aW9uIFV0aWxpdGllcyIgPi9kZXYvbnVsbCAy -PiYxOyB0aGVuCgkJIyBPaywgL3Vzci9jY3MvYmluL2xkIGV2ZW50dWFsbHkgZG9lcyBnZXQgY2Fs -bGVkLgoJCToKCSAgICBlbGlmICR7bXlsZDotbGR9IC1WIDI+JjEgfAoJCWdyZXAgIlNvbGFyaXMg -TGluayBFZGl0b3JzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KCQkjIE9rLCAvdXNyL2Njcy9iaW4v -bGQgZXZlbnR1YWxseSBkb2VzIGdldCBjYWxsZWQuCgkJOgoJICAgIGVsc2UKCQllY2hvICJGb3Vu -ZCBHTlUgbGQ9JyRteWxkJyIgPiY0CgkJY2F0IDw8RU5EID4mMgoKTk9URTogWW91IGFyZSB1c2lu -ZyBHTlUgbGQoMSkuICBHTlUgbGQoMSkgbWlnaHQgbm90IGJ1aWxkIFBlcmwuICBJZiB5b3UKaGF2 -ZSB0cm91YmxlLCB5b3UgY2FuIHVzZSAvdXNyL2Njcy9iaW4vbGQgYnkgaW5jbHVkaW5nIC1CL3Vz -ci9jY3MvYmluLwppbiB5b3VyICR7Y2M6LWNjfSBjb21tYW5kLiAgKE5vdGUgdGhhdCB0aGUgdHJh -aWxpbmcgIi8iIGlzIHJlcXVpcmVkLikKCkkgd2lsbCB0cnkgdG8gdXNlIEdOVSBsZCBieSBwYXNz -aW5nIGluIHRoZSAtV2wsLUUgZmxhZywgYnV0IGlmIHRoYXQKZG9lc24ndCB3b3JrLCB5b3Ugc2hv -dWxkIHVzZSAtQi91c3IvY2NzL2Jpbi8gaW5zdGVhZC4KCkVORAoJCWNjZGxmbGFncz0iJGNjZGxm -bGFncyAtV2wsLUUiCgkJbGRkbGZsYWdzPSIkbGRkbGZsYWdzIC1XbCwtRSAtc2hhcmVkIgoJICAg -IGZpCglmaQoKZWxzZQoJIwoJIyBOb3QgdXNpbmcgZ2NjLgoJIwoJY2F0ID4gdHJ5LmMgPDwgJ0VP -TScKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCBtYWluKCkgewojaWYgZGVmaW5lZChfX1NVTlBST19D -KQoJcHJpbnRmKCJ3b3Jrc2hvcFxuIik7CiNlbHNlCiNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKQoJ -cHJpbnRmKCJ3b3Jrc2hvcCBDQ1xuIik7CiNlbHNlCglwcmludGYoIlxuIik7CiNlbmRpZgojZW5k -aWYKcmV0dXJuKDApOwp9CkVPTQoJdHJ5d29ya3Nob3BjYz0iJHtjYzotY2N9ICRjY2ZsYWdzIHRy -eS5jIC1vIHRyeSIKCWlmICR0cnl3b3Jrc2hvcGNjID4vZGV2L251bGwgMj4mMTsgdGhlbgoJCWNj -X25hbWU9YCRydW4gLi90cnlgCgkJaWYgdGVzdCAiJGNjX25hbWUiID0gIndvcmtzaG9wIjsgdGhl -bgoJCQljY3ZlcnNpb249ImAke2NjOi1jY30gLVYgMj4mMXxzZWQgLW4gLWUgJzFzL15bQ2NdW0Nj -OV05KjogLy9wJ2AiCgkJZmkKCQlpZiB0ZXN0ICIkY2NfbmFtZSIgPSAid29ya3Nob3AgQ0MiOyB0 -aGVuCgkJCWNjdmVyc2lvbj0iYCR7Y2M6LUNDfSAtViAyPiYxfHNlZCAtbiAtZSAnMXMvXltDY11b -Q106IC8vcCdgIgoJCWZpCgkJY2FzZSAiJGNjX25hbWUiIGluCgkJd29ya3Nob3AqKQoJCQkjIFNl -dHRpbmdzIGZvciBlaXRoZXIgY2Mgb3IgQ0MKCQkJaWYgdGVzdCAhICIkdXNlNjRiaXRhbGxfZG9u -ZSI7IHRoZW4KCQkJCWxvY2xpYnB0aD0iL3Vzci9saWIgL3Vzci9jY3MvbGliIGAkZ2V0d29ya3No -b3BsaWJzYCAkbG9jbGlicHRoIgoJCQlmaQoJCQkjIFN1biBDQy9jYyBkb24ndCBzdXBwb3J0IGdj -YyBhdHRyaWJ1dGVzCgkJCWRfYXR0cmlidXRlX2Zvcm1hdD0ndW5kZWYnCgkJCWRfYXR0cmlidXRl -X21hbGxvYz0ndW5kZWYnCgkJCWRfYXR0cmlidXRlX25vbm51bGw9J3VuZGVmJwoJCQlkX2F0dHJp -YnV0ZV9ub3JldHVybj0ndW5kZWYnCgkJCWRfYXR0cmlidXRlX3B1cmU9J3VuZGVmJwoJCQlkX2F0 -dHJpYnV0ZV91bnVzZWQ9J3VuZGVmJwoJCQlkX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHQ9 -J3VuZGVmJwoJCQljYXNlICIkY2MiIGluCgkJCSpjOTkpCSMgYzk5IHJlamVjdHMgYmFyZSAnLU8n -LgoJCQkJY2FzZSAiJG9wdGltaXplIiBpbgoJCQkJJyd8LU8pIG9wdGltaXplPS1PMyA7OwoJCQkJ -ZXNhYwoJCQkJIyBXaXRob3V0IC1YYSBjOTkgZG9lc24ndCBzZWUKCQkJCSMgbWFueSBPUyBpbnRl -cmZhY2VzLgoJCQkJY2FzZSAiJGNjZmxhZ3MiIGluCgkJCQkqLVhhKikJOzsKCQkJCSopIGNjZmxh -Z3M9IiRjY2ZsYWdzIC1YYSIgOzsKCQkJCWVzYWMKCQkJCTs7CgkJCWVzYWMKCQkJOzsKCQllc2Fj -CglmaQoKCSMgU2VlIGlmIGFzKDEpIGlzIEdOVSBhcygxKS4gIEdOVSBtaWdodCBub3Qgd29yayBm -b3IgdGhpcyBqb2IuCgljYXNlIGBhcyAtLXZlcnNpb24gPCAvZGV2L251bGwgMj4mMWAgaW4KCSpH -TlUqKQoJCWNhdCA8PEVORCA+JjIKCk5PVEU6IFlvdSBhcmUgdXNpbmcgR05VIGFzKDEpLiAgR05V -IGFzKDEpIG1pZ2h0IG5vdCBidWlsZCBQZXJsLgpZb3UgbXVzdCBhcnJhbmdlIHRvIHVzZSAvdXNy -L2Njcy9iaW4vYXMsIHBlcmhhcHMgYnkgYWRkaW5nIC91c3IvY2NzL2Jpbgp0byB0aGUgYmVnaW5u -aW5nIG9mIHlvdXIgUEFUSC4KCkVORAoJCTs7Cgllc2FjCgoJIyBTZWUgaWYgbGQoMSkgaXMgR05V -IGxkKDEpLiAgR05VIGxkKDEpIG1pZ2h0IG5vdCB3b3JrIGZvciB0aGlzIGpvYi4KCSMgbGQgLS12 -ZXJzaW9uIGRvZXNuJ3QgcHJvcGVybHkgcmVwb3J0IGl0c2VsZiBhcyBhIEdOVSB0b29sLAoJIyBh -cyBvZiBsZCB2ZXJzaW9uIDIuNiwgc28gd2UgbmVlZCB0byBiZSBtb3JlIHN0cmljdC4gVFdQIDkv -NS85NgoJIyBTdW4ncyBsZCBhbHdheXMgZW1pdHMgdGhlICJTb2Z0d2FyZSBHZW5lcmF0aW9uIFV0 -aWxpdGllcyIgc3RyaW5nLgoJaWYgbGQgLVYgMj4mMSB8IGdyZXAgImxkOiBTb2Z0d2FyZSBHZW5l -cmF0aW9uIFV0aWxpdGllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCgkgICAgIyBPaywgbGQgaXMg -L3Vzci9jY3MvYmluL2xkLgoJICAgIDoKCWVsc2UKCSAgICBjYXQgPDxFTkQgPiYyCgpOT1RFOiBZ -b3UgYXJlIGFwcGFyZW50bHkgdXNpbmcgR05VIGxkKDEpLiAgR05VIGxkKDEpIG1pZ2h0IG5vdCBi -dWlsZCBQZXJsLgpZb3Ugc2hvdWxkIGFycmFuZ2UgdG8gdXNlIC91c3IvY2NzL2Jpbi9sZCwgcGVy -aGFwcyBieSBhZGRpbmcgL3Vzci9jY3MvYmluCnRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBQQVRI -LgoKRU5ECglmaQpmaQoKIyBhcyAtLXZlcnNpb24gb3IgbGQgLS12ZXJzaW9uIG1pZ2h0IGR1bXAg -Y29yZS4Kcm0gLWYgdHJ5IHRyeS5jIGNvcmUKRU9DQlUKCmNhdCA+IFVVL3VzZXRocmVhZHMuY2J1 -IDw8J0VPQ0JVJwojIFRoaXMgc2NyaXB0IFVVL3VzZXRocmVhZHMuY2J1IHdpbGwgZ2V0ICdjYWxs -ZWQtYmFjaycgYnkgQ29uZmlndXJlCiMgYWZ0ZXIgaXQgaGFzIHByb21wdGVkIHRoZSB1c2VyIGZv -ciB3aGV0aGVyIHRvIHVzZSB0aHJlYWRzLgpjYXNlICIkdXNldGhyZWFkcyIgaW4KJGRlZmluZXx0 -cnVlfFt5WV0qKQoJY2NmbGFncz0iLURfUkVFTlRSQU5UICRjY2ZsYWdzIgoKCSMgLWxwdGhyZWFk -IG92ZXJyaWRlcyBzb21lIGxpYiBDIGZ1bmN0aW9ucywgc28gcHV0IGl0IGJlZm9yZSBjLgoJc2V0 -IGBlY2hvIFggIiRsaWJzd2FudGVkICJ8IHNlZCAtZSAicy8gYyAvIHB0aHJlYWQgYyAvImAKCXNo -aWZ0CglsaWJzd2FudGVkPSIkKiIKCgkjIHNjaGVkX3lpZWxkIGlzIGF2YWlsYWJsZSBpbiB0aGUg -LWxydCBsaWJyYXJ5LiAgSG93ZXZlciwKCSMgd2UgY2FuIGFsc28gcGljayB1cCB0aGUgZXF1aXZh -bGVudCB5aWVsZCgpIGZ1bmN0aW9uIGluIHRoZQoJIyBub3JtYWwgQyBsaWJyYXJ5LiAgVG8gYXZv -aWQgcHVsbGluZyBpbiB1bm5lY2Vzc2FyeQoJIyBsaWJyYXJpZXMsIHdlJ2xsIG5vcm1hbGx5IGF2 -b2lkIHNjaGVkX3lpZWxkKCkvLWxydCBhbmQKCSMganVzdCB1c2UgeWllbGQoKS4gIEhvd2V2ZXIs -IHdlJ2xsIGhvbm9yIGEgY29tbWFuZC1saW5lCgkjIG92ZXJyaWRlIDogIi1Ec2NoZWRfeWllbGQ9 -c2NoZWRfeWllbGQiLgoJIyBJZiB3ZSBlbmQgdXAgdXNpbmcgc2NoZWRfeWllbGQsIHdlJ3JlIGdv -aW5nIHRvIG5lZWQgLWxydC4KCXNjaGVkX3lpZWxkPSR7c2NoZWRfeWllbGQ6LXlpZWxkfQoJaWYg -dGVzdCAiJHNjaGVkX3lpZWxkIiA9ICJzY2hlZF95aWVsZCI7IHRoZW4KCSAgICBzZXQgYGVjaG8g -WCAiJGxpYnN3YW50ZWQgInwgc2VkIC1lICJzLyBwdGhyZWFkIC8gcnQgcHRocmVhZCAvImAKCSAg -ICBzaGlmdAoJICAgIGxpYnN3YW50ZWQ9IiQqIgoJZmkKCgkjIE9uIFNvbGFyaXMgMi42IHg4NiB0 -aGVyZSBpcyBhIGJ1ZyB3aXRoIHNpZ3NldGptcCgpIGFuZCBzaWdsb25nam1wKCkKCSMgd2hlbiBs -aW5rZWQgd2l0aCB0aGUgdGhyZWFkcyBsaWJyYXJ5LCBzdWNoIHRoYXQgd2hhdGV2ZXIgcG9zaXRp -dmUKCSMgdmFsdWUgeW91IHBhc3MgdG8gc2lnbG9uZ2ptcCgpLCBzaWdzZXRqbXAoKSByZXR1cm5z -IDEuCgkjIFRoYW5rcyB0byBTaW1vbiBQYXJzb25zIDxTLlBhcnNvbnNAZnRlbC5jby51az4gZm9y -IHRoaXMgcmVwb3J0LgoJIyBTdW4gQnVnSUQgaXMgNDExNzk0NiwgInNpZ3NldGptcCBhbHdheXMg -cmV0dXJucyAxIHdoZW4gY2FsbGVkIGJ5CgkjIHNpZ2xvbmdqbXAgaW4gYSBNVCBwcm9ncmFtIi4g -QXMgb2YgMTk5ODA2MjIsIHRoZXJlIGlzIG5vIHBhdGNoCgkjIGF2YWlsYWJsZS4KCWNhdCA+dHJ5 -LmMgPDwnRU9NJwoJLyogVGVzdCBmb3Igc2lnKHNldHxsb25nKWptcCBidWcuICovCgkjaW5jbHVk -ZSA8c2V0am1wLmg+CgoJaW50IG1haW4oKQoJewoJICAgIHNpZ2ptcF9idWYgZW52OwoJICAgIGlu -dCByZXQ7CgoJICAgIHJldCA9IHNpZ3NldGptcChlbnYsIDEpOwoJICAgIGlmIChyZXQpIHsgcmV0 -dXJuIHJldCA9PSAyOyB9CgkgICAgc2lnbG9uZ2ptcChlbnYsIDIpOwoJfQpFT00KCWlmIHRlc3Qg -ImBhcmNoYCIgPSBpODZwYyAtYSBgdW5hbWUgLXJgID0gNS42ICYmIFwKCSAgICR7Y2M6LWNjfSB0 -cnkuYyAtbHB0aHJlYWQgPi9kZXYvbnVsbCAyPiYxICYmIC4vYS5vdXQ7IHRoZW4KCSAgICBkX3Np -Z3NldGptcD0kdW5kZWYKCWZpCgoJIyBUaGVzZSBwcm90b3R5cGVzIHNob3VsZCBiZSB2aXNpYmxl -IHNpbmNlIHdlIHVzaW5nCgkjIC1EX1JFRU5UUkFOVCwgYnV0IHRoYXQgZG9lcyBub3Qgc2VlbSB0 -byB3b3JrLgoJIyBJdCBkb2VzIHNlZW0gdG8gd29yayBmb3IgZ2V0bmV0YnlhZGRyX3IsIHdlaXJk -bHkgZW5vdWdoLAoJIyBhbmQgb3RoZXIgX3IgZnVuY3Rpb25zLiAoU29sYXJpcyA4KQoKCWRfY3Rl -cm1pZF9yX3Byb3RvPSIkZGVmaW5lIgoJZF9nZXRob3N0YnlhZGRyX3JfcHJvdG89IiRkZWZpbmUi -CglkX2dldGhvc3RieW5hbWVfcl9wcm90bz0iJGRlZmluZSIKCWRfZ2V0bmV0YnluYW1lX3JfcHJv -dG89IiRkZWZpbmUiCglkX2dldHByb3RvYnluYW1lX3JfcHJvdG89IiRkZWZpbmUiCglkX2dldHBy -b3RvYnludW1iZXJfcl9wcm90bz0iJGRlZmluZSIKCWRfZ2V0c2VydmJ5bmFtZV9yX3Byb3RvPSIk -ZGVmaW5lIgoJZF9nZXRzZXJ2Ynlwb3J0X3JfcHJvdG89IiRkZWZpbmUiCgoJIyBEaXR0by4gKFNv -bGFyaXMgNykKCWRfcmVhZGRpcl9yX3Byb3RvPSIkZGVmaW5lIgoJZF9yZWFkZGlyNjRfcl9wcm90 -bz0iJGRlZmluZSIKCWRfdG1wbmFtX3JfcHJvdG89IiRkZWZpbmUiCglkX3R0eW5hbWVfcl9wcm90 -bz0iJGRlZmluZSIKCgk7Owplc2FjCkVPQ0JVCgpjYXQgPiBVVS91c2VsYXJnZWZpbGVzLmNidSA8 -PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBVVS91c2VsYXJnZWZpbGVzLmNidSB3aWxsIGdldCAnY2Fs -bGVkLWJhY2snIGJ5IENvbmZpZ3VyZQojIGFmdGVyIGl0IGhhcyBwcm9tcHRlZCB0aGUgdXNlciBm -b3Igd2hldGhlciB0byB1c2UgbGFyZ2UgZmlsZXMuCmNhc2UgIiR1c2VsYXJnZWZpbGVzIiBpbgon -J3wkZGVmaW5lfHRydWV8W3lZXSopCgojIEtlZXAgdGhlc2UgaW4gdGhlIGxlZnQgbWFyZ2luLgpj -Y2ZsYWdzX3VzZWxhcmdlZmlsZXM9ImAkcnVuIGdldGNvbmYgTEZTX0NGTEFHUyAyPi9kZXYvbnVs -bGAiCmxkZmxhZ3NfdXNlbGFyZ2VmaWxlcz0iYCRydW4gZ2V0Y29uZiBMRlNfTERGTEFHUyAyPi9k -ZXYvbnVsbGAiCmxpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0iYCRydW4gZ2V0Y29uZiBMRlNfTElC -UyAyPi9kZXYvbnVsbHxzZWQgLWUgJ3NAXi1sQEAnIC1lICdzQCAtbEAgQGcnYCIKCiAgICBjY2Zs -YWdzPSIkY2NmbGFncyAkY2NmbGFnc191c2VsYXJnZWZpbGVzIgogICAgbGRmbGFncz0iJGxkZmxh -Z3MgJGxkZmxhZ3NfdXNlbGFyZ2VmaWxlcyIKICAgIGxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkICRs -aWJzd2FudGVkX3VzZWxhcmdlZmlsZXMiCiAgICA7Owplc2FjCkVPQ0JVCgojIFRoaXMgaXMgdHJ1 -bHkgYSBtZXNzLgpjYXNlICIkdXNlbW9yZWJpdHMiIGluCiIkZGVmaW5lInx0cnVlfFt5WV0qKQoJ -dXNlNjRiaXRpbnQ9IiRkZWZpbmUiCgl1c2Vsb25nZG91YmxlPSIkZGVmaW5lIgoJOzsKZXNhYwoK -aWYgdGVzdCBgJHJ1biB1bmFtZSAtcGAgPSBpMzg2OyB0aGVuCiAgICBjYXNlICIkdXNlNjRiaXRp -bnQiIGluCiAgICAiJGRlZmluZSJ8dHJ1ZXxbeVldKikKICAgICAgICAgICAgY2NmbGFncz0iJGNj -ZmxhZ3MgLURQVFJfSVNfTE9ORyIKICAgICAgICAgICAgOzsKICAgIGVzYWMKZmkKCmlmIHRlc3Qg -YCRydW4gdW5hbWUgLXBgID0gc3BhcmMgLW8gYCRydW4gdW5hbWUgLXBgID0gaTM4NjsgdGhlbgog -ICAgY2F0ID4gVVUvdXNlNjRiaXRpbnQuY2J1IDw8J0VPQ0JVJwojIFRoaXMgc2NyaXB0IFVVL3Vz -ZTY0Yml0aW50LmNidSB3aWxsIGdldCAnY2FsbGVkLWJhY2snIGJ5IENvbmZpZ3VyZQojIGFmdGVy -IGl0IGhhcyBwcm9tcHRlZCB0aGUgdXNlciBmb3Igd2hldGhlciB0byB1c2UgNjQgYml0IGludGVn -ZXJzLgpjYXNlICIkdXNlNjRiaXRpbnQiIGluCiIkZGVmaW5lInx0cnVlfFt5WV0qKQoJICAgIGNh -c2UgImAkcnVuIHVuYW1lIC1yYCIgaW4KCSAgICA1LlswLTRdKQoJCWNhdCA+JjQgPDxFT00KU29s -YXJpcyBgdW5hbWUgLXJ8c2VkIC1lICdzL141XC4vMi4vJ2AgZG9lcyBub3Qgc3VwcG9ydCA2NC1i -aXQgaW50ZWdlcnMuCllvdSBzaG91bGQgdXBncmFkZSB0byBhdCBsZWFzdCBTb2xhcmlzIDIuNS4K -RU9NCgkJZXhpdCAxCgkJOzsKCSAgICBlc2FjCgojIGdjYy0yLjguMSBvbiBTb2xhcmlzIDggd2l0 -aCAtRHVzZTY0Yml0aW50IGZhaWxzIG9wL3BhdC50IHRlc3QgODIyCiMgaWYgd2UgY29tcGlsZSBy -ZWdleGVjLmMgd2l0aCAtTy4gIFR1cm4gb2ZmIG9wdGltaXphdGlvbiBmb3IgdGhhdCBvbmUKIyBm -aWxlLiAgU2VlIGhpbnRzL1JFQURNRS5oaW50cyAsIGVzcGVjaWFsbHkKIyA9aGVhZDIgUHJvcGFn -YXRpbmcgdmFyaWFibGVzIHRvIGNvbmZpZy5zaCwgbWV0aG9kIDMuCiMgIEEuIERvdWdoZXJ0eSAg -TWF5IDI0LCAyMDAyCiAgICBjYXNlICIke2djY3ZlcnNpb259LSR7b3B0aW1pemV9IiBpbgogICAg -Mi44Ki1PKikKCSMgSG9ub3IgYSBjb21tYW5kLWxpbmUgb3ZlcnJpZGUgKHJhdGhlciB1bmxpa2Vs -eSkKCWNhc2UgIiRyZWdleGVjX2NmbGFncyIgaW4KCScnKSBlY2hvICJEaXNhYmxpbmcgb3B0aW1p -emF0aW9uIG9uIHJlZ2V4ZWMuYyBmb3IgZ2NjICRnY2N2ZXJzaW9uIiA+JjQKCSAgICByZWdleGVj -X2NmbGFncz0nb3B0aW1pemU9JwoJICAgIGVjaG8gInJlZ2V4ZWNfY2ZsYWdzPSdvcHRpbWl6ZT1c -IlwiJyIgPj4gY29uZmlnLnNoCgkgICAgOzsKCWVzYWMKCTs7CiAgICBlc2FjCiAgICA7Owplc2Fj -CkVPQ0JVCgogICAgY2F0ID4gVVUvdXNlNjRiaXRhbGwuY2J1IDw8J0VPQ0JVJwojIFRoaXMgc2Ny -aXB0IFVVL3VzZTY0Yml0YWxsLmNidSB3aWxsIGdldCAnY2FsbGVkLWJhY2snIGJ5IENvbmZpZ3Vy -ZQojIGFmdGVyIGl0IGhhcyBwcm9tcHRlZCB0aGUgdXNlciBmb3Igd2hldGhlciB0byBiZSBtYXhp -bWFsbHkgNjQgYml0dHkuCmNhc2UgIiR1c2U2NGJpdGFsbC0kdXNlNjRiaXRhbGxfZG9uZSIgaW4K -IiRkZWZpbmUtInx0cnVlLXxbeVldKi0pCgkgICAgY2FzZSAiYCRydW4gdW5hbWUgLXJgIiBpbgoJ -ICAgIDUuWzAtNl0pCgkJY2F0ID4mNCA8PEVPTQpTb2xhcmlzIGB1bmFtZSAtcnxzZWQgLWUgJ3Mv -XjVcLi8yLi8nYCBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCBwb2ludGVycy4KWW91IHNob3VsZCB1 -cGdyYWRlIHRvIGF0IGxlYXN0IFNvbGFyaXMgMi43LgpFT00KCQlleGl0IDEKCQk7OwoJICAgIGVz -YWMKCSAgICBwcm9jZXNzb3I9YCRydW4gdW5hbWUgLXBgOwoJICAgIGlmIHRlc3QgIiRwcm9jZXNz -b3IiID0gc3BhcmM7IHRoZW4KCQlsaWJjPScvdXNyL2xpYi9zcGFyY3Y5L2xpYmMuc28nCgkJaWYg -dGVzdCAhIC1mICRsaWJjOyB0aGVuCgkJICAgIGNhdCA+JjQgPDxFT00KCkkgZG8gbm90IHNlZSB0 -aGUgNjQtYml0IGxpYmMsICRsaWJjLgpDYW5ub3QgY29udGludWUsIGFib3J0aW5nLgoKRU9NCgkJ -ICAgIGV4aXQgMQoJCWZpCgkgICAgZmkKCSAgICBjYXNlICIke2NjOi1jY30gLXYgMj4vZGV2L251 -bGwiIGluCgkgICAgKmdjYyp8KmcrKyopCgkJZWNobyAnaW50IG1haW4oKSB7IHJldHVybiAwOyB9 -JyA+IHRyeS5jCgkJY2FzZSAiYCR7Y2M6LWNjfSAkY2NmbGFncyAtbWNwdT12OSAtbTY0IC1TIHRy -eS5jIDI+JjEgfCBncmVwICdtNjQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbmZpZ3VyYXRp -b24nYCIgaW4KCQkqIm02NCBpcyBub3Qgc3VwcG9ydGVkIiopCgkJICAgIGNhdCA+JjQgPDxFT00K -CkZ1bGwgNjQtYml0IGJ1aWxkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBnY2MgY29uZmlndXJh -dGlvbi4KQ2hlY2sgaHR0cDovL2djYy5nbnUub3JnLyBmb3IgdGhlIGxhdGVzdCBuZXdzIG9mIGF2 -YWlsYWJpbGl0eQpvZiBnY2MgZm9yIDY0LWJpdCBTcGFyYy4KCkNhbm5vdCBjb250aW51ZSwgYWJv -cnRpbmcuCgpFT00KCQkgICAgZXhpdCAxCgkJICAgIDs7CgkJZXNhYwoJCWlmIHRlc3QgIiRwcm9j -ZXNzb3IiID0gc3BhcmM7IHRoZW4KCQkgICAgbG9jbGlicHRoPSIvdXNyL2xpYi9zcGFyY3Y5ICRs -b2NsaWJwdGgiCgkJICAgIGNjZmxhZ3M9IiRjY2ZsYWdzIC1tY3B1PXY5IgoJCWZpCgkJY2NmbGFn -cz0iJGNjZmxhZ3MgLW02NCIKCgkJIyBUaGlzIGFkZHMgaW4gLVdhLC14YXJjaD12OS4gIEkgc3Vz -cGVjdCB0aGF0J3Mgc3VwZXJmbHVvdXMsCgkJIyBzaW5jZSB0aGUgLW02NCBhYm92ZSBzaG91bGQg -ZG8gdGhhdCBhbHJlYWR5LiAgU29tZW9uZQoJCSMgd2l0aCBnY2MtMy54LngsIHBsZWFzZSB0ZXN0 -IHdpdGggZ2NjIC12LiAgIEEuRC4gMjAtTm92LTIwMDMKIwkJaWYgdGVzdCAkcHJvY2Vzc29yID0g -c3BhcmMgLWEgWGAkcnVuIGdldGNvbmYgWEJTNV9MUDY0X09GRjY0X0NGTEFHUyAyPi9kZXYvbnVs -bGAgIT0gWDsgdGhlbgojCQkgICAgY2NmbGFncz0iJGNjZmxhZ3MgLVdhLGAkcnVuIGdldGNvbmYg -WEJTNV9MUDY0X09GRjY0X0NGTEFHUyAyPi9kZXYvbnVsbGAiCiMJCWZpCgkJbGRmbGFncz0iJGxk -ZmxhZ3MgLW02NCIKCgkJIyBTZWUgW3BlcmwgIzY2NjA0XTogIE9uIFNvbGFyaXMgMTEsIGdjYyAt -bTY0IG9uIGFtZDY0CgkJIyBhcHBlYXJzIG5vdCB0byB1bmRlcnN0YW5kIC1HLiAgKGdjYyAtRyBo -YXMgbm90IGNhdXNlZAoJCSMgcHJvYmxlbXMgb24gb3RoZXIgcGxhdGZvcm1zIGluIHRoZSBwYXN0 -LikgIGdjYyB2ZXJzaW9ucwoJCSMgYXQgbGVhc3QgYXMgb2xkIGFzIDMuNC4zIHN1cHBvcnQgLXNo -YXJlZCwgc28ganVzdAoJCSMgdXNlIHRoYXQgd2l0aCBTb2xhcmlzIDExIGFuZCBsYXRlciwgYnV0 -IGtlZXAKCQkjIHRoZSBvbGQgYmVoYXZpb3IgZm9yIG9sZGVyIFNvbGFyaXMgdmVyc2lvbnMuCgkJ -Y2FzZSAiJG9zdmVycyIgaW4KCQkJMi4/fDIuMTApIGxkZGxmbGFncz0iJGxkZGxmbGFncyAtRyAt -bTY0IiA7OwoJCQkqKSBsZGRsZmxhZ3M9IiRsZGRsZmxhZ3MgLXNoYXJlZCAtbTY0IiA7OwoJCWVz -YWMKCQk7OwoJICAgICopCgkJZ2V0Y29uZmNjZmxhZ3M9ImAkcnVuIGdldGNvbmYgWEJTNV9MUDY0 -X09GRjY0X0NGTEFHUyAyPi9kZXYvbnVsbGAiCgkJZ2V0Y29uZmxkZmxhZ3M9ImAkcnVuIGdldGNv -bmYgWEJTNV9MUDY0X09GRjY0X0xERkxBR1MgMj4vZGV2L251bGxgIgoJCWdldGNvbmZsZGRsZmxh -Z3M9ImAkcnVuIGdldGNvbmYgWEJTNV9MUDY0X09GRjY0X0xERkxBR1MgMj4vZGV2L251bGxgIgoJ -CWVjaG8gImludCBtYWluKCkgeyByZXR1cm4oMCk7IH0gIiA+IHRyeS5jCgkJY2FzZSAiYCR7Y2M6 -LWNjfSAkZ2V0Y29uZmNjZmxhZ3MgdHJ5LmMgMj4mMSB8IGdyZXAgJ2RlcHJlY2F0ZWQnYCIgaW4K -CQkqIiAteGFyY2g9Z2VuZXJpYzY0IGlzIGRlcHJlY2F0ZWQsIHVzZSAtbTY0ICIqKQoJCSAgICBn -ZXRjb25mY2NmbGFncz1gZWNobyAkZ2V0Y29uZmNjZmxhZ3MgfCBzZWQgLWUgJ3MveGFyY2g9Z2Vu -ZXJpYzY0L202NC8nYAoJCSAgICBnZXRjb25mbGRmbGFncz1gZWNobyAkZ2V0Y29uZmxkZmxhZ3Mg -fCBzZWQgLWUgJ3MveGFyY2g9Z2VuZXJpYzY0L202NC8nYAoJCSAgICBnZXRjb25mbGRkbGZsYWdz -PWBlY2hvICRnZXRjb25mbGRkbGZsYWdzIHwgc2VkIC1lICdzL3hhcmNoPWdlbmVyaWM2NC9tNjQv -J2AKCQkgICAgOzsKCQllc2FjCgkJY2NmbGFncz0iJGNjZmxhZ3MgJGdldGNvbmZjY2ZsYWdzIgoJ -CWxkZmxhZ3M9IiRsZGZsYWdzICRnZXRjb25mbGRmbGFncyIKCQlsZGRsZmxhZ3M9IiRsZGRsZmxh -Z3MgLUcgJGdldGNvbmZsZGRsZmxhZ3MiCgoJCWVjaG8gImludCBtYWluKCkgeyByZXR1cm4oMCk7 -IH0gIiA+IHRyeS5jCgkJdHJ5d29ya3Nob3BjYz0iJHtjYzotY2N9IHRyeS5jIC1vIHRyeSAkY2Nm -bGFncyIKCQlpZiB0ZXN0ICIkcHJvY2Vzc29yIiA9IHNwYXJjOyB0aGVuCgkJICAgIGxvY2xpYnB0 -aD0iL3Vzci9saWIvc3BhcmN2OSAvdXNyL2Njcy9saWIvc3BhcmN2OSAkbG9jbGlicHRoIgoJCWZp -CgkJbG9jbGlicHRoPSJgJGdldHdvcmtzaG9wbGlic2AgJGxvY2xpYnB0aCIKCQk7OwoJICAgIGVz -YWMKCSAgICB1bnNldCBwcm9jZXNzb3IKCSAgICB1c2U2NGJpdGFsbF9kb25lPXllcwoJICAgIGFy -Y2huYW1lNjQ9NjQKCSAgICA7Owplc2FjCkVPQ0JVCgogICAgIyBBY3R1YWxseSwgd2Ugd2FudCB0 -byBydW4gdGhpcyBhbHJlYWR5IG5vdywgaWYgc28gcmVxdWVzdGVkLAogICAgIyBiZWNhdXNlIHdl -IG5lZWQgdG8gZml4IHVwIHRoaW5ncyByaWdodCBub3cuCiAgICBjYXNlICIkdXNlNjRiaXRhbGwi -IGluCiAgICAiJGRlZmluZSJ8dHJ1ZXxbeVldKikKCSMgQ0JVcyBleHBlY3QgdG8gYmUgcnVuIGlu -IFVVCgljZCBVVTsgLiAuL3VzZTY0Yml0YWxsLmNidTsgY2QgLi4KCTs7CiAgICBlc2FjCmZpCgpj -YXQgPiBVVS91c2Vsb25nZG91YmxlLmNidSA8PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBVVS91c2Vs -b25nZG91YmxlLmNidSB3aWxsIGdldCAnY2FsbGVkLWJhY2snIGJ5IENvbmZpZ3VyZQojIGFmdGVy -IGl0IGhhcyBwcm9tcHRlZCB0aGUgdXNlciBmb3Igd2hldGhlciB0byB1c2UgbG9uZyBkb3VibGVz -LgpjYXNlICIkdXNlbG9uZ2RvdWJsZSIgaW4KIiRkZWZpbmUifHRydWV8W3lZXSopCglpZiB0ZXN0 -ICIkY2NfbmFtZSIgPSAid29ya3Nob3AiOyB0aGVuCgkJY2F0ID4gdHJ5LmMgPDwgJ0VPTScKI2lu -Y2x1ZGUgPHN1bm1hdGguaD4KaW50IG1haW4oKSB7ICh2b2lkKSBwb3dsKDIsIDI1Nik7IHJldHVy -bigwKTsgfQpFT00KCQlpZiAke2NjOi1jY30gdHJ5LmMgLWxzdW5tYXRoIC1vIHRyeSA+IC9kZXYv -bnVsbCAyPiYxICYmIC4vdHJ5OyB0aGVuCgkJCWxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHN1bm1h -dGgiCgkJZmkKCWVsc2UKCQljYXQgPiY0IDw8RU9NCgpUaGUgU3VuIFdvcmtzaG9wIG1hdGggbGli -cmFyeSBpcyBlaXRoZXIgbm90IGF2YWlsYWJsZSBvciBub3Qgd29ya2luZywKc28gSSBkbyBub3Qg -a25vdyBob3cgdG8gZG8gbG9uZyBkb3VibGVzLCBzb3JyeS4KSSdtIHRoZXJlZm9yZSBkaXNhYmxp -bmcgdGhlIHVzZSBvZiBsb25nIGRvdWJsZXMuCkVPTQoJCXVzZWxvbmdkb3VibGU9IiR1bmRlZiIK -CWZpCgk7Owplc2FjCkVPQ0JVCgojCiMgSWYgdW5zZXRlbnYgaXMgYXZhaWxhYmxlLCB1c2UgaXQg -aW4gY29uanVuY3Rpb24gd2l0aCBQRVJMX1VTRV9TQUZFX1BVVEVOViB0bwojIHdvcmsgYXJvdW5k -IFN1biBidWdpZCA2MzMzODMwLiAgQm90aCB1bnNldGVudiBhbmQgNjMzMzgzMCBvbmx5IGFwcGVh -ciBpbgojIFNvbGFyaXMgMTAsIHNvIHdlIGRvbid0IG5lZWQgdG8gcHJvYmUgZXhwbGljaXRseSBm -b3IgYW4gT1MgdmVyc2lvbi4gIFdlIGhhdmUKIyB0byBhcHBlbmQgdGhpcyB0ZXN0IHRvIHRoZSBl -bmQgb2YgY29uZmlnLm92ZXIgYXMgaXQgbmVlZHMgdG8gcnVuIGFmdGVyCiMgQ29uZmlndXJlIGhh -cyBwcm9iZWQgZm9yIHVuc2V0ZW52LCBhbmQgdGhpcyBoaW50cyBmaWxlIGlzIHByb2Nlc3NlZCBi -ZWZvcmUKIyB0aGF0IGhhcyBoYXBwZW5lZC4KIwpjYXQgPj4gY29uZmlnLm92ZXIgPDwnRU9PVkVS -JwppZiB0ZXN0ICIkZF91bnNldGVudiIgPSAiJGRlZmluZSIgLWEgXAogICAgYGV4cHIgIiRjY2Zs -YWdzIiA6ICcuKi1EUEVSTF9VU0VfU0FGRV9QVVRFTlYnYCAtZXEgMDsgdGhlbgogICAgICAgIGNj -ZmxhZ3M9IiRjY2ZsYWdzIC1EUEVSTF9VU0VfU0FGRV9QVVRFTlYiCmZpCkVPT1ZFUgoKcm0gLWYg -dHJ5LmMgdHJ5Lm8gdHJ5IGEub3V0CgojIElmIHVzaW5nIEMrKywgdGhlIENvbmZpZ3VyZSBzY2Fu -IGZvciBkbG9wZW4oKSB3aWxsIGZhaWwgaW4gU29sYXJpcwojIGJlY2F1c2Ugb25lIG9mIHRoZSB0 -d28gKDEpIGFuIGV4dGVybiAiQyIgbGlua2FnZSBkZWZpbml0aW9uIGlzIG5lZWRlZAojICgyKSAj -aW5jbHVkZSA8ZGxmY24uaD4gaXMgbmVlZGVkLCAqYW5kKiBhIGNhc3QgdG8gKHZvaWQqKCopKCkp -CiMgaXMgbmVlZGVkIGZvciB0aGUgJmRsb3Blbi4gIEFkZGluZyBhbnkgb2YgdGhlc2Ugd291bGQg -cmVxdWlyZSBjaGFuZ2luZwojIGEgZGVsaWNhdGUgc3BvdCBpbiBDb25maWd1cmUsIHNvIGVhc2ll -ciBqdXN0IHRvIGZvcmNlIG91ciBndWVzcyBoZXJlCiMgZm9yIFNvbGFyaXMuICBNdWNoIHRoZSBz -YW1lIGdvZXMgZm9yIGRsZXJyb3IoKS4KY2FzZSAiJGNjIiBpbgoqZysrKnwqQ0MqKQogIGRfZGxv -cGVuPSdkZWZpbmUnCiAgZF9kbGVycm9yPSdkZWZpbmUnCiAgOzsKZXNhYwoKIyBPcmFjbGUvU3Vu -IGJ1aWxkcyB0aGVpciBQZXJsIHNoYXJlZCBzaW5jZSA1LjYuMSwgYW5kIHRoZXkgYWxzbwojIHN0 -cm9uZ2x5IHJlY29tbWVuZCB1c2luZyBzaGFyZWQgbGlicmFyaWVzIGluIGdlbmVyYWwuCiMKIyBG -dXJ0aGVybW9yZSwgT3BlbkluZGlhbmEgc2VlbXMgdG8gZWZmZWN0aXZlbHkgcmVxdWlyZSBidWls -ZGluZyBwZXJsCiMgc2hhcmVkLCBvciBvdGhlcndpc2UgcGVybCBzY3JpcHRzIHdvbid0IGV2ZW4g -ZmluZCB0aGUgUGVybCBsaWJyYXJ5Lgp1c2VzaHJwbGliPSd0cnVlJwo=', +CiMgQWRkIGxpYm5zbCBmb3IgbmV0d29ya2luZyBzdXBwb3J0CnNldCBgZWNobyAiICRsaWJzd2Fu +dGVkICIgfCBzZWQgLWUgJ3NAIGluZXQgQCBpbmV0IG5zbCBAJ2AKbGlic3dhbnRlZD0iJCoiCgoj +IExvb2sgZm9yIGFyY2hpdGVjdHVyZSBuYW1lLiAgV2Ugd2FudCB0byBzdWdnZXN0IGEgdXNlZnVs +IGRlZmF1bHQuCmNhc2UgIiRhcmNobmFtZSIgaW4KJycpCiAgICBpZiB0ZXN0IC1mIC91c3IvYmlu +L2FyY2g7IHRoZW4KCWFyY2huYW1lPWAvdXNyL2Jpbi9hcmNoYAoJYXJjaG5hbWU9IiR7YXJjaG5h +bWV9LSR7b3NuYW1lfSIKICAgIGVsaWYgdGVzdCAtZiAvdXNyL3VjYi9hcmNoOyB0aGVuCglhcmNo +bmFtZT1gL3Vzci91Y2IvYXJjaGAKCWFyY2huYW1lPSIke2FyY2huYW1lfS0ke29zbmFtZX0iCiAg +ICBmaQogICAgOzsKZXNhYwoKIwojIFRoaXMgZXh0cmFjdHMgdGhlIGxpYnJhcnkgZGlyZWN0b3Jp +ZXMgdGhhdCB3aWxsIGJlIHNlYXJjaGVkIGJ5IHRoZSBTdW4KIyBXb3Jrc2hvcCBjb21waWxlciwg +Z2l2ZW4gdGhlIGNvbW1hbmQtbGluZSBzdXBwbGllZCBpbiAkdHJ5d29ya3Nob3BjYy4KIyBVc2Ug +dGh1c2x5OiBsb2NsaWJwdGg9ImAkZ2V0d29ya3Nob3BsaWJzYCAkbG9jbGlicHRoIgojCglnZXR3 +b3Jrc2hvcGxpYnM9YGNhdCA8PCdFTkQnCmV2YWwgJHRyeXdvcmtzaG9wY2MgLSMjIyAyPiYxIHwg +XApzZWQgLW4gJy8gLVkgL3MhLiogLVkgIlAsXChbXiJdKlwpIi4qIVwxIXAnIHwgdHIgJzonICcg +JyB8IFwKc2VkIC1lICdzIS91c3IvbGliL3NwYXJjdjkhIScgLWUgJ3MhL3Vzci9jY3MvbGliL3Nw +YXJjdjkhIScgXAogICAgLWUgJ3MhL3Vzci9saWIhIWcnIC1lICdzIS91c3IvY2NzL2xpYiEhZycK +RU5ECmAKCmNhc2UgIiRjYyIgaW4KJycpICAgIGZvciBpIGluIGBscyAtciAvb3B0LypzdHVkaW8q +L2Jpbi9jY2AgL29wdC9TVU5Xc3Byby9iaW4vY2MgXAoJCWB3aGljaCBnY2NgCiAgICAgICBkbwoJ +ICAgICAgIGlmIHRlc3QgLWYgIiRpIjsgdGhlbgoJCSAgICAgICBjYz0kaQoJCSAgICAgICBjYXQg +PDxFT0YgPiY0CgpZb3Ugc3BlY2lmaWVkIG5vIGNjIGJ1dCB5b3Ugc2VlbSB0byBoYXZlIHRoZSBX +b3Jrc2hvcCBjb21waWxlcgooJGNjKSBpbnN0YWxsZWQsIHVzaW5nIHRoYXQuCklmIHlvdSB3YW50 +IHNvbWV0aGluZyBlbHNlLCBzcGVjaWZ5IHRoYXQgaW4gdGhlIGNvbW1hbmQgbGluZSwKZS5nLiBD +b25maWd1cmUgLURjYz1nY2MKCkVPRgoJCQlicmVhawoJCWZpCglkb25lCgk7Owplc2FjCgojIyMj +IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBHZW5l +cmFsIHNhbml0eSB0ZXN0aW5nLiAgU2VlIGJlbG93IGZvciBleGNlcnB0cyBmcm9tIHRoZSBTb2xh +cmlzIEZBUS4KIwojIEZyb20gcm9laHJpY2hAaXJvbndvb2QtZmRkaS5jcmF5LmNvbSBXZWQgU2Vw +IDI3IDEyOjUxOjQ2IDE5OTUKIyBEYXRlOiBUaHUsIDcgU2VwIDE5OTUgMTY6MzE6NDAgLTA1MDAK +IyBGcm9tOiBEZWFuIFJvZWhyaWNoIDxyb2VocmljaEBpcm9ud29vZC1mZGRpLmNyYXkuY29tPgoj +IFRvOiBwZXJsNS1wb3J0ZXJzQGFmcmljYS5uaWNvaC5jb20KIyBTdWJqZWN0OiBSZTogT24gcGVy +bDUvc29sYXJpcy9nY2MKIwojIEhlcmUncyBhbm90aGVyIGRyYWZ0IG9mIHRoZSBwZXJsNS9zb2xh +cmlzL2djYyBzYW5pdHktY2hlY2tlci4KCmNhc2UgYHR5cGUgJHtjYzotY2N9YCBpbgoqL3Vzci91 +Y2IvY2MqKSBjYXQgPDxFTkQgPiY0CgpOT1RFOiAgU29tZSBwZW9wbGUgaGF2ZSByZXBvcnRlZCBw +cm9ibGVtcyB3aXRoIC91c3IvdWNiL2NjLgpJZiB5b3UgaGF2ZSBkaWZmaWN1bHRpZXMsIHBsZWFz +ZSBtYWtlIHN1cmUgdGhlIGRpcmVjdG9yeQpjb250YWluaW5nIHlvdXIgQyBjb21waWxlciBpcyBi +ZWZvcmUgL3Vzci91Y2IgaW4geW91ciBQQVRILgoKRU5ECjs7CmVzYWMKCgojIENoZWNrIHRoYXQg +L2Rldi9mZCBpcyBtb3VudGVkLiAgSWYgaXQgaXMgbm90IG1vdW50ZWQsIGxldCB0aGUKIyB1c2Vy +IGtub3cgdGhhdCBzdWlkIHNjcmlwdHMgbWF5IG5vdCB3b3JrLgokcnVuIG1vdW50IHwgZ3JlcCAn +Xi9kZXYvZmQgJyAyPiYxID4gL2Rldi9udWxsCmNhc2UgJD8gaW4KMCkgOzsKKikKCWNhdCA8PEVO +RCA+JjQKCk5PVEU6IFlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgL2Rldi9mZCBtb3VudGVkLiAg +SWYgeW91IHdhbnQgdG8KYmUgYWJsZSB0byB1c2Ugc2V0LXVpZCBzY3JpcHRzIHlvdSBtdXN0IGFz +ayB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yCnRvIG1vdW50IC9kZXYvZmQuCgpFTkQKCTs7CmVz +YWMKCgojIFNlZSBpZiBsaWJ1Y2IgY2FuIGJlIGZvdW5kIGluIC91c3IvbGliLiAgSWYgaXQgaXMs +IHdhcm4gdGhlIHVzZXIKIyB0aGF0IHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIHdoaWxlIGJ1aWxk +aW5nIFBlcmwgZXh0ZW5zaW9ucy4KZm91bmRfbGlidWNiPScnCmNhc2UgIiRydW4iIGluCicnKSAv +dXNyL2Jpbi9scyAvdXNyL2xpYi9saWJ1Y2IqID4vZGV2L251bGwgMj4mMQogICAgZm91bmRfbGli +dWNiPSQ/CiAgICA7OwoqKSAgJHJ1biAvdXNyL2Jpbi9scyAnL3Vzci9saWIvbGlidWNiKicgPi9k +ZXYvbnVsbCAyPiYxCiAgICBmb3VuZF9saWJ1Y2I9JD8KICAgIDs7CmVzYWMKCmNhc2UgJGZvdW5k +X2xpYnVjYiBpbgowKQoJY2F0IDw8RU5EID4mNAoKTk9URTogbGlidWNiIGhhcyBiZWVuIGZvdW5k +IGluIC91c3IvbGliLiAgbGlidWNiIHNob3VsZCByZXNpZGUgaW4KL3Vzci91Y2JsaWIuICBZb3Ug +bWF5IGhhdmUgdHJvdWJsZSB3aGlsZSBidWlsZGluZyBQZXJsIGV4dGVuc2lvbnMuCgpFTkQKOzsK +ZXNhYwoKIyBVc2Ugc2hlbGwgYnVpbHQtaW4gJ3R5cGUnIGNvbW1hbmQgaW5zdGVhZCBvZiAvdXNy +L2Jpbi93aGljaCB0bwojIGF2b2lkIHBvc3NpYmxlIGNzaCBzdGFydC11cCBwcm9ibGVtcyBhbmQg +YWxzbyB0byB1c2UgdGhlIHNhbWUgc2hlbGwKIyB3ZSdsbCBiZSB1c2luZyB0byBDb25maWd1cmUg +YW5kIG1ha2UgcGVybC4KIyBUaGUgcGF0aCBuYW1lIGlzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBv +dXRwdXQsIGJ1dCB0aGUgdHlwZSBjb21tYW5kCiMgaGFzIGFuIGFubm95aW5nIGFycmF5IG9mIHBv +c3NpYmxlIG91dHB1dHMsIGUuZy46CiMJbWFrZSBpcyBoYXNoZWQgKC9vcHQvZ251L2Jpbi9tYWtl +KQojCWNjIGlzIC91c3IvdWNiL2NjCiMJZm9vIG5vdCBmb3VuZAojIHVzZSBhIGNvbW1hbmQgbGlr +ZSB0eXBlIG1ha2UgfCBhd2sgJ3twcmludCAkTkZ9JyB8IHNlZCAncy9bKCldLy9nJwoKIyBTZWUg +aWYgbWFrZSgxKSBpcyBHTlUgbWFrZSgxKS4KIyBJZiBpdCBpcywgbWFrZSBzdXJlIHRoZSBzZXRn +aWQgYml0IGlzIG5vdCBzZXQuCm1ha2UgLXYgPiBtYWtlLnZlcnMgMj4mMQppZiBncmVwIEdOVSBt +YWtlLnZlcnMgPiAvZGV2L251bGwgMj4mMTsgdGhlbgogICAgdG1wPWB0eXBlIG1ha2UgfCBhd2sg +J3twcmludCAkTkZ9JyB8IHNlZCAncy9bKCldLy9nJ2AKICAgIGNhc2UgImAke2xzOi0nL3Vzci9i +aW4vbHMnfSAtbEwgJHRtcGAiIGluCiAgICA/Pz8/Pz9zKikKCSAgICBjYXQgPDxFTkQgPiYyCgpO +T1RFOiBZb3VyIFBBVEggcG9pbnRzIHRvIEdOVSBtYWtlLCBhbmQgeW91ciBHTlUgbWFrZSBoYXMg +dGhlIHNldC1ncm91cC1pZApiaXQgc2V0LiAgWW91IG11c3QgZWl0aGVyIHJlYXJyYW5nZSB5b3Vy +IFBBVEggdG8gcHV0IC91c3IvY2NzL2JpbiBiZWZvcmUgdGhlCkdOVSB1dGlsaXRpZXMgb3IgeW91 +IG11c3QgYXNrIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gZGlzYWJsZSB0aGUKc2V0LWdy +b3VwLWlkIGJpdCBvbiBHTlUgbWFrZS4KCkVORAoJICAgIDs7CiAgICBlc2FjCmZpCnJtIC1mIG1h +a2UudmVycwoKY2F0ID4gVVUvY2MuY2J1IDw8J0VPQ0JVJwojIFRoaXMgc2NyaXB0IFVVL2NjLmNi +dSB3aWxsIGdldCAnY2FsbGVkLWJhY2snIGJ5IENvbmZpZ3VyZSBhZnRlciBpdAojIGhhcyBwcm9t +cHRlZCB0aGUgdXNlciBmb3IgdGhlIEMgY29tcGlsZXIgdG8gdXNlLgoKIyBJZiB0aGUgQyBjb21w +aWxlciBpcyBnY2M6CiMgICAtIGNoZWNrIHRoZSBmaXhlZC1pbmNsdWRlcwojICAgLSBjaGVjayBh +cygxKSBhbmQgbGQoMSksIHRoZXkgc2hvdWxkIG5vdCBiZSBHTlUKIwkoR05VIGFzIGFuZCBsZCAy +LjguMSBhbmQgbGF0ZXIgYXJlIHJlcG9ydGVkbHkgb2ssIGhvd2V2ZXIuKQojIElmIHRoZSBDIGNv +bXBpbGVyIGlzIG5vdCBnY2M6CiMgICAtIENoZWNrIGlmIGl0IGlzIHRoZSBXb3Jrc2hvcC9Gb3J0 +ZSBjb21waWxlci4KIyAgICAgSWYgaXQgaXMsIHByZXBhcmUgZm9yIDY0IGJpdCBhbmQgbG9uZyBk +b3VibGVzLgojICAgLSBjaGVjayBhcygxKSBhbmQgbGQoMSksIHRoZXkgc2hvdWxkIG5vdCBiZSBH +TlUKIwkoR05VIGFzIGFuZCBsZCAyLjguMSBhbmQgbGF0ZXIgYXJlIHJlcG9ydGVkbHkgb2ssIGhv +d2V2ZXIuKQojCiMgV2F0Y2ggb3V0IGluIGNhc2UgdGhleSBoYXZlIG5vdCBzZXQgJGNjLgoKIyBQ +ZXJsIGNvbXBpbGVkIHdpdGggc29tZSBjb21iaW5hdGlvbnMgb2YgR05VIGFzIGFuZCBsZCBtYXkg +bm90CiMgYmUgYWJsZSB0byBwZXJmb3JtIGR5bmFtaWMgbG9hZGluZyBvZiBleHRlbnNpb25zLiAg +SWYgeW91IGhhdmUgYQojIHByb2JsZW0gd2l0aCBkeW5hbWljIGxvYWRpbmcsIGJlIHN1cmUgdGhh +dCB5b3UgYXJlIHVzaW5nIHRoZSBTb2xhcmlzCiMgL3Vzci9jY3MvYmluL2FzIGFuZCAvdXNyL2Nj +cy9iaW4vbGQuICBZb3UgY2FuIGRvIHRoYXQgd2l0aAojCXNoIENvbmZpZ3VyZSAtRGNjPSdnY2Mg +LUIvdXNyL2Njcy9iaW4vJwojIChub3RlIHRoZSB0cmFpbGluZyBzbGFzaCBpcyByZXF1aXJlZCku +CiMgQ29tYmluYXRpb25zIHRoYXQgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZm9sbG93aW5n +IGhpbnRzOgojCiMgIGdjYy0yLjcuMiwgR05VIGFzIDIuNywgR05VIGxkIDIuNwojICBlZ2NzLTEu +MC4zLCBHTlUgYXMgMi45LjEgYW5kIEdOVSBsZCAyLjkuMQojCS0tQW5keSBEb3VnaGVydHkgIDxk +b3VnaGVyYUBsYWZheWV0dGUuZWR1PgojCVR1ZSBBcHIgMTMgMTc6MTk6NDMgRURUIDE5OTkKCiMg +R2V0IGdjYyB0byBzaGFyZSBpdHMgc2VjcmV0cy4KZWNobyAnaW50IG1haW4oKSB7IHJldHVybiAw +OyB9JyA+IHRyeS5jCgkjIEluZGVudCB0byBhdm9pZCBwcm9wYWdhdGlvbiB0byBjb25maWcuc2gK +CXZlcmJvc2U9YCR7Y2M6LWNjfSAkY2NmbGFncyAtdiAtbyB0cnkgdHJ5LmMgMj4mMWAKCiMgWFhY +IFRPRE86ICAnc3BlY3MnIG91dHB1dCBjaGFuZ2VkIGZyb20gJ1JlYWRpbmcgc3BlY3MgZnJvbScg +aW4gZ2NjLVsyM10gdG8gJ1VzaW5nCiMgYnVpbHQtaW4gc3BlY3MnIGluIGdjYy00LiAgUGVyaGFw +cyB3ZSBzaG91bGQganVzdCB1c2UgdGhlIHNhbWUgZ2NjIHRlc3QgYXMKIyBpbiBDb25maWd1cmUg +dG8gc2VlIGlmIHdlJ3JlIHVzaW5nIGdjYy4KaWYgZWNobyAiJHZlcmJvc2UiIHwgZWdyZXAgJyhS +ZWFkaW5nIHNwZWNzIGZyb20pfChVc2luZyBidWlsdC1pbiBzcGVjcyknID4vZGV2L251bGwgMj4m +MTsgdGhlbgoJIwoJIyBVc2luZyBnY2MuCgkjCgljY19uYW1lPSdnY2MnCgoJIyBTZWUgaWYgYXMo +MSkgaXMgR05VIGFzKDEpLiAgR05VIGFzKDEpIG1pZ2h0IG5vdCB3b3JrIGZvciB0aGlzIGpvYi4K +CWlmIGVjaG8gIiR2ZXJib3NlIiB8IGdyZXAgJyAvdXNyL2Njcy9iaW4vYXMgJyA+L2Rldi9udWxs +IDI+JjE7IHRoZW4KCSAgICA6CgllbHNlCgkgICAgY2F0IDw8RU5EID4mMgoKTk9URTogWW91IGFy +ZSB1c2luZyBHTlUgYXMoMSkuICBHTlUgYXMoMSkgbWlnaHQgbm90IGJ1aWxkIFBlcmwuICBJZiB5 +b3UKaGF2ZSB0cm91YmxlLCB5b3UgY2FuIHVzZSAvdXNyL2Njcy9iaW4vYXMgYnkgaW5jbHVkaW5n +IC1CL3Vzci9jY3MvYmluLwppbiB5b3VyICR7Y2M6LWNjfSBjb21tYW5kLiAgKE5vdGUgdGhhdCB0 +aGUgdHJhaWxpbmcgIi8iIGlzIHJlcXVpcmVkLikKCkVORAoJICAgICMgQXBwYXJlbnRseSBub3Qg +bmVlZGVkLCBhdCBsZWFzdCBmb3IgYXMgMi43IGFuZCBsYXRlci4KCSAgICAjIGNjPSIke2NjOi1j +Y30gJGNjZmxhZ3MgLUIvdXNyL2Njcy9iaW4vIgoJZmkKCgkjIFNlZSBpZiBsZCgxKSBpcyBHTlUg +bGQoMSkuICBHTlUgbGQoMSkgbWlnaHQgbm90IHdvcmsgZm9yIHRoaXMgam9iLgoJIyBSZWNvbXB1 +dGUgJHZlcmJvc2Ugc2luY2Ugd2UgbWF5IGhhdmUganVzdCBjaGFuZ2VkICRjYy4KCXZlcmJvc2U9 +YCR7Y2M6LWNjfSAkY2NmbGFncyAtdiAtbyB0cnkgdHJ5LmMgMj4mMSB8IGdyZXAgbGQgMj4mMWAK +CglpZiBlY2hvICIkdmVyYm9zZSIgfCBncmVwICcgL3Vzci9jY3MvYmluL2xkICcgPi9kZXYvbnVs +bCAyPiYxOyB0aGVuCgkgICAgIyBPaywgZ2NjIGRpcmVjdGx5IGNhbGxzIHRoZSBTb2xhcmlzIC91 +c3IvY2NzL2Jpbi9sZC4KCSAgICA6CgllbGlmIGVjaG8gIiR2ZXJib3NlIiB8IGdyZXAgImxkOiBT +b2Z0d2FyZSBHZW5lcmF0aW9uIFV0aWxpdGllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCgkgICAg +IyBIbW0uICBnY2MgZG9lc24ndCBjYWxsIC91c3IvY2NzL2Jpbi9sZCBkaXJlY3RseSwgYnV0IGl0 +CgkgICAgIyBkb2VzIGFwcGVhciB0byBiZSB1c2luZyBpdCBldmVudHVhbGx5LiAgZWdjcy0xLjAu +MydzIGxkCgkgICAgIyB3cmFwcGVyIGRvZXMgdGhpcy4KCSAgICAjIE1vc3QgU29sYXJpcyB2ZXJz +aW9ucyBvZiBsZCBJJ3ZlIHNlZW4gY29udGFpbiB0aGUgbWFnaWMKCSAgICAjIHN0cmluZyB1c2Vk +IGluIHRoZSBncmVwLgoJICAgIDoKCWVsaWYgZWNobyAiJHZlcmJvc2UiIHwgZ3JlcCAiU29sYXJp +cyBMaW5rIEVkaXRvcnMiID4vZGV2L251bGwgMj4mMTsgdGhlbgoJICAgICMgSG93ZXZlciBzb21l +IFNvbGFyaXMgOCB2ZXJzaW9ucyBwcmlvciB0byBsZCA1LjgtMS4yODYgY29udGFpbgoJICAgICMg +dGhpcyBzdHJpbmcgaW5zdGVhZC4KCSAgICA6CgllbHNlCgkgICAgIyBObyBldmlkZW5jZSB5ZXQg +b2YgL3Vzci9jY3MvYmluL2xkLiAgU29tZSB2ZXJzaW9ucwoJICAgICMgb2YgZWdjcydzIGxkIHdy +YXBwZXIgY2FsbCAvdXNyL2Njcy9iaW4vbGQgaW4gdHVybiBidXQKCSAgICAjIGFwcGFyZW50bHkg +ZG9uJ3QgcmV2ZWFsIHRoYXQgdW5sZXNzIHlvdSBwYXNzIGluIC1WLgoJICAgICMgKFRoaXMgbWF5 +IGFsbCBkZXBlbmQgb24gbG9jYWwgY29uZmlndXJhdGlvbnMgdG9vLikKCgkgICAgIyBSZWNvbXB1 +dGUgdmVyYm9zZSB3aXRoIC1XbCwtdiB0byBmaW5kIEdOVSBsZCBpZiBwcmVzZW50CgkgICAgdmVy +Ym9zZT1gJHtjYzotY2N9ICRjY2ZsYWdzIC1XbCwtdiAtbyB0cnkgdHJ5LmMgMj4mMSB8IGdyZXAg +L2xkIDI+JjFgCgoJICAgIG15bGQ9YGVjaG8gJHZlcmJvc2UgfCBhd2sgJy9cL2xkLyB7cHJpbnQg +JDF9J2AKCSAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IGdjYydzIG91dHB1dCB3aWxsIG5vdCBjaGFu +Z2UsIGFuZCB0aGF0CgkgICAgIyAvZnVsbC9wYXRoL3RvL2xkIHdpbGwgYmUgdGhlIGZpcnN0IHdv +cmQgb2YgdGhlIG91dHB1dC4KCSAgICAjIFRodXMgbXlsZCBpcyBzb21ldGhpbmcgbGlrZSAvb3B0 +L2dudS9zcGFyYy1zdW4tc29sYXJpczIuNS9iaW4vbGQKCgkgICAgIyBBbGxvdyB0aGF0ICRteWxk +IG1heSBiZSAnJywgZHVlIHRvIGNoYW5nZXMgaW4gZ2NjJ3Mgb3V0cHV0CgkgICAgaWYgJHtteWxk +Oi1sZH0gLVYgMj4mMSB8CgkJZ3JlcCAibGQ6IFNvZnR3YXJlIEdlbmVyYXRpb24gVXRpbGl0aWVz +IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KCQkjIE9rLCAvdXNyL2Njcy9iaW4vbGQgZXZlbnR1YWxs +eSBkb2VzIGdldCBjYWxsZWQuCgkJOgoJICAgIGVsaWYgJHtteWxkOi1sZH0gLVYgMj4mMSB8CgkJ +Z3JlcCAiU29sYXJpcyBMaW5rIEVkaXRvcnMiID4vZGV2L251bGwgMj4mMTsgdGhlbgoJCSMgT2ss +IC91c3IvY2NzL2Jpbi9sZCBldmVudHVhbGx5IGRvZXMgZ2V0IGNhbGxlZC4KCQk6CgkgICAgZWxz +ZQoJCWVjaG8gIkZvdW5kIEdOVSBsZD0nJG15bGQnIiA+JjQKCQljYXQgPDxFTkQgPiYyCgpOT1RF +OiBZb3UgYXJlIHVzaW5nIEdOVSBsZCgxKS4gIEdOVSBsZCgxKSBtaWdodCBub3QgYnVpbGQgUGVy +bC4gIElmIHlvdQpoYXZlIHRyb3VibGUsIHlvdSBjYW4gdXNlIC91c3IvY2NzL2Jpbi9sZCBieSBp +bmNsdWRpbmcgLUIvdXNyL2Njcy9iaW4vCmluIHlvdXIgJHtjYzotY2N9IGNvbW1hbmQuICAoTm90 +ZSB0aGF0IHRoZSB0cmFpbGluZyAiLyIgaXMgcmVxdWlyZWQuKQoKSSB3aWxsIHRyeSB0byB1c2Ug +R05VIGxkIGJ5IHBhc3NpbmcgaW4gdGhlIC1XbCwtRSBmbGFnLCBidXQgaWYgdGhhdApkb2Vzbid0 +IHdvcmssIHlvdSBzaG91bGQgdXNlIC1CL3Vzci9jY3MvYmluLyBpbnN0ZWFkLgoKRU5ECgkJY2Nk +bGZsYWdzPSIkY2NkbGZsYWdzIC1XbCwtRSIKCQlsZGRsZmxhZ3M9IiRsZGRsZmxhZ3MgLVdsLC1F +IC1zaGFyZWQiCgkgICAgZmkKCWZpCgplbHNlCgkjCgkjIE5vdCB1c2luZyBnY2MuCgkjCgljYXQg +PiB0cnkuYyA8PCAnRU9NJwojaW5jbHVkZSA8c3RkaW8uaD4KaW50IG1haW4oKSB7CiNpZiBkZWZp +bmVkKF9fU1VOUFJPX0MpCglwcmludGYoIndvcmtzaG9wXG4iKTsKI2Vsc2UKI2lmIGRlZmluZWQo +X19TVU5QUk9fQ0MpCglwcmludGYoIndvcmtzaG9wIENDXG4iKTsKI2Vsc2UKCXByaW50ZigiXG4i +KTsKI2VuZGlmCiNlbmRpZgpyZXR1cm4oMCk7Cn0KRU9NCgl0cnl3b3Jrc2hvcGNjPSIke2NjOi1j +Y30gJGNjZmxhZ3MgdHJ5LmMgLW8gdHJ5IgoJaWYgJHRyeXdvcmtzaG9wY2MgPi9kZXYvbnVsbCAy +PiYxOyB0aGVuCgkJY2NfbmFtZT1gJHJ1biAuL3RyeWAKCQlpZiB0ZXN0ICIkY2NfbmFtZSIgPSAi +d29ya3Nob3AiOyB0aGVuCgkJCWNjdmVyc2lvbj0iYCR7Y2M6LWNjfSAtViAyPiYxfHNlZCAtbiAt +ZSAnMXMvXltDY11bQ2M5XTkqOiAvL3AnYCIKCQlmaQoJCWlmIHRlc3QgIiRjY19uYW1lIiA9ICJ3 +b3Jrc2hvcCBDQyI7IHRoZW4KCQkJY2N2ZXJzaW9uPSJgJHtjYzotQ0N9IC1WIDI+JjF8c2VkIC1u +IC1lICcxcy9eW0NjXVtDXTogLy9wJ2AiCgkJZmkKCQljYXNlICIkY2NfbmFtZSIgaW4KCQl3b3Jr +c2hvcCopCgkJCSMgU2V0dGluZ3MgZm9yIGVpdGhlciBjYyBvciBDQwoJCQlpZiB0ZXN0ICEgIiR1 +c2U2NGJpdGFsbF9kb25lIjsgdGhlbgoJCQkJbG9jbGlicHRoPSIvdXNyL2xpYiAvdXNyL2Njcy9s +aWIgYCRnZXR3b3Jrc2hvcGxpYnNgICRsb2NsaWJwdGgiCgkJCWZpCgkJCSMgU3VuIENDL2NjIGRv +bid0IHN1cHBvcnQgZ2NjIGF0dHJpYnV0ZXMKCQkJZF9hdHRyaWJ1dGVfZm9ybWF0PSd1bmRlZicK +CQkJZF9hdHRyaWJ1dGVfbWFsbG9jPSd1bmRlZicKCQkJZF9hdHRyaWJ1dGVfbm9ubnVsbD0ndW5k +ZWYnCgkJCWRfYXR0cmlidXRlX25vcmV0dXJuPSd1bmRlZicKCQkJZF9hdHRyaWJ1dGVfcHVyZT0n +dW5kZWYnCgkJCWRfYXR0cmlidXRlX3VudXNlZD0ndW5kZWYnCgkJCWRfYXR0cmlidXRlX3dhcm5f +dW51c2VkX3Jlc3VsdD0ndW5kZWYnCgkJCWNhc2UgIiRjYyIgaW4KCQkJKmM5OSkJIyBXaXRob3V0 +IC1YYSBjOTkgZG9lc24ndCBzZWUKCQkJCSMgbWFueSBPUyBpbnRlcmZhY2VzLgoJCQkJY2FzZSAi +JGNjZmxhZ3MiIGluCgkJCQkqLVhhKikJOzsKCQkJCSopIGNjZmxhZ3M9IiRjY2ZsYWdzIC1YYSIg +OzsKCQkJCWVzYWMKCQkJCTs7CgkJCWVzYWMKICAgICAgICAgICAgICAgICAgICAgICAgIyBHSCAj +MjE1MzUgLSBhcHBhcmVudCBvcHRpbWl6YXRpb24gYnVnIGluIHdvcmtzaG9wIGNjCgkJCWNhc2Ug +IiRvcHRpbWl6ZSIgaW4KCQkJJyd8LU8pIG9wdGltaXplPS1PMSA7OwoJCQllc2FjCgkJCTs7CgkJ +ZXNhYwoJZmkKCgkjIFNlZSBpZiBhcygxKSBpcyBHTlUgYXMoMSkuICBHTlUgbWlnaHQgbm90IHdv +cmsgZm9yIHRoaXMgam9iLgoJY2FzZSBgYXMgLS12ZXJzaW9uIDwgL2Rldi9udWxsIDI+JjFgIGlu +CgkqR05VKikKCQljYXQgPDxFTkQgPiYyCgpOT1RFOiBZb3UgYXJlIHVzaW5nIEdOVSBhcygxKS4g +IEdOVSBhcygxKSBtaWdodCBub3QgYnVpbGQgUGVybC4KWW91IG11c3QgYXJyYW5nZSB0byB1c2Ug +L3Vzci9jY3MvYmluL2FzLCBwZXJoYXBzIGJ5IGFkZGluZyAvdXNyL2Njcy9iaW4KdG8gdGhlIGJl +Z2lubmluZyBvZiB5b3VyIFBBVEguCgpFTkQKCQk7OwoJZXNhYwoKCSMgU2VlIGlmIGxkKDEpIGlz +IEdOVSBsZCgxKS4gIEdOVSBsZCgxKSBtaWdodCBub3Qgd29yayBmb3IgdGhpcyBqb2IuCgkjIGxk +IC0tdmVyc2lvbiBkb2Vzbid0IHByb3Blcmx5IHJlcG9ydCBpdHNlbGYgYXMgYSBHTlUgdG9vbCwK +CSMgYXMgb2YgbGQgdmVyc2lvbiAyLjYsIHNvIHdlIG5lZWQgdG8gYmUgbW9yZSBzdHJpY3QuIFRX +UCA5LzUvOTYKCSMgU3VuJ3MgbGQgYWx3YXlzIGVtaXRzIHRoZSAiU29mdHdhcmUgR2VuZXJhdGlv +biBVdGlsaXRpZXMiIHN0cmluZy4KCWlmIGxkIC1WIDI+JjEgfCBncmVwICJsZDogU29mdHdhcmUg +R2VuZXJhdGlvbiBVdGlsaXRpZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgoJICAgICMgT2ssIGxk +IGlzIC91c3IvY2NzL2Jpbi9sZC4KCSAgICA6CgllbHNlCgkgICAgY2F0IDw8RU5EID4mMgoKTk9U +RTogWW91IGFyZSBhcHBhcmVudGx5IHVzaW5nIEdOVSBsZCgxKS4gIEdOVSBsZCgxKSBtaWdodCBu +b3QgYnVpbGQgUGVybC4KWW91IHNob3VsZCBhcnJhbmdlIHRvIHVzZSAvdXNyL2Njcy9iaW4vbGQs +IHBlcmhhcHMgYnkgYWRkaW5nIC91c3IvY2NzL2Jpbgp0byB0aGUgYmVnaW5uaW5nIG9mIHlvdXIg +UEFUSC4KCkVORAoJZmkKZmkKCiMgYXMgLS12ZXJzaW9uIG9yIGxkIC0tdmVyc2lvbiBtaWdodCBk +dW1wIGNvcmUuCnJtIC1mIHRyeSB0cnkuYyBjb3JlCkVPQ0JVCgpjYXQgPiBVVS91c2V0aHJlYWRz +LmNidSA8PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBVVS91c2V0aHJlYWRzLmNidSB3aWxsIGdldCAn +Y2FsbGVkLWJhY2snIGJ5IENvbmZpZ3VyZQojIGFmdGVyIGl0IGhhcyBwcm9tcHRlZCB0aGUgdXNl +ciBmb3Igd2hldGhlciB0byB1c2UgdGhyZWFkcy4KY2FzZSAiJHVzZXRocmVhZHMiIGluCiRkZWZp +bmV8dHJ1ZXxbeVldKikKCWNjZmxhZ3M9Ii1EX1JFRU5UUkFOVCAkY2NmbGFncyIKCgkjIC1scHRo +cmVhZCBvdmVycmlkZXMgc29tZSBsaWIgQyBmdW5jdGlvbnMsIHNvIHB1dCBpdCBiZWZvcmUgYy4K +CXNldCBgZWNobyBYICIkbGlic3dhbnRlZCAifCBzZWQgLWUgInMvIGMgLyBwdGhyZWFkIGMgLyJg +CglzaGlmdAoJbGlic3dhbnRlZD0iJCoiCgoJIyBzY2hlZF95aWVsZCBpcyBhdmFpbGFibGUgaW4g +dGhlIC1scnQgbGlicmFyeS4gIEhvd2V2ZXIsCgkjIHdlIGNhbiBhbHNvIHBpY2sgdXAgdGhlIGVx +dWl2YWxlbnQgeWllbGQoKSBmdW5jdGlvbiBpbiB0aGUKCSMgbm9ybWFsIEMgbGlicmFyeS4gIFRv +IGF2b2lkIHB1bGxpbmcgaW4gdW5uZWNlc3NhcnkKCSMgbGlicmFyaWVzLCB3ZSdsbCBub3JtYWxs +eSBhdm9pZCBzY2hlZF95aWVsZCgpLy1scnQgYW5kCgkjIGp1c3QgdXNlIHlpZWxkKCkuICBIb3dl +dmVyLCB3ZSdsbCBob25vciBhIGNvbW1hbmQtbGluZQoJIyBvdmVycmlkZSA6ICItRHNjaGVkX3lp +ZWxkPXNjaGVkX3lpZWxkIi4KCSMgSWYgd2UgZW5kIHVwIHVzaW5nIHNjaGVkX3lpZWxkLCB3ZSdy +ZSBnb2luZyB0byBuZWVkIC1scnQuCglzY2hlZF95aWVsZD0ke3NjaGVkX3lpZWxkOi15aWVsZH0K +CWlmIHRlc3QgIiRzY2hlZF95aWVsZCIgPSAic2NoZWRfeWllbGQiOyB0aGVuCgkgICAgc2V0IGBl +Y2hvIFggIiRsaWJzd2FudGVkICJ8IHNlZCAtZSAicy8gcHRocmVhZCAvIHJ0IHB0aHJlYWQgLyJg +CgkgICAgc2hpZnQKCSAgICBsaWJzd2FudGVkPSIkKiIKCWZpCgoJIyBPbiBTb2xhcmlzIDIuNiB4 +ODYgdGhlcmUgaXMgYSBidWcgd2l0aCBzaWdzZXRqbXAoKSBhbmQgc2lnbG9uZ2ptcCgpCgkjIHdo +ZW4gbGlua2VkIHdpdGggdGhlIHRocmVhZHMgbGlicmFyeSwgc3VjaCB0aGF0IHdoYXRldmVyIHBv +c2l0aXZlCgkjIHZhbHVlIHlvdSBwYXNzIHRvIHNpZ2xvbmdqbXAoKSwgc2lnc2V0am1wKCkgcmV0 +dXJucyAxLgoJIyBUaGFua3MgdG8gU2ltb24gUGFyc29ucyA8Uy5QYXJzb25zQGZ0ZWwuY28udWs+ +IGZvciB0aGlzIHJlcG9ydC4KCSMgU3VuIEJ1Z0lEIGlzIDQxMTc5NDYsICJzaWdzZXRqbXAgYWx3 +YXlzIHJldHVybnMgMSB3aGVuIGNhbGxlZCBieQoJIyBzaWdsb25nam1wIGluIGEgTVQgcHJvZ3Jh +bSIuIEFzIG9mIDE5OTgwNjIyLCB0aGVyZSBpcyBubyBwYXRjaAoJIyBhdmFpbGFibGUuCgljYXQg +PnRyeS5jIDw8J0VPTScKCS8qIFRlc3QgZm9yIHNpZyhzZXR8bG9uZylqbXAgYnVnLiAqLwoJI2lu +Y2x1ZGUgPHNldGptcC5oPgoKCWludCBtYWluKCkKCXsKCSAgICBzaWdqbXBfYnVmIGVudjsKCSAg +ICBpbnQgcmV0OwoKCSAgICByZXQgPSBzaWdzZXRqbXAoZW52LCAxKTsKCSAgICBpZiAocmV0KSB7 +IHJldHVybiByZXQgPT0gMjsgfQoJICAgIHNpZ2xvbmdqbXAoZW52LCAyKTsKCX0KRU9NCglpZiB0 +ZXN0ICJgYXJjaGAiID0gaTg2cGMgLWEgYHVuYW1lIC1yYCA9IDUuNiAmJiBcCgkgICAke2NjOi1j +Y30gdHJ5LmMgLWxwdGhyZWFkID4vZGV2L251bGwgMj4mMSAmJiAuL2Eub3V0OyB0aGVuCgkgICAg +ZF9zaWdzZXRqbXA9JHVuZGVmCglmaQoKCSMgVGhlc2UgcHJvdG90eXBlcyBzaG91bGQgYmUgdmlz +aWJsZSBzaW5jZSB3ZSB1c2luZwoJIyAtRF9SRUVOVFJBTlQsIGJ1dCB0aGF0IGRvZXMgbm90IHNl +ZW0gdG8gd29yay4KCSMgSXQgZG9lcyBzZWVtIHRvIHdvcmsgZm9yIGdldG5ldGJ5YWRkcl9yLCB3 +ZWlyZGx5IGVub3VnaCwKCSMgYW5kIG90aGVyIF9yIGZ1bmN0aW9ucy4gKFNvbGFyaXMgOCkKCglk +X2N0ZXJtaWRfcl9wcm90bz0iJGRlZmluZSIKCWRfZ2V0aG9zdGJ5YWRkcl9yX3Byb3RvPSIkZGVm +aW5lIgoJZF9nZXRob3N0YnluYW1lX3JfcHJvdG89IiRkZWZpbmUiCglkX2dldG5ldGJ5bmFtZV9y +X3Byb3RvPSIkZGVmaW5lIgoJZF9nZXRwcm90b2J5bmFtZV9yX3Byb3RvPSIkZGVmaW5lIgoJZF9n +ZXRwcm90b2J5bnVtYmVyX3JfcHJvdG89IiRkZWZpbmUiCglkX2dldHNlcnZieW5hbWVfcl9wcm90 +bz0iJGRlZmluZSIKCWRfZ2V0c2VydmJ5cG9ydF9yX3Byb3RvPSIkZGVmaW5lIgoKCSMgRGl0dG8u +IChTb2xhcmlzIDcpCglkX3JlYWRkaXJfcl9wcm90bz0iJGRlZmluZSIKCWRfcmVhZGRpcjY0X3Jf +cHJvdG89IiRkZWZpbmUiCglkX3RtcG5hbV9yX3Byb3RvPSIkZGVmaW5lIgoJZF90dHluYW1lX3Jf +cHJvdG89IiRkZWZpbmUiCgoJOzsKZXNhYwpFT0NCVQoKY2F0ID4gVVUvdXNlbGFyZ2VmaWxlcy5j +YnUgPDwnRU9DQlUnCiMgVGhpcyBzY3JpcHQgVVUvdXNlbGFyZ2VmaWxlcy5jYnUgd2lsbCBnZXQg +J2NhbGxlZC1iYWNrJyBieSBDb25maWd1cmUKIyBhZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVz +ZXIgZm9yIHdoZXRoZXIgdG8gdXNlIGxhcmdlIGZpbGVzLgpjYXNlICIkdXNlbGFyZ2VmaWxlcyIg +aW4KJyd8JGRlZmluZXx0cnVlfFt5WV0qKQoKIyBLZWVwIHRoZXNlIGluIHRoZSBsZWZ0IG1hcmdp +bi4KY2NmbGFnc191c2VsYXJnZWZpbGVzPSJgJHJ1biBnZXRjb25mIExGU19DRkxBR1MgMj4vZGV2 +L251bGxgIgpsZGZsYWdzX3VzZWxhcmdlZmlsZXM9ImAkcnVuIGdldGNvbmYgTEZTX0xERkxBR1Mg +Mj4vZGV2L251bGxgIgpsaWJzd2FudGVkX3VzZWxhcmdlZmlsZXM9ImAkcnVuIGdldGNvbmYgTEZT +X0xJQlMgMj4vZGV2L251bGx8c2VkIC1lICdzQF4tbEBAJyAtZSAnc0AgLWxAIEBnJ2AiCgogICAg +Y2NmbGFncz0iJGNjZmxhZ3MgJGNjZmxhZ3NfdXNlbGFyZ2VmaWxlcyIKICAgIGxkZmxhZ3M9IiRs +ZGZsYWdzICRsZGZsYWdzX3VzZWxhcmdlZmlsZXMiCiAgICBsaWJzd2FudGVkPSIkbGlic3dhbnRl +ZCAkbGlic3dhbnRlZF91c2VsYXJnZWZpbGVzIgogICAgOzsKZXNhYwpFT0NCVQoKIyBUaGlzIGlz +IHRydWx5IGEgbWVzcy4KY2FzZSAiJHVzZW1vcmViaXRzIiBpbgoiJGRlZmluZSJ8dHJ1ZXxbeVld +KikKCXVzZTY0Yml0aW50PSIkZGVmaW5lIgoJdXNlbG9uZ2RvdWJsZT0iJGRlZmluZSIKCTs7CmVz +YWMKCmlmIHRlc3QgYCRydW4gdW5hbWUgLXBgID0gaTM4NjsgdGhlbgogICAgY2FzZSAiJHVzZTY0 +Yml0aW50IiBpbgogICAgIiRkZWZpbmUifHRydWV8W3lZXSopCiAgICAgICAgICAgIGNjZmxhZ3M9 +IiRjY2ZsYWdzIC1EUFRSX0lTX0xPTkciCiAgICAgICAgICAgIDs7CiAgICBlc2FjCmZpCgppZiB0 +ZXN0IGAkcnVuIHVuYW1lIC1wYCA9IHNwYXJjIC1vIGAkcnVuIHVuYW1lIC1wYCA9IGkzODY7IHRo +ZW4KICAgIGNhdCA+IFVVL3VzZTY0Yml0aW50LmNidSA8PCdFT0NCVScKIyBUaGlzIHNjcmlwdCBV +VS91c2U2NGJpdGludC5jYnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBieSBDb25maWd1cmUKIyBh +ZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIgZm9yIHdoZXRoZXIgdG8gdXNlIDY0IGJpdCBp +bnRlZ2Vycy4KY2FzZSAiJHVzZTY0Yml0aW50IiBpbgoiJGRlZmluZSJ8dHJ1ZXxbeVldKikKCSAg +ICBjYXNlICJgJHJ1biB1bmFtZSAtcmAiIGluCgkgICAgNS5bMC00XSkKCQljYXQgPiY0IDw8RU9N +ClNvbGFyaXMgYHVuYW1lIC1yfHNlZCAtZSAncy9eNVwuLzIuLydgIGRvZXMgbm90IHN1cHBvcnQg +NjQtYml0IGludGVnZXJzLgpZb3Ugc2hvdWxkIHVwZ3JhZGUgdG8gYXQgbGVhc3QgU29sYXJpcyAy +LjUuCkVPTQoJCWV4aXQgMQoJCTs7CgkgICAgZXNhYwoKIyBnY2MtMi44LjEgb24gU29sYXJpcyA4 +IHdpdGggLUR1c2U2NGJpdGludCBmYWlscyBvcC9wYXQudCB0ZXN0IDgyMgojIGlmIHdlIGNvbXBp +bGUgcmVnZXhlYy5jIHdpdGggLU8uICBUdXJuIG9mZiBvcHRpbWl6YXRpb24gZm9yIHRoYXQgb25l +CiMgZmlsZS4gIFNlZSBoaW50cy9SRUFETUUuaGludHMgLCBlc3BlY2lhbGx5CiMgPWhlYWQyIFBy +b3BhZ2F0aW5nIHZhcmlhYmxlcyB0byBjb25maWcuc2gsIG1ldGhvZCAzLgojICBBLiBEb3VnaGVy +dHkgIE1heSAyNCwgMjAwMgogICAgY2FzZSAiJHtnY2N2ZXJzaW9ufS0ke29wdGltaXplfSIgaW4K +ICAgIDIuOCotTyopCgkjIEhvbm9yIGEgY29tbWFuZC1saW5lIG92ZXJyaWRlIChyYXRoZXIgdW5s +aWtlbHkpCgljYXNlICIkcmVnZXhlY19jZmxhZ3MiIGluCgknJykgZWNobyAiRGlzYWJsaW5nIG9w +dGltaXphdGlvbiBvbiByZWdleGVjLmMgZm9yIGdjYyAkZ2NjdmVyc2lvbiIgPiY0CgkgICAgcmVn +ZXhlY19jZmxhZ3M9J29wdGltaXplPScKCSAgICBlY2hvICJyZWdleGVjX2NmbGFncz0nb3B0aW1p +emU9XCJcIiciID4+IGNvbmZpZy5zaAoJICAgIDs7Cgllc2FjCgk7OwogICAgZXNhYwogICAgOzsK +ZXNhYwpFT0NCVQoKICAgIGNhdCA+IFVVL3VzZTY0Yml0YWxsLmNidSA8PCdFT0NCVScKIyBUaGlz +IHNjcmlwdCBVVS91c2U2NGJpdGFsbC5jYnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBieSBDb25m +aWd1cmUKIyBhZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIgZm9yIHdoZXRoZXIgdG8gYmUg +bWF4aW1hbGx5IDY0IGJpdHR5LgpjYXNlICIkdXNlNjRiaXRhbGwtJHVzZTY0Yml0YWxsX2RvbmUi +IGluCiIkZGVmaW5lLSJ8dHJ1ZS18W3lZXSotKQoJICAgIGNhc2UgImAkcnVuIHVuYW1lIC1yYCIg +aW4KCSAgICA1LlswLTZdKQoJCWNhdCA+JjQgPDxFT00KU29sYXJpcyBgdW5hbWUgLXJ8c2VkIC1l +ICdzL141XC4vMi4vJ2AgZG9lcyBub3Qgc3VwcG9ydCA2NC1iaXQgcG9pbnRlcnMuCllvdSBzaG91 +bGQgdXBncmFkZSB0byBhdCBsZWFzdCBTb2xhcmlzIDIuNy4KRU9NCgkJZXhpdCAxCgkJOzsKCSAg +ICBlc2FjCgkgICAgcHJvY2Vzc29yPWAkcnVuIHVuYW1lIC1wYDsKCSAgICBpZiB0ZXN0ICIkcHJv +Y2Vzc29yIiA9IHNwYXJjOyB0aGVuCgkJbGliYz0nL3Vzci9saWIvc3BhcmN2OS9saWJjLnNvJwoJ +CWlmIHRlc3QgISAtZiAkbGliYzsgdGhlbgoJCSAgICBjYXQgPiY0IDw8RU9NCgpJIGRvIG5vdCBz +ZWUgdGhlIDY0LWJpdCBsaWJjLCAkbGliYy4KQ2Fubm90IGNvbnRpbnVlLCBhYm9ydGluZy4KCkVP +TQoJCSAgICBleGl0IDEKCQlmaQoJICAgIGZpCgkgICAgY2FzZSAiJHtjYzotY2N9IC12IDI+L2Rl +di9udWxsIiBpbgoJICAgICpnY2MqfCpnKysqKQoJCWVjaG8gJ2ludCBtYWluKCkgeyByZXR1cm4g +MDsgfScgPiB0cnkuYwoJCWNhc2UgImAke2NjOi1jY30gJGNjZmxhZ3MgLW1jcHU9djkgLW02NCAt +UyB0cnkuYyAyPiYxIHwgZ3JlcCAnbTY0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb25maWd1 +cmF0aW9uJ2AiIGluCgkJKiJtNjQgaXMgbm90IHN1cHBvcnRlZCIqKQoJCSAgICBjYXQgPiY0IDw8 +RU9NCgpGdWxsIDY0LWJpdCBidWlsZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZ2NjIGNvbmZp +Z3VyYXRpb24uCkNoZWNrIGh0dHA6Ly9nY2MuZ251Lm9yZy8gZm9yIHRoZSBsYXRlc3QgbmV3cyBv +ZiBhdmFpbGFiaWxpdHkKb2YgZ2NjIGZvciA2NC1iaXQgU3BhcmMuCgpDYW5ub3QgY29udGludWUs +IGFib3J0aW5nLgoKRU9NCgkJICAgIGV4aXQgMQoJCSAgICA7OwoJCWVzYWMKCQlpZiB0ZXN0ICIk +cHJvY2Vzc29yIiA9IHNwYXJjOyB0aGVuCgkJICAgIGxvY2xpYnB0aD0iL3Vzci9saWIvc3BhcmN2 +OSAkbG9jbGlicHRoIgoJCSAgICBjY2ZsYWdzPSIkY2NmbGFncyAtbWNwdT12OSIKCQlmaQoJCWNj +ZmxhZ3M9IiRjY2ZsYWdzIC1tNjQiCgoJCSMgVGhpcyBhZGRzIGluIC1XYSwteGFyY2g9djkuICBJ +IHN1c3BlY3QgdGhhdCdzIHN1cGVyZmx1b3VzLAoJCSMgc2luY2UgdGhlIC1tNjQgYWJvdmUgc2hv +dWxkIGRvIHRoYXQgYWxyZWFkeS4gIFNvbWVvbmUKCQkjIHdpdGggZ2NjLTMueC54LCBwbGVhc2Ug +dGVzdCB3aXRoIGdjYyAtdi4gICBBLkQuIDIwLU5vdi0yMDAzCiMJCWlmIHRlc3QgJHByb2Nlc3Nv +ciA9IHNwYXJjIC1hIFhgJHJ1biBnZXRjb25mIFhCUzVfTFA2NF9PRkY2NF9DRkxBR1MgMj4vZGV2 +L251bGxgICE9IFg7IHRoZW4KIwkJICAgIGNjZmxhZ3M9IiRjY2ZsYWdzIC1XYSxgJHJ1biBnZXRj +b25mIFhCUzVfTFA2NF9PRkY2NF9DRkxBR1MgMj4vZGV2L251bGxgIgojCQlmaQoJCWxkZmxhZ3M9 +IiRsZGZsYWdzIC1tNjQiCgoJCSMgU2VlIFtwZXJsICM2NjYwNF06ICBPbiBTb2xhcmlzIDExLCBn +Y2MgLW02NCBvbiBhbWQ2NAoJCSMgYXBwZWFycyBub3QgdG8gdW5kZXJzdGFuZCAtRy4gIChnY2Mg +LUcgaGFzIG5vdCBjYXVzZWQKCQkjIHByb2JsZW1zIG9uIG90aGVyIHBsYXRmb3JtcyBpbiB0aGUg +cGFzdC4pICBnY2MgdmVyc2lvbnMKCQkjIGF0IGxlYXN0IGFzIG9sZCBhcyAzLjQuMyBzdXBwb3J0 +IC1zaGFyZWQsIHNvIGp1c3QKCQkjIHVzZSB0aGF0IHdpdGggU29sYXJpcyAxMSBhbmQgbGF0ZXIs +IGJ1dCBrZWVwCgkJIyB0aGUgb2xkIGJlaGF2aW9yIGZvciBvbGRlciBTb2xhcmlzIHZlcnNpb25z +LgoJCWNhc2UgIiRvc3ZlcnMiIGluCgkJCTIuP3wyLjEwKSBsZGRsZmxhZ3M9IiRsZGRsZmxhZ3Mg +LUcgLW02NCIgOzsKCQkJKikgbGRkbGZsYWdzPSIkbGRkbGZsYWdzIC1zaGFyZWQgLW02NCIgOzsK +CQllc2FjCgkJOzsKCSAgICAqKQoJCWdldGNvbmZjY2ZsYWdzPSJgJHJ1biBnZXRjb25mIFhCUzVf +TFA2NF9PRkY2NF9DRkxBR1MgMj4vZGV2L251bGxgIgoJCWdldGNvbmZsZGZsYWdzPSJgJHJ1biBn +ZXRjb25mIFhCUzVfTFA2NF9PRkY2NF9MREZMQUdTIDI+L2Rldi9udWxsYCIKCQlnZXRjb25mbGRk +bGZsYWdzPSJgJHJ1biBnZXRjb25mIFhCUzVfTFA2NF9PRkY2NF9MREZMQUdTIDI+L2Rldi9udWxs +YCIKCQllY2hvICJpbnQgbWFpbigpIHsgcmV0dXJuKDApOyB9ICIgPiB0cnkuYwoJCWNhc2UgImAk +e2NjOi1jY30gJGdldGNvbmZjY2ZsYWdzIHRyeS5jIDI+JjEgfCBncmVwICdkZXByZWNhdGVkJ2Ai +IGluCgkJKiIgLXhhcmNoPWdlbmVyaWM2NCBpcyBkZXByZWNhdGVkLCB1c2UgLW02NCAiKikKCQkg +ICAgZ2V0Y29uZmNjZmxhZ3M9YGVjaG8gJGdldGNvbmZjY2ZsYWdzIHwgc2VkIC1lICdzL3hhcmNo +PWdlbmVyaWM2NC9tNjQvJ2AKCQkgICAgZ2V0Y29uZmxkZmxhZ3M9YGVjaG8gJGdldGNvbmZsZGZs +YWdzIHwgc2VkIC1lICdzL3hhcmNoPWdlbmVyaWM2NC9tNjQvJ2AKCQkgICAgZ2V0Y29uZmxkZGxm +bGFncz1gZWNobyAkZ2V0Y29uZmxkZGxmbGFncyB8IHNlZCAtZSAncy94YXJjaD1nZW5lcmljNjQv +bTY0LydgCgkJICAgIDs7CgkJZXNhYwoJCWNjZmxhZ3M9IiRjY2ZsYWdzICRnZXRjb25mY2NmbGFn +cyIKCQlsZGZsYWdzPSIkbGRmbGFncyAkZ2V0Y29uZmxkZmxhZ3MiCgkJbGRkbGZsYWdzPSIkbGRk +bGZsYWdzIC1HICRnZXRjb25mbGRkbGZsYWdzIgoKCQllY2hvICJpbnQgbWFpbigpIHsgcmV0dXJu +KDApOyB9ICIgPiB0cnkuYwoJCXRyeXdvcmtzaG9wY2M9IiR7Y2M6LWNjfSB0cnkuYyAtbyB0cnkg +JGNjZmxhZ3MiCgkJaWYgdGVzdCAiJHByb2Nlc3NvciIgPSBzcGFyYzsgdGhlbgoJCSAgICBsb2Ns +aWJwdGg9Ii91c3IvbGliL3NwYXJjdjkgL3Vzci9jY3MvbGliL3NwYXJjdjkgJGxvY2xpYnB0aCIK +CQlmaQoJCWxvY2xpYnB0aD0iYCRnZXR3b3Jrc2hvcGxpYnNgICRsb2NsaWJwdGgiCgkJOzsKCSAg +ICBlc2FjCgkgICAgdW5zZXQgcHJvY2Vzc29yCgkgICAgdXNlNjRiaXRhbGxfZG9uZT15ZXMKCSAg +ICBhcmNobmFtZTY0PTY0CgkgICAgOzsKZXNhYwpFT0NCVQoKICAgICMgQWN0dWFsbHksIHdlIHdh +bnQgdG8gcnVuIHRoaXMgYWxyZWFkeSBub3csIGlmIHNvIHJlcXVlc3RlZCwKICAgICMgYmVjYXVz +ZSB3ZSBuZWVkIHRvIGZpeCB1cCB0aGluZ3MgcmlnaHQgbm93LgogICAgY2FzZSAiJHVzZTY0Yml0 +YWxsIiBpbgogICAgIiRkZWZpbmUifHRydWV8W3lZXSopCgkjIENCVXMgZXhwZWN0IHRvIGJlIHJ1 +biBpbiBVVQoJY2QgVVU7IC4gLi91c2U2NGJpdGFsbC5jYnU7IGNkIC4uCgk7OwogICAgZXNhYwpm +aQoKY2F0ID4gVVUvdXNlbG9uZ2RvdWJsZS5jYnUgPDwnRU9DQlUnCiMgVGhpcyBzY3JpcHQgVVUv +dXNlbG9uZ2RvdWJsZS5jYnUgd2lsbCBnZXQgJ2NhbGxlZC1iYWNrJyBieSBDb25maWd1cmUKIyBh +ZnRlciBpdCBoYXMgcHJvbXB0ZWQgdGhlIHVzZXIgZm9yIHdoZXRoZXIgdG8gdXNlIGxvbmcgZG91 +Ymxlcy4KY2FzZSAiJHVzZWxvbmdkb3VibGUiIGluCiIkZGVmaW5lInx0cnVlfFt5WV0qKQoJaWYg +dGVzdCAiJGNjX25hbWUiID0gIndvcmtzaG9wIjsgdGhlbgoJCWNhdCA+IHRyeS5jIDw8ICdFT00n +CiNpbmNsdWRlIDxzdW5tYXRoLmg+CmludCBtYWluKCkgeyAodm9pZCkgcG93bCgyLCAyNTYpOyBy +ZXR1cm4oMCk7IH0KRU9NCgkJaWYgJHtjYzotY2N9IHRyeS5jIC1sc3VubWF0aCAtbyB0cnkgPiAv +ZGV2L251bGwgMj4mMSAmJiAuL3RyeTsgdGhlbgoJCQlsaWJzd2FudGVkPSIkbGlic3dhbnRlZCBz +dW5tYXRoIgoJCWZpCgllbHNlCgkJY2F0ID4mNCA8PEVPTQoKVGhlIFN1biBXb3Jrc2hvcCBtYXRo +IGxpYnJhcnkgaXMgZWl0aGVyIG5vdCBhdmFpbGFibGUgb3Igbm90IHdvcmtpbmcsCnNvIEkgZG8g +bm90IGtub3cgaG93IHRvIGRvIGxvbmcgZG91Ymxlcywgc29ycnkuCkknbSB0aGVyZWZvcmUgZGlz +YWJsaW5nIHRoZSB1c2Ugb2YgbG9uZyBkb3VibGVzLgpFT00KCQl1c2Vsb25nZG91YmxlPSIkdW5k +ZWYiCglmaQoJOzsKZXNhYwpFT0NCVQoKcm0gLWYgdHJ5LmMgdHJ5Lm8gdHJ5IGEub3V0CgojIElm +IHVzaW5nIEMrKywgdGhlIENvbmZpZ3VyZSBzY2FuIGZvciBkbG9wZW4oKSB3aWxsIGZhaWwgaW4g +U29sYXJpcwojIGJlY2F1c2Ugb25lIG9mIHRoZSB0d28gKDEpIGFuIGV4dGVybiAiQyIgbGlua2Fn +ZSBkZWZpbml0aW9uIGlzIG5lZWRlZAojICgyKSAjaW5jbHVkZSA8ZGxmY24uaD4gaXMgbmVlZGVk +LCAqYW5kKiBhIGNhc3QgdG8gKHZvaWQqKCopKCkpCiMgaXMgbmVlZGVkIGZvciB0aGUgJmRsb3Bl +bi4gIEFkZGluZyBhbnkgb2YgdGhlc2Ugd291bGQgcmVxdWlyZSBjaGFuZ2luZwojIGEgZGVsaWNh +dGUgc3BvdCBpbiBDb25maWd1cmUsIHNvIGVhc2llciBqdXN0IHRvIGZvcmNlIG91ciBndWVzcyBo +ZXJlCiMgZm9yIFNvbGFyaXMuICBNdWNoIHRoZSBzYW1lIGdvZXMgZm9yIGRsZXJyb3IoKS4KY2Fz +ZSAiJGNjIiBpbgoqZysrKnwqQ0MqKQogIGRfZGxvcGVuPSdkZWZpbmUnCiAgZF9kbGVycm9yPSdk +ZWZpbmUnCiAgOzsKZXNhYwoKIyBPcmFjbGUvU3VuIGJ1aWxkcyB0aGVpciBQZXJsIHNoYXJlZCBz +aW5jZSA1LjYuMSwgYW5kIHRoZXkgYWxzbwojIHN0cm9uZ2x5IHJlY29tbWVuZCB1c2luZyBzaGFy +ZWQgbGlicmFyaWVzIGluIGdlbmVyYWwuCiMKIyBGdXJ0aGVybW9yZSwgT3BlbkluZGlhbmEgc2Vl +bXMgdG8gZWZmZWN0aXZlbHkgcmVxdWlyZSBidWlsZGluZyBwZXJsCiMgc2hhcmVkLCBvciBvdGhl +cndpc2UgcGVybCBzY3JpcHRzIHdvbid0IGV2ZW4gZmluZCB0aGUgUGVybCBsaWJyYXJ5Lgp1c2Vz +aHJwbGliPSd0cnVlJwo=', ); my %files = (